From aaa0e45111029d68c334024586d7176b9c6679c6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 4 Nov 2023 01:03:41 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=8B=20Sync=202023-11-04=2001:03?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloudflarespeedtest | 1 - helloworld | 1 - lua-neturl/Makefile | 44 + lua-neturl/patches/010-userinfo-regex.patch | 20 + luci-app-advanced | 1 - luci-app-advanced/Makefile | 43 + luci-app-advanced/README.md | 53 + .../resources/fileassistant/fb.css | 68 + .../luci-static/resources/fileassistant/fb.js | 288 + .../resources/fileassistant/file-icon.png | Bin 0 -> 1098 bytes .../resources/fileassistant/folder-icon.png | Bin 0 -> 1292 bytes .../resources/fileassistant/link-icon.png | Bin 0 -> 1622 bytes .../luasrc/controller/advanced.lua | 9 + .../luasrc/controller/fileassistant.lua | 228 + .../luasrc/model/cbi/advanced.lua | 340 + .../luasrc/view/fileassistant.htm | 20 + luci-app-advanced/luasrc/view/filebrowser.htm | 20 + luci-app-advanced/root/bin/ipmode4 | 26 + luci-app-advanced/root/bin/ipmode6 | 27 + luci-app-advanced/root/bin/normalmode | 30 + luci-app-advanced/root/bin/nuc | 80 + luci-app-advanced/root/etc/config/advanced | 2 + .../root/etc/uci-defaults/40_luci-fb | 7 + .../share/rpcd/acl.d/luci-app-advanced.json | 11 + luci-app-aliddns | 1 - luci-app-aliddns/LICENSE | 21 + luci-app-aliddns/Makefile | 84 + luci-app-aliddns/README.md | 68 + .../files/luci/controller/aliddns.lua | 4 + .../files/luci/i18n/aliddns.zh-cn.po | 56 + .../files/luci/model/cbi/aliddns.lua | 71 + .../files/root/etc/config/aliddns | 4 + .../files/root/etc/init.d/aliddns | 78 + .../files/root/etc/uci-defaults/luci-aliddns | 10 + luci-app-aliddns/files/root/usr/sbin/aliddns | 286 + luci-app-aliddns/tools/po2lmo/Makefile | 12 + luci-app-aliddns/tools/po2lmo/src/po2lmo.c | 247 + .../tools/po2lmo/src/template_lmo.c | 328 + .../tools/po2lmo/src/template_lmo.h | 92 + luci-app-argon-config | 1 - .../.github/workflows/build.sh | 11 + .../.github/workflows/check.yml | 41 + .../.github/workflows/release.yml | 39 + luci-app-argon-config/Makefile | 19 + luci-app-argon-config/README.md | 4 + .../luasrc/controller/argon-config.lua | 10 + .../luasrc/model/cbi/argon-config.lua | 217 + .../luasrc/view/argon-config/other_button.htm | 7 + .../luasrc/view/argon-config/other_dvalue.htm | 8 + .../luasrc/view/argon-config/other_upload.htm | 5 + luci-app-argon-config/po/es/argon-config.po | 179 + .../po/templates/argon-config.pot | 155 + .../po/zh-cn/argon-config.po | 129 + .../po/zh-tw/argon-config.po | 165 + luci-app-argon-config/po/zh_Hans | 1 + luci-app-argon-config/po/zh_Hant | 1 + luci-app-argon-config/root/etc/config/argon | 9 + .../root/etc/uci-defaults/luci-argon-config | 6 + .../rpcd/acl.d/luci-app-argon-config.json | 11 + luci-app-autotimeset | 1 - luci-app-autotimeset/LICENSE | 21 + luci-app-autotimeset/Makefile | 22 + luci-app-autotimeset/README.md | 113 + .../luasrc/controller/autotimeset.lua | 35 + .../luasrc/model/cbi/autotimeset.lua | 56 + .../luasrc/model/cbi/autotimeset/base.lua | 83 + .../luasrc/model/cbi/autotimeset/log.lua | 13 + .../luasrc/view/autotimeset/log.htm | 54 + luci-app-autotimeset/po/zh-cn/autotimeset.po | 91 + luci-app-autotimeset/po/zh_Hans | 1 + .../root/etc/autotimeset/timesetcustomscript | 1 + .../root/etc/config/autotimeset | 75 + .../root/etc/init.d/autotimeset | 117 + .../root/etc/init.d/autotimesetrun | 6 + .../etc/uci-defaults/40_luci-app-autotimeset | 10 + .../root/etc/uci-defaults/luci--autotimeset | 14 + .../root/usr/bin/timesethandler | 127 + .../root/usr/bin/timesetsecurity | 119 + .../rpcd/acl.d/luci-app-autotimeset.json | 11 + luci-app-autoupdate/LICENSE | 674 + luci-app-autoupdate/Makefile | 11 + .../luasrc/controller/autoupdate.lua | 5 + .../luasrc/model/cbi/autoupdate.lua | 55 + luci-app-autoupdate/po/zh-cn/autoupdate.po | 41 + luci-app-autoupdate/po/zh_Hans | 1 + .../root/etc/config/autoupdate | 7 + .../root/etc/init.d/autoupdate | 48 + .../root/etc/uci-defaults/autoupdate | 10 + .../root/usr/share/autoupdate/Check_Update.sh | 30 + .../share/rpcd/acl.d/luci-app-autoupdate.json | 11 + luci-app-beardropper | 1 - luci-app-beardropper/.gitattributes | 2 + luci-app-beardropper/.gitignore | 2 + luci-app-beardropper/LICENSE | 622 + luci-app-beardropper/Makefile | 22 + luci-app-beardropper/README.md | 59 + .../luasrc/controller/beardropper.lua | 19 + .../luasrc/model/cbi/beardropper/log.lua | 17 + .../luasrc/model/cbi/beardropper/setting.lua | 54 + .../luasrc/view/beardropper/status.htm | 22 + luci-app-beardropper/po/zh-cn | 1 + .../po/zh_Hans/beardropper.po | 115 + .../po/zh_Hant/beardropper.po | 115 + luci-app-beardropper/preview/1_setting.png | Bin 0 -> 114021 bytes .../preview/2_blockedlist.png | Bin 0 -> 127004 bytes .../root/etc/config/beardropper | 18 + .../root/etc/init.d/beardropper | 46 + .../root/etc/uci-defaults/luci-beardropper | 11 + .../root/usr/sbin/beardropper | 517 + .../rpcd/acl.d/luci-app-beardropper.json | 11 + luci-app-cloudflarespeedtest/Makefile | 21 + .../luasrc/controller/cloudflarespeedtest.lua | 50 + .../cloudflarespeedtest.lua | 335 + .../model/cbi/cloudflarespeedtest/logread.lua | 9 + .../view/cloudflarespeedtest/actions.htm | 56 + .../view/cloudflarespeedtest/logread.htm | 23 + luci-app-cloudflarespeedtest/po/zh-cn | 1 + .../po/zh_Hans/cloudflarespeedtest.po | 221 + .../root/etc/config/cloudflarespeedtest | 21 + .../root/etc/init.d/cloudflarespeedtest | 59 + .../usr/bin/cloudflarespeedtest/aliddns.sh | 81 + .../cloudflarespeedtest.sh | 318 + .../acl.d/luci-app-cloudflarespeedtest.json | 11 + luci-app-ddns-go | 1 - luci-app-ddns-go/README.md | 137 + luci-app-ddns-go/ddns-go/Makefile | 62 + luci-app-ddns-go/ddns-go/file/ddns-go.init | 46 + .../ddns-go/file/luci-ddns-go.uci-default | 7 + luci-app-ddns-go/luci-app-ddns-go/Makefile | 23 + luci-app-ddns-go/luci-app-ddns-go/README.md | 118 + .../luasrc/controller/ddns-go.lua | 23 + .../luasrc/model/cbi/ddns-go.lua | 30 + .../luci-app-ddns-go/luasrc/view/ddns-go.htm | 22 + .../luasrc/view/ddns-go_status.htm | 27 + .../luci-app-ddns-go/po/zh-cn/ddns-go.po | 40 + luci-app-ddns-go/luci-app-ddns-go/po/zh_Hans | 1 + .../luci-app-ddns-go/root/etc/config/ddns-go | 5 + .../root/etc/ddns-go/ddns-go-config.yaml | 27 + .../root/etc/ddns-go/localtime | Bin 0 -> 561 bytes .../usr/share/ddns-go/ddns-go-default.yaml | 27 + .../share/rpcd/acl.d/luci-app-ddns-go.json | 11 + luci-app-mosdns/Makefile | 20 + luci-app-mosdns/luasrc/controller/mosdns.lua | 53 + .../luasrc/model/cbi/mosdns/basic.lua | 240 + .../luasrc/model/cbi/mosdns/log.lua | 5 + .../luasrc/model/cbi/mosdns/rule_list.lua | 99 + .../luasrc/model/cbi/mosdns/update.lua | 31 + .../luasrc/view/mosdns/mosdns_editor.htm | 21 + .../luasrc/view/mosdns/mosdns_flush_cache.htm | 34 + .../luasrc/view/mosdns/mosdns_geo_update.htm | 34 + .../luasrc/view/mosdns/mosdns_log.htm | 33 + .../luasrc/view/mosdns/mosdns_status.htm | 28 + luci-app-mosdns/po/zh-cn/mosdns.po | 386 + luci-app-mosdns/po/zh_Hans | 1 + luci-app-mosdns/root/etc/config/mosdns | 29 + .../root/etc/hotplug.d/iface/99-mosdns | 2 + luci-app-mosdns/root/etc/init.d/mosdns | 247 + .../root/etc/mosdns/config_custom.yaml | 142 + .../root/etc/mosdns/rule/blocklist.txt | 0 .../root/etc/mosdns/rule/cloudflare-cidr.txt | 22 + .../root/etc/mosdns/rule/ddnslist.txt | 0 .../root/etc/mosdns/rule/greylist.txt | 0 .../root/etc/mosdns/rule/hosts.txt | 0 .../root/etc/mosdns/rule/local-ptr.txt | 87 + .../root/etc/mosdns/rule/redirect.txt | 0 .../root/etc/mosdns/rule/whitelist.txt | 11 + .../root/etc/uci-defaults/luci-mosdns | 11 + .../root/usr/share/mosdns/cache.dump | Bin 0 -> 36 bytes .../root/usr/share/mosdns/default.yaml | 259 + .../root/usr/share/mosdns/mosdns.sh | 193 + .../usr/share/rpcd/acl.d/luci-app-mosdns.json | 11 + .../resources/mosdns/addon/fold/foldcode.js | 1 + .../mosdns/addon/fold/foldgutter.css | 1 + .../resources/mosdns/addon/fold/foldgutter.js | 1 + .../mosdns/addon/fold/indent-fold.js | 1 + .../resources/mosdns/lib/codemirror.css | 1 + .../resources/mosdns/lib/codemirror.js | 1 + .../resources/mosdns/mode/yaml/yaml.js | 1 + .../resources/mosdns/theme/dracula.css | 1 + luci-app-netdata | 1 - luci-app-netdata/Makefile | 24 + luci-app-netdata/README.md | 83 + .../luasrc/controller/netdata.lua | 24 + .../luasrc/model/cbi/netdata/netdata.lua | 25 + luci-app-netdata/luasrc/view/netdata.htm | 20 + .../luasrc/view/netdata_status.htm | 25 + luci-app-netdata/po/zh-cn/netdata.po | 29 + luci-app-netdata/po/zh_Hans | 1 + luci-app-netdata/root/etc/config/netdata | 6 + .../root/etc/uci-defaults/40_luci-app-netdata | 10 + .../root/usr/share/netdata/webcn/dashboard.js | 10377 +++++ .../usr/share/netdata/webcn/dashboard_info.js | 6353 +++ .../root/usr/share/netdata/webcn/index.html | 16 + .../root/usr/share/netdata/webcn/main.js | 5146 +++ .../root/usr/share/netdata/webcn/netdata | 6 + .../root/usr/share/netdata/webcn/netdata.conf | 52 + .../root/usr/share/netdata/webcn/netdata.init | 46 + .../share/rpcd/acl.d/luci-app-netdata.json | 11 + luci-app-nginx-manager/Makefile | 15 + .../luasrc/controller/nginx-manager.lua | 39 + .../luasrc/model/cbi/nginx-manager.lua | 43 + .../luasrc/view/nginx-manager/index.htm | 65 + .../po/zh-cn/nginx-manager.po | 26 + luci-app-nginx-manager/po/zh_Hans | 1 + .../root/etc/nginx/conf.d/templates | 17 + .../etc/uci-defaults/luci-app-nginx-manager | 11 + .../rpcd/acl.d/luci-app-nginx-manager.json | 11 + luci-app-onliner | 1 - luci-app-onliner/.gitattributes | 2 + luci-app-onliner/.gitignore | 2 + luci-app-onliner/Makefile | 32 + .../luasrc/controller/onliner.lua | 17 + .../luasrc/view/onliner/display.htm | 921 + .../luasrc/view/onliner/onliner.htm | 99 + luci-app-onliner/readme.md | 6 + .../root/usr/share/onliner/setnlbw.sh | 20 + luci-app-parentcontrol | 1 - luci-app-parentcontrol/Makefile | 20 + luci-app-parentcontrol/README.md | 60 + .../luasrc/controller/parentcontrol.lua | 21 + .../model/cbi/parentcontrol/protocol.lua | 112 + .../luasrc/model/cbi/parentcontrol/time.lua | 87 + .../luasrc/model/cbi/parentcontrol/weburl.lua | 89 + .../luasrc/view/parentcontrol/index.htm | 12 + .../view/parentcontrol/parentcontrol.htm | 3 + .../po/zh-cn/parentcontrol.po | 23 + luci-app-parentcontrol/po/zh_Hans | 1 + .../root/etc/config/parentcontrol | 49 + .../root/etc/init.d/parentcontrol | 103 + .../root/etc/parentcontrol.include | 2 + .../root/etc/parentcontrol/black.list | 3 + .../root/etc/parentcontrol/white.list | 1 + .../etc/uci-defaults/luci-app-parentcontrol | 17 + .../rpcd/acl.d/luci-app-parentcontrol.json | 11 + luci-app-partexp | 1 - luci-app-partexp/Makefile | 24 + luci-app-partexp/README.md | 116 + .../luasrc/controller/partexp.lua | 80 + .../luasrc/model/cbi/partexp/global.lua | 83 + luci-app-partexp/luasrc/model/diskmount.lua | 40 + luci-app-partexp/luasrc/view/partexp.htm | 106 + luci-app-partexp/luasrc/view/partexp/log.htm | 16 + luci-app-partexp/po/zh-cn/partexp.po | 70 + luci-app-partexp/po/zh_Hans | 1 + luci-app-partexp/root/etc/config/partexp | 5 + luci-app-partexp/root/etc/init.d/partexp | 298 + .../root/etc/uci-defaults/40_luci-partexp | 5 + .../share/rpcd/acl.d/luci-app-partexp.json | 11 + luci-app-poweroff | 1 - luci-app-poweroff/LICENSE | 379 + luci-app-poweroff/Makefile | 16 + luci-app-poweroff/README.md | 4 + .../luasrc/controller/poweroff.lua | 10 + luci-app-poweroff/luasrc/view/poweroff.htm | 58 + luci-app-poweroff/po/zh-cn/poweroff.po | 31 + luci-app-poweroff/po/zh-tw/poweroff.po | 31 + luci-app-poweroff/po/zh_Hans | 1 + luci-app-poweroffdevice | 1 - luci-app-poweroffdevice/Makefile | 18 + luci-app-poweroffdevice/README.md | 105 + .../luasrc/controller/poweroffdevice.lua | 13 + .../view/poweroffdevice/poweroffdevice.htm | 57 + .../po/zh-cn/poweroffdevice.po | 31 + luci-app-poweroffdevice/po/zh_Hans | 1 + luci-app-pushbot | 1 - .../.github/workflows/build-package-onx86.yml | 189 + luci-app-pushbot/Makefile | 22 + luci-app-pushbot/README.md | 93 + .../luasrc/controller/pushbot.lua | 32 + .../luasrc/model/cbi/pushbot/advanced.lua | 124 + .../luasrc/model/cbi/pushbot/client.lua | 6 + .../luasrc/model/cbi/pushbot/log.lua | 5 + .../luasrc/model/cbi/pushbot/setting.lua | 552 + .../luasrc/view/pushbot/pushbot_log.htm | 33 + .../luasrc/view/pushbot/pushbot_status.htm | 22 + luci-app-pushbot/root/etc/config/pushbot | 10 + luci-app-pushbot/root/etc/init.d/pushbot | 26 + .../root/etc/uci-defaults/luci-pushbot | 11 + .../root/usr/bin/pushbot/api/bark.json | 36 + .../root/usr/bin/pushbot/api/dingding.json | 32 + .../root/usr/bin/pushbot/api/diy.json | 50 + .../root/usr/bin/pushbot/api/ent_wechat.json | 32 + .../root/usr/bin/pushbot/api/feishu.json | 61 + .../root/usr/bin/pushbot/api/ip_blacklist | 1 + .../root/usr/bin/pushbot/api/ipv4.list | 6 + .../root/usr/bin/pushbot/api/ipv6.list | 5 + .../root/usr/bin/pushbot/api/pushdeer.json | 31 + .../root/usr/bin/pushbot/api/pushplus.json | 34 + luci-app-pushbot/root/usr/bin/pushbot/pushbot | 1274 + .../share/rpcd/acl.d/luci-app-pushbot.json | 11 + luci-app-rebootschedule | 1 - luci-app-rebootschedule/Makefile | 46 + luci-app-rebootschedule/README.md | 1 + luci-app-rebootschedule/file/sysfree.sh | 19 + .../luasrc/controller/rebootschedule.lua | 12 + .../luasrc/model/cbi/rebootschedule.lua | 67 + .../po/en/rebootschedule.mo | Bin 0 -> 4765 bytes .../po/en/rebootschedule.po | 195 + .../po/en/rebootschedule.pot | 160 + .../root/etc/config/rebootschedule | 66 + .../root/etc/init.d/rebootschedule | 48 + .../etc/uci-defaults/luci-app-rebootschedule | 11 + .../rpcd/acl.d/luci-app-rebootschedule.json | 11 + luci-app-smartdns | 1 - luci-app-smartdns/Makefile | 38 + .../luasrc/controller/smartdns.lua | 57 + .../luasrc/model/cbi/smartdns/smartdns.lua | 787 + .../luasrc/model/cbi/smartdns/upstream.lua | 158 + luci-app-smartdns/luasrc/model/smartdns.lua | 31 + .../luasrc/view/smartdns/smartdns_status.htm | 28 + luci-app-smartdns/po/zh-cn/smartdns.po | 654 + luci-app-smartdns/po/zh_Hans | 1 + .../root/etc/uci-defaults/50_luci-smartdns | 26 + luci-app-ssr-plus/Makefile | 192 + .../luasrc/controller/shadowsocksr.lua | 135 + .../model/cbi/shadowsocksr/advanced.lua | 140 + .../model/cbi/shadowsocksr/client-config.lua | 1029 + .../luasrc/model/cbi/shadowsocksr/client.lua | 168 + .../luasrc/model/cbi/shadowsocksr/control.lua | 143 + .../luasrc/model/cbi/shadowsocksr/log.lua | 20 + .../model/cbi/shadowsocksr/server-config.lua | 154 + .../luasrc/model/cbi/shadowsocksr/server.lua | 144 + .../luasrc/model/cbi/shadowsocksr/servers.lua | 151 + .../luasrc/model/cbi/shadowsocksr/status.lua | 190 + .../luasrc/view/shadowsocksr/certupload.htm | 4 + .../luasrc/view/shadowsocksr/check.htm | 29 + .../luasrc/view/shadowsocksr/checkport.htm | 25 + .../luasrc/view/shadowsocksr/ping.htm | 3 + .../luasrc/view/shadowsocksr/refresh.htm | 37 + .../luasrc/view/shadowsocksr/reset.htm | 25 + .../luasrc/view/shadowsocksr/server_list.htm | 145 + .../luasrc/view/shadowsocksr/socket.htm | 6 + .../luasrc/view/shadowsocksr/ssrurl.htm | 371 + .../luasrc/view/shadowsocksr/status.htm | 22 + .../luasrc/view/shadowsocksr/subscribe.htm | 18 + luci-app-ssr-plus/po/zh-cn/ssr-plus.po | 1003 + luci-app-ssr-plus/po/zh_Hans | 1 + .../root/etc/config/shadowsocksr | 0 .../root/etc/init.d/shadowsocksr | 1180 + luci-app-ssr-plus/root/etc/ssrplus/ad.conf | 0 luci-app-ssr-plus/root/etc/ssrplus/black.list | 0 .../root/etc/ssrplus/china_ssr.txt | 8612 ++++ luci-app-ssr-plus/root/etc/ssrplus/deny.list | 14 + .../root/etc/ssrplus/gfw_base.conf | 108 + .../root/etc/ssrplus/gfw_list.conf | 35608 ++++++++++++++++ .../root/etc/ssrplus/mosdns-config.yaml | 43 + .../root/etc/ssrplus/netflix.list | 25 + .../root/etc/ssrplus/netflixip.list | 30 + .../root/etc/ssrplus/oversea_list.conf | 192 + luci-app-ssr-plus/root/etc/ssrplus/white.list | 7 + .../root/etc/uci-defaults/luci-ssr-plus | 45 + luci-app-ssr-plus/root/usr/bin/ssr-monitor | 134 + luci-app-ssr-plus/root/usr/bin/ssr-rules | 424 + luci-app-ssr-plus/root/usr/bin/ssr-switch | 155 + .../share/rpcd/acl.d/luci-app-ssr-plus.json | 11 + .../root/usr/share/shadowsocksr/chinaipset.sh | 7 + .../usr/share/shadowsocksr/gen_config.lua | 505 + .../usr/share/shadowsocksr/genred2config.sh | 95 + .../root/usr/share/shadowsocksr/gfw2ipset.sh | 47 + .../usr/share/shadowsocksr/ssrplusupdate.sh | 6 + .../root/usr/share/shadowsocksr/subscribe.lua | 628 + .../root/usr/share/shadowsocksr/update.lua | 198 + luci-app-unblockneteasemusic | 1 - .../.github/ISSUE_TEMPLATE/bug-report.yml | 58 + .../.github/ISSUE_TEMPLATE/config.yml | 2 + .../ISSUE_TEMPLATE/feature-request.yml | 27 + .../.github/build-ipk.sh | 79 + .../.github/workflows/build-ipk.yml | 61 + luci-app-unblockneteasemusic/LICENSE | 674 + luci-app-unblockneteasemusic/Makefile | 24 + luci-app-unblockneteasemusic/README.md | 63 + .../luasrc/controller/unblockneteasemusic.lua | 69 + .../model/cbi/unblockneteasemusic/log.lua | 14 + .../model/cbi/unblockneteasemusic/main.lua | 246 + .../model/cbi/unblockneteasemusic/upgrade.lua | 19 + .../view/unblockneteasemusic/remove_core.htm | 32 + .../view/unblockneteasemusic/status.htm | 21 + .../view/unblockneteasemusic/update_core.htm | 36 + .../root/etc/config/unblockneteasemusic | 7 + .../root/etc/init.d/unblockneteasemusic | 247 + .../etc/uci-defaults/luci-unblockneteasemusic | 24 + .../root/usr/bin/unm-debug | 17 + .../acl.d/luci-app-unblockneteasemusic.json | 11 + .../share/unblockneteasemusic/debugging.sh | 95 + .../share/unblockneteasemusic/log_check.sh | 14 + .../usr/share/unblockneteasemusic/update.sh | 104 + luci-app-unblockneteasemusic/views/view1.jpg | Bin 0 -> 805187 bytes luci-app-unblockneteasemusic/views/view2.jpg | Bin 0 -> 78114 bytes luci-app-unblockneteasemusic/views/view3.jpg | Bin 0 -> 169344 bytes luci-app-unblockneteasemusic/views/view4.jpg | Bin 0 -> 120071 bytes luci-app-wechatpush | 1 - luci-app-wechatpush/Makefile | 23 + luci-app-wechatpush/README.md | 45 + .../luasrc/controller/serverchan.lua | 34 + .../luasrc/model/cbi/serverchan/advanced.lua | 168 + .../luasrc/model/cbi/serverchan/client.lua | 34 + .../luasrc/model/cbi/serverchan/log.lua | 6 + .../luasrc/model/cbi/serverchan/setting.lua | 536 + .../luasrc/view/serverchan/serverchan_log.htm | 33 + .../view/serverchan/serverchan_status.htm | 22 + .../root/etc/config/serverchan | 11 + .../root/etc/init.d/serverchan | 26 + .../root/etc/uci-defaults/luci-serverchan | 11 + .../share/rpcd/acl.d/luci-app-serverchan.json | 11 + .../root/usr/share/serverchan/api/diy.json | 42 + .../usr/share/serverchan/api/ip_blacklist | 0 .../root/usr/share/serverchan/api/ipv4.list | 8 + .../root/usr/share/serverchan/api/ipv6.list | 5 + .../root/usr/share/serverchan/api/logo.jpg | Bin 0 -> 33685 bytes .../usr/share/serverchan/api/pushplus.json | 21 + .../share/serverchan/api/qywx_markdown.json | 23 + .../usr/share/serverchan/api/qywx_mpnews.json | 33 + .../usr/share/serverchan/api/serverchan.json | 17 + .../usr/share/serverchan/api/telegram.json | 20 + .../usr/share/serverchan/api/wxpusher.json | 23 + .../root/usr/share/serverchan/serverchan | 1436 + luci-app-wifidog | 1 - luci-app-wifidog/LICENSE | 340 + luci-app-wifidog/Makefile | 20 + luci-app-wifidog/README.md | 40 + .../luasrc/controller/wifidog.lua | 16 + .../luasrc/model/cbi/wifidog/wifidog_cfg.lua | 116 + luci-app-wifidog/root/etc/config/wifidog | 27 + luci-app-wifidog/root/etc/init.d/wifidog | 152 + .../root/etc/uci-defaults/luci-wifidog | 13 + .../root/usr/sbin/wifidog_check.sh | 10 + .../share/rpcd/acl.d/luci-app-wifidog.json | 11 + luci-app-wolplus/Makefile | 18 + .../luasrc/controller/wolplus.lua | 33 + luci-app-wolplus/luasrc/model/cbi/wolplus.lua | 35 + .../luasrc/view/wolplus/awake.htm | 3 + .../luasrc/view/wolplus/index.htm | 22 + luci-app-wolplus/po/zh-cn/wolplus.po | 26 + luci-app-wolplus/po/zh_Hans/wolplus.po | 26 + luci-app-wolplus/root/etc/config/wolplus | 0 .../root/etc/uci-defaults/luci-app-WOL-plus | 11 + .../rpcd/acl.d/luci-app-services-wolplus.json | 11 + luci-theme-argon | 1 - .../.github/workflows/manual_release.yml | 140 + luci-theme-argon/.gitignore | 3 + luci-theme-argon/Makefile | 27 + .../Screenshots/screenshot_pc.jpg | Bin 0 -> 673706 bytes .../Screenshots/screenshot_phone.jpg | Bin 0 -> 467306 bytes .../htdocs/luci-static/argon/css/cascade.css | 3361 ++ .../htdocs/luci-static/argon/css/dark.css | 836 + .../htdocs/luci-static/argon/css/fonts.css | 186 + .../htdocs/luci-static/argon/css/pure-min.css | 11 + .../htdocs/luci-static/argon/favicon.ico | Bin 0 -> 9662 bytes .../luci-static/argon/fonts/TypoGraphica.eot | Bin 0 -> 33846 bytes .../luci-static/argon/fonts/TypoGraphica.svg | 1191 + .../luci-static/argon/fonts/TypoGraphica.ttf | Bin 0 -> 33632 bytes .../luci-static/argon/fonts/TypoGraphica.woff | Bin 0 -> 17816 bytes .../htdocs/luci-static/argon/fonts/argon.eot | Bin 0 -> 8888 bytes .../htdocs/luci-static/argon/fonts/argon.svg | 38 + .../htdocs/luci-static/argon/fonts/argon.ttf | Bin 0 -> 8732 bytes .../htdocs/luci-static/argon/fonts/argon.woff | Bin 0 -> 8808 bytes .../argon/icon/android-icon-192x192.png | Bin 0 -> 8300 bytes .../argon/icon/apple-icon-144x144.png | Bin 0 -> 6568 bytes .../argon/icon/apple-icon-60x60.png | Bin 0 -> 3590 bytes .../argon/icon/apple-icon-72x72.png | Bin 0 -> 4003 bytes .../luci-static/argon/icon/browserconfig.xml | 2 + .../luci-static/argon/icon/favicon-16x16.png | Bin 0 -> 2069 bytes .../luci-static/argon/icon/favicon-32x32.png | Bin 0 -> 2604 bytes .../luci-static/argon/icon/favicon-96x96.png | Bin 0 -> 4805 bytes .../luci-static/argon/icon/manifest.json | 41 + .../argon/icon/ms-icon-144x144.png | Bin 0 -> 6568 bytes .../htdocs/luci-static/argon/img/add.webp | Bin 0 -> 690 bytes .../htdocs/luci-static/argon/img/argon.svg | 37 + .../htdocs/luci-static/argon/img/bg1.jpg | Bin 0 -> 159265 bytes .../htdocs/luci-static/argon/img/blank.png | Bin 0 -> 938 bytes .../htdocs/luci-static/argon/img/edit.webp | Bin 0 -> 632 bytes .../luci-static/argon/img/fieldadd.webp | Bin 0 -> 664 bytes .../htdocs/luci-static/argon/img/file.webp | Bin 0 -> 566 bytes .../htdocs/luci-static/argon/img/find.webp | Bin 0 -> 674 bytes .../htdocs/luci-static/argon/img/folder.webp | Bin 0 -> 252 bytes .../htdocs/luci-static/argon/img/link.webp | Bin 0 -> 480 bytes .../htdocs/luci-static/argon/img/reload.webp | Bin 0 -> 848 bytes .../htdocs/luci-static/argon/img/remove.webp | Bin 0 -> 682 bytes .../luci-static/argon/img/trafficbar.png | Bin 0 -> 6556 bytes .../luci-static/argon/img/volume_high.svg | 1 + .../luci-static/argon/img/volume_off.svg | 1 + .../luci-static/argon/js/color_calc-argon.js | 72 + .../htdocs/luci-static/argon/js/jquery.min.js | 2 + .../htdocs/luci-static/argon/js/menu-argon.js | 168 + .../luci-static/argon/js/sidebar-argon.js | 64 + .../luci-static/argon/js/styles-argon.js | 103 + .../luci-static/argon/less/cascade.less | 4133 ++ .../htdocs/luci-static/argon/less/dark.less | 908 + .../luasrc/view/themes/argon/footer.htm | 79 + .../luasrc/view/themes/argon/header.htm | 331 + .../luasrc/view/themes/argon/header_login.htm | 136 + .../view/themes/argon/out_header_login.htm | 12 + .../luasrc/view/themes/argon/sysauth.htm | 186 + .../root/etc/uci-defaults/90_luci-theme-argon | 12 + .../root/usr/libexec/argon/online_wallpaper | 70 + luci-theme-atmaterial | 1 - luci-theme-atmaterial/LICENSE | 201 + luci-theme-atmaterial/Makefile | 55 + luci-theme-atmaterial/README.md | 2 + .../files/30_luci-theme-atmaterial | 7 + .../files/htdocs/css/style.css | 2101 + .../files/htdocs/favicon.ico | Bin 0 -> 2462 bytes .../htdocs/fonts/Roboto-Medium-webfont.woff | Bin 0 -> 70200 bytes .../htdocs/fonts/Roboto-Regular-webfont.woff | Bin 0 -> 68776 bytes .../files/htdocs/fonts/advancedtomato.eot | Bin 0 -> 8480 bytes .../files/htdocs/fonts/advancedtomato.svg | 53 + .../files/htdocs/fonts/advancedtomato.ttf | Bin 0 -> 8288 bytes .../files/htdocs/fonts/advancedtomato.woff | Bin 0 -> 6272 bytes .../files/htdocs/fonts/font.eot | Bin 0 -> 1912 bytes .../files/htdocs/fonts/font.svg | 16 + .../files/htdocs/fonts/font.ttf | Bin 0 -> 1748 bytes .../files/htdocs/fonts/font.woff | Bin 0 -> 1824 bytes .../files/htdocs/js/jquery.min.js | 2 + .../files/htdocs/js/script.js | 243 + luci-theme-atmaterial/files/htdocs/logo.png | Bin 0 -> 2224 bytes .../files/templates/footer.htm | 51 + .../files/templates/header.htm | 257 + .../screenshot/computer-1.png | Bin 0 -> 101267 bytes .../screenshot/computer-2.png | Bin 0 -> 69297 bytes .../screenshot/computer-3.png | Bin 0 -> 116397 bytes luci-theme-atmaterial/screenshot/mobile-1.png | Bin 0 -> 363390 bytes luci-theme-atmaterial/screenshot/mobile-2.png | Bin 0 -> 377809 bytes luci-theme-atmaterial/screenshot/mobile-3.png | Bin 0 -> 501014 bytes luci-theme-btmod | 1 - luci-theme-btmod/Makefile | 17 + luci-theme-btmod/README.md | 90 + .../htdocs/luci-static/btmod/css/mainmenu.css | 177 + .../luci-static/btmod/css/sm-blue/sm-blue.css | 333 + .../luci-static/btmod/css/sm-core-css.css | 14 + .../htdocs/luci-static/btmod/css/style.css | 1583 + .../htdocs/luci-static/btmod/favicon.ico | Bin 0 -> 2462 bytes .../font-awesome/css/font-awesome.min.css | 4 + .../btmod/font-awesome/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes .../fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../fonts/fontawesome-webfont.svg | 2671 ++ .../fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../htdocs/luci-static/btmod/images/bg.jpg | Bin 0 -> 7089 bytes .../htdocs/luci-static/btmod/images/chat.gif | Bin 0 -> 1697 bytes .../luci-static/btmod/images/connect.png | Bin 0 -> 1857 bytes .../htdocs/luci-static/btmod/images/cont.gif | Bin 0 -> 10319 bytes .../htdocs/luci-static/btmod/images/cont.png | Bin 0 -> 21634 bytes .../luci-static/btmod/images/favicon.png | Bin 0 -> 2224 bytes .../luci-static/btmod/images/firmware.gif | Bin 0 -> 1752 bytes .../luci-static/btmod/images/firmware.png | Bin 0 -> 1981 bytes .../htdocs/luci-static/btmod/images/hot.gif | Bin 0 -> 931 bytes .../htdocs/luci-static/btmod/images/link.png | Bin 0 -> 1778 bytes .../htdocs/luci-static/btmod/images/ncont.png | Bin 0 -> 21608 bytes .../htdocs/luci-static/btmod/images/net.gif | Bin 0 -> 2252 bytes .../htdocs/luci-static/btmod/images/set.png | Bin 0 -> 1946 bytes .../htdocs/luci-static/btmod/images/view.png | Bin 0 -> 1295 bytes .../htdocs/luci-static/btmod/images/wifi.png | Bin 0 -> 32778 bytes .../htdocs/luci-static/btmod/js/jquery.min.js | 5 + .../btmod/js/jquery.smartmenus.min.js | 3 + .../luci-static/btmod/js/prefixfree.min.js | 18 + .../htdocs/luci-static/btmod/js/script.js | 241 + .../luasrc/view/themes/btmod/footer.htm | 135 + .../luasrc/view/themes/btmod/header.htm | 238 + .../root/etc/uci-defaults/luci-theme-btmod | 8 + luci-theme-jj | 1 - luci-theme-jj/.gitignore | 3 + luci-theme-jj/Makefile | 16 + luci-theme-jj/README.md | 97 + .../luci-static/JJTheme/css/cascade.css | 2437 ++ .../JJTheme/css/font/JiZi/JiZi.eot | Bin 0 -> 2040489 bytes .../JJTheme/css/font/JiZi/JiZi.svg | 20685 +++++++++ .../JJTheme/css/font/JiZi/JiZi.ttf | Bin 0 -> 1550072 bytes .../JJTheme/css/font/JiZi/JiZi.woff | Bin 0 -> 1005712 bytes .../JJTheme/css/font/JiZi/JiZi.woff2 | Bin 0 -> 749156 bytes .../css/font/Megrim/Megrim-Regular.eot | Bin 0 -> 32690 bytes .../css/font/Megrim/Megrim-Regular.otf | Bin 0 -> 38532 bytes .../css/font/Megrim/Megrim-Regular.ttf | Bin 0 -> 55272 bytes .../css/font/Megrim/Megrim-Regular.woff | Bin 0 -> 26588 bytes .../css/font/Megrim/Megrim-Regular.woff2 | Bin 0 -> 18368 bytes .../JJTheme/css/font/Segoe/Segoe-UI.eot | Bin 0 -> 271058 bytes .../JJTheme/css/font/Segoe/Segoe-UI.ttf | Bin 0 -> 509920 bytes .../JJTheme/css/font/Segoe/Segoe-UI.woff | Bin 0 -> 248932 bytes .../JJTheme/css/font/Segoe/Segoe-UI.woff2 | Bin 0 -> 177268 bytes .../htdocs/luci-static/JJTheme/css/mobile.css | 465 + .../luci-static/JJTheme/css/sysauth.css | 138 + .../JJTheme/icons/bandwidth watch.svg | 3 + .../icons/card_icon_active_connection.svg | 1 + .../JJTheme/icons/card_icon_cpu_avg.svg | 1 + .../JJTheme/icons/card_icon_cpu_usage.svg | 1 + .../JJTheme/icons/card_icon_dhcp_ipv4.svg | 1 + .../JJTheme/icons/card_icon_interface.svg | 1 + .../JJTheme/icons/card_icon_mem_buff.svg | 1 + .../JJTheme/icons/card_icon_mem_used.svg | 1 + .../JJTheme/icons/card_icon_network.svg | 1 + .../JJTheme/icons/card_icon_onlineDevice.svg | 59 + .../htdocs/luci-static/JJTheme/icons/lock.svg | 4 + .../luci-static/JJTheme/icons/logout.svg | 3 + .../luci-static/JJTheme/icons/network.svg | 3 + .../luci-static/JJTheme/icons/port_down.svg | 43 + .../luci-static/JJTheme/icons/port_up.svg | 47 + .../JJTheme/icons/service icon.svg | 3 + .../luci-static/JJTheme/icons/status_icon.svg | 3 + .../luci-static/JJTheme/icons/storage.svg | 3 + .../luci-static/JJTheme/icons/system.svg | 3 + .../htdocs/luci-static/JJTheme/icons/vpn.svg | 3 + .../JJTheme/img/custom-gauge-panel-1.png | Bin 0 -> 11629 bytes .../JJTheme/img/custom-gauge-panel-2.png | Bin 0 -> 12159 bytes .../JJTheme/img/custom-gauge-panel.png | Bin 0 -> 13745 bytes .../htdocs/luci-static/JJTheme/js/theme_jj.js | 381 + .../htdocs/luci-static/JJTheme/toggleIndex.sh | 17 + luci-theme-jj/ipkg/postinst | 4 + .../luasrc/view/admin_status/index_jj.htm | 1422 + .../luasrc/view/themes/JJTheme/footer.htm | 40 + .../luasrc/view/themes/JJTheme/header.htm | 341 + .../view/themes/JJTheme/header_login.htm | 12 + .../luasrc/view/themes/JJTheme/sysauth.htm | 78 + .../root/etc/uci-defaults/30_luci-theme-jj | 12 + luci-theme-neobird | 1 - luci-theme-neobird/.gitignore | 1 + luci-theme-neobird/LICENSE | 201 + luci-theme-neobird/Makefile | 15 + luci-theme-neobird/README.md | 54 + .../htdocs/luci-static/neobird/css/style.css | 2590 ++ .../htdocs/luci-static/neobird/favicon.ico | Bin 0 -> 28053 bytes .../htdocs/luci-static/neobird/fonts/font.eot | Bin 0 -> 1912 bytes .../htdocs/luci-static/neobird/fonts/font.svg | 16 + .../htdocs/luci-static/neobird/fonts/font.ttf | Bin 0 -> 1748 bytes .../luci-static/neobird/fonts/font.woff | Bin 0 -> 1824 bytes .../luci-static/neobird/fonts/iconfont.ttf | Bin 0 -> 9632 bytes .../luci-static/neobird/fonts/iconfont.woff | Bin 0 -> 6196 bytes .../luci-static/neobird/fonts/iconfont.woff2 | Bin 0 -> 5420 bytes .../htdocs/luci-static/neobird/images/add.png | Bin 0 -> 3163 bytes .../luci-static/neobird/images/bridge.png | Bin 0 -> 3410 bytes .../luci-static/neobird/images/ethernet.png | Bin 0 -> 1973 bytes .../neobird/images/ethernet_disabled.png | Bin 0 -> 2023 bytes .../luci-static/neobird/images/home.png | Bin 0 -> 7725 bytes .../luci-static/neobird/images/icon.png | Bin 0 -> 35519 bytes .../luci-static/neobird/images/link.png | Bin 0 -> 12758 bytes .../luci-static/neobird/images/loading.gif | Bin 0 -> 37037 bytes .../luci-static/neobird/images/logo.png | Bin 0 -> 20529 bytes .../luci-static/neobird/images/logod.png | Bin 0 -> 20683 bytes .../luci-static/neobird/images/mlogo.png | Bin 0 -> 22982 bytes .../luci-static/neobird/images/mlogod.png | Bin 0 -> 23063 bytes .../luci-static/neobird/images/port_up.png | Bin 0 -> 3702 bytes .../luci-static/neobird/images/rank.png | Bin 0 -> 3503 bytes .../luci-static/neobird/images/reload.png | Bin 0 -> 4152 bytes .../luci-static/neobird/images/remove.png | Bin 0 -> 3404 bytes .../luci-static/neobird/images/splash.png | Bin 0 -> 35271 bytes .../htdocs/luci-static/neobird/images/ssr.png | Bin 0 -> 14832 bytes .../luci-static/neobird/images/user.png | Bin 0 -> 9313 bytes .../luci-static/neobird/js/jquery.min.js | 6 + .../htdocs/luci-static/neobird/js/script.js | 234 + .../htdocs/luci-static/neobird/manifest.json | 25 + .../luasrc/view/themes/neobird/footer.htm | 56 + .../luasrc/view/themes/neobird/header.htm | 259 + .../etc/uci-defaults/30_luci-theme-neobird | 8 + luci-theme-opentopd | 1 - luci-theme-opentopd/Makefile | 27 + luci-theme-opentopd/README.md | 189 + luci-theme-opentopd/doc/index.md | 100 + luci-theme-opentopd/doc/合并图.jpg | Bin 0 -> 266341 bytes luci-theme-opentopd/doc/实时监控.jpg | Bin 0 -> 182115 bytes luci-theme-opentopd/doc/手机画面.jpg | Bin 0 -> 94321 bytes luci-theme-opentopd/doc/登陆界面2.jpg | Bin 0 -> 136678 bytes luci-theme-opentopd/doc/登陆页面.jpg | Bin 0 -> 409290 bytes luci-theme-opentopd/doc/网络共享.jpg | Bin 0 -> 117398 bytes luci-theme-opentopd/doc/预览界面.jpg | Bin 0 -> 121561 bytes luci-theme-opentopd/doc/高级设置.jpg | Bin 0 -> 102733 bytes .../htdocs/luci-static/opentopd/css/fonts.css | 10 + .../luci-static/opentopd/css/pure-min.css | 11 + .../htdocs/luci-static/opentopd/css/style.css | 1 + .../htdocs/luci-static/opentopd/favicon.ico | Bin 0 -> 4286 bytes .../luci-static/opentopd/fonts/sirpdboy.eot | Bin 0 -> 8312 bytes .../luci-static/opentopd/fonts/sirpdboy.svg | 33 + .../luci-static/opentopd/fonts/sirpdboy.ttf | Bin 0 -> 8144 bytes .../luci-static/opentopd/fonts/sirpdboy.woff | Bin 0 -> 8220 bytes .../luci-static/opentopd/icons/ethernet.png | Bin 0 -> 460 bytes .../opentopd/icons/ethernet_disabled.png | Bin 0 -> 456 bytes .../luci-static/opentopd/icons/port_down.png | Bin 0 -> 267 bytes .../luci-static/opentopd/icons/port_up.png | Bin 0 -> 285 bytes .../luci-static/opentopd/icons/spinner.svg | 1 + .../htdocs/luci-static/opentopd/img/bg1.jpg | Bin 0 -> 242232 bytes .../htdocs/luci-static/opentopd/img/bg2.jpg | Bin 0 -> 204809 bytes .../luci-static/opentopd/js/jquery.min.js | 2 + .../htdocs/luci-static/opentopd/js/script.js | 239 + .../htdocs/luci-static/opentopd/logo.png | Bin 0 -> 1955 bytes .../htdocs/luci-static/opentopd/runbar.png | Bin 0 -> 236 bytes .../luasrc/view/themes/opentopd/footer.htm | 56 + .../luasrc/view/themes/opentopd/header.htm | 318 + .../etc/uci-defaults/30_luci-theme-opentopd | 10 + mos | 1 - mosdns/Makefile | 46 + .../patches/201-compatible-with-go1.20.patch | 51 + ...for-bad-request-in-ServeHTTP-handler.patch | 24 + ...-Fisher-Yates-shuffle-algorithm-to-r.patch | 56 + mosdns/patches/205-format-logtime.patch | 51 + redsocks2/Makefile | 54 + shadow-tls/Makefile | 65 + smartdns | 1 - smartdns/Makefile | 62 + smartdns/ReadMe.md | 68 + v2dat/Makefile | 46 + v2dat/patches/100-format-logtime.patch | 47 + v2raya/Makefile | 90 + v2raya/files/v2raya.config | 50 + v2raya/files/v2raya.init | 74 + ...-interface-ppp-to-avoid-to-break-net.patch | 38 + ...ad-from-vless-sharing-link-and-add-m.patch | 105 + ...that-supervisor-cannot-exit-normally.patch | 100 + ...ected-exit-does-not-apply-stop-steps.patch | 52 + .../017-optimize-reduce-disk-writes.patch | 336 + ...x-do-not-rollback-closed-transaction.patch | 27 + v2raya/patches/100-compat-v5.patch | 21 + 709 files changed, 152572 insertions(+), 28 deletions(-) delete mode 160000 cloudflarespeedtest delete mode 160000 helloworld create mode 100644 lua-neturl/Makefile create mode 100644 lua-neturl/patches/010-userinfo-regex.patch delete mode 160000 luci-app-advanced create mode 100644 luci-app-advanced/Makefile create mode 100644 luci-app-advanced/README.md create mode 100644 luci-app-advanced/htdocs/luci-static/resources/fileassistant/fb.css create mode 100644 luci-app-advanced/htdocs/luci-static/resources/fileassistant/fb.js create mode 100644 luci-app-advanced/htdocs/luci-static/resources/fileassistant/file-icon.png create mode 100644 luci-app-advanced/htdocs/luci-static/resources/fileassistant/folder-icon.png create mode 100644 luci-app-advanced/htdocs/luci-static/resources/fileassistant/link-icon.png create mode 100644 luci-app-advanced/luasrc/controller/advanced.lua create mode 100644 luci-app-advanced/luasrc/controller/fileassistant.lua create mode 100644 luci-app-advanced/luasrc/model/cbi/advanced.lua create mode 100644 luci-app-advanced/luasrc/view/fileassistant.htm create mode 100644 luci-app-advanced/luasrc/view/filebrowser.htm create mode 100644 luci-app-advanced/root/bin/ipmode4 create mode 100644 luci-app-advanced/root/bin/ipmode6 create mode 100644 luci-app-advanced/root/bin/normalmode create mode 100644 luci-app-advanced/root/bin/nuc create mode 100644 luci-app-advanced/root/etc/config/advanced create mode 100644 luci-app-advanced/root/etc/uci-defaults/40_luci-fb create mode 100644 luci-app-advanced/root/usr/share/rpcd/acl.d/luci-app-advanced.json delete mode 160000 luci-app-aliddns create mode 100644 luci-app-aliddns/LICENSE create mode 100644 luci-app-aliddns/Makefile create mode 100644 luci-app-aliddns/README.md create mode 100644 luci-app-aliddns/files/luci/controller/aliddns.lua create mode 100644 luci-app-aliddns/files/luci/i18n/aliddns.zh-cn.po create mode 100644 luci-app-aliddns/files/luci/model/cbi/aliddns.lua create mode 100644 luci-app-aliddns/files/root/etc/config/aliddns create mode 100644 luci-app-aliddns/files/root/etc/init.d/aliddns create mode 100644 luci-app-aliddns/files/root/etc/uci-defaults/luci-aliddns create mode 100755 luci-app-aliddns/files/root/usr/sbin/aliddns create mode 100644 luci-app-aliddns/tools/po2lmo/Makefile create mode 100644 luci-app-aliddns/tools/po2lmo/src/po2lmo.c create mode 100644 luci-app-aliddns/tools/po2lmo/src/template_lmo.c create mode 100644 luci-app-aliddns/tools/po2lmo/src/template_lmo.h delete mode 160000 luci-app-argon-config create mode 100755 luci-app-argon-config/.github/workflows/build.sh create mode 100644 luci-app-argon-config/.github/workflows/check.yml create mode 100644 luci-app-argon-config/.github/workflows/release.yml create mode 100644 luci-app-argon-config/Makefile create mode 100644 luci-app-argon-config/README.md create mode 100644 luci-app-argon-config/luasrc/controller/argon-config.lua create mode 100644 luci-app-argon-config/luasrc/model/cbi/argon-config.lua create mode 100644 luci-app-argon-config/luasrc/view/argon-config/other_button.htm create mode 100644 luci-app-argon-config/luasrc/view/argon-config/other_dvalue.htm create mode 100644 luci-app-argon-config/luasrc/view/argon-config/other_upload.htm create mode 100644 luci-app-argon-config/po/es/argon-config.po create mode 100644 luci-app-argon-config/po/templates/argon-config.pot create mode 100644 luci-app-argon-config/po/zh-cn/argon-config.po create mode 100644 luci-app-argon-config/po/zh-tw/argon-config.po create mode 120000 luci-app-argon-config/po/zh_Hans create mode 120000 luci-app-argon-config/po/zh_Hant create mode 100644 luci-app-argon-config/root/etc/config/argon create mode 100755 luci-app-argon-config/root/etc/uci-defaults/luci-argon-config create mode 100644 luci-app-argon-config/root/usr/share/rpcd/acl.d/luci-app-argon-config.json delete mode 160000 luci-app-autotimeset create mode 100644 luci-app-autotimeset/LICENSE create mode 100644 luci-app-autotimeset/Makefile create mode 100644 luci-app-autotimeset/README.md create mode 100644 luci-app-autotimeset/luasrc/controller/autotimeset.lua create mode 100644 luci-app-autotimeset/luasrc/model/cbi/autotimeset.lua create mode 100644 luci-app-autotimeset/luasrc/model/cbi/autotimeset/base.lua create mode 100644 luci-app-autotimeset/luasrc/model/cbi/autotimeset/log.lua create mode 100644 luci-app-autotimeset/luasrc/view/autotimeset/log.htm create mode 100644 luci-app-autotimeset/po/zh-cn/autotimeset.po create mode 120000 luci-app-autotimeset/po/zh_Hans create mode 100644 luci-app-autotimeset/root/etc/autotimeset/timesetcustomscript create mode 100644 luci-app-autotimeset/root/etc/config/autotimeset create mode 100644 luci-app-autotimeset/root/etc/init.d/autotimeset create mode 100644 luci-app-autotimeset/root/etc/init.d/autotimesetrun create mode 100644 luci-app-autotimeset/root/etc/uci-defaults/40_luci-app-autotimeset create mode 100644 luci-app-autotimeset/root/etc/uci-defaults/luci--autotimeset create mode 100644 luci-app-autotimeset/root/usr/bin/timesethandler create mode 100644 luci-app-autotimeset/root/usr/bin/timesetsecurity create mode 100644 luci-app-autotimeset/root/usr/share/rpcd/acl.d/luci-app-autotimeset.json create mode 100644 luci-app-autoupdate/LICENSE create mode 100644 luci-app-autoupdate/Makefile create mode 100644 luci-app-autoupdate/luasrc/controller/autoupdate.lua create mode 100644 luci-app-autoupdate/luasrc/model/cbi/autoupdate.lua create mode 100644 luci-app-autoupdate/po/zh-cn/autoupdate.po create mode 120000 luci-app-autoupdate/po/zh_Hans create mode 100644 luci-app-autoupdate/root/etc/config/autoupdate create mode 100644 luci-app-autoupdate/root/etc/init.d/autoupdate create mode 100644 luci-app-autoupdate/root/etc/uci-defaults/autoupdate create mode 100644 luci-app-autoupdate/root/usr/share/autoupdate/Check_Update.sh create mode 100644 luci-app-autoupdate/root/usr/share/rpcd/acl.d/luci-app-autoupdate.json delete mode 160000 luci-app-beardropper create mode 100644 luci-app-beardropper/.gitattributes create mode 100644 luci-app-beardropper/.gitignore create mode 100644 luci-app-beardropper/LICENSE create mode 100644 luci-app-beardropper/Makefile create mode 100644 luci-app-beardropper/README.md create mode 100755 luci-app-beardropper/luasrc/controller/beardropper.lua create mode 100644 luci-app-beardropper/luasrc/model/cbi/beardropper/log.lua create mode 100755 luci-app-beardropper/luasrc/model/cbi/beardropper/setting.lua create mode 100755 luci-app-beardropper/luasrc/view/beardropper/status.htm create mode 120000 luci-app-beardropper/po/zh-cn create mode 100755 luci-app-beardropper/po/zh_Hans/beardropper.po create mode 100644 luci-app-beardropper/po/zh_Hant/beardropper.po create mode 100644 luci-app-beardropper/preview/1_setting.png create mode 100644 luci-app-beardropper/preview/2_blockedlist.png create mode 100644 luci-app-beardropper/root/etc/config/beardropper create mode 100755 luci-app-beardropper/root/etc/init.d/beardropper create mode 100644 luci-app-beardropper/root/etc/uci-defaults/luci-beardropper create mode 100755 luci-app-beardropper/root/usr/sbin/beardropper create mode 100644 luci-app-beardropper/root/usr/share/rpcd/acl.d/luci-app-beardropper.json create mode 100644 luci-app-cloudflarespeedtest/Makefile create mode 100644 luci-app-cloudflarespeedtest/luasrc/controller/cloudflarespeedtest.lua create mode 100644 luci-app-cloudflarespeedtest/luasrc/model/cbi/cloudflarespeedtest/cloudflarespeedtest.lua create mode 100644 luci-app-cloudflarespeedtest/luasrc/model/cbi/cloudflarespeedtest/logread.lua create mode 100644 luci-app-cloudflarespeedtest/luasrc/view/cloudflarespeedtest/actions.htm create mode 100644 luci-app-cloudflarespeedtest/luasrc/view/cloudflarespeedtest/logread.htm create mode 120000 luci-app-cloudflarespeedtest/po/zh-cn create mode 100644 luci-app-cloudflarespeedtest/po/zh_Hans/cloudflarespeedtest.po create mode 100644 luci-app-cloudflarespeedtest/root/etc/config/cloudflarespeedtest create mode 100755 luci-app-cloudflarespeedtest/root/etc/init.d/cloudflarespeedtest create mode 100755 luci-app-cloudflarespeedtest/root/usr/bin/cloudflarespeedtest/aliddns.sh create mode 100644 luci-app-cloudflarespeedtest/root/usr/bin/cloudflarespeedtest/cloudflarespeedtest.sh create mode 100644 luci-app-cloudflarespeedtest/root/usr/share/rpcd/acl.d/luci-app-cloudflarespeedtest.json delete mode 160000 luci-app-ddns-go create mode 100644 luci-app-ddns-go/README.md create mode 100644 luci-app-ddns-go/ddns-go/Makefile create mode 100644 luci-app-ddns-go/ddns-go/file/ddns-go.init create mode 100644 luci-app-ddns-go/ddns-go/file/luci-ddns-go.uci-default create mode 100644 luci-app-ddns-go/luci-app-ddns-go/Makefile create mode 100644 luci-app-ddns-go/luci-app-ddns-go/README.md create mode 100644 luci-app-ddns-go/luci-app-ddns-go/luasrc/controller/ddns-go.lua create mode 100644 luci-app-ddns-go/luci-app-ddns-go/luasrc/model/cbi/ddns-go.lua create mode 100644 luci-app-ddns-go/luci-app-ddns-go/luasrc/view/ddns-go.htm create mode 100644 luci-app-ddns-go/luci-app-ddns-go/luasrc/view/ddns-go_status.htm create mode 100644 luci-app-ddns-go/luci-app-ddns-go/po/zh-cn/ddns-go.po create mode 100644 luci-app-ddns-go/luci-app-ddns-go/po/zh_Hans create mode 100644 luci-app-ddns-go/luci-app-ddns-go/root/etc/config/ddns-go create mode 100644 luci-app-ddns-go/luci-app-ddns-go/root/etc/ddns-go/ddns-go-config.yaml create mode 100644 luci-app-ddns-go/luci-app-ddns-go/root/etc/ddns-go/localtime create mode 100644 luci-app-ddns-go/luci-app-ddns-go/root/usr/share/ddns-go/ddns-go-default.yaml create mode 100644 luci-app-ddns-go/luci-app-ddns-go/root/usr/share/rpcd/acl.d/luci-app-ddns-go.json create mode 100644 luci-app-mosdns/Makefile create mode 100644 luci-app-mosdns/luasrc/controller/mosdns.lua create mode 100644 luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua create mode 100644 luci-app-mosdns/luasrc/model/cbi/mosdns/log.lua create mode 100644 luci-app-mosdns/luasrc/model/cbi/mosdns/rule_list.lua create mode 100644 luci-app-mosdns/luasrc/model/cbi/mosdns/update.lua create mode 100644 luci-app-mosdns/luasrc/view/mosdns/mosdns_editor.htm create mode 100644 luci-app-mosdns/luasrc/view/mosdns/mosdns_flush_cache.htm create mode 100644 luci-app-mosdns/luasrc/view/mosdns/mosdns_geo_update.htm create mode 100644 luci-app-mosdns/luasrc/view/mosdns/mosdns_log.htm create mode 100644 luci-app-mosdns/luasrc/view/mosdns/mosdns_status.htm create mode 100644 luci-app-mosdns/po/zh-cn/mosdns.po create mode 120000 luci-app-mosdns/po/zh_Hans create mode 100644 luci-app-mosdns/root/etc/config/mosdns create mode 100755 luci-app-mosdns/root/etc/hotplug.d/iface/99-mosdns create mode 100755 luci-app-mosdns/root/etc/init.d/mosdns create mode 100644 luci-app-mosdns/root/etc/mosdns/config_custom.yaml create mode 100644 luci-app-mosdns/root/etc/mosdns/rule/blocklist.txt create mode 100644 luci-app-mosdns/root/etc/mosdns/rule/cloudflare-cidr.txt create mode 100644 luci-app-mosdns/root/etc/mosdns/rule/ddnslist.txt create mode 100644 luci-app-mosdns/root/etc/mosdns/rule/greylist.txt create mode 100644 luci-app-mosdns/root/etc/mosdns/rule/hosts.txt create mode 100644 luci-app-mosdns/root/etc/mosdns/rule/local-ptr.txt create mode 100644 luci-app-mosdns/root/etc/mosdns/rule/redirect.txt create mode 100644 luci-app-mosdns/root/etc/mosdns/rule/whitelist.txt create mode 100755 luci-app-mosdns/root/etc/uci-defaults/luci-mosdns create mode 100644 luci-app-mosdns/root/usr/share/mosdns/cache.dump create mode 100644 luci-app-mosdns/root/usr/share/mosdns/default.yaml create mode 100755 luci-app-mosdns/root/usr/share/mosdns/mosdns.sh create mode 100644 luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json create mode 100644 luci-app-mosdns/root/www/luci-static/resources/mosdns/addon/fold/foldcode.js create mode 100644 luci-app-mosdns/root/www/luci-static/resources/mosdns/addon/fold/foldgutter.css create mode 100644 luci-app-mosdns/root/www/luci-static/resources/mosdns/addon/fold/foldgutter.js create mode 100644 luci-app-mosdns/root/www/luci-static/resources/mosdns/addon/fold/indent-fold.js create mode 100644 luci-app-mosdns/root/www/luci-static/resources/mosdns/lib/codemirror.css create mode 100644 luci-app-mosdns/root/www/luci-static/resources/mosdns/lib/codemirror.js create mode 100644 luci-app-mosdns/root/www/luci-static/resources/mosdns/mode/yaml/yaml.js create mode 100644 luci-app-mosdns/root/www/luci-static/resources/mosdns/theme/dracula.css delete mode 160000 luci-app-netdata create mode 100644 luci-app-netdata/Makefile create mode 100644 luci-app-netdata/README.md create mode 100644 luci-app-netdata/luasrc/controller/netdata.lua create mode 100644 luci-app-netdata/luasrc/model/cbi/netdata/netdata.lua create mode 100644 luci-app-netdata/luasrc/view/netdata.htm create mode 100644 luci-app-netdata/luasrc/view/netdata_status.htm create mode 100644 luci-app-netdata/po/zh-cn/netdata.po create mode 120000 luci-app-netdata/po/zh_Hans create mode 100644 luci-app-netdata/root/etc/config/netdata create mode 100644 luci-app-netdata/root/etc/uci-defaults/40_luci-app-netdata create mode 100644 luci-app-netdata/root/usr/share/netdata/webcn/dashboard.js create mode 100644 luci-app-netdata/root/usr/share/netdata/webcn/dashboard_info.js create mode 100644 luci-app-netdata/root/usr/share/netdata/webcn/index.html create mode 100644 luci-app-netdata/root/usr/share/netdata/webcn/main.js create mode 100644 luci-app-netdata/root/usr/share/netdata/webcn/netdata create mode 100644 luci-app-netdata/root/usr/share/netdata/webcn/netdata.conf create mode 100755 luci-app-netdata/root/usr/share/netdata/webcn/netdata.init create mode 100644 luci-app-netdata/root/usr/share/rpcd/acl.d/luci-app-netdata.json create mode 100644 luci-app-nginx-manager/Makefile create mode 100644 luci-app-nginx-manager/luasrc/controller/nginx-manager.lua create mode 100644 luci-app-nginx-manager/luasrc/model/cbi/nginx-manager.lua create mode 100644 luci-app-nginx-manager/luasrc/view/nginx-manager/index.htm create mode 100644 luci-app-nginx-manager/po/zh-cn/nginx-manager.po create mode 120000 luci-app-nginx-manager/po/zh_Hans create mode 100644 luci-app-nginx-manager/root/etc/nginx/conf.d/templates create mode 100644 luci-app-nginx-manager/root/etc/uci-defaults/luci-app-nginx-manager create mode 100644 luci-app-nginx-manager/root/usr/share/rpcd/acl.d/luci-app-nginx-manager.json delete mode 160000 luci-app-onliner create mode 100644 luci-app-onliner/.gitattributes create mode 100644 luci-app-onliner/.gitignore create mode 100644 luci-app-onliner/Makefile create mode 100644 luci-app-onliner/luasrc/controller/onliner.lua create mode 100644 luci-app-onliner/luasrc/view/onliner/display.htm create mode 100644 luci-app-onliner/luasrc/view/onliner/onliner.htm create mode 100644 luci-app-onliner/readme.md create mode 100644 luci-app-onliner/root/usr/share/onliner/setnlbw.sh delete mode 160000 luci-app-parentcontrol create mode 100644 luci-app-parentcontrol/Makefile create mode 100644 luci-app-parentcontrol/README.md create mode 100644 luci-app-parentcontrol/luasrc/controller/parentcontrol.lua create mode 100644 luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/protocol.lua create mode 100644 luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/time.lua create mode 100644 luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/weburl.lua create mode 100644 luci-app-parentcontrol/luasrc/view/parentcontrol/index.htm create mode 100644 luci-app-parentcontrol/luasrc/view/parentcontrol/parentcontrol.htm create mode 100644 luci-app-parentcontrol/po/zh-cn/parentcontrol.po create mode 100644 luci-app-parentcontrol/po/zh_Hans create mode 100644 luci-app-parentcontrol/root/etc/config/parentcontrol create mode 100755 luci-app-parentcontrol/root/etc/init.d/parentcontrol create mode 100644 luci-app-parentcontrol/root/etc/parentcontrol.include create mode 100644 luci-app-parentcontrol/root/etc/parentcontrol/black.list create mode 100644 luci-app-parentcontrol/root/etc/parentcontrol/white.list create mode 100644 luci-app-parentcontrol/root/etc/uci-defaults/luci-app-parentcontrol create mode 100644 luci-app-parentcontrol/root/usr/share/rpcd/acl.d/luci-app-parentcontrol.json delete mode 160000 luci-app-partexp create mode 100644 luci-app-partexp/Makefile create mode 100644 luci-app-partexp/README.md create mode 100644 luci-app-partexp/luasrc/controller/partexp.lua create mode 100644 luci-app-partexp/luasrc/model/cbi/partexp/global.lua create mode 100644 luci-app-partexp/luasrc/model/diskmount.lua create mode 100644 luci-app-partexp/luasrc/view/partexp.htm create mode 100644 luci-app-partexp/luasrc/view/partexp/log.htm create mode 100644 luci-app-partexp/po/zh-cn/partexp.po create mode 100644 luci-app-partexp/po/zh_Hans create mode 100644 luci-app-partexp/root/etc/config/partexp create mode 100644 luci-app-partexp/root/etc/init.d/partexp create mode 100644 luci-app-partexp/root/etc/uci-defaults/40_luci-partexp create mode 100644 luci-app-partexp/root/usr/share/rpcd/acl.d/luci-app-partexp.json delete mode 160000 luci-app-poweroff create mode 100644 luci-app-poweroff/LICENSE create mode 100644 luci-app-poweroff/Makefile create mode 100644 luci-app-poweroff/README.md create mode 100644 luci-app-poweroff/luasrc/controller/poweroff.lua create mode 100644 luci-app-poweroff/luasrc/view/poweroff.htm create mode 100644 luci-app-poweroff/po/zh-cn/poweroff.po create mode 100644 luci-app-poweroff/po/zh-tw/poweroff.po create mode 120000 luci-app-poweroff/po/zh_Hans delete mode 160000 luci-app-poweroffdevice create mode 100644 luci-app-poweroffdevice/Makefile create mode 100644 luci-app-poweroffdevice/README.md create mode 100644 luci-app-poweroffdevice/luasrc/controller/poweroffdevice.lua create mode 100644 luci-app-poweroffdevice/luasrc/view/poweroffdevice/poweroffdevice.htm create mode 100644 luci-app-poweroffdevice/po/zh-cn/poweroffdevice.po create mode 100644 luci-app-poweroffdevice/po/zh_Hans delete mode 160000 luci-app-pushbot create mode 100644 luci-app-pushbot/.github/workflows/build-package-onx86.yml create mode 100644 luci-app-pushbot/Makefile create mode 100644 luci-app-pushbot/README.md create mode 100644 luci-app-pushbot/luasrc/controller/pushbot.lua create mode 100644 luci-app-pushbot/luasrc/model/cbi/pushbot/advanced.lua create mode 100644 luci-app-pushbot/luasrc/model/cbi/pushbot/client.lua create mode 100644 luci-app-pushbot/luasrc/model/cbi/pushbot/log.lua create mode 100644 luci-app-pushbot/luasrc/model/cbi/pushbot/setting.lua create mode 100644 luci-app-pushbot/luasrc/view/pushbot/pushbot_log.htm create mode 100644 luci-app-pushbot/luasrc/view/pushbot/pushbot_status.htm create mode 100644 luci-app-pushbot/root/etc/config/pushbot create mode 100755 luci-app-pushbot/root/etc/init.d/pushbot create mode 100755 luci-app-pushbot/root/etc/uci-defaults/luci-pushbot create mode 100644 luci-app-pushbot/root/usr/bin/pushbot/api/bark.json create mode 100644 luci-app-pushbot/root/usr/bin/pushbot/api/dingding.json create mode 100644 luci-app-pushbot/root/usr/bin/pushbot/api/diy.json create mode 100644 luci-app-pushbot/root/usr/bin/pushbot/api/ent_wechat.json create mode 100644 luci-app-pushbot/root/usr/bin/pushbot/api/feishu.json create mode 100644 luci-app-pushbot/root/usr/bin/pushbot/api/ip_blacklist create mode 100644 luci-app-pushbot/root/usr/bin/pushbot/api/ipv4.list create mode 100644 luci-app-pushbot/root/usr/bin/pushbot/api/ipv6.list create mode 100644 luci-app-pushbot/root/usr/bin/pushbot/api/pushdeer.json create mode 100644 luci-app-pushbot/root/usr/bin/pushbot/api/pushplus.json create mode 100755 luci-app-pushbot/root/usr/bin/pushbot/pushbot create mode 100644 luci-app-pushbot/root/usr/share/rpcd/acl.d/luci-app-pushbot.json delete mode 160000 luci-app-rebootschedule create mode 100644 luci-app-rebootschedule/Makefile create mode 100644 luci-app-rebootschedule/README.md create mode 100644 luci-app-rebootschedule/file/sysfree.sh create mode 100644 luci-app-rebootschedule/luasrc/controller/rebootschedule.lua create mode 100644 luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua create mode 100644 luci-app-rebootschedule/po/en/rebootschedule.mo create mode 100644 luci-app-rebootschedule/po/en/rebootschedule.po create mode 100644 luci-app-rebootschedule/po/en/rebootschedule.pot create mode 100644 luci-app-rebootschedule/root/etc/config/rebootschedule create mode 100644 luci-app-rebootschedule/root/etc/init.d/rebootschedule create mode 100644 luci-app-rebootschedule/root/etc/uci-defaults/luci-app-rebootschedule create mode 100644 luci-app-rebootschedule/root/usr/share/rpcd/acl.d/luci-app-rebootschedule.json delete mode 160000 luci-app-smartdns create mode 100644 luci-app-smartdns/Makefile create mode 100644 luci-app-smartdns/luasrc/controller/smartdns.lua create mode 100644 luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua create mode 100644 luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua create mode 100644 luci-app-smartdns/luasrc/model/smartdns.lua create mode 100644 luci-app-smartdns/luasrc/view/smartdns/smartdns_status.htm create mode 100644 luci-app-smartdns/po/zh-cn/smartdns.po create mode 120000 luci-app-smartdns/po/zh_Hans create mode 100644 luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns create mode 100644 luci-app-ssr-plus/Makefile create mode 100644 luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua create mode 100644 luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua create mode 100644 luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua create mode 100644 luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua create mode 100644 luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua create mode 100644 luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua create mode 100644 luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua create mode 100644 luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua create mode 100644 luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua create mode 100644 luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua create mode 100644 luci-app-ssr-plus/luasrc/view/shadowsocksr/certupload.htm create mode 100644 luci-app-ssr-plus/luasrc/view/shadowsocksr/check.htm create mode 100644 luci-app-ssr-plus/luasrc/view/shadowsocksr/checkport.htm create mode 100644 luci-app-ssr-plus/luasrc/view/shadowsocksr/ping.htm create mode 100644 luci-app-ssr-plus/luasrc/view/shadowsocksr/refresh.htm create mode 100644 luci-app-ssr-plus/luasrc/view/shadowsocksr/reset.htm create mode 100644 luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm create mode 100644 luci-app-ssr-plus/luasrc/view/shadowsocksr/socket.htm create mode 100644 luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm create mode 100644 luci-app-ssr-plus/luasrc/view/shadowsocksr/status.htm create mode 100644 luci-app-ssr-plus/luasrc/view/shadowsocksr/subscribe.htm create mode 100644 luci-app-ssr-plus/po/zh-cn/ssr-plus.po create mode 120000 luci-app-ssr-plus/po/zh_Hans create mode 100644 luci-app-ssr-plus/root/etc/config/shadowsocksr create mode 100755 luci-app-ssr-plus/root/etc/init.d/shadowsocksr create mode 100644 luci-app-ssr-plus/root/etc/ssrplus/ad.conf create mode 100644 luci-app-ssr-plus/root/etc/ssrplus/black.list create mode 100644 luci-app-ssr-plus/root/etc/ssrplus/china_ssr.txt create mode 100644 luci-app-ssr-plus/root/etc/ssrplus/deny.list create mode 100644 luci-app-ssr-plus/root/etc/ssrplus/gfw_base.conf create mode 100644 luci-app-ssr-plus/root/etc/ssrplus/gfw_list.conf create mode 100644 luci-app-ssr-plus/root/etc/ssrplus/mosdns-config.yaml create mode 100644 luci-app-ssr-plus/root/etc/ssrplus/netflix.list create mode 100644 luci-app-ssr-plus/root/etc/ssrplus/netflixip.list create mode 100644 luci-app-ssr-plus/root/etc/ssrplus/oversea_list.conf create mode 100644 luci-app-ssr-plus/root/etc/ssrplus/white.list create mode 100755 luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus create mode 100755 luci-app-ssr-plus/root/usr/bin/ssr-monitor create mode 100755 luci-app-ssr-plus/root/usr/bin/ssr-rules create mode 100755 luci-app-ssr-plus/root/usr/bin/ssr-switch create mode 100644 luci-app-ssr-plus/root/usr/share/rpcd/acl.d/luci-app-ssr-plus.json create mode 100755 luci-app-ssr-plus/root/usr/share/shadowsocksr/chinaipset.sh create mode 100755 luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua create mode 100755 luci-app-ssr-plus/root/usr/share/shadowsocksr/genred2config.sh create mode 100755 luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh create mode 100755 luci-app-ssr-plus/root/usr/share/shadowsocksr/ssrplusupdate.sh create mode 100755 luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua create mode 100755 luci-app-ssr-plus/root/usr/share/shadowsocksr/update.lua delete mode 160000 luci-app-unblockneteasemusic create mode 100644 luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/bug-report.yml create mode 100644 luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/config.yml create mode 100644 luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/feature-request.yml create mode 100755 luci-app-unblockneteasemusic/.github/build-ipk.sh create mode 100644 luci-app-unblockneteasemusic/.github/workflows/build-ipk.yml create mode 100644 luci-app-unblockneteasemusic/LICENSE create mode 100644 luci-app-unblockneteasemusic/Makefile create mode 100644 luci-app-unblockneteasemusic/README.md create mode 100644 luci-app-unblockneteasemusic/luasrc/controller/unblockneteasemusic.lua create mode 100644 luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/log.lua create mode 100644 luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/main.lua create mode 100644 luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/upgrade.lua create mode 100644 luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/remove_core.htm create mode 100644 luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/status.htm create mode 100644 luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/update_core.htm create mode 100644 luci-app-unblockneteasemusic/root/etc/config/unblockneteasemusic create mode 100755 luci-app-unblockneteasemusic/root/etc/init.d/unblockneteasemusic create mode 100755 luci-app-unblockneteasemusic/root/etc/uci-defaults/luci-unblockneteasemusic create mode 100755 luci-app-unblockneteasemusic/root/usr/bin/unm-debug create mode 100644 luci-app-unblockneteasemusic/root/usr/share/rpcd/acl.d/luci-app-unblockneteasemusic.json create mode 100755 luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/debugging.sh create mode 100755 luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/log_check.sh create mode 100755 luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/update.sh create mode 100644 luci-app-unblockneteasemusic/views/view1.jpg create mode 100644 luci-app-unblockneteasemusic/views/view2.jpg create mode 100644 luci-app-unblockneteasemusic/views/view3.jpg create mode 100644 luci-app-unblockneteasemusic/views/view4.jpg delete mode 160000 luci-app-wechatpush create mode 100644 luci-app-wechatpush/Makefile create mode 100644 luci-app-wechatpush/README.md create mode 100644 luci-app-wechatpush/luasrc/controller/serverchan.lua create mode 100644 luci-app-wechatpush/luasrc/model/cbi/serverchan/advanced.lua create mode 100644 luci-app-wechatpush/luasrc/model/cbi/serverchan/client.lua create mode 100644 luci-app-wechatpush/luasrc/model/cbi/serverchan/log.lua create mode 100644 luci-app-wechatpush/luasrc/model/cbi/serverchan/setting.lua create mode 100644 luci-app-wechatpush/luasrc/view/serverchan/serverchan_log.htm create mode 100644 luci-app-wechatpush/luasrc/view/serverchan/serverchan_status.htm create mode 100644 luci-app-wechatpush/root/etc/config/serverchan create mode 100755 luci-app-wechatpush/root/etc/init.d/serverchan create mode 100755 luci-app-wechatpush/root/etc/uci-defaults/luci-serverchan create mode 100644 luci-app-wechatpush/root/usr/share/rpcd/acl.d/luci-app-serverchan.json create mode 100644 luci-app-wechatpush/root/usr/share/serverchan/api/diy.json create mode 100644 luci-app-wechatpush/root/usr/share/serverchan/api/ip_blacklist create mode 100644 luci-app-wechatpush/root/usr/share/serverchan/api/ipv4.list create mode 100644 luci-app-wechatpush/root/usr/share/serverchan/api/ipv6.list create mode 100644 luci-app-wechatpush/root/usr/share/serverchan/api/logo.jpg create mode 100644 luci-app-wechatpush/root/usr/share/serverchan/api/pushplus.json create mode 100644 luci-app-wechatpush/root/usr/share/serverchan/api/qywx_markdown.json create mode 100644 luci-app-wechatpush/root/usr/share/serverchan/api/qywx_mpnews.json create mode 100644 luci-app-wechatpush/root/usr/share/serverchan/api/serverchan.json create mode 100644 luci-app-wechatpush/root/usr/share/serverchan/api/telegram.json create mode 100644 luci-app-wechatpush/root/usr/share/serverchan/api/wxpusher.json create mode 100755 luci-app-wechatpush/root/usr/share/serverchan/serverchan delete mode 160000 luci-app-wifidog create mode 100644 luci-app-wifidog/LICENSE create mode 100644 luci-app-wifidog/Makefile create mode 100644 luci-app-wifidog/README.md create mode 100644 luci-app-wifidog/luasrc/controller/wifidog.lua create mode 100644 luci-app-wifidog/luasrc/model/cbi/wifidog/wifidog_cfg.lua create mode 100644 luci-app-wifidog/root/etc/config/wifidog create mode 100644 luci-app-wifidog/root/etc/init.d/wifidog create mode 100644 luci-app-wifidog/root/etc/uci-defaults/luci-wifidog create mode 100644 luci-app-wifidog/root/usr/sbin/wifidog_check.sh create mode 100644 luci-app-wifidog/root/usr/share/rpcd/acl.d/luci-app-wifidog.json create mode 100644 luci-app-wolplus/Makefile create mode 100644 luci-app-wolplus/luasrc/controller/wolplus.lua create mode 100644 luci-app-wolplus/luasrc/model/cbi/wolplus.lua create mode 100644 luci-app-wolplus/luasrc/view/wolplus/awake.htm create mode 100644 luci-app-wolplus/luasrc/view/wolplus/index.htm create mode 100644 luci-app-wolplus/po/zh-cn/wolplus.po create mode 100644 luci-app-wolplus/po/zh_Hans/wolplus.po create mode 100644 luci-app-wolplus/root/etc/config/wolplus create mode 100644 luci-app-wolplus/root/etc/uci-defaults/luci-app-WOL-plus create mode 100644 luci-app-wolplus/root/usr/share/rpcd/acl.d/luci-app-services-wolplus.json delete mode 160000 luci-theme-argon create mode 100644 luci-theme-argon/.github/workflows/manual_release.yml create mode 100644 luci-theme-argon/.gitignore create mode 100644 luci-theme-argon/Makefile create mode 100644 luci-theme-argon/Screenshots/screenshot_pc.jpg create mode 100644 luci-theme-argon/Screenshots/screenshot_phone.jpg create mode 100644 luci-theme-argon/htdocs/luci-static/argon/css/cascade.css create mode 100644 luci-theme-argon/htdocs/luci-static/argon/css/dark.css create mode 100644 luci-theme-argon/htdocs/luci-static/argon/css/fonts.css create mode 100644 luci-theme-argon/htdocs/luci-static/argon/css/pure-min.css create mode 100644 luci-theme-argon/htdocs/luci-static/argon/favicon.ico create mode 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.eot create mode 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.svg create mode 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.ttf create mode 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.woff create mode 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.eot create mode 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.svg create mode 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.ttf create mode 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.woff create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/android-icon-192x192.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-144x144.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-60x60.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-72x72.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/browserconfig.xml create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-32x32.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-96x96.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/manifest.json create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/ms-icon-144x144.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/add.webp create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/argon.svg create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/bg1.jpg create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/blank.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/edit.webp create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/fieldadd.webp create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/file.webp create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/find.webp create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/folder.webp create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/link.webp create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/reload.webp create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/remove.webp create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/trafficbar.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/volume_high.svg create mode 100644 luci-theme-argon/htdocs/luci-static/argon/img/volume_off.svg create mode 100644 luci-theme-argon/htdocs/luci-static/argon/js/color_calc-argon.js create mode 100644 luci-theme-argon/htdocs/luci-static/argon/js/jquery.min.js create mode 100644 luci-theme-argon/htdocs/luci-static/argon/js/menu-argon.js create mode 100644 luci-theme-argon/htdocs/luci-static/argon/js/sidebar-argon.js create mode 100644 luci-theme-argon/htdocs/luci-static/argon/js/styles-argon.js create mode 100644 luci-theme-argon/htdocs/luci-static/argon/less/cascade.less create mode 100644 luci-theme-argon/htdocs/luci-static/argon/less/dark.less create mode 100644 luci-theme-argon/luasrc/view/themes/argon/footer.htm create mode 100644 luci-theme-argon/luasrc/view/themes/argon/header.htm create mode 100644 luci-theme-argon/luasrc/view/themes/argon/header_login.htm create mode 100644 luci-theme-argon/luasrc/view/themes/argon/out_header_login.htm create mode 100644 luci-theme-argon/luasrc/view/themes/argon/sysauth.htm create mode 100644 luci-theme-argon/root/etc/uci-defaults/90_luci-theme-argon create mode 100755 luci-theme-argon/root/usr/libexec/argon/online_wallpaper delete mode 160000 luci-theme-atmaterial create mode 100644 luci-theme-atmaterial/LICENSE create mode 100644 luci-theme-atmaterial/Makefile create mode 100644 luci-theme-atmaterial/README.md create mode 100644 luci-theme-atmaterial/files/30_luci-theme-atmaterial create mode 100644 luci-theme-atmaterial/files/htdocs/css/style.css create mode 100644 luci-theme-atmaterial/files/htdocs/favicon.ico create mode 100644 luci-theme-atmaterial/files/htdocs/fonts/Roboto-Medium-webfont.woff create mode 100644 luci-theme-atmaterial/files/htdocs/fonts/Roboto-Regular-webfont.woff create mode 100644 luci-theme-atmaterial/files/htdocs/fonts/advancedtomato.eot create mode 100644 luci-theme-atmaterial/files/htdocs/fonts/advancedtomato.svg create mode 100644 luci-theme-atmaterial/files/htdocs/fonts/advancedtomato.ttf create mode 100644 luci-theme-atmaterial/files/htdocs/fonts/advancedtomato.woff create mode 100644 luci-theme-atmaterial/files/htdocs/fonts/font.eot create mode 100644 luci-theme-atmaterial/files/htdocs/fonts/font.svg create mode 100644 luci-theme-atmaterial/files/htdocs/fonts/font.ttf create mode 100644 luci-theme-atmaterial/files/htdocs/fonts/font.woff create mode 100755 luci-theme-atmaterial/files/htdocs/js/jquery.min.js create mode 100644 luci-theme-atmaterial/files/htdocs/js/script.js create mode 100644 luci-theme-atmaterial/files/htdocs/logo.png create mode 100755 luci-theme-atmaterial/files/templates/footer.htm create mode 100644 luci-theme-atmaterial/files/templates/header.htm create mode 100644 luci-theme-atmaterial/screenshot/computer-1.png create mode 100644 luci-theme-atmaterial/screenshot/computer-2.png create mode 100644 luci-theme-atmaterial/screenshot/computer-3.png create mode 100644 luci-theme-atmaterial/screenshot/mobile-1.png create mode 100644 luci-theme-atmaterial/screenshot/mobile-2.png create mode 100644 luci-theme-atmaterial/screenshot/mobile-3.png delete mode 160000 luci-theme-btmod create mode 100644 luci-theme-btmod/Makefile create mode 100644 luci-theme-btmod/README.md create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/css/mainmenu.css create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/css/sm-blue/sm-blue.css create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/css/sm-core-css.css create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/css/style.css create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/favicon.ico create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/font-awesome/css/font-awesome.min.css create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/font-awesome/fonts/FontAwesome.otf create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/font-awesome/fonts/fontawesome-webfont.eot create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/font-awesome/fonts/fontawesome-webfont.svg create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/font-awesome/fonts/fontawesome-webfont.ttf create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/font-awesome/fonts/fontawesome-webfont.woff create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/font-awesome/fonts/fontawesome-webfont.woff2 create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/bg.jpg create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/chat.gif create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/connect.png create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/cont.gif create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/cont.png create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/favicon.png create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/firmware.gif create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/firmware.png create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/hot.gif create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/link.png create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/ncont.png create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/net.gif create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/set.png create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/view.png create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/images/wifi.png create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/js/jquery.min.js create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/js/jquery.smartmenus.min.js create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/js/prefixfree.min.js create mode 100644 luci-theme-btmod/htdocs/luci-static/btmod/js/script.js create mode 100644 luci-theme-btmod/luasrc/view/themes/btmod/footer.htm create mode 100644 luci-theme-btmod/luasrc/view/themes/btmod/header.htm create mode 100644 luci-theme-btmod/root/etc/uci-defaults/luci-theme-btmod delete mode 160000 luci-theme-jj create mode 100644 luci-theme-jj/.gitignore create mode 100644 luci-theme-jj/Makefile create mode 100644 luci-theme-jj/README.md create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/cascade.css create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/JiZi/JiZi.eot create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/JiZi/JiZi.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/JiZi/JiZi.ttf create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/JiZi/JiZi.woff create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/JiZi/JiZi.woff2 create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/Megrim/Megrim-Regular.eot create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/Megrim/Megrim-Regular.otf create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/Megrim/Megrim-Regular.ttf create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/Megrim/Megrim-Regular.woff create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/Megrim/Megrim-Regular.woff2 create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/Segoe/Segoe-UI.eot create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/Segoe/Segoe-UI.ttf create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/Segoe/Segoe-UI.woff create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/font/Segoe/Segoe-UI.woff2 create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/mobile.css create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/css/sysauth.css create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/bandwidth watch.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/card_icon_active_connection.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/card_icon_cpu_avg.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/card_icon_cpu_usage.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/card_icon_dhcp_ipv4.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/card_icon_interface.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/card_icon_mem_buff.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/card_icon_mem_used.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/card_icon_network.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/card_icon_onlineDevice.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/lock.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/logout.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/network.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/port_down.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/port_up.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/service icon.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/status_icon.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/storage.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/system.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/icons/vpn.svg create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/img/custom-gauge-panel-1.png create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/img/custom-gauge-panel-2.png create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/img/custom-gauge-panel.png create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/js/theme_jj.js create mode 100644 luci-theme-jj/htdocs/luci-static/JJTheme/toggleIndex.sh create mode 100644 luci-theme-jj/ipkg/postinst create mode 100644 luci-theme-jj/luasrc/view/admin_status/index_jj.htm create mode 100644 luci-theme-jj/luasrc/view/themes/JJTheme/footer.htm create mode 100644 luci-theme-jj/luasrc/view/themes/JJTheme/header.htm create mode 100644 luci-theme-jj/luasrc/view/themes/JJTheme/header_login.htm create mode 100644 luci-theme-jj/luasrc/view/themes/JJTheme/sysauth.htm create mode 100644 luci-theme-jj/root/etc/uci-defaults/30_luci-theme-jj delete mode 160000 luci-theme-neobird create mode 100644 luci-theme-neobird/.gitignore create mode 100644 luci-theme-neobird/LICENSE create mode 100644 luci-theme-neobird/Makefile create mode 100644 luci-theme-neobird/README.md create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/css/style.css create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/favicon.ico create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/fonts/font.eot create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/fonts/font.svg create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/fonts/font.ttf create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/fonts/font.woff create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/fonts/iconfont.ttf create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/fonts/iconfont.woff create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/fonts/iconfont.woff2 create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/add.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/bridge.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/ethernet.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/ethernet_disabled.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/home.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/icon.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/link.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/loading.gif create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/logo.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/logod.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/mlogo.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/mlogod.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/port_up.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/rank.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/reload.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/remove.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/splash.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/ssr.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/images/user.png create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/js/jquery.min.js create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/js/script.js create mode 100644 luci-theme-neobird/htdocs/luci-static/neobird/manifest.json create mode 100644 luci-theme-neobird/luasrc/view/themes/neobird/footer.htm create mode 100644 luci-theme-neobird/luasrc/view/themes/neobird/header.htm create mode 100644 luci-theme-neobird/root/etc/uci-defaults/30_luci-theme-neobird delete mode 160000 luci-theme-opentopd create mode 100644 luci-theme-opentopd/Makefile create mode 100644 luci-theme-opentopd/README.md create mode 100644 luci-theme-opentopd/doc/index.md create mode 100644 luci-theme-opentopd/doc/合并图.jpg create mode 100644 luci-theme-opentopd/doc/实时监控.jpg create mode 100644 luci-theme-opentopd/doc/手机画面.jpg create mode 100644 luci-theme-opentopd/doc/登陆界面2.jpg create mode 100644 luci-theme-opentopd/doc/登陆页面.jpg create mode 100644 luci-theme-opentopd/doc/网络共享.jpg create mode 100644 luci-theme-opentopd/doc/预览界面.jpg create mode 100644 luci-theme-opentopd/doc/高级设置.jpg create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/css/fonts.css create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/css/pure-min.css create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/css/style.css create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/favicon.ico create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/fonts/sirpdboy.eot create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/fonts/sirpdboy.svg create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/fonts/sirpdboy.ttf create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/fonts/sirpdboy.woff create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/icons/ethernet.png create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/icons/ethernet_disabled.png create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/icons/port_down.png create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/icons/port_up.png create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/icons/spinner.svg create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/img/bg1.jpg create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/img/bg2.jpg create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/js/jquery.min.js create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/js/script.js create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/logo.png create mode 100644 luci-theme-opentopd/htdocs/luci-static/opentopd/runbar.png create mode 100644 luci-theme-opentopd/luasrc/view/themes/opentopd/footer.htm create mode 100644 luci-theme-opentopd/luasrc/view/themes/opentopd/header.htm create mode 100644 luci-theme-opentopd/root/etc/uci-defaults/30_luci-theme-opentopd delete mode 160000 mos create mode 100644 mosdns/Makefile create mode 100644 mosdns/patches/201-compatible-with-go1.20.patch create mode 100644 mosdns/patches/203-add-response-for-bad-request-in-ServeHTTP-handler.patch create mode 100644 mosdns/patches/204-black_hole-apply-Fisher-Yates-shuffle-algorithm-to-r.patch create mode 100644 mosdns/patches/205-format-logtime.patch create mode 100644 redsocks2/Makefile create mode 100644 shadow-tls/Makefile delete mode 160000 smartdns create mode 100644 smartdns/Makefile create mode 100644 smartdns/ReadMe.md create mode 100644 v2dat/Makefile create mode 100644 v2dat/patches/100-format-logtime.patch create mode 100644 v2raya/Makefile create mode 100644 v2raya/files/v2raya.config create mode 100755 v2raya/files/v2raya.init create mode 100644 v2raya/patches/013-fix-we-should-skip-interface-ppp-to-avoid-to-break-net.patch create mode 100644 v2raya/patches/014-fix-seed-cannot-be-read-from-vless-sharing-link-and-add-m.patch create mode 100644 v2raya/patches/015-fix-a-problem-that-supervisor-cannot-exit-normally.patch create mode 100644 v2raya/patches/016-fix-unexpected-exit-does-not-apply-stop-steps.patch create mode 100644 v2raya/patches/017-optimize-reduce-disk-writes.patch create mode 100644 v2raya/patches/018-fix-do-not-rollback-closed-transaction.patch create mode 100644 v2raya/patches/100-compat-v5.patch diff --git a/cloudflarespeedtest b/cloudflarespeedtest deleted file mode 160000 index 8131f3e6..00000000 --- a/cloudflarespeedtest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8131f3e629af25d5443906adf51a723f7be0b5f7 diff --git a/helloworld b/helloworld deleted file mode 160000 index bc3223c7..00000000 --- a/helloworld +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bc3223c7fa18cc895aa8c9154229ca23823445a1 diff --git a/lua-neturl/Makefile b/lua-neturl/Makefile new file mode 100644 index 00000000..0f6b16f3 --- /dev/null +++ b/lua-neturl/Makefile @@ -0,0 +1,44 @@ +# SPDX-License-Identifier: GPL-3.0-only +# +# Copyright (C) 2022-2023 ImmortalWrt.org + +include $(TOPDIR)/rules.mk + +PKG_NAME:=neturl +PKG_VERSION:=1.1-1 +PKG_RELEASE:=3 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://codeload.github.com/golgote/neturl/tar.gz/v$(PKG_VERSION)? +PKG_HASH:=25f3a94ba9f435ef1395555de2bf17d6f934d789fa515ed965405919e42be27b + +PKG_MAINTAINER:=Tianling Shen +PKG_LICENSE:=MIT +PKG_LICNESE_FILES:=LICENSE.txt + +include $(INCLUDE_DIR)/package.mk + +define Package/lua-neturl + SUBMENU:=Lua + SECTION:=lang + CATEGORY:=Languages + TITLE:=URL and Query string parser, builder, normalizer for Lua + URL:=https://github.com/golgote/neturl + DEPENDS:=+lua + PKGARCH:=all +endef + +define Package/lua-neturl/description + This small Lua library provides a few functions to parse URL with + querystring and build new URL easily. +endef + +define Build/Compile +endef + +define Package/lua-neturl/install + $(INSTALL_DIR) $(1)/usr/lib/lua + $(CP) $(PKG_BUILD_DIR)/lib/net/url.lua $(1)/usr/lib/lua/ +endef + +$(eval $(call BuildPackage,lua-neturl)) diff --git a/lua-neturl/patches/010-userinfo-regex.patch b/lua-neturl/patches/010-userinfo-regex.patch new file mode 100644 index 00000000..9dbd91cc --- /dev/null +++ b/lua-neturl/patches/010-userinfo-regex.patch @@ -0,0 +1,20 @@ +--- a/lib/net/url.lua ++++ b/lib/net/url.lua +@@ -340,7 +340,7 @@ function M:setAuthority(authority) + self.password = v + return '' + end) +- if string.find(userinfo, "^[%w%+%.]+$") then ++ if string.find(userinfo, "^[%p%w%+%.]+$") then + self.user = userinfo + else + -- incorrect userinfo +@@ -369,7 +369,7 @@ function M.parse(url) + comp.fragment = v + return '' + end) +- url =url:gsub('^([%w][%w%+%-%.]*)%:', function(v) ++ url =url:gsub('^([%w][%w%+%-%_%.]*)%:', function(v) + comp.scheme = v:lower() + return '' + end) diff --git a/luci-app-advanced b/luci-app-advanced deleted file mode 160000 index 04376920..00000000 --- a/luci-app-advanced +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 043769207e344e113d7676ba761f549eda2cb633 diff --git a/luci-app-advanced/Makefile b/luci-app-advanced/Makefile new file mode 100644 index 00000000..b1083638 --- /dev/null +++ b/luci-app-advanced/Makefile @@ -0,0 +1,43 @@ +# Copyright (C) 2019 sirpdboy +# +# +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/package.mk + +PKG_NAME:=luci-app-advanced +PKG_VERSION:=1.20 +PKG_RELEASE:=20220218 +define Package/$(PKG_NAME) + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=3. Applications + DEPENDS:= + TITLE:=LuCI Support for advanced and filebrowser + PKGARCH:=all +endef + +define Build/Compile +endef + +define Package/$(PKG_NAME)/install + $(INSTALL_DIR) $(1)/usr/lib/lua/luci + $(CP) ./luasrc/* $(1)/usr/lib/lua/luci + + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_CONF) ./root/etc/config/advanced $(1)/etc/config/ + + $(INSTALL_DIR) $(1)/www + cp -pR ./htdocs/* $(1)/www/ + + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) ./root/etc/uci-defaults/* $(1)/etc/uci-defaults/ + + $(INSTALL_DIR) $(1)/bin + $(INSTALL_BIN) ./root/bin/* $(1)/bin/ +endef + +$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/luci-app-advanced/README.md b/luci-app-advanced/README.md new file mode 100644 index 00000000..7f0931a0 --- /dev/null +++ b/luci-app-advanced/README.md @@ -0,0 +1,53 @@ +## 访问数:[![](https://visitor-badge.glitch.me/badge?page_id=sirpdboy-visitor-badge)] [![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ) + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明1.jpg) + +# luci-app-advanced +luci-app-advanced 高级设置,包括smartdns,openclash,防火墙,DHCP等。 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明2.jpg) + + + +## 使用与授权相关说明 + +- 本人开源的所有源码,任何引用需注明本处出处,如需修改二次发布必告之本人,未经许可不得做于任何商用用途。 + + +# My other project + +- 网络速度测试 :https://github.com/sirpdboy/NetSpeedTest + +- 定时设置插件 : https://github.com/sirpdboy/luci-app-autotimeset + +- 关机功能插件 : https://github.com/sirpdboy/luci-app-poweroffdevice + +- opentopd主题 : https://github.com/sirpdboy/luci-theme-opentopd + +- kucat 主题: https://github.com/sirpdboy/luci-theme-kucat + +- 家长控制: https://github.com/sirpdboy/luci-theme-parentcontrol + +- 系统高级设置 : https://github.com/sirpdboy/luci-app-advanced + +- ddns-go动态域名: https://github.com/sirpdboy/luci-app-ddns-go + +- 进阶设置(系统高级设置+主题设置kucat/agron/opentopd): https://github.com/sirpdboy/luci-app-advancedplus + +- 设置向导: https://github.com/sirpdboy/luci-app-wizard + +- 分区扩容: https://github.com/sirpdboy/luci-app-partexp + +- lukcy大吉: https://github.com/sirpdboy/luci-app-lukcy + +## 捐助 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明3.jpg) + +| 图飞了😂 | 图飞了😂 | +| :-----------------: | :-------------: | +|![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/支付宝.png) | ![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/微信.png) | + + + 图飞了😂 + diff --git a/luci-app-advanced/htdocs/luci-static/resources/fileassistant/fb.css b/luci-app-advanced/htdocs/luci-static/resources/fileassistant/fb.css new file mode 100644 index 00000000..75a30f40 --- /dev/null +++ b/luci-app-advanced/htdocs/luci-static/resources/fileassistant/fb.css @@ -0,0 +1,68 @@ +.fb-container { + margin-top: 1rem; +} +.fb-container .cbi-button { + height: 2.6rem; +} +.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 #aaa; +} +.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; + } +} diff --git a/luci-app-advanced/htdocs/luci-static/resources/fileassistant/fb.js b/luci-app-advanced/htdocs/luci-static/resources/fileassistant/fb.js new file mode 100644 index 00000000..eb97f09f --- /dev/null +++ b/luci-app-advanced/htdocs/luci-static/resources/fileassistant/fb.js @@ -0,0 +1,288 @@ +String.prototype.replaceAll = function(search, replacement) { + var target = this; + return target.replace(new RegExp(search, 'g'), replacement); +}; +(function () { + var iwxhr = new XHR(); + var listElem = document.getElementById("list-content"); + listElem.onclick = handleClick; + var currentPath; + var pathElem = document.getElementById("current-path"); + pathElem.onblur = function () { + update_list(this.value.trim()); + }; + pathElem.onkeyup = function (evt) { + if (evt.keyCode == 13) { + this.blur(); + } + }; + function removePath(filename, isdir) { + var c = confirm('你确定要删除 ' + filename + ' 吗?'); + if (c) { + iwxhr.get('/cgi-bin/luci/admin/system/fileassistant/delete', + { + path: concatPath(currentPath, filename), + isdir: isdir + }, + function (x, res) { + if (res.ec === 0) { + refresh_list(res.data, currentPath); + } + }); + } + } + + function installPath(filename, isdir) { + if (isdir === "1") { + alert('这是一个目录,请选择 ipk 文件进行安装!'); + return; + } + var isipk = isIPK(filename); + if (isipk === 0) { + alert('只允许安装 ipk 格式的文件!'); + return; + } + var c = confirm('你确定要安装 ' + filename + ' 吗?'); + if (c) { + iwxhr.get('/cgi-bin/luci/admin/system/fileassistant/install', + { + filepath: concatPath(currentPath, filename), + isdir: isdir + }, + function (x, res) { + if (res.ec === 0) { + location.reload(); + alert('安装成功!'); + } else { + alert('安装失败,请检查文件格式!'); + } + }); + } + } + + function isIPK(filename) { + var index= filename.lastIndexOf("."); + var ext = filename.substr(index+1); + if (ext === 'ipk') { + return 1; + } else { + return 0; + } + } + + function renamePath(filename) { + var newname = prompt('请输入新的文件名:', filename); + if (newname) { + newname = newname.trim(); + if (newname != filename) { + var newpath = concatPath(currentPath, newname); + iwxhr.get('/cgi-bin/luci/admin/system/fileassistant/rename', + { + filepath: concatPath(currentPath, filename), + newpath: newpath + }, + function (x, res) { + if (res.ec === 0) { + refresh_list(res.data, currentPath); + } + } + ); + } + } + } + + function openpath(filename, dirname) { + dirname = dirname || currentPath; + window.open('/cgi-bin/luci/admin/system/fileassistant/open?path=' + + encodeURIComponent(dirname) + '&filename=' + + encodeURIComponent(filename)); + } + + function getFileElem(elem) { + if (elem.className.indexOf('-icon') > -1) { + return elem; + } + else if (elem.parentNode.className.indexOf('-icon') > -1) { + return elem.parentNode; + } + } + + function concatPath(path, filename) { + if (path === '/') { + return path + filename; + } + else { + return path.replace(/\/$/, '') + '/' + filename; + } + } + + function handleClick(evt) { + var targetElem = evt.target; + var infoElem; + if (targetElem.className.indexOf('cbi-button-remove') > -1) { + infoElem = targetElem.parentNode.parentNode; + removePath(infoElem.dataset['filename'] , infoElem.dataset['isdir']) + } + else if (targetElem.className.indexOf('cbi-button-install') > -1) { + infoElem = targetElem.parentNode.parentNode; + installPath(infoElem.dataset['filename'] , infoElem.dataset['isdir']) + } + else if (targetElem.className.indexOf('cbi-button-edit') > -1) { + renamePath(targetElem.parentNode.parentNode.dataset['filename']); + } + else if (targetElem = getFileElem(targetElem)) { + if (targetElem.className.indexOf('parent-icon') > -1) { + update_list(currentPath.replace(/\/[^/]+($|\/$)/, '')); + } + else if (targetElem.className.indexOf('file-icon') > -1) { + openpath(targetElem.parentNode.dataset['filename']); + } + else if (targetElem.className.indexOf('link-icon') > -1) { + infoElem = targetElem.parentNode; + var filepath = infoElem.dataset['linktarget']; + if (filepath) { + if (infoElem.dataset['isdir'] === "1") { + update_list(filepath); + } + else { + var lastSlash = filepath.lastIndexOf('/'); + openpath(filepath.substring(lastSlash + 1), filepath.substring(0, lastSlash)); + } + } + } + else if (targetElem.className.indexOf('folder-icon') > -1) { + update_list(concatPath(currentPath, targetElem.parentNode.dataset['filename'])) + } + } + } + function refresh_list(filenames, path) { + var listHtml = ''; + if (path !== '/') { + listHtml += ''; + } + if (filenames) { + for (var i = 0; i < filenames.length; i++) { + var line = filenames[i]; + if (line) { + var f = line.match(/(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+([\S\s]+)/); + var isLink = f[1][0] === 'z' || f[1][0] === 'l' || f[1][0] === 'x'; + var o = { + displayname: f[9], + filename: isLink ? f[9].split(' -> ')[0] : f[9], + perms: f[1], + date: f[7] + ' ' + f[6] + ' ' + f[8], + size: f[5], + owner: f[3], + icon: (f[1][0] === 'd') ? "folder-icon" : (isLink ? "link-icon" : "file-icon") + }; + + var install_btn = ' '; + var index= o.filename.lastIndexOf("."); + var ext = o.filename.substr(index+1); + if (ext === 'ipk') { + install_btn = ' '; + } + + listHtml += '' + + '' + + + '' + + '' + + '' + + '' + + ''; + } + } + } + listHtml += "
..返回上级目录
' + + '' + o.displayname + '' + + ''+o.date+''+o.size+''+o.perms+'\ + \ + ' + + install_btn + + '
"; + listElem.innerHTML = listHtml; + } + function update_list(path, opt) { + opt = opt || {}; + path = concatPath(path, ''); + if (currentPath != path) { + iwxhr.get('/cgi-bin/luci/admin/system/fileassistant/list', + {path: path}, + function (x, res) { + if (res.ec === 0) { + refresh_list(res.data, path); + } + else { + refresh_list([], path); + } + } + ); + if (!opt.popState) { + history.pushState({path: path}, null, '?path=' + path); + } + currentPath = path; + pathElem.value = currentPath; + } + }; + + var uploadToggle = document.getElementById('upload-toggle'); + var uploadContainer = document.getElementById('upload-container'); + var isUploadHide = true; + uploadToggle.onclick = function() { + if (isUploadHide) { + uploadContainer.style.display = 'inline-flex'; + } + else { + uploadContainer.style.display = 'none'; + } + isUploadHide = !isUploadHide; + }; + var uploadBtn = uploadContainer.getElementsByClassName('cbi-input-apply')[0]; + uploadBtn.onclick = function (evt) { + var uploadinput = document.getElementById('upload-file'); + var fullPath = uploadinput.value; + if (!fullPath) { + evt.preventDefault(); + } + else { + var formData = new FormData(); + var startIndex = (fullPath.indexOf('\\') >= 0 ? fullPath.lastIndexOf('\\') : fullPath.lastIndexOf('/')); + formData.append('upload-filename', fullPath.substring(startIndex + 1)); + formData.append('upload-dir', concatPath(currentPath, '')); + formData.append('upload-file', uploadinput.files[0]); + var xhr = new XMLHttpRequest(); + xhr.open("POST", "/cgi-bin/luci/admin/system/fileassistant/upload", true); + xhr.onload = function() { + if (xhr.status == 200) { + var res = JSON.parse(xhr.responseText); + refresh_list(res.data, currentPath); + uploadinput.value = ''; + } + else { + alert('上传失败,请稍后再试...'); + } + }; + xhr.send(formData); + } + }; + + document.addEventListener('DOMContentLoaded', function(evt) { + var initPath = '/'; + if (/path=([/\w]+)/.test(location.search)) { + initPath = RegExp.$1; + } + update_list(initPath, {popState: true}); + }); + window.addEventListener('popstate', function (evt) { + var path = '/'; + if (evt.state && evt.state.path) { + path = evt.state.path; + } + update_list(path, {popState: true}); + }); + +})(); diff --git a/luci-app-advanced/htdocs/luci-static/resources/fileassistant/file-icon.png b/luci-app-advanced/htdocs/luci-static/resources/fileassistant/file-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f156dc1c7ce823b64401a62e249a377a52b20518 GIT binary patch literal 1098 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD~={fiXV7C&U%V9R;)t0gq*U=0MX+ zN`m}?85o(ESyC4w|-+%u4`_J-}sTczTlbWZCV@SoVw>LwB4?74P_~>1@e8=wH z&fU=qckC8l&g%8~Z~JzK84Nd5-}BA*yTAO~_e*zul#cA)^xP@%bNkV}@@1=Sm_nnE zsJyDOVK&^ans!Nao=4-k^E=Evcdue#I_C3e(OiQAVx|XrN*fszgEv38bVX+ZBLk<7 zgTLLX>}*a2RcCnDxd+V)Vr>uTRp^EDZ{YS5zRLWD zX+K+oZ^7&}j0wVDUNLYaA7pxy&DgP{)_cNgRs|`Y0}Vb07X9Dsw#Gcb+lVpm)>U4M z$qW{)40rHDoarZKhfLm@t>etnLD$M)VPGsasI53}8!m{U0}y(IC{&iZ7U@Z(z4w(uZ zdD~j}0zR}v9-Sy-)WBcf^Xq4217k{qqRfJRo(bPOX3BrNq`T>@q1(e(-elb6Mw<&;$T^(=;mp literal 0 HcmV?d00001 diff --git a/luci-app-advanced/htdocs/luci-static/resources/fileassistant/folder-icon.png b/luci-app-advanced/htdocs/luci-static/resources/fileassistant/folder-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1370df3ad554fcb4d11aa0a72510dd3011cb816b GIT binary patch literal 1292 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD~={fpJ5CPlzj!I|_zS2>kviS_E`% ze@T#EFaskKGYcy_2PYRdFCV{vkf@Z5tfH!#x`w8fw!Wc}v8kDbjjg?lo4bdnkDq@~ zNLWNlrlO|7@I&aaqIS-d-oqce)9C$^A|5)y?Oio-m(|)^6tj@ffbcxT$swdA#S9dDM(%YwA z=;`}t7X5o_cb4ab+U_%F*2&+yf4uTu`aSv6Ja0aq(Nkn#*l^0gUv=J|pA)vGDNXH| z5%v0TKlc`43d@{VRt#TOUdn344I z@hKL)O`5@Fmn5gzE%#Z_?rWK(J~!oMUO$Ulc&~%n!wIve^Uc&^UG?bc&k5U^ru=(j z@`QzLrH*H?*MqJt41c#ox+Tos!|->br&GfhO@k9=UK}j*vdPWQ;8$FBYF>a>4u(+{}*QfsHlKk>Zp>C@i+ z=-vG8o4>hkyxc=p^WV?EPtm_nYx(`x^Fv|LOMcFc{wo~4#ynGFUisp>jo<(Kx0>Jm zv2ORj?3$<7m1}nIe$U6#pOIMcz^`O^KR5$71pQ;2AX!`B8su&V67Y2Ob6Mw<&;$S{ CYKQCq literal 0 HcmV?d00001 diff --git a/luci-app-advanced/htdocs/luci-static/resources/fileassistant/link-icon.png b/luci-app-advanced/htdocs/luci-static/resources/fileassistant/link-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..03cc82cdfabae20c1036959e6244ba5039f74697 GIT binary patch literal 1622 zcmV-c2C4apP) zTWB0r7{`CvG(@YF+Ik_0m)2IR7C|eeQV{DEMU;wAE9isZi=a^9kCznM9+=gj%O9~|iA?Ch8G|LvKX zvojMgeDf4=0GI-r5w@eiYrtSt1E87hgb!HSz5)jOD;Wlz+y%TJx`-UC0475hkrF!y z|EbQ~jx;J63Y}aZx_|<#Gy(i^GIRk&FaiAWLFfXCUp~Y|grgsLkMIX~ z;?`HLNi`mIEI~P-w`uS~5@_sDlIxvK}}VL6M_I9?R1z#|E36NA7Z}R<1N{Sh4(!8SZE_Zv$+?YKISw53yv=Fgxz?YfS}b~!eD<6M zUIvzgC^i9NnF#<`1RT!sqAzf}3!@y@68?A#fUP-Rup1cgJrW8T0e&Wu8Q@D{=g)An zg;9=J!fyf$;||)obvywqt6(s+5mWe0fM_pZ#`C~v zpbp_T8^|u;oGv&BT8Vzz&#)Uq{8MH4XMJzb1n|o+)rEhkwO#LbAWQZYKCXyKonflm z=l{g{FW-EBi)aFPpjY8%_>{l|C`qrw&+sLI2~dJi;b-`ezyv5r=qGj$KYod<9td;+`)+|mA@Ccs=$3co8R zz=fy^A54ID)P)ZwK!(cj!2|%s;e!dFI(*PAfco%3uK*T)3ylI;_-$wtpvv$^sag1- zOMoFP{5fb5z`~yg4FXvB3y``17Je5}7Qn(6kg5O{zK|3Ju<&z`ngAAlPErye_V5=2 zdw{79+n)kH0xl}~9=SFI|p1p)eSSG!gf{{8p~KT1*%U@6r+$1wTuAq@fk!ri&!6BXe@8Ui$d&A4Cm>;pC7 zLmC1Ai~;vjUIJC&LplOLc?r~o4`~Si#U)S~KBOlAiUmAeTUO_>isu&|L!c z;X~R2!2A+e_$^Ww0M1J=*82N5Sor^=<(EK?0c&wz$9jL}ex1=U17tL@@aLdO0HXsY zfO1R#<(L4P>u0=T5&T2kj}++9rF zkmTW&Ey!+=+&13^jILY^9HaXf|B6f!uUrnC6BKs_+0Bi{T;4$TA=?qEz)yt*{s1fq zRAXJ)jQlqAdji$S!@>faz+UXMP|9P#zsR3K(DUg(qYwDLOM&fe9Jn(`rS)I{compN zKBilPRNBTS@;x?vm_@O**oj05{{=dgd%", "/") + path = path:gsub(" ", "\ ") + local success + if isdir then + success = os.execute('rm -r "'..path..'"') + else + success = os.remove(path) + end + list_response(nixio.fs.dirname(path), success) +end + +function fileassistant_rename() + local filepath = luci.http.formvalue("filepath") + local newpath = luci.http.formvalue("newpath") + local success = os.execute('mv "'..filepath..'" "'..newpath..'"') + list_response(nixio.fs.dirname(filepath), success) +end + +function fileassistant_install() + local filepath = luci.http.formvalue("filepath") + local isdir = luci.http.formvalue("isdir") + local ext = filepath:match(".+%.(%w+)$") + filepath = filepath:gsub("<>", "/") + filepath = filepath:gsub(" ", "\ ") + local success + if isdir == "1" then + success = false + elseif ext == "ipk" then + success = installIPK(filepath) + else + success = false + end + list_response(nixio.fs.dirname(filepath), success) +end + +function installIPK(filepath) + luci.sys.exec('opkg --force-depends install "'..filepath..'"') + luci.sys.exec('rm -rf /tmp/luci-*') + return true; +end + +function fileassistant_upload() + local filecontent = luci.http.formvalue("upload-file") + local filename = luci.http.formvalue("upload-filename") + local uploaddir = luci.http.formvalue("upload-dir") + local filepath = uploaddir..filename + + local fp + luci.http.setfilehandler( + function(meta, chunk, eof) + if not fp and meta and meta.name == "upload-file" then + fp = io.open(filepath, "w") + end + if fp and chunk then + fp:write(chunk) + end + if fp and eof then + fp:close() + end + end + ) + + list_response(uploaddir, true) +end + +function scandir(directory) + local i, t, popen = 0, {}, io.popen + + local pfile = popen("ls -lh \""..directory.."\" | egrep '^d' ; ls -lh \""..directory.."\" | egrep -v '^d|^l'") + for fileinfo in pfile:lines() do + i = i + 1 + t[i] = fileinfo + end + pfile:close() + pfile = popen("ls -lh \""..directory.."\" | egrep '^l' ;") + for fileinfo in pfile:lines() do + i = i + 1 + linkindex, _, linkpath = string.find(fileinfo, "->%s+(.+)$") + local finalpath; + if string.sub(linkpath, 1, 1) == "/" then + finalpath = linkpath + else + finalpath = nixio.fs.realpath(directory..linkpath) + end + local linktype; + if not finalpath then + finalpath = linkpath; + linktype = 'x' + elseif nixio.fs.stat(finalpath, "type") == "dir" then + linktype = 'z' + else + linktype = 'l' + end + fileinfo = string.sub(fileinfo, 2, linkindex - 1) + fileinfo = linktype..fileinfo.."-> "..finalpath + t[i] = fileinfo + end + pfile:close() + return t +end + +MIME_TYPES = { + ["txt"] = "text/plain"; + ["conf"] = "text/plain"; + ["ovpn"] = "text/plain"; + ["log"] = "text/plain"; + ["js"] = "text/javascript"; + ["json"] = "application/json"; + ["css"] = "text/css"; + ["htm"] = "text/html"; + ["html"] = "text/html"; + ["patch"] = "text/x-patch"; + ["c"] = "text/x-csrc"; + ["h"] = "text/x-chdr"; + ["o"] = "text/x-object"; + ["ko"] = "text/x-object"; + + ["bmp"] = "image/bmp"; + ["gif"] = "image/gif"; + ["png"] = "image/png"; + ["jpg"] = "image/jpeg"; + ["jpeg"] = "image/jpeg"; + ["svg"] = "image/svg+xml"; + + ["zip"] = "application/zip"; + ["pdf"] = "application/pdf"; + ["xml"] = "application/xml"; + ["xsl"] = "application/xml"; + ["doc"] = "application/msword"; + ["ppt"] = "application/vnd.ms-powerpoint"; + ["xls"] = "application/vnd.ms-excel"; + ["odt"] = "application/vnd.oasis.opendocument.text"; + ["odp"] = "application/vnd.oasis.opendocument.presentation"; + ["pl"] = "application/x-perl"; + ["sh"] = "application/x-shellscript"; + ["php"] = "application/x-php"; + ["deb"] = "application/x-deb"; + ["iso"] = "application/x-cd-image"; + ["tgz"] = "application/x-compressed-tar"; + + ["mp3"] = "audio/mpeg"; + ["ogg"] = "audio/x-vorbis+ogg"; + ["wav"] = "audio/x-wav"; + + ["mpg"] = "video/mpeg"; + ["mpeg"] = "video/mpeg"; + ["avi"] = "video/x-msvideo"; +} + +function to_mime(filename) + if type(filename) == "string" then + local ext = filename:match("[^%.]+$") + + if ext and MIME_TYPES[ext:lower()] then + return MIME_TYPES[ext:lower()] + end + end + + return "application/octet-stream" +end diff --git a/luci-app-advanced/luasrc/model/cbi/advanced.lua b/luci-app-advanced/luasrc/model/cbi/advanced.lua new file mode 100644 index 00000000..0cc14c67 --- /dev/null +++ b/luci-app-advanced/luasrc/model/cbi/advanced.lua @@ -0,0 +1,340 @@ +local e=require"nixio.fs" +local t=require"luci.sys" +local t=luci.model.uci.cursor() +m=Map("advanced",translate("高级进阶设置"),translate("配置文档是直接编辑的除非你知道自己在干什么,否则请不要轻易修改这些配置文档。配置不正确可能会导致不能开机等错误。
")) +m.apply_on_parse=true +s=m:section(TypedSection,"advanced") +s.anonymous=true + +if nixio.fs.access("/etc/dnsmasq.conf")then + +s:tab("dnsmasqconf",translate("dnsmasq"),translate("本页是配置/etc/dnsmasq.conf的文档内容。应用保存后自动重启生效")) + +conf=s:taboption("dnsmasqconf",Value,"dnsmasqconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/dnsmasq.conf")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/dnsmasq.conf",t) +if(luci.sys.call("cmp -s /tmp/dnsmasq.conf /etc/dnsmasq.conf")==1)then +e.writefile("/etc/dnsmasq.conf",t) +luci.sys.call("/etc/init.d/dnsmasq restart >/dev/null") +end +e.remove("/tmp/dnsmasq.conf") +end +end +end +if nixio.fs.access("/etc/config/network")then +s:tab("netwrokconf",translate("网络"),translate("本页是配置/etc/config/network包含网络配置文档内容。应用保存后自动重启生效")) +conf=s:taboption("netwrokconf",Value,"netwrokconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/network")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/network",t) +if(luci.sys.call("cmp -s /tmp/network /etc/config/network")==1)then +e.writefile("/etc/config/network",t) +luci.sys.call("/etc/init.d/network restart >/dev/null") +end +e.remove("/tmp/network") +end +end +end +if nixio.fs.access("/etc/config/wireless")then +s:tab("wirelessconf",translate("无线"), translate("本页是/etc/config/wireless的配置文件内容,应用保存后自动重启生效.")) + +conf=s:taboption("wirelessconf",Value,"wirelessconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/wireless")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/etc/config/wireless.tmp",t) +if(luci.sys.call("cmp -s /etc/config/wireless.tmp /etc/config/wireless")==1)then +e.writefile("/etc/config/wireless",t) +luci.sys.call("wifi reload >/dev/null &") +end +e.remove("/tmp//tmp/wireless.tmp") +end +end +end + +if nixio.fs.access("/etc/hosts")then +s:tab("hostsconf",translate("hosts"),translate("本页是配置/etc/hosts的文档内容。应用保存后自动重启生效")) + +conf=s:taboption("hostsconf",Value,"hostsconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/hosts")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/hosts.tmp",t) +if(luci.sys.call("cmp -s /tmp/hosts.tmp /etc/hosts")==1)then +e.writefile("/etc/hosts",t) +luci.sys.call("/etc/init.d/dnsmasq restart >/dev/null") +end +e.remove("/tmp/hosts.tmp") +end +end +end + +if nixio.fs.access("/etc/config/arpbind")then +s:tab("arpbindconf",translate("ARP绑定"),translate("本页是配置/etc/config/arpbind包含APR绑定MAC地址文档内容。应用保存后自动重启生效")) +conf=s:taboption("arpbindconf",Value,"arpbindconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/arpbind")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/arpbind",t) +if(luci.sys.call("cmp -s /tmp/arpbind /etc/config/arpbind")==1)then +e.writefile("/etc/config/arpbind",t) +luci.sys.call("/etc/init.d/arpbind restart >/dev/null") +end +e.remove("/tmp/arpbind") +end +end +end + +if nixio.fs.access("/etc/config/firewall")then +s:tab("firewallconf",translate("防火墙"),translate("本页是配置/etc/config/firewall包含防火墙协议设置文档内容。应用保存后自动重启生效")) +conf=s:taboption("firewallconf",Value,"firewallconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/firewall")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/firewall",t) +if(luci.sys.call("cmp -s /tmp/firewall /etc/config/firewall")==1)then +e.writefile("/etc/config/firewall",t) +luci.sys.call("/etc/init.d/firewall restart >/dev/null") +end +e.remove("/tmp/firewall") +end +end +end + +if nixio.fs.access("/etc/config/mwan3")then +s:tab("mwan3conf",translate("负载均衡"),translate("本页是配置/etc/config/mwan3包含负载均衡设置文档内容。应用保存后自动重启生效")) +conf=s:taboption("mwan3conf",Value,"mwan3conf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/mwan3")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/mwan3",t) +if(luci.sys.call("cmp -s /tmp/mwan3 /etc/config/mwan3")==1)then +e.writefile("/etc/config/mwan3",t) +luci.sys.call("/etc/init.d/mwan3 restart >/dev/null") +end +e.remove("/tmp/mwan3") +end +end +end +if nixio.fs.access("/etc/config/dhcp")then +s:tab("dhcpconf",translate("DHCP"),translate("本页是配置/etc/config/DHCP包含机器名等设置文档内容。应用保存后自动重启生效")) +conf=s:taboption("dhcpconf",Value,"dhcpconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/dhcp")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/dhcp",t) +if(luci.sys.call("cmp -s /tmp/dhcp /etc/config/dhcp")==1)then +e.writefile("/etc/config/dhcp",t) +luci.sys.call("/etc/init.d/network restart >/dev/null") +end +e.remove("/tmp/dhcp") +end +end +end + +if nixio.fs.access("/etc/config/ddns")then +s:tab("ddnsconf",translate("DDNS"),translate("本页是配置/etc/config/ddns包含动态域名设置文档内容。应用保存后自动重启生效")) +conf=s:taboption("ddnsconf",Value,"ddnsconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/ddns")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/ddns",t) +if(luci.sys.call("cmp -s /tmp/ddns /etc/config/ddns")==1)then +e.writefile("/etc/config/ddns",t) +luci.sys.call("/etc/init.d/ddns restart >/dev/null") +end +e.remove("/tmp/ddns") +end +end +end + +if nixio.fs.access("/etc/config/parentcontrol")then +s:tab("parentcontrolconf",translate("家长控制"),translate("本页是配置/etc/config/parentcontrol包含家长控制配置文档内容。应用保存后自动重启生效")) +conf=s:taboption("parentcontrolconf",Value,"parentcontrolconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/parentcontrol")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/parentcontrol",t) +if(luci.sys.call("cmp -s /tmp/parentcontrol /etc/config/parentcontrol")==1)then +e.writefile("/etc/config/parentcontrol",t) +luci.sys.call("/etc/init.d/parentcontrol restart >/dev/null") +end +e.remove("/tmp/parentcontrol") +end +end +end + +if nixio.fs.access("/etc/config/autotimeset")then +s:tab("autotimesetconf",translate("定时设置"),translate("本页是配置/etc/config/autotimeset包含定时设置任务配置文档内容。应用保存后自动重启生效")) +conf=s:taboption("autotimesetconf",Value,"autotimesetconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/autotimeset")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/autotimeset",t) +if(luci.sys.call("cmp -s /tmp/autotimeset /etc/config/autotimeset")==1)then +e.writefile("/etc/config/autotimeset",t) +luci.sys.call("/etc/init.d/autotimeset restart >/dev/null") +end +e.remove("/tmp/autotimeset") +end +end +end + +if nixio.fs.access("/etc/config/wolplus")then +s:tab("wolplusconf",translate("网络唤醒"),translate("本页是配置/etc/config/wolplus包含网络唤醒配置文档内容。应用保存后自动重启生效")) +conf=s:taboption("wolplusconf",Value,"wolplusconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/wolplus")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/wolplus",t) +if(luci.sys.call("cmp -s /tmp/wolplus /etc/config/wolplus")==1)then +e.writefile("/etc/config/wolplus",t) +luci.sys.call("/etc/init.d/wolplus restart >/dev/null") +end +e.remove("/tmp/wolplus") +end +end +end + +if nixio.fs.access("/etc/config/smartdns")then +s:tab("smartdnsconf",translate("SMARTDNS"),translate("本页是配置/etc/config/smartdns包含smartdns配置文档内容。应用保存后自动重启生效")) +conf=s:taboption("smartdnsconf",Value,"smartdnsconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/smartdns")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/smartdns",t) +if(luci.sys.call("cmp -s /tmp/smartdns /etc/config/smartdns")==1)then +e.writefile("/etc/config/smartdns",t) +luci.sys.call("/etc/init.d/smartdns restart >/dev/null") +end +e.remove("/tmp/smartdns") +end +end +end + +if nixio.fs.access("/etc/config/bypass")then +s:tab("bypassconf",translate("BYPASS"),translate("本页是配置/etc/config/bypass包含bypass配置文档内容。应用保存后自动重启生效")) +conf=s:taboption("bypassconf",Value,"bypassconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/bypass")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/bypass",t) +if(luci.sys.call("cmp -s /tmp/bypass /etc/config/bypass")==1)then +e.writefile("/etc/config/bypass",t) +luci.sys.call("/etc/init.d/bypass restart >/dev/null") +end +e.remove("/tmp/bypass") +end +end +end + +if nixio.fs.access("/etc/config/openclash")then +s:tab("openclashconf",translate("openclash"),translate("本页是配置/etc/config/openclash的文档内容。应用保存后自动重启生效")) +conf=s:taboption("openclashconf",Value,"openclashconf",nil,translate("开头的数字符号(#)或分号的每一行(;)被视为注释;删除(;)启用指定选项。")) +conf.template="cbi/tvalue" +conf.rows=20 +conf.wrap="off" +conf.cfgvalue=function(t,t) +return e.readfile("/etc/config/openclash")or"" +end +conf.write=function(a,a,t) +if t then +t=t:gsub("\r\n?","\n") +e.writefile("/tmp/openclash",t) +if(luci.sys.call("cmp -s /tmp/openclash /etc/config/openclash")==1)then +e.writefile("/etc/config/openclash",t) +luci.sys.call("/etc/init.d/openclash restart >/dev/null") +end +e.remove("/tmp/openclash") +end +end +end + +return m diff --git a/luci-app-advanced/luasrc/view/fileassistant.htm b/luci-app-advanced/luasrc/view/fileassistant.htm new file mode 100644 index 00000000..09430418 --- /dev/null +++ b/luci-app-advanced/luasrc/view/fileassistant.htm @@ -0,0 +1,20 @@ +<%+header%> + + +

文件管理【集成上传删除及安装,非专业人员请谨慎操作】

+
+ +
+
文件列表
+ +
+
+ + +
+
+
+ + + +<%+footer%> diff --git a/luci-app-advanced/luasrc/view/filebrowser.htm b/luci-app-advanced/luasrc/view/filebrowser.htm new file mode 100644 index 00000000..d11028b4 --- /dev/null +++ b/luci-app-advanced/luasrc/view/filebrowser.htm @@ -0,0 +1,20 @@ +<%+header%> + + +

文件管理

+
+ +
+
文件列表:
+ +
+
+ + +
+
+
+ + + +<%+footer%> diff --git a/luci-app-advanced/root/bin/ipmode4 b/luci-app-advanced/root/bin/ipmode4 new file mode 100644 index 00000000..de44affb --- /dev/null +++ b/luci-app-advanced/root/bin/ipmode4 @@ -0,0 +1,26 @@ +#!/bin/sh +uci set network.@globals[0].ula_prefix='' +uci set network.lan.delegate='0' +uci set network.wan.mtu=1460 +uci set network.wan.metric='41' +uci set network.wan.delegate='0' +uci set network.wan.ipv6='0' +uci commit network +uci set dhcp.@dnsmasq[0].cachesize='15000' +uci set dhcp.@dnsmasq[0].min_ttl='3600' +uci set dhcp.@dnsmasq[0].filter_aaaa='1' +uci set dhcp.@dnsmasq[0].localservice='0' +uci set dhcp.@dnsmasq[0].nonwildcard='0' +uci set dhcp.@dnsmasq[0].rebind_protection='0' +uci set dhcp.@dnsmasq[0].noresolv='0' +uci set dhcp.lan.ra='' +uci set dhcp.lan.ndp='' +uci set dhcp.lan.dhcpv6='' +uci set dhcp.lan.ignore='0' +uci set dhcp.lan.ra_management='1' +uci set dhcp.lan.ra_default='1' +uci set dhcp.lan.force='1' +uci commit dhcp +sed -i "/list server/d" /etc/config/dhcp +/etc/init.d/network restart +/etc/init.d/dnsmasq restart diff --git a/luci-app-advanced/root/bin/ipmode6 b/luci-app-advanced/root/bin/ipmode6 new file mode 100644 index 00000000..1c4e5a68 --- /dev/null +++ b/luci-app-advanced/root/bin/ipmode6 @@ -0,0 +1,27 @@ +#!/bin/sh + +uci set dhcp.@dnsmasq[0].cachesize='15000' +uci set dhcp.@dnsmasq[0].min_ttl='3600' +uci set dhcp.@dnsmasq[0].filter_aaaa='0' +uci set dhcp.@dnsmasq[0].localservice='0' +uci set dhcp.@dnsmasq[0].nonwildcard='0' +uci set dhcp.@dnsmasq[0].rebind_protection='0' +uci set dhcp.@dnsmasq[0].noresolv='1' +uci set dhcp.lan.ra='server' +uci set dhcp.lan.ndp='' +uci set dhcp.lan.dhcpv6='' +uci set dhcp.lan.ignore='0' +uci set dhcp.lan.ra_management='1' +uci set dhcp.lan.ra_default='1' +uci set dhcp.lan.force='1' +uci commit dhcp +uci set network.@globals[0].ula_prefix='' +uci set network.lan.delegate='0' +uci set network.wan.mtu=1460 +uci set network.wan.metric='41' +uci set network.wan.delegate='0' +uci set network.wan.ipv6='auto' +uci commit network +sed -i "/list server/d" /etc/config/dhcp +/etc/init.d/network restart +/etc/init.d/dnsmasq restart diff --git a/luci-app-advanced/root/bin/normalmode b/luci-app-advanced/root/bin/normalmode new file mode 100644 index 00000000..8d714670 --- /dev/null +++ b/luci-app-advanced/root/bin/normalmode @@ -0,0 +1,30 @@ +#!/bin/sh + +uci set system.@system[0].hostname="Openwrt" +uci commit + +cat > /etc/config/network <> /etc/firewall.user +echo "iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53" >> /etc/firewall.user +reboot diff --git a/luci-app-advanced/root/bin/nuc b/luci-app-advanced/root/bin/nuc new file mode 100644 index 00000000..587e4ae5 --- /dev/null +++ b/luci-app-advanced/root/bin/nuc @@ -0,0 +1,80 @@ +#!/bin/sh +ip=/usr/sbin/ip +vconfig=/sbin/vconfig +ifconfig=/sbin/ifconfig + +uci set system.@system[0].hostname="Openwrt" +uci commit +cat > /etc/config/network <> /etc/firewall.user +reboot \ No newline at end of file diff --git a/luci-app-advanced/root/etc/config/advanced b/luci-app-advanced/root/etc/config/advanced new file mode 100644 index 00000000..2ed8a3c1 --- /dev/null +++ b/luci-app-advanced/root/etc/config/advanced @@ -0,0 +1,2 @@ +config advanced + option enabled '1' diff --git a/luci-app-advanced/root/etc/uci-defaults/40_luci-fb b/luci-app-advanced/root/etc/uci-defaults/40_luci-fb new file mode 100644 index 00000000..ee5f1336 --- /dev/null +++ b/luci-app-advanced/root/etc/uci-defaults/40_luci-fb @@ -0,0 +1,7 @@ +#!/bin/sh + +ver=$(date +%s) +sed -i "s/@ver/$ver/g" /usr/lib/lua/luci/view/filebrowser.htm + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/luci-app-advanced/root/usr/share/rpcd/acl.d/luci-app-advanced.json b/luci-app-advanced/root/usr/share/rpcd/acl.d/luci-app-advanced.json new file mode 100644 index 00000000..8cb0ef85 --- /dev/null +++ b/luci-app-advanced/root/usr/share/rpcd/acl.d/luci-app-advanced.json @@ -0,0 +1,11 @@ +{ + "luci-app-advanced": { + "description": "Grant UCI access for luci-app-advanced", + "read": { + "uci": [ "advanced" ] + }, + "write": { + "uci": [ "advanced" ] + } + } +} diff --git a/luci-app-aliddns b/luci-app-aliddns deleted file mode 160000 index 560350b1..00000000 --- a/luci-app-aliddns +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 560350b1cb330d1cd1b7f6b72ecef63ff4ea093e diff --git a/luci-app-aliddns/LICENSE b/luci-app-aliddns/LICENSE new file mode 100644 index 00000000..e09a55e3 --- /dev/null +++ b/luci-app-aliddns/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 chenhw2 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/luci-app-aliddns/Makefile b/luci-app-aliddns/Makefile new file mode 100644 index 00000000..356f58d7 --- /dev/null +++ b/luci-app-aliddns/Makefile @@ -0,0 +1,84 @@ +# +# Copyright (C) 2018-2021 chenhw2 +# +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-aliddns +PKG_VERSION:=0.4.0 +PKG_RELEASE:=1 + +PKG_LICENSE:=MIT +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=chenhw2 + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/luci-app-aliddns + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=3. Applications + TITLE:=LuCI Support for aliddns + PKGARCH:=all + DEPENDS:=+openssl-util +curl +endef + +define Package/luci-app-aliddns/description + LuCI Support for ALiDDNS. +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-aliddns/postinst +#!/bin/sh +if [ -z "$${IPKG_INSTROOT}" ]; then + if [ -f /etc/uci-defaults/luci-aliddns ]; then + ( . /etc/uci-defaults/luci-aliddns ) && \ + rm -f /etc/uci-defaults/luci-aliddns + fi + rm -rf /tmp/luci-indexcache /tmp/luci-modulecache +fi +exit 0 +endef + +define Package/luci-app-aliddns/prerm +#!/bin/sh +/etc/init.d/aliddns stop +exit 0 +endef + +define Package/luci-app-aliddns/conffiles +/etc/config/aliddns +endef + +define Package/luci-app-aliddns/install + $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n + $(INSTALL_DATA) $(PKG_BUILD_DIR)/aliddns.*.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/aliddns + $(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/aliddns $(1)/etc/config/aliddns + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/root/etc/init.d/aliddns $(1)/etc/init.d/aliddns + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) ./files/root/etc/uci-defaults/luci-aliddns $(1)/etc/uci-defaults/luci-aliddns + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) ./files/root/usr/sbin/aliddns $(1)/usr/sbin/aliddns +endef + +$(eval $(call BuildPackage,luci-app-aliddns)) diff --git a/luci-app-aliddns/README.md b/luci-app-aliddns/README.md new file mode 100644 index 00000000..62ed84d4 --- /dev/null +++ b/luci-app-aliddns/README.md @@ -0,0 +1,68 @@ +# luci-app-aliddns +LEDE/OpenWrt LuCI for AliDDNS +=== + +简介 +--- + +本软件包是 AliDDNS 的 LuCI 控制界面, + +软件包文件结构: +``` +/ +├── etc/ +│   ├── config/ +│   │   └── aliddns // UCI 配置文件 +│   │── init.d/ +│   │   └── aliddns // init 脚本 +│   └── uci-defaults/ +│      └── luci-aliddns // uci-defaults 脚本 +└── usr/ + ├── sbin/ + │   └── aliddns // 主程序 + └── lib/ + └── lua/ + └── luci/ // LuCI 部分 + ├── controller/ + │   └── aliddns.lua // LuCI 菜单配置 + ├── i18n/ // LuCI 语言文件目录 + │   └── aliddns.zh-cn.lmo + └── model/ + └── cbi/ + └── aliddns.lua // LuCI 基本设置 +``` + +依赖 +--- + +软件包的正常使用需要依赖 `openssl-util` 和 `curl`. + +配置 +--- + +软件包的配置文件路径: `/etc/config/aliddns` +此文件为 UCI 配置文件, 配置方式可参考 [Wiki][uci] + +编译 +--- + +从 LEDE 的 [SDK][lede-sdk] 编译 +```bash +# 解压下载好的 SDK +tar axvf lede-sdk-17.01.*-ar71xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64.tar.xz +cd lede-sdk-17.01.*-ar71xx-* +# Clone 项目 +mkdir -p package/feeds +git clone https://github.com/chenhw2/luci-app-aliddns.git package/feeds/luci-app-aliddns +# 编译 po2lmo (如果有po2lmo可跳过) +pushd package/feeds/luci-app-aliddns/tools/po2lmo +make && sudo make install +popd +# 选择要编译的包 LuCI -> 3. Applications +make menuconfig +# 开始编译 +make package/feeds/luci-app-aliddns/compile V=s +``` + + [lede-sdk]: https://lede-project.org/docs/guide-developer/compile_packages_for_lede_with_the_sdk + [uci]: https://lede-project.org/docs/user-guide/introduction_to_lede_configuration diff --git a/luci-app-aliddns/files/luci/controller/aliddns.lua b/luci-app-aliddns/files/luci/controller/aliddns.lua new file mode 100644 index 00000000..9a169ef2 --- /dev/null +++ b/luci-app-aliddns/files/luci/controller/aliddns.lua @@ -0,0 +1,4 @@ +module("luci.controller.aliddns",package.seeall) +function index() +entry({"admin","services","aliddns"},cbi("aliddns"),_("AliDDNS"),58) +end diff --git a/luci-app-aliddns/files/luci/i18n/aliddns.zh-cn.po b/luci-app-aliddns/files/luci/i18n/aliddns.zh-cn.po new file mode 100644 index 00000000..f0be976b --- /dev/null +++ b/luci-app-aliddns/files/luci/i18n/aliddns.zh-cn.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" + +msgid "AliDDNS" +msgstr "阿里DDNS" + +msgid "enable" +msgstr "启用" + +msgid "Clean Before Update" +msgstr "清除所有同名记录" + +msgid "Enabled IPv6" +msgstr "启用 IPv6" + +msgid "Base" +msgstr "基本设置" + +msgid "WAN-IP Source" +msgstr "WAN-IP来源" + +msgid "Select WAN-IP Source" +msgstr "选择WAN-IP来源" + +msgid "Select the WAN-IP Source for AliDDNS, like wan/internet" +msgstr "动态域名的IP来源,如wan/internet" + +msgid "WAN6-IP Source" +msgstr "WAN6-IP来源" + +msgid "Select WAN6-IP Source" +msgstr "选择WAN6-IP来源" + +msgid "Select the WAN6-IP Source for AliDDNS, like wan6/internet" +msgstr "动态域名的IPv6来源,如wan6/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-aliddns/files/luci/model/cbi/aliddns.lua b/luci-app-aliddns/files/luci/model/cbi/aliddns.lua new file mode 100644 index 00000000..f04ffbcd --- /dev/null +++ b/luci-app-aliddns/files/luci/model/cbi/aliddns.lua @@ -0,0 +1,71 @@ +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("aliddns", translate("AliDDNS")) + +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")) +enable.rmempty = false + +ipv6 = e:option(Flag,"ipv6",translate("Enabled IPv6")) +ipv6.rmempty=false + +token = e:option(Value, "app_key", translate("Access Key ID")) + +email = e:option(Value, "app_secret", translate("Access Key Secret")) + +iface = e:option(ListValue, "interface", translate("WAN-IP Source"), translate("Select the WAN-IP Source for AliDDNS, like wan/internet")) +iface:value("", translate("Select WAN-IP Source")) +iface:value("internet") +iface:value("wan") +iface.rmempty = false + +iface6 = e:option(ListValue, "interface6", translate("WAN6-IP Source"),translate("Select the WAN6-IP Source for AliDDNS, like wan6/internet")) +iface6:value("",translate("Select WAN6-IP Source")) +iface6:value("internet") +iface6:value("wan") +iface6:value("wan6") +iface6.rmempty = true + +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/aliddns.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 + io.popen("/etc/init.d/aliddns restart") +end + +return t diff --git a/luci-app-aliddns/files/root/etc/config/aliddns b/luci-app-aliddns/files/root/etc/config/aliddns new file mode 100644 index 00000000..10ae1fef --- /dev/null +++ b/luci-app-aliddns/files/root/etc/config/aliddns @@ -0,0 +1,4 @@ + +config base 'base' + option enable '0' + option time '10' diff --git a/luci-app-aliddns/files/root/etc/init.d/aliddns b/luci-app-aliddns/files/root/etc/init.d/aliddns new file mode 100644 index 00000000..8740c0c0 --- /dev/null +++ b/luci-app-aliddns/files/root/etc/init.d/aliddns @@ -0,0 +1,78 @@ +#!/bin/sh /etc/rc.common + +START=80 +NAME=aliddns +EXTRA_COMMANDS="status" +EXTRA_HELP=" status Service status" + +NE_TIPS='AliDDNS 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/aliddns ) >> /var/log/aliddns.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/aliddns.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 '/aliddns/d' /etc/crontabs/root + echo "*/$time * * * * /usr/sbin/aliddns >> /var/log/aliddns.log 2>&1" >> /etc/crontabs/root + if [ "$(/etc/init.d/cron status)" = "running" ]; then + /etc/init.d/cron reload + fi + + ( /usr/sbin/aliddns >> /var/log/aliddns.log 2>&1 ) & +} + +stop() { + rm -rf "/etc/hotplug.d/iface/${START}-${NAME}" + sed -i '/aliddns/d' /etc/crontabs/root >/dev/null 2>&1 + if [ "$(/etc/init.d/cron status)" = "running" ]; then + /etc/init.d/cron reload + fi + echo "${NE_TIPS}" > /var/log/aliddns.log +} + +status() { + if [ "$(/etc/init.d/cron status)" != "running" ]; then + echo "inactive" && false + else + grep -q aliddns /etc/crontabs/root && echo "running" || echo "inactive" && false + fi +} diff --git a/luci-app-aliddns/files/root/etc/uci-defaults/luci-aliddns b/luci-app-aliddns/files/root/etc/uci-defaults/luci-aliddns new file mode 100644 index 00000000..15bd1040 --- /dev/null +++ b/luci-app-aliddns/files/root/etc/uci-defaults/luci-aliddns @@ -0,0 +1,10 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@aliddns[-1] + add ucitrack aliddns + set ucitrack.@aliddns[-1].init=aliddns + commit ucitrack +EOF + +exit 0 diff --git a/luci-app-aliddns/files/root/usr/sbin/aliddns b/luci-app-aliddns/files/root/usr/sbin/aliddns new file mode 100755 index 00000000..086d1103 --- /dev/null +++ b/luci-app-aliddns/files/root/usr/sbin/aliddns @@ -0,0 +1,286 @@ +#!/bin/sh + +NAME=aliddns +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 members.3322.org/dyndns/getip` + if [ "Z$tmp_ip" == "Z" ]; then + tmp_ip=`curl -sL --connect-timeout 3 api-ipv4.ip.sb/ip` + fi + if [ "Z$tmp_ip" == "Z" ]; then + tmp_ip=`curl -sL --connect-timeout 3 v4.myip.la` + fi + if [ "Z$tmp_ip" == "Z" ]; then + tmp_ip=`curl -sL --connect-timeout 3 whatismyip.akamai.com` + fi + echo -n $tmp_ip +} + +intelnetip6() { + tmp_ip6=`curl -sL --connect-timeout 3 ipv6.whatismyip.akamai.com` + if [ "Z$tmp_ip6" == "Z" ]; then + tmp_ip6=`curl -sL --connect-timeout 3 speed.neu6.edu.cn/getIP.php` + fi + if [ "Z$tmp_ip6" == "Z" ]; then + tmp_ip6=`curl -sL --connect-timeout 3 v6.ident.me` + fi + if [ "Z$tmp_ip6" == "Z" ]; then + tmp_ip6=`curl -sL --connect-timeout 3 api-ipv6.ip.sb/ip` + fi + echo -n $tmp_ip6 +} + +resolve2ip() { + # resolve2ip domain + domain=$1 + tmp_ip=`nslookup $domain ns1.alidns.com 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 ns2.alidns.com 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 +} + +resolve2ip6() { + # resolve2ip6 domain + domain=$1 + tmp_ip6=`nslookup $domain ns1.alidns.com 2>/dev/null | sed '/^Server/d; /#53$/d' | grep -oE '([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})' | tail -n1` + if [ "Z$tmp_ip6" == "Z" ]; then + tmp_ip6=`nslookup $domain ns2.alidns.com 2>/dev/null | sed '/^Server/d; /#53$/d' | grep -oE '([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})' | tail -n1` + fi + if [ "Z$tmp_ip6" == "Z" ]; then + tmp_ip6=`nslookup $domain 114.114.115.115 2>/dev/null | sed '/^Server/d; /#53$/d' | grep -oE '([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})' | tail -n1` + fi + if [ "Z$tmp_ip6" == "Z" ]; then + tmp_ip6=`curl -sL --connect-timeout 3 "119.29.29.29/d?dn=$domain&type=AAAA"` + fi + echo -n $tmp_ip6 +} + +check_aliddns() { + echo "$DATE WAN-IP: ${ip}" + if [ "Z$ip" == "Z" ]; then + echo "$DATE ERROR, cant get WAN-IP..." + return 0 + fi + current_ip=$(resolve2ip "$dm_real") + 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 +} + +check_aliddns6() { + echo "$DATE WAN6-IP: ${ip6}" + if [ "Z$ip6" == "Z" ]; then + echo "$DATE ERROR, cant get WAN6-IP..." + return 0 + fi + current_ip6=$(resolve2ip6 "$dm_real") + + #urlencode current_ip6 + current_ip6_urlencode=$(urlencode "$current_ip6") + if [ "Z$current_ip6_urlencode" == "Z" ]; then + rrid6='' # NO Resolve IP Means new Record_ID + fi + echo "$DATE DOMAIN-IP6: ${current_ip6_urlencode}" + if [ "Z$ip6" == "Z$current_ip6_urlencode" ]; then + echo "$DATE IPv6 dont need UPDATE..." + return 0 + else + echo "$DATE UPDATING AAAA..." + 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() { + # send_request action args + local args="AccessKeyId=$ak_id&Action=$1&Format=json&$2&Version=2015-01-09" + local hash=$(urlencode $(echo -n "GET&%2F&$(urlencode $args)" | openssl dgst -sha1 -hmac "$ak_sec&" -binary | openssl base64)) + curl -sSL --connect-timeout 10 "http://alidns.aliyuncs.com/?$args&Signature=$hash" +} + +get_recordid() { + sed 's/RR/\n/g' | sed -n 's/.*RecordId[^0-9]*\([0-9]*\).*/\1\n/p' | sort -ru | sed /^$/d +} + +query_recordid() { + send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$dm_escape&Timestamp=$timestamp&Type=A" +} + +query_recordid6() { + send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$dm_escape&Timestamp=$timestamp&Type=AAAA" +} + +update_record() { + send_request "UpdateDomainRecord" "RR=$sub_dm_escape&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=A&Value=$ip" +} + +add_record() { + send_request "AddDomainRecord&DomainName=$main_dm" "RR=$sub_dm_escape&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=A&Value=$ip" +} + +update_record6() { + send_request "UpdateDomainRecord" "RR=$sub_dm_escape&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=AAAA&Value=$ip6_escape" +} + +add_record6() { + send_request "AddDomainRecord&DomainName=$main_dm" "RR=$sub_dm_escape&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=AAAA&Value=$ip6_escape" +} + +del_record() { + send_request "DeleteDomainRecord" "RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp" +} + +do_ddns_record() { + if uci_bool_by_name base clean ; then + query_recordid | get_recordid | while read rr; do + echo "$DATE Clean record $dm_show: $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_recordid` + 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 aliddns.base.record_id=$rrid + uci commit aliddns + echo "$DATE # UPDATED($ip)" + fi +} + +do_ddns_record6() { + if uci_bool_by_name base clean ; then + query_recordid6 | get_recordid | while read rr; do + echo "$DATE Clean record $dm_show: $rr" + del_record $rr >/dev/null + timestamp=$(date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ") + done + rrid6='' + fi + if [ "Z$rrid6" == "Z" ]; then + rrid6=`query_recordid6 | get_recordid` + fi + if [ "Z$rrid6" == "Z" ]; then + rrid6=`add_record6 | get_recordid` + echo "$DATE ADD record $rrid6" + else + update_record6 $rrid6 >/dev/null 2>&1 + echo "$DATE UPDATE record $rrid6" + fi + if [ "Z$rrid6" == "Z" ]; then + # failed + echo "$DATE # ERROR, Please Check Config/Time" + else + # save rrid6 + uci set aliddns.base.record_id6=$rrid6 + uci commit aliddns + echo "$DATE # UPDATED($ip6)" + 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 app_key) +ak_sec=$(uci_get_by_name base app_secret) +rrid=$(uci_get_by_name base record_id) +rrid6=$(uci_get_by_name base record_id6) +main_dm=$(uci_get_by_name base main_domain) +sub_dm=$(uci_get_by_name base sub_domain) + +if [ "Z$sub_dm" == "Z@" -o "Z$sub_dm" == "Z" ]; then + dm_real="$main_dm" +else + dm_real="$sub_dm.$main_dm" +fi +dm_show="$sub_dm.$main_dm" +dm_escape=`urlencode "$sub_dm.$main_dm"` +sub_dm_escape=`urlencode "$sub_dm"` + +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_aliddns || do_ddns_record + +# exit if ipv6 not-enabled +uci_bool_by_name base ipv6 || exit 0 + +iface6=$(uci_get_by_name base interface6) +if [ "Z$iface6" == "Zinternet" -o "Z$iface6" == "Z" ]; then + ip6=$(intelnetip6) +else + ip6=$(ubus call network.interface.$iface6 status | grep '"address"' | grep -oE '([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){4})' | head -1) +fi +ip6_escape=`urlencode "$ip6"` + +clean_log +check_aliddns6 || do_ddns_record6 diff --git a/luci-app-aliddns/tools/po2lmo/Makefile b/luci-app-aliddns/tools/po2lmo/Makefile new file mode 100644 index 00000000..ad2c1332 --- /dev/null +++ b/luci-app-aliddns/tools/po2lmo/Makefile @@ -0,0 +1,12 @@ + +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-aliddns/tools/po2lmo/src/po2lmo.c b/luci-app-aliddns/tools/po2lmo/src/po2lmo.c new file mode 100644 index 00000000..0da792b6 --- /dev/null +++ b/luci-app-aliddns/tools/po2lmo/src/po2lmo.c @@ -0,0 +1,247 @@ +/* + * 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-aliddns/tools/po2lmo/src/template_lmo.c b/luci-app-aliddns/tools/po2lmo/src/template_lmo.c new file mode 100644 index 00000000..27205a72 --- /dev/null +++ b/luci-app-aliddns/tools/po2lmo/src/template_lmo.c @@ -0,0 +1,328 @@ +/* + * 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-aliddns/tools/po2lmo/src/template_lmo.h b/luci-app-aliddns/tools/po2lmo/src/template_lmo.h new file mode 100644 index 00000000..57f59aa5 --- /dev/null +++ b/luci-app-aliddns/tools/po2lmo/src/template_lmo.h @@ -0,0 +1,92 @@ +/* + * 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-argon-config b/luci-app-argon-config deleted file mode 160000 index 9e2f3e5e..00000000 --- a/luci-app-argon-config +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9e2f3e5eba0a9ab64433414d63fe7eeb221a5d2e diff --git a/luci-app-argon-config/.github/workflows/build.sh b/luci-app-argon-config/.github/workflows/build.sh new file mode 100755 index 00000000..e34e3185 --- /dev/null +++ b/luci-app-argon-config/.github/workflows/build.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +sed -i 's/git\.openwrt\.org\/project\/luci/github\.com\/openwrt\/luci/g' ./feeds.conf.default +./scripts/feeds update luci +./scripts/feeds install luci +mv ./bin/luci-app-argon-config ./package/ +make defconfig +make package/luci-app-argon-config/compile V=s -j$(nproc) BUILD_LOG=1 + +tar -cJf logs.tar.xz logs +mv logs.tar.xz bin diff --git a/luci-app-argon-config/.github/workflows/check.yml b/luci-app-argon-config/.github/workflows/check.yml new file mode 100644 index 00000000..c6c3a056 --- /dev/null +++ b/luci-app-argon-config/.github/workflows/check.yml @@ -0,0 +1,41 @@ +name: CI + +on: + push: + branches: + - master + tags-ignore: + - 'release-*' + paths: + - 'luci-app-argon-config/**' + pull_request: + branches: + - master + +jobs: + build: + name: Build the IPK + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@master + - name: Prepare + run: | + mkdir -p bin/luci-app-argon-config + cp -rf ./luasrc ./po ./root ./Makefile ./bin/luci-app-argon-config + - name: Docker Build + run: | + docker pull openwrtorg/sdk:x86-64-21.02-SNAPSHOT + docker run --rm -u root -v "$(pwd)"/bin/:/home/build/openwrt/bin -v ${{ github.workspace }}/.github/workflows:/home/build/workflows openwrtorg/sdk:x86-64-21.02-SNAPSHOT /bin/sh /home/build/workflows/build.sh + - name: Upload app + uses: actions/upload-artifact@v2 + with: + name: luci-app-argon-config + path: ./bin/packages/x86_64/base/*argon-config* + if-no-files-found: error + - name: Upload Log + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: buildlog + path: bin/logs.tar.xz diff --git a/luci-app-argon-config/.github/workflows/release.yml b/luci-app-argon-config/.github/workflows/release.yml new file mode 100644 index 00000000..61e18dca --- /dev/null +++ b/luci-app-argon-config/.github/workflows/release.yml @@ -0,0 +1,39 @@ +name: Release + +on: + push: + tags: + - 'release-*' + +jobs: + build: + name: Build the IPK + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@master + - name: Prepare + run: | + mkdir -p bin/luci-app-argon-config + cp -rf ./luasrc ./po ./root ./Makefile ./bin/luci-app-argon-config + - name: Docker Build + run: | + docker pull openwrtorg/sdk:x86-64-21.02-SNAPSHOT + docker run --rm -u root -v "$(pwd)"/bin/:/home/build/openwrt/bin -v ${{ github.workspace }}/.github/workflows:/home/build/workflows openwrtorg/sdk:x86-64-21.02-SNAPSHOT /bin/sh /home/build/workflows/build.sh + - name: Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -x + assets=() + for asset in ./bin/packages/x86_64/base/*argon-config*.ipk; do + assets+=("-a" "$asset") + done + tag_name=$(basename ${{github.ref}}) + hub release create -p "${assets[@]}" -m "$tag_name" "$tag_name" + - name: Upload Log + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: buildlog + path: bin/logs.tar.xz diff --git a/luci-app-argon-config/Makefile b/luci-app-argon-config/Makefile new file mode 100644 index 00000000..500a33f8 --- /dev/null +++ b/luci-app-argon-config/Makefile @@ -0,0 +1,19 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-argon-config +PKG_VERSION:=0.9 +PKG_RELEASE:=20220424 + +PKG_MAINTAINER:=jerrykuku + +LUCI_TITLE:=LuCI page for Argon Config +LUCI_PKGARCH:=all +LUCI_DEPENDS:=+luci-compat +luci-lib-ipkg +luci-theme-argon + +define Package/$(PKG_NAME)/conffiles +/etc/config/argon +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-argon-config/README.md b/luci-app-argon-config/README.md new file mode 100644 index 00000000..59212036 --- /dev/null +++ b/luci-app-argon-config/README.md @@ -0,0 +1,4 @@ +# luci-app-argon-config +Argon Theme Config Plugin + +You can set the blur and transparency of the login page of argon theme, and manage the background pictures and videos. \ No newline at end of file diff --git a/luci-app-argon-config/luasrc/controller/argon-config.lua b/luci-app-argon-config/luasrc/controller/argon-config.lua new file mode 100644 index 00000000..5d7faf45 --- /dev/null +++ b/luci-app-argon-config/luasrc/controller/argon-config.lua @@ -0,0 +1,10 @@ +module("luci.controller.argon-config", package.seeall) + +function index() + if not nixio.fs.access('/www/luci-static/argon/css/cascade.css') then + return + end + + local page = entry({"admin", "system", "argon-config"}, form("argon-config"), _("Argon Config"), 90) + page.acl_depends = { "luci-app-argon-config" } +end diff --git a/luci-app-argon-config/luasrc/model/cbi/argon-config.lua b/luci-app-argon-config/luasrc/model/cbi/argon-config.lua new file mode 100644 index 00000000..ced16c47 --- /dev/null +++ b/luci-app-argon-config/luasrc/model/cbi/argon-config.lua @@ -0,0 +1,217 @@ +local nxfs = require 'nixio.fs' +local wa = require 'luci.tools.webadmin' +local opkg = require 'luci.model.ipkg' +local sys = require 'luci.sys' +local http = require 'luci.http' +local nutil = require 'nixio.util' +local name = 'argon' +local uci = require 'luci.model.uci'.cursor() + +local fstat = nxfs.statvfs(opkg.overlay_root()) +local space_total = fstat and fstat.blocks or 0 +local space_free = fstat and fstat.bfree or 0 +local space_used = space_total - space_free + +local free_byte = space_free * fstat.frsize + +local primary, dark_primary, blur_radius, blur_radius_dark, blur_opacity, mode +if nxfs.access('/etc/config/argon') then + primary = uci:get_first('argon', 'global', 'primary') + dark_primary = uci:get_first('argon', 'global', 'dark_primary') + blur_radius = uci:get_first('argon', 'global', 'blur') + blur_radius_dark = uci:get_first('argon', 'global', 'blur_dark') + blur_opacity = uci:get_first('argon', 'global', 'transparency') + blur_opacity_dark = uci:get_first('argon', 'global', 'transparency_dark') + mode = uci:get_first('argon', 'global', 'mode') + bing_background = uci:get_first('argon', 'global', 'bing_background') +end + +function glob(...) + local iter, code, msg = nxfs.glob(...) + if iter then + return nutil.consume(iter) + else + return nil, code, msg + end +end + +local transparency_sets = { + 0, + 0.1, + 0.2, + 0.3, + 0.4, + 0.5, + 0.6, + 0.7, + 0.8, + 0.9, + 1 +} + +-- [[ 模糊设置 ]]-- +br = SimpleForm('config', translate('Argon Config'), translate('Here you can set the blur and transparency of the login page of argon theme, and manage the background pictures and videos.[Chrome is recommended]')) +br.reset = false +br.submit = false +s = br:section(SimpleSection) + +o = s:option(ListValue, 'bing_background', translate('Wallpaper Source')) +o:value('0', translate('Built-in')) +o:value('1', translate('Bing Wallpapers')) +o.default = bing_background +o.rmempty = false + +o = s:option(ListValue, 'mode', translate('Theme mode')) +o:value('normal', translate('Follow System')) +o:value('light', translate('Force Light')) +o:value('dark', translate('Force Dark')) +o.default = mode +o.rmempty = false +o.description = translate('You can choose Theme color mode here') + +o = s:option(Value, 'primary', translate('[Light mode] Primary Color'), translate('A HEX Color ; ( Default: #5e72e4 )')) +o.default = primary +o.datatype = ufloat +o.rmempty = false + + + +o = s:option(ListValue, 'transparency', translate('[Light mode] Transparency'), translate('0 transparent - 1 opaque ; ( Suggest: transparent: 0 or translucent preset: 0.5 )')) +for _, v in ipairs(transparency_sets) do + o:value(v) +end +o.default = blur_opacity +o.datatype = ufloat +o.rmempty = false + +o = s:option(Value, 'blur', translate('[Light mode] Frosted Glass Radius'), translate('Larger value will more blurred ; ( Suggest: clear: 1 or blur preset: 10 )')) +o.default = blur_radius +o.datatype = ufloat +o.rmempty = false + +o = s:option(Value, 'dark_primary', translate('[Dark mode] Primary Color'), translate('A HEX Color ; ( Default: #483d8b )')) +o.default = dark_primary +o.datatype = ufloat +o.rmempty = false + +o = s:option(ListValue, 'transparency_dark', translate('[Dark mode] Transparency'), translate('0 transparent - 1 opaque ; ( Suggest: Black translucent preset: 0.5 )')) +for _, v in ipairs(transparency_sets) do + o:value(v) +end +o.default = blur_opacity_dark +o.datatype = ufloat +o.rmempty = false + +o = s:option(Value, 'blur_dark', translate('[Dark mode] Frosted Glass Radius'), translate('Larger value will more blurred ; ( Suggest: clear: 1 or blur preset: 10 )')) +o.default = blur_radius_dark +o.datatype = ufloat +o.rmempty = false + +o = s:option(Button, 'save', translate('Save Changes')) +o.inputstyle = 'reload' + +function br.handle(self, state, data) + if (state == FORM_VALID and data.blur ~= nil and data.blur_dark ~= nil and data.transparency ~= nil and data.transparency_dark ~= nil and data.mode ~= nil) then + nxfs.writefile('/tmp/aaa', data) + for key, value in pairs(data) do + uci:set('argon','@global[0]',key,value) + end + uci:commit('argon') + end + return true +end + +ful = SimpleForm('upload', translate('Upload (Free: ') .. wa.byte_format(free_byte) .. ')', translate("You can upload files such as jpg,png,gif,webp,mp4,webm files, To change the login page background.")) +ful.reset = false +ful.submit = false + +sul = ful:section(SimpleSection, '', translate("Upload file to '/www/luci-static/argon/background/'")) +fu = sul:option(FileUpload, '') +fu.template = 'argon-config/other_upload' +um = sul:option(DummyValue, '', nil) +um.template = 'argon-config/other_dvalue' + +local dir, fd +dir = '/www/luci-static/argon/background/' +nxfs.mkdir(dir) +http.setfilehandler( + function(meta, chunk, eof) + if not fd then + if not meta then + return + end + + if meta and chunk then + fd = nixio.open(dir .. meta.file, 'w') + end + + if not fd then + um.value = 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 + um.value = translate('File saved to') .. ' "/www/luci-static/argon/background/' .. meta.file .. '"' + 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 function getSizeStr(size) + local i = 0 + local byteUnits = {' kB', ' MB', ' GB', ' TB'} + repeat + size = size / 1024 + i = i + 1 + until (size <= 1024) + return string.format('%.1f', size) .. byteUnits[i] +end + +local inits, attr = {} +for i, f in ipairs(glob(dir .. '*')) do + attr = nxfs.stat(f) + if attr then + inits[i] = {} + inits[i].name = nxfs.basename(f) + inits[i].mtime = os.date('%Y-%m-%d %H:%M:%S', attr.mtime) + inits[i].modestr = attr.modestr + inits[i].size = getSizeStr(attr.size) + inits[i].remove = 0 + inits[i].install = false + end +end + +form = SimpleForm('filelist', translate('Background file list'), nil) +form.reset = false +form.submit = false + +tb = form:section(Table, inits) +nm = tb:option(DummyValue, 'name', translate('File name')) +mt = tb:option(DummyValue, 'mtime', translate('Modify time')) +sz = tb:option(DummyValue, 'size', translate('Size')) +btnrm = tb:option(Button, 'remove', translate('Remove')) +btnrm.render = function(self, section, scope) + self.inputstyle = 'remove' + Button.render(self, section, scope) +end + +btnrm.write = function(self, section) + local v = nxfs.unlink(dir .. nxfs.basename(inits[section].name)) + if v then + table.remove(inits, section) + end + return v +end + +return br, ful, form diff --git a/luci-app-argon-config/luasrc/view/argon-config/other_button.htm b/luci-app-argon-config/luasrc/view/argon-config/other_button.htm new file mode 100644 index 00000000..1c391ad9 --- /dev/null +++ b/luci-app-argon-config/luasrc/view/argon-config/other_button.htm @@ -0,0 +1,7 @@ +<%+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-argon-config/luasrc/view/argon-config/other_dvalue.htm b/luci-app-argon-config/luasrc/view/argon-config/other_dvalue.htm new file mode 100644 index 00000000..296c61e4 --- /dev/null +++ b/luci-app-argon-config/luasrc/view/argon-config/other_dvalue.htm @@ -0,0 +1,8 @@ +<%+cbi/valueheader%> + +<% + local val = self:cfgvalue(section) or self.default or "" + write(pcdata(val)) +%> + +<%+cbi/valuefooter%> diff --git a/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm b/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm new file mode 100644 index 00000000..775629f3 --- /dev/null +++ b/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm @@ -0,0 +1,5 @@ +<%+cbi/valueheader%> + + + +<%+cbi/valuefooter%> diff --git a/luci-app-argon-config/po/es/argon-config.po b/luci-app-argon-config/po/es/argon-config.po new file mode 100644 index 00000000..e6670acc --- /dev/null +++ b/luci-app-argon-config/po/es/argon-config.po @@ -0,0 +1,179 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2021-03-15 21:25-0300\n" +"PO-Revision-Date: 2022-04-23 15:21-0300\n" +"Last-Translator: Franco Castillo \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.0.1\n" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:97 +msgid "0 transparent - 1 opaque ; ( Suggest: Black translucent preset: 0.5 )" +msgstr "" +"0 transparente - 1 opaco; (Sugerencia: negro translúcido preestablecido: 0.5)" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:79 +msgid "" +"0 transparent - 1 opaque ; ( Suggest: transparent: 0 or translucent preset: " +"0.5 )" +msgstr "" +"0 transparente - 1 opaco; (Sugerencia: transparente: 0 o translúcido " +"preestablecido: 0.5)" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:92 +msgid "A HEX Color ; ( Default: #483d8b )" +msgstr "Un color HEX; (Predeterminado: #483d8b)" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:72 +msgid "A HEX Color ; ( Default: #5e72e4 )" +msgstr "Un color HEX; (Predeterminado: #5e72e4)" + +#: applications/luci-app-argon-config/luasrc/controller/argon-config.lua:8 +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:53 +msgid "Argon Config" +msgstr "Configuración de Argon" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:195 +msgid "Background file list" +msgstr "Lista de archivos de fondo" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:60 +msgid "Bing Wallpapers" +msgstr "Fondos de Bing" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:59 +msgid "Built-in" +msgstr "Integrado" + +#: applications/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm:2 +msgid "Choose local file:" +msgstr "Elija un archivo local:" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:149 +msgid "Create upload file error." +msgstr "Crear archivo de error de carga." + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:200 +msgid "File name" +msgstr "Nombre del archivo" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:159 +msgid "File saved to" +msgstr "Archivo guardado en" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:65 +msgid "Follow System" +msgstr "Seguir el sistema" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:67 +msgid "Force Dark" +msgstr "Forzar oscuro" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:66 +msgid "Force Light" +msgstr "Forzar claro" + +#: applications/luci-app-argon-config/root/usr/share/rpcd/acl.d/luci-app-argon-config.json:3 +msgid "Grant UCI access for luci-app-argon-config" +msgstr "Otorgar acceso UCI para luci-app-argon-config" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:53 +msgid "" +"Here you can set the blur and transparency of the login page of argon theme, " +"and manage the background pictures and videos.[Chrome is recommended]" +msgstr "" +"Aquí puede configurar el desenfoque y la transparencia de la página de " +"inicio de sesión del tema argon y administrar las imágenes de fondo y los " +"videos. [Se recomienda Chrome]" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:87 +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:105 +msgid "" +"Larger value will more blurred ; ( Suggest: clear: 1 or blur preset: 10 )" +msgstr "" +"El valor más grande se verá más borroso; (Sugerencia: claro: 1 o desenfoque " +"predeterminado: 10)" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:201 +msgid "Modify time" +msgstr "Modificar la hora" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:167 +msgid "No specify upload file." +msgstr "No especificar archivo de carga." + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:203 +msgid "Remove" +msgstr "Eliminar" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:110 +msgid "Save Changes" +msgstr "Guardar cambios" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:202 +msgid "Size" +msgstr "Tamaño" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:64 +msgid "Theme mode" +msgstr "Modo del tema" + +#: applications/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm:4 +msgid "Upload" +msgstr "Cargar" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:124 +msgid "Upload (Free:" +msgstr "Cargar (Libre:" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:128 +msgid "Upload file to '/www/luci-static/argon/background/'" +msgstr "Subir archivo a '/www/luci-static/argon/background/'" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:58 +msgid "Wallpaper Source" +msgstr "Fuente del fondo de pantalla" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:70 +msgid "You can choose Theme color mode here" +msgstr "Puede elegir el modo de color del tema aquí" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:124 +msgid "" +"You can upload files such as jpg,png,gif,webp,mp4,webm files, To change the login page " +"background." +msgstr "" +"Puede cargar archivos como jpg, png, gif, webp, mp4, webm, para cambiar el fondo de la " +"página de inicio de sesión." + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:105 +msgid "[Dark mode] Frosted Glass Radius" +msgstr "[Modo oscuro] Radio de vidrio esmerilado" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:92 +msgid "[Dark mode] Primary Color" +msgstr "[Modo oscuro] Color primario" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:97 +msgid "[Dark mode] Transparency" +msgstr "[Modo oscuro] Transparencia" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:87 +msgid "[Light mode] Frosted Glass Radius" +msgstr "[Modo claro] Radio de vidrio esmerilado" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:72 +msgid "[Light mode] Primary Color" +msgstr "[Modo claro] Color primario" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:79 +msgid "[Light mode] Transparency" +msgstr "[Modo claro] Transparencia" + +#~ msgid "Luci Argon theme config" +#~ msgstr "Configuración del tema Luci Argon" diff --git a/luci-app-argon-config/po/templates/argon-config.pot b/luci-app-argon-config/po/templates/argon-config.pot new file mode 100644 index 00000000..4b56ec11 --- /dev/null +++ b/luci-app-argon-config/po/templates/argon-config.pot @@ -0,0 +1,155 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:97 +msgid "0 transparent - 1 opaque ; ( Suggest: Black translucent preset: 0.5 )" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:79 +msgid "" +"0 transparent - 1 opaque ; ( Suggest: transparent: 0 or translucent preset: " +"0.5 )" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:92 +msgid "A HEX Color ; ( Default: #483d8b )" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:72 +msgid "A HEX Color ; ( Default: #5e72e4 )" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/controller/argon-config.lua:8 +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:53 +msgid "Argon Config" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:195 +msgid "Background file list" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:60 +msgid "Bing Wallpapers" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:59 +msgid "Built-in" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm:2 +msgid "Choose local file:" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:149 +msgid "Create upload file error." +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:200 +msgid "File name" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:159 +msgid "File saved to" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:65 +msgid "Follow System" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:67 +msgid "Force Dark" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:66 +msgid "Force Light" +msgstr "" + +#: applications/luci-app-argon-config/root/usr/share/rpcd/acl.d/luci-app-argon-config.json:3 +msgid "Grant UCI access for luci-app-argon-config" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:53 +msgid "" +"Here you can set the blur and transparency of the login page of argon theme, " +"and manage the background pictures and videos.[Chrome is recommended]" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:87 +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:105 +msgid "" +"Larger value will more blurred ; ( Suggest: clear: 1 or blur preset: 10 )" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:201 +msgid "Modify time" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:167 +msgid "No specify upload file." +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:203 +msgid "Remove" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:110 +msgid "Save Changes" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:202 +msgid "Size" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:64 +msgid "Theme mode" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm:4 +msgid "Upload" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:124 +msgid "Upload (Free:" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:128 +msgid "Upload file to '/www/luci-static/argon/background/'" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:58 +msgid "Wallpaper Source" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:70 +msgid "You can choose Theme color mode here" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:124 +msgid "" +"You can upload files such as jpg,png,gif,webp,mp4,webm files, To change the login page " +"background." +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:105 +msgid "[Dark mode] Frosted Glass Radius" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:92 +msgid "[Dark mode] Primary Color" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:97 +msgid "[Dark mode] Transparency" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:87 +msgid "[Light mode] Frosted Glass Radius" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:72 +msgid "[Light mode] Primary Color" +msgstr "" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:79 +msgid "[Light mode] Transparency" +msgstr "" diff --git a/luci-app-argon-config/po/zh-cn/argon-config.po b/luci-app-argon-config/po/zh-cn/argon-config.po new file mode 100644 index 00000000..6b173412 --- /dev/null +++ b/luci-app-argon-config/po/zh-cn/argon-config.po @@ -0,0 +1,129 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: dingpengyu \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"X-Generator: Poedit 2.3.1\n" + +msgid "Argon Config" +msgstr "Argon 主题设置" + +msgid "Here you can set the blur and transparency of the login page of argon theme, and manage the background pictures and videos.[Chrome is recommended]" +msgstr "在这里你可以设置argon 主题的登录页面的模糊和透明度,并管理背景图片与视频。[建议使用 Chrome]" + +msgid "Wallpaper Source" +msgstr "壁纸来源" + +msgid "Built-in" +msgstr "内建" + +msgid "Bing Wallpapers" +msgstr "Bing 壁纸" + +msgid "Theme mode" +msgstr "主题模式" + +msgid "Follow System" +msgstr "跟随系统" + +msgid "Force Light" +msgstr "强制亮色" + +msgid "Force Dark" +msgstr "强制暗色" + +msgid "You can choose Theme color mode here" +msgstr "你可以选择喜欢的主题模式" + +msgid "[Light mode] Primary Color" +msgstr "[亮色模式] 主色调" + +msgid "[Dark mode] Primary Color" +msgstr "[暗色模式] 主色调" + +msgid "A HEX Color ; ( Default: #5e72e4 )" +msgstr "十六进制颜色值 ( 预设为:#5e72e4 )" + +msgid "A HEX Color ; ( Default: #483d8b )" +msgstr "十六进制颜色值 ( 预设为:#483d8b )" + +msgid "[Light mode] Transparency" +msgstr "[亮色模式] 透明度" + +msgid "[Dark mode] Transparency" +msgstr "[暗色模式] 透明度" + +msgid "0 transparent - 1 opaque ; ( Suggest: transparent: 0 or translucent preset: 0.5 )" +msgstr "0最透明 - 1不透明 ; ( 建议: 透明 0 或 半透明预设 0.5 )" + +msgid "0 transparent - 1 opaque ; ( Suggest: Black translucent preset: 0.5 )" +msgstr "0最透明 - 1不透明 ; ( 建议: 黑色半透明 0.5 )" + +msgid "[Light mode] Frosted Glass Radius" +msgstr "[亮色模式] 毛玻璃模糊半径" + +msgid "[Dark mode] Frosted Glass Radius" +msgstr "[暗色模式] 毛玻璃模糊半径" + +msgid "Larger value will more blurred ; ( Suggest: clear: 1 or blur preset: 10 )" +msgstr "值越大越模糊; ( 建议: 清透 1 或 模糊预设 10 )" + +msgid "You can upload files such as jpg,png,gif,webp,mp4,webm files, To change the login page background." +msgstr "你可以上传jpg、png、gif、webp或mp4、webm文件,以创建自己喜欢的登录界面" + +msgid "Save Changes" +msgstr "保存更改" + +msgid "Choose local file:" +msgstr "选择本地文件:" + +msgid "Couldn't open file:" +msgstr "无法打开文件:" + +msgid "Create upload file error." +msgstr "创建上传文件失败。" + +msgid "File name" +msgstr "文件名" + +msgid "File saved to" +msgstr "文件保存到" + +msgid "FileTransfer" +msgstr "文件传输" + +msgid "Install" +msgstr "安装" + +msgid "Attributes" +msgstr "属性" + +msgid "Modify time" +msgstr "修改时间" + +msgid "No specify upload file." +msgstr "未指定上传文件。" + +msgid "Path on Route:" +msgstr "路由根目录:" + +msgid "Remove" +msgstr "移除" + +msgid "Size" +msgstr "大小" + +msgid "Upload (Free:" +msgstr "上传 (剩余空间:" + +msgid "Background file list" +msgstr "背景文件列表" + +msgid "Upload file to '/www/luci-static/argon/background/'" +msgstr "文件将上传到'/www/luci-static/argon/background/'" diff --git a/luci-app-argon-config/po/zh-tw/argon-config.po b/luci-app-argon-config/po/zh-tw/argon-config.po new file mode 100644 index 00000000..ea2523c1 --- /dev/null +++ b/luci-app-argon-config/po/zh-tw/argon-config.po @@ -0,0 +1,165 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: Victor Tseng \n" +"Language-Team: \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.2.2\n" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:97 +msgid "0 transparent - 1 opaque ; ( Suggest: Black translucent preset: 0.5 )" +msgstr "0 全透明 - 1 不透明(建議:黑色半透明 0.5)" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:79 +msgid "" +"0 transparent - 1 opaque ; ( Suggest: transparent: 0 or translucent preset: 0.5 )" +msgstr "0 全透明 - 1 不透明(建議:全透明 0,或半透明 0.5)" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:92 +msgid "A HEX Color ; ( Default: #483d8b )" +msgstr "十六進制顏色(預設 #483d8b)" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:72 +msgid "A HEX Color ; ( Default: #5e72e4 )" +msgstr "十六進制顏色(預設 #5e72e4)" + +#: applications/luci-app-argon-config/luasrc/controller/argon-config.lua:8 +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:53 +msgid "Argon Config" +msgstr "Argon 設定" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:195 +msgid "Background file list" +msgstr "背景檔案清單" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:60 +msgid "Bing Wallpapers" +msgstr "必應桌布" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:59 +msgid "Built-in" +msgstr "內建" + +#: applications/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm:2 +msgid "Choose local file:" +msgstr "選擇本地檔案:" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:149 +msgid "Create upload file error." +msgstr "建立上傳檔案錯誤。" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:200 +msgid "File name" +msgstr "檔案名稱" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:159 +msgid "File saved to" +msgstr "檔案已儲存至" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:65 +msgid "Follow System" +msgstr "跟隨系統配色" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:67 +msgid "Force Dark" +msgstr "強制深色" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:66 +msgid "Force Light" +msgstr "強制淺色" + +#: applications/luci-app-argon-config/root/usr/share/rpcd/acl.d/luci-app-argon-config.json:3 +msgid "Grant UCI access for luci-app-argon-config" +msgstr "為 luci-app-argon-config 授予 UCI 權限" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:53 +msgid "" +"Here you can set the blur and transparency of the login page of argon theme, and " +"manage the background pictures and videos.[Chrome is recommended]" +msgstr "" +"您可以在此設定登入畫面的模糊度、透明度、以及管理背景圖片與影片(推薦使用 " +"Chrome)。" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:87 +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:105 +msgid "Larger value will more blurred ; ( Suggest: clear: 1 or blur preset: 10 )" +msgstr "數值越大越模糊(建議:清晰 1,或模糊程度 10)" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:201 +msgid "Modify time" +msgstr "修改時間" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:167 +msgid "No specify upload file." +msgstr "沒有選擇要上傳的檔案。" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:203 +msgid "Remove" +msgstr "移除" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:110 +msgid "Save Changes" +msgstr "保存變更" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:202 +msgid "Size" +msgstr "容量" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:64 +msgid "Theme mode" +msgstr "佈景主題模式" + +#: applications/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm:4 +msgid "Upload" +msgstr "上傳" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:124 +msgid "Upload (Free:" +msgstr "上傳(剩餘空間:" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:128 +msgid "Upload file to '/www/luci-static/argon/background/'" +msgstr "上傳檔案至「/www/luci-static/argon/background」" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:58 +msgid "Wallpaper Source" +msgstr "桌布來源" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:70 +msgid "You can choose Theme color mode here" +msgstr "您可以在此選擇佈景主題的顏色模式" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:124 +msgid "" +"You can upload files such as jpg,png,gif,mp4,webm files, To change the login page " +"background." +msgstr "您可以上傳諸如 jpg、png、gif、mp4、webm 等類型的檔案來更換登入畫面的背景。" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:105 +msgid "[Dark mode] Frosted Glass Radius" +msgstr "《深色模式》模糊效果半徑" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:92 +msgid "[Dark mode] Primary Color" +msgstr "《深色模式》主色彩" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:97 +msgid "[Dark mode] Transparency" +msgstr "《深色模式》透明度" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:87 +msgid "[Light mode] Frosted Glass Radius" +msgstr "《淺色模式》模糊效果半徑" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:72 +msgid "[Light mode] Primary Color" +msgstr "《淺色模式》主色彩" + +#: applications/luci-app-argon-config/luasrc/model/cbi/argon-config.lua:79 +msgid "[Light mode] Transparency" +msgstr "《淺色模式》透明度" diff --git a/luci-app-argon-config/po/zh_Hans b/luci-app-argon-config/po/zh_Hans new file mode 120000 index 00000000..41451e4a --- /dev/null +++ b/luci-app-argon-config/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-argon-config/po/zh_Hant b/luci-app-argon-config/po/zh_Hant new file mode 120000 index 00000000..f6e591fd --- /dev/null +++ b/luci-app-argon-config/po/zh_Hant @@ -0,0 +1 @@ +zh-tw \ No newline at end of file diff --git a/luci-app-argon-config/root/etc/config/argon b/luci-app-argon-config/root/etc/config/argon new file mode 100644 index 00000000..fb7f35d9 --- /dev/null +++ b/luci-app-argon-config/root/etc/config/argon @@ -0,0 +1,9 @@ +config global + option primary '#5e72e4' + option dark_primary '#483d8b' + option blur '10' + option blur_dark '10' + option transparency '0.5' + option transparency_dark '0.5' + option mode 'normal' + option bing_background '0' diff --git a/luci-app-argon-config/root/etc/uci-defaults/luci-argon-config b/luci-app-argon-config/root/etc/uci-defaults/luci-argon-config new file mode 100755 index 00000000..935d7c8b --- /dev/null +++ b/luci-app-argon-config/root/etc/uci-defaults/luci-argon-config @@ -0,0 +1,6 @@ +#!/bin/sh + +sed -i 's/cbi.submit\"] = true/cbi.submit\"] = \"1\"/g' /usr/lib/lua/luci/dispatcher.lua + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/luci-app-argon-config/root/usr/share/rpcd/acl.d/luci-app-argon-config.json b/luci-app-argon-config/root/usr/share/rpcd/acl.d/luci-app-argon-config.json new file mode 100644 index 00000000..f0a31379 --- /dev/null +++ b/luci-app-argon-config/root/usr/share/rpcd/acl.d/luci-app-argon-config.json @@ -0,0 +1,11 @@ +{ + "luci-app-argon-config": { + "description": "Grant UCI access for luci-app-argon-config", + "read": { + "uci": [ "argon" ] + }, + "write": { + "uci": [ "argon" ] + } + } +} diff --git a/luci-app-autotimeset b/luci-app-autotimeset deleted file mode 160000 index ca78417d..00000000 --- a/luci-app-autotimeset +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ca78417d1b5665fe0c3e4c4a743e24dd325911f5 diff --git a/luci-app-autotimeset/LICENSE b/luci-app-autotimeset/LICENSE new file mode 100644 index 00000000..02a5512a --- /dev/null +++ b/luci-app-autotimeset/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-2020 johnrosen1 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/luci-app-autotimeset/Makefile b/luci-app-autotimeset/Makefile new file mode 100644 index 00000000..8fbbf234 --- /dev/null +++ b/luci-app-autotimeset/Makefile @@ -0,0 +1,22 @@ +# Copyright (C) 2019-2023 sirpdboy https://github.com/sirpdboy/luci-app-autotimeset +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for Scheduled Time setting +LUCI_PKGARCH:=all + +PKG_VERSION:=2.0.2 +PKG_RELEASE:=20230718 + + +define Package/$(PKG_NAME)/conffiles +/etc/config/autotimeset +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/luci-app-autotimeset/README.md b/luci-app-autotimeset/README.md new file mode 100644 index 00000000..9731d6aa --- /dev/null +++ b/luci-app-autotimeset/README.md @@ -0,0 +1,113 @@ +[![若部分图片无法正常显示,请挂上机场浏览或点这里到末尾看修复教程](https://visitor-badge-deno.deno.dev/sirpdboy.sirpdboy.svg)](#解决-github-网页上图片显示失败的问题) [![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ) + +[autotimeset 定时设置插件](https://github.com/sirpdboy/luci-app-autotimeset) + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明1.jpg) + +请 **认真阅读完毕** 本页面,本页面包含注意事项和如何使用。 + +## 功能说明: + +### 定时设置2.0版 +#### 2023.5.23 定时设置2.0版:定时执行任务设置和开机启动任务设置二合一版,并增加自定义脚本功能。 + +### 定时设置1.9版 +#### 2023.4.1 定时设置1.9版:加入定时断网重连、定时检测WAN3重启等服务。 + +### 定时设置1.6版 +#### 2023.1.15 定时设置1.6版:重新代码制作优化。在之前的版本上新增加:定时清理内存、定时清理系统垃圾、定时断网、定时重启网络共享、定时重拨 等 8大功能 + +### 定时设置1.4版 +#### 2021.2.7 新增功能定时重启网络。现包括:定时重启、定时关机、定时重启网络,各功能可一起使用。 + +### 定时设置1.3版 +#### 2020.10.6 原来重定关机正式改名为定时设置,实现定时重启和定时关机功能二合一。 + +### 定时关机1.1版 +#### 2020.7.19 定时关机功能,彻底解决需要保存二次才生效的问题。 + +### 定时关机1.0版 +#### 2019.2.24 定时关机功能借鉴前辈们的开源代码首发。 + +## 编译使用方法 [![](https://img.shields.io/badge/-编译使用方法-F5F5F5.svg)](#编译使用方法-) + +将luci-app-autotimeset添加至 LEDE/OpenWRT 源码的方法。 + +### 下载源码方法一: +编辑源码文件夹根目录feeds.conf.default并加入如下内容: + +```Brach + # feeds获取源码: + src-git autotimeset https://github.com/sirpdboy/luci-app-autotimeset + ``` + ```Brach + # 更新feeds,并安装主题: + scripts/feeds update autotimeset + scripts/feeds install luci-app-autotimeset + ``` + +### 下载源码方法二: + ```Brach + # 下载源码 + git clone https://github.com/sirpdboy/luci-app-autotimeset package/luci-app-autotimeset + make menuconfig + ``` +### 配置菜单 + ```Brach + make menuconfig + # 找到 LuCI -> Applications, 选择 luci-app-autotimeset, 保存后退出。 + ``` +### 编译 + ```Brach + # 编译固件 + make package/luci-app-autotimeset/compile V=s + ``` + +## 说明 [![](https://img.shields.io/badge/-说明-F5F5F5.svg)](#说明-) + +源码来源:https://github.com/sirpdboy/luci-app-autotimeset + + + +## 使用与授权相关说明 + +- 本人开源的所有源码,任何引用需注明本处出处,如需修改二次发布必告之本人,未经许可不得做于任何商用用途。 + + +# My other project + +- 网络速度测试 :https://github.com/sirpdboy/NetSpeedTest + +- 任务设置(定时和开机二合一)插件 : https://github.com/sirpdboy/luci-app-autotimeset + +- 关机功能插件 : https://github.com/sirpdboy/luci-app-poweroffdevice + +- opentopd主题 : https://github.com/sirpdboy/luci-theme-opentopd + +- kucat 主题: https://github.com/sirpdboy/luci-theme-kucat + +- 家长控制: https://github.com/sirpdboy/luci-theme-parentcontrol + +- 系统高级设置 : https://github.com/sirpdboy/luci-app-advanced + +- ddns-go动态域名: https://github.com/sirpdboy/luci-app-ddns-go + +- 进阶设置(系统高级设置+主题设置kucat/agron/opentopd): https://github.com/sirpdboy/luci-app-advancedplus + +- 设置向导: https://github.com/sirpdboy/luci-app-wizard + +- 分区扩容: https://github.com/sirpdboy/luci-app-partexp + +- lukcy大吉: https://github.com/sirpdboy/luci-app-lukcy + +## 捐助 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明3.jpg) + +| 图飞了😂 | 图飞了😂 | +| :-----------------: | :-------------: | +|![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/支付宝.png) | ![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/微信.png) | + + + 图飞了😂 + diff --git a/luci-app-autotimeset/luasrc/controller/autotimeset.lua b/luci-app-autotimeset/luasrc/controller/autotimeset.lua new file mode 100644 index 00000000..1f5138eb --- /dev/null +++ b/luci-app-autotimeset/luasrc/controller/autotimeset.lua @@ -0,0 +1,35 @@ +module("luci.controller.autotimeset",package.seeall) +local fs=require"nixio.fs" +local http=require"luci.http" +function index() + if not nixio.fs.access("/etc/config/autotimeset") then + return + end + entry({"admin", "control"}, firstchild(), "Control", 44).dependent = false + entry({"admin", "control", "autotimeset"}, alias("admin", "control", "autotimeset", "base"), _("Scheduled Setting"), 20).dependent = true + entry({"admin", "control", "autotimeset", "base"}, cbi("autotimeset/base"), _("Scheduled Setting"), 1).leaf = true + entry({"admin", "control", "autotimeset", "log"}, form("autotimeset/log"), _("Log"), 2).leaf = true + entry({"admin","control","autotimeset","dellog"},call("dellog")) + entry({"admin","control","autotimeset","getlog"},call("getlog")) +end + + +function getlog() + logfile="/etc/autotimeset/autotimeset.log" + if not fs.access(logfile) then + http.write("") + return + end + local f=io.open(logfile,"r") + local a=f:read("*a") or "" + f:close() + a=string.gsub(a,"\n$","") + http.prepare_content("text/plain; charset=utf-8") + http.write(a) +end + +function dellog() + fs.writefile("/etc/autotimeset/autotimeset.log","") + http.prepare_content("application/json") + http.write('') +end diff --git a/luci-app-autotimeset/luasrc/model/cbi/autotimeset.lua b/luci-app-autotimeset/luasrc/model/cbi/autotimeset.lua new file mode 100644 index 00000000..96e72dc9 --- /dev/null +++ b/luci-app-autotimeset/luasrc/model/cbi/autotimeset.lua @@ -0,0 +1,56 @@ +local o=require"luci.dispatcher" +local e=require("luci.model.ipkg") +local s=require"nixio.fs" +local e=luci.model.uci.cursor() +local m,s,e + +m=Map("autotimeset",translate("Scheduled Setting"),translate("Timing settings include: timing restart, timing shutdown, timing restart network, all functions can be used together.")) + +s=m:section(TypedSection,"stime","") +s.addremove=true +s.anonymous=true +s.template = "cbi/tblsection" + +e=s:option(ListValue,"stype",translate("Scheduled Type")) +e:value(1,translate("Scheduled Reboot")) +e:value(2,translate("Scheduled Poweroff")) +e:value(3,translate("Scheduled ReNetwork")) +e:value(4,translate("Scheduled RestartSamba")) +e:value(5,translate("Scheduled Restartwan")) +e:value(6,translate("Scheduled Closewan")) +e:value(7,translate("Scheduled Clearmem")) +e:value(8,translate("Scheduled Sysfree")) +e:value(9,translate("Scheduled DisReconn")) +e.default=2 + +week=s:option(ListValue,"week",translate("Week Day")) +week.rmempty = true +week:value('*',translate("Everyday")) +week:value(0,translate("Sunday")) +week:value(1,translate("Monday")) +week:value(2,translate("Tuesday")) +week:value(3,translate("Wednesday")) +week:value(4,translate("Thursday")) +week:value(5,translate("Friday")) +week:value(6,translate("Saturday")) +week.default='*' + +e=s:option(Value,"hour",translate("Hour")) +e.datatype = "range(0,23)" +e.rmempty = false +e.default = 4 + +e=s:option(Value,"minute",translate("Minute")) +e.datatype = "range(0,59)" +e.rmempty = false +e.default = 0 + +e=s:option(Flag,"enable",translate("Enable")) +e.rmempty = false +e.default=0 + +m.apply_on_parse = true +m.on_after_apply = function(self,map) + io.popen("/etc/init.d/autotimeset start") +end +return m diff --git a/luci-app-autotimeset/luasrc/model/cbi/autotimeset/base.lua b/luci-app-autotimeset/luasrc/model/cbi/autotimeset/base.lua new file mode 100644 index 00000000..dcc4a94b --- /dev/null +++ b/luci-app-autotimeset/luasrc/model/cbi/autotimeset/base.lua @@ -0,0 +1,83 @@ +local o=require"luci.dispatcher" +local e=require("luci.model.ipkg") +local s=require"nixio.fs" +local e=luci.model.uci.cursor() +local m,s,e + +m=Map("autotimeset",translate("Scheduled task/startup task settings"),translate("The original [Timing Settings] includes scheduled task execution and startup task execution. Presets include over 10 functions, including restart, shutdown, network restart, memory release, system cleaning, network sharing, network shutdown, automatic detection of network disconnects and reconnection, MWAN3 load balancing detection of reconnection, and custom scripts
") .. +translate("N1-N5 is continuous, N1, N3, N5 is discontinuous, */N represents every N hours or every N minutes.The week can only be 0~6, the hour can only be 0~23, the minute can only be 0~59, the unavailable time is 48 hours.") .. +translate("   ")) + +s = m:section(TypedSection, 'global') +s.anonymous=true + +e=s:option(TextValue, "customscript" ,translate("Edit Custom Script")) +e.description = translate("Only by editing the content of the custom script well and scheduling the custom script task can it be executed effectively.") +e.rows = 5 +e.default = '#!/bin/sh' +e.rmempty = false + +s=m:section(TypedSection,"stime","") +s.addremove=true +s.anonymous=true +s.template = "cbi/tblsection" + +e=s:option(ListValue,"stype",translate("Scheduled Type")) +e:value(1,translate("Scheduled Reboot")) +e:value(2,translate("Scheduled Poweroff")) +e:value(3,translate("Scheduled ReNetwork")) +e:value(4,translate("Scheduled RestartSamba")) +e:value(5,translate("Scheduled Restartwan")) +e:value(6,translate("Scheduled Closewan")) +e:value(7,translate("Scheduled Clearmem")) +e:value(8,translate("Scheduled Sysfree")) +e:value(9,translate("Scheduled DisReconn")) +e:value(10,translate("Scheduled DisRereboot")) +e:value(11,translate("Scheduled Restartmwan3")) +e:value(12,translate("Scheduled Customscript")) +e.default=2 + +e=s:option(ListValue,"ttype",translate("Task Type")) +e:value(0,translate("Scheduled task execution")) +e:value(1,translate("Startup task")) +e.default=0 + +e=s:option(Value,"delay",translate("Startup delay time")) +e.default=10 + +e=s:option(Value,"month",translate("Month(0~11)")) +e.rmempty = false +e.default = '*' + +week=s:option(Value,"week",translate("Week Day(0~6)")) +week.rmempty = true +week:value('*',translate("Everyday")) +week:value(0,translate("Sunday")) +week:value(1,translate("Monday")) +week:value(2,translate("Tuesday")) +week:value(3,translate("Wednesday")) +week:value(4,translate("Thursday")) +week:value(5,translate("Friday")) +week:value(6,translate("Saturday")) +week.default='*' + +e=s:option(Value,"hour",translate("Hour(0~23)")) +e.rmempty = false +e.default = 0 + +e=s:option(Value,"minute",translate("Minute(0~59)")) +e.rmempty = false +e.default = 0 + +e=s:option(Flag,"enable",translate("Enable")) +e.rmempty = false +e.default=0 + +m.apply_on_parse = true +m.on_after_apply = function(self,map) + luci.sys.exec("/etc/init.d/autotimeset start") +end + +return m diff --git a/luci-app-autotimeset/luasrc/model/cbi/autotimeset/log.lua b/luci-app-autotimeset/luasrc/model/cbi/autotimeset/log.lua new file mode 100644 index 00000000..63e3c543 --- /dev/null +++ b/luci-app-autotimeset/luasrc/model/cbi/autotimeset/log.lua @@ -0,0 +1,13 @@ +local fs = require "nixio.fs" +local uci = require"luci.model.uci".cursor() +local f, t +f = SimpleForm("logview") +f.reset = false +f.submit = false +t=f:field(TextValue,"conf") + +t.rmempty=true +t.rows=20 +t.template="autotimeset/log" +t.readonly="readonly" +return f diff --git a/luci-app-autotimeset/luasrc/view/autotimeset/log.htm b/luci-app-autotimeset/luasrc/view/autotimeset/log.htm new file mode 100644 index 00000000..0f1b8590 --- /dev/null +++ b/luci-app-autotimeset/luasrc/view/autotimeset/log.htm @@ -0,0 +1,54 @@ +<%+cbi/valueheader%> + +<%:Reverse%> + + + +<%+cbi/valuefooter%> \ No newline at end of file diff --git a/luci-app-autotimeset/po/zh-cn/autotimeset.po b/luci-app-autotimeset/po/zh-cn/autotimeset.po new file mode 100644 index 00000000..ebb4ecc8 --- /dev/null +++ b/luci-app-autotimeset/po/zh-cn/autotimeset.po @@ -0,0 +1,91 @@ + +msgid "The original [Timing Settings] includes scheduled task execution and startup task execution. Presets include over 10 functions, including restart, shutdown, network restart, memory release, system cleaning, network sharing, network shutdown, automatic detection of network disconnects and reconnection, MWAN3 load balancing detection of reconnection, and custom scripts
" +msgstr "任务设置包括定时任务执行和开机启动任务执行,预置:重启、关机、重启网络、释放内存、系统清理、网络共享、关闭网络、自动检测断网重连、自动检测断网重启、MWAN3负载均衡检测重连、自定义脚本等10多个功能.
" + +msgid "N1-N5 is continuous, N1, N3, N5 is discontinuous, */N represents every N hours or every N minutes.The week can only be 0~6, the hour can only be 0~23, the minute can only be 0~59, the unavailable time is 48 hours." +msgstr "N1-N5连续,N1,N3,N5不连续,*/N表示每N小时或每N分钟。月份范围0-11,星期范围0~6,小时范围0~23,分钟范围0~59,不可用72小时或者90分钟等连续范围。" + +msgid "Scheduled task/startup task settings" +msgstr "定时执行任务/开机启动任务设置" + +msgid "Scheduled Setting" +msgstr "任务设置" + +msgid "Test/Verify Settings" +msgstr "测试/验证设置" + +msgid "Scheduled Type" +msgstr "任务名称" + +msgid "Task Type" +msgstr "任务类型" + +msgid "Scheduled task execution" +msgstr "定时执行任务" + +msgid "Startup task" +msgstr "开机启动任务" + +msgid "Startup delay time" +msgstr "延迟时间【开机用】" + +msgid "Log" +msgstr "日志" + +msgid "Scheduled Reboot" +msgstr "重启机器" + +msgid "Scheduled Poweroff" +msgstr "关闭机器" + +msgid "Scheduled ReNetwork" +msgstr "重启网络" + +msgid "Scheduled RestartSamba" +msgstr "重启网络共享" + +msgid "Scheduled Restartwan" +msgstr "重启WAN" + +msgid "Scheduled Closewan" +msgstr "关闭网络" + +msgid "Scheduled Clearmem" +msgstr "释放内存" + +msgid "Scheduled Sysfree" +msgstr "系统清理(会重启机器)" + +msgid "Scheduled DisReconn" +msgstr "检测断网重连" + +msgid "Scheduled DisRereboot" +msgstr "检测断网重启" + +msgid "Scheduled Restartmwan3" +msgstr "检测MWAN3失联重启服务" + +msgid "Edit Custom Script" +msgstr "编辑自定义脚本" + +msgid "Scheduled Customscript" +msgstr "自定义脚本" + +msgid "Only by editing the content of the custom script well and scheduling the custom script task can it be executed effectively." +msgstr "编辑好自定义脚本内容,自定义脚本任务才能有效执行。" + +msgid "Month(0~11)" +msgstr "月份(0~11)【定时用】" + +msgid "Week Day(0~6)" +msgstr "星期(0~6)【定时用】" + +msgid "Everyday" +msgstr "每天【定时用】" + +msgid "Hour(0~23)" +msgstr "小时(0~23)【定时用】" + +msgid "Minute(0~59)" +msgstr "分钟(0~59)【定时用】" + diff --git a/luci-app-autotimeset/po/zh_Hans b/luci-app-autotimeset/po/zh_Hans new file mode 120000 index 00000000..41451e4a --- /dev/null +++ b/luci-app-autotimeset/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-autotimeset/root/etc/autotimeset/timesetcustomscript b/luci-app-autotimeset/root/etc/autotimeset/timesetcustomscript new file mode 100644 index 00000000..1a248525 --- /dev/null +++ b/luci-app-autotimeset/root/etc/autotimeset/timesetcustomscript @@ -0,0 +1 @@ +#!/bin/sh diff --git a/luci-app-autotimeset/root/etc/config/autotimeset b/luci-app-autotimeset/root/etc/config/autotimeset new file mode 100644 index 00000000..34280e07 --- /dev/null +++ b/luci-app-autotimeset/root/etc/config/autotimeset @@ -0,0 +1,75 @@ + +config global + option enabled '0' + option customscript '#!/bin/sh' + +config stime + option hour '*/4' + option stype '7' + option week '*' + option minute '0' + option month '*' + option enable '0' + option ttype '0' + option delay '10' + +config stime + option minute '0' + option month '*' + option hour '*/5' + option enable '0' + option week '1,3,5' + option ttype '1' + option delay '10' + option stype '1' + +config stime + option week '*' + option month '*' + option enable '0' + option ttype '0' + option delay '10' + option stype '10' + option hour '0' + option minute '*/5' + +config stime + option week '*' + option minute '0' + option stype '2' + option hour '1' + option month '*' + option enable '0' + option ttype '0' + option delay '10' + +config stime + option week '*' + option minute '0' + option hour '3' + option month '*' + option enable '0' + option ttype '0' + option delay '10' + option stype '6' + +config stime + option week '*' + option hour '0' + option minute '*/5' + option month '*' + option stype '11' + option ttype '1' + option delay '20' + option enable '0' + +config stime + option month '*' + option week '*' + option hour '0' + option enable '0' + option minute '*/5' + option stype '12' + option ttype '1' + option delay '30' + diff --git a/luci-app-autotimeset/root/etc/init.d/autotimeset b/luci-app-autotimeset/root/etc/init.d/autotimeset new file mode 100644 index 00000000..154ea277 --- /dev/null +++ b/luci-app-autotimeset/root/etc/init.d/autotimeset @@ -0,0 +1,117 @@ +#!/bin/sh /etc/rc.common +#copyright by sirpdboy + +START=95 +STOP=10 +TMP=/etc/autotimeset +LOG=$TMP/autotimeset.log +TT=/etc/init.d/autotimesetrun +CR=/etc/crontabs/root +[ ! -d $TMP ] && mkdir -p $TMP 2>/dev/null +[ -s $LOG ] && echo ' ' >> $LOG +run_autotimeset() +{ +ssum=$(grep -c stime /etc/config/autotimeset) +customscript=$(uci -q get autotimeset.@global[0].customscript ) || customscript='#!/bin/sh' +script=`echo $customscript | grep '#!/bin/sh'` >/dev/null 2>&1 +[ $script ] && echo $script > /etc/autotimeset/timesetcustomscript || { + echo '#!/bin/sh' >/etc/autotimeset/timesetcustomscript + echo $customscript >>/etc/autotimeset/timesetcustomscript +} +echo 'start(){' >>$TT +for i in $(seq 0 $((ssum-1))) +do + enable=$(uci -q get autotimeset.@stime[$i].enable ) + if [ "x$enable" = "x1" ]; then + month=$(uci -q get autotimeset.@stime[$i].month ) || month="*" + stype=$(uci -q get autotimeset.@stime[$i].stype ) + week=$(uci -q get autotimeset.@stime[$i].week ) || week="*" + minute=$(uci -q get autotimeset.@stime[$i].minute ) || minute="00" + hour=$(uci -q get autotimeset.@stime[$i].hour ) || hour="*" + ttype=$(uci -q get autotimeset.@stime[$i].ttype ) || ttype=0 + delay=$(uci -q get autotimeset.@stime[$i].delay ) || delay=10 + [ "x$hour" = "x0" ] && hour="00" + [ "x$minute" = "x0" ] && minute="00" + case "$stype" in + 1) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler reboot Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler reboot Startup_task" >>$TT + ;; + 2) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler poweroff Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler poweroff Startup_task" >>$TT + ;; + 3) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler network Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler network Startup_task" >>$TT + ;; + 4) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler restartsamba Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler restartsamba Startup_task" >>$TT + ;; + 5) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler restartwan Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler restartwan Startup_task" >>$TT + ;; + 6) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler closewan Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler closewan Startup_task" >>$TT + ;; + 7) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler clearmem Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler clearmem Startup_task" >>$TT + ;; + 8) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler sysfree Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler reboot Startup_task" >>$TT + ;; + 9) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler disreconn Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler disreconn Startup_task" >>$TT + ;; + 10) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler disrereboot Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler disrereboot Startup_task" >>$TT + ;; + + 11) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler restartmwan3 Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler restartmwan3 Startup_task" >>$TT + ;; + 12) + local cmd="$minute $hour * $month $week /usr/bin/timesethandler customscript Scheduled_task" + [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler customscript Startup_task" >>$TT + ;; + esac + + fi + + done + echo '}' >>$TT +} + +start() +{ + del_cru + [ -n "`tail -c1 $CR`" ] && echo >> $CR + run_autotimeset + /etc/init.d/cron reload +} + +stop() +{ + del_cru + /etc/init.d/cron reload +} + +restart() +{ + start +} + +del_cru() +{ + echo -e '#!/bin/sh /etc/rc.common\n\nSTART=99\n' > $TT + sed -i '/timesethandler/d' $CR >/dev/null 2>&1 +} + diff --git a/luci-app-autotimeset/root/etc/init.d/autotimesetrun b/luci-app-autotimeset/root/etc/init.d/autotimesetrun new file mode 100644 index 00000000..2e17a228 --- /dev/null +++ b/luci-app-autotimeset/root/etc/init.d/autotimesetrun @@ -0,0 +1,6 @@ +#!/bin/sh /etc/rc.common + +START=99 +start(){ + +} \ No newline at end of file diff --git a/luci-app-autotimeset/root/etc/uci-defaults/40_luci-app-autotimeset b/luci-app-autotimeset/root/etc/uci-defaults/40_luci-app-autotimeset new file mode 100644 index 00000000..94da7287 --- /dev/null +++ b/luci-app-autotimeset/root/etc/uci-defaults/40_luci-app-autotimeset @@ -0,0 +1,10 @@ +#!/bin/sh +chmod +x /etc/init.d/autotimeset /usr/bin/timesethandler +uci -q batch <<-EOF >/dev/null + delete ucitrack.@autotimeset[-1] + add ucitrack autotimeset + set ucitrack.@autotimeset[-1].init=autotimeset + commit ucitrack +EOF +rm -rf /tmp/luci-modulecache /tmp/luci-indexcache* +exit 0 diff --git a/luci-app-autotimeset/root/etc/uci-defaults/luci--autotimeset b/luci-app-autotimeset/root/etc/uci-defaults/luci--autotimeset new file mode 100644 index 00000000..37d82b3a --- /dev/null +++ b/luci-app-autotimeset/root/etc/uci-defaults/luci--autotimeset @@ -0,0 +1,14 @@ +#!/bin/sh +chmod +x /etc/init.d/autotimeset /usr/bin/timesethandler /etc/init.d/autotimesetrun +uci -q batch <<-EOF >/dev/null + delete ucitrack.@autotimeset[-1] + add ucitrack autotimeset + set ucitrack.@autotimeset[-1].init="autotimeset" + commit ucitrack + delete ucitrack.@autotimesetrun[-1] + add ucitrack autotimesetrun + set ucitrack.@autotimesetrun[-1].init=autotimesetrun + commit ucitrack +EOF +rm -rf /tmp/luci-modulecache /tmp/luci-indexcache* +exit 0 \ No newline at end of file diff --git a/luci-app-autotimeset/root/usr/bin/timesethandler b/luci-app-autotimeset/root/usr/bin/timesethandler new file mode 100644 index 00000000..fc44c451 --- /dev/null +++ b/luci-app-autotimeset/root/usr/bin/timesethandler @@ -0,0 +1,127 @@ +#!/bin/sh +# author 2021 jjm2473 +# author 2020-2023 sirpdboy +TMP_T=/var/autotimeset/autotimeset.tmp +LOG=/etc/autotimeset/autotimeset.log +log(){ + echo "$(date +'%Y-%m-%d %H:%M:%S') $*" >> $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 +} + +remwan3() { +while true; do + status=$(/usr/sbin/mwan3 status | grep error) + if [ -z $status ]; then + log "Mwan3 is OK" + exit 1 + else + log "mwan3 restarting ..." + /usr/sbin/mwan3 restart + fi + sleep 60 +done + +} + +disreconnwan() { +i=0 +PingA=114.114.114.114 +PingB=223.5.5.5 +while [[ $i -lt 5 ]] +do + if /bin/ping -c 1 $PingA >/dev/null + then + PingErr=0 + break + else + if /bin/ping -c 1 $PingB >/dev/null + then + PingErr=0 + break + else + i=$(($i + 1)) + PingErr=1 + sleep 10 + fi + fi +done +} + +trigger() { + case "$1" in + reboot) + reboot + ;; + poweroff) + poweroff + ;; + network) + /etc/init.d/network restart + ;; + clearmem) + sync && echo 3 > /proc/sys/vm/drop_caches + ;; + sysfree) + cd /overlay + rm -rf `ls | egrep -v '(upper|.fs_state)'` + cd upper + rm -rf `ls | egrep -v '(etc)'` + cd etc + rm -rf `ls | egrep -v '(config|ssr|bench.log|shadow)'` + rm -rf /var/luci-modulecache + rm -rf /var/luci-indexcache + rm -rf /tmp/cache/* + reboot + ;; + restartsamba) + /etc/init.d/ksmdb restart + /etc/init.d/samba restart + /etc/init.d/samba4 restart + ;; + restartwan) + ifup wan + log "Redial succeeded!" + ;; + closewan) + ifdown wan + ;; + disreconn) + disreconnwan + if [ $PingErr = 1 ]; then + ifup wan + log "Redial succeeded!" + fi + ;; + disrereboot) + disreconnwan + if [ $PingErr = 1 ]; then + log "Reboot succeeded!" + reboot + fi + ;; + restartmwan3) + [ -s /usr/sbin/mwan3 ] && remwan3 + ;; + customscript) + script=`cat /etc/autotimeset/timesetcustomscript ` >/dev/null 2>&1 + [ $script ] && source /etc/autotimeset/timesetcustomscript + log "CustomScript succeeded!" + ;; + esac +} + +limit_log $LOG 500 +PingErr=0 +log "Scheduled operation $2: $1" && trigger $1 + diff --git a/luci-app-autotimeset/root/usr/bin/timesetsecurity b/luci-app-autotimeset/root/usr/bin/timesetsecurity new file mode 100644 index 00000000..ae139978 --- /dev/null +++ b/luci-app-autotimeset/root/usr/bin/timesetsecurity @@ -0,0 +1,119 @@ +#! /bin/bash + +#ԴĴ +tryErrNum=10 +#Դڶ೤ʱ䷶Χλ룬tryErrNumһЧ +tryTimeOut=300 +#ҪĶipַŸ,Ϊ +dropIpList="" +#logreadʶַBad password attempt for ssh root¼logluci: failed login on ǵ¼weblog +errStr=("Bad password attempt for" "luci: failed login on") +#ѯlogread ־ʱ,λ +timesleep=30 + +#Ӹַ־ȡҪip׷ӵ dropIpList +getdropip() { + #Թ˵־ + lines=$(logread | grep $1 | sed -n '1!G;h;$p') + linesNum=$(echo -n "$lines" | wc -l) + #ֵ + declare -A dict + # + if [ "$linesNum" -gt "$tryErrNum" ];then + while read line; + do + ip=$(echo -n "$line" | awk '{print $NF}' | awk -F":" '{print $1}') + time=$(echo -n "$line" | awk '{print $4}' | awk -F":" '{sum += $1*3600 + $2*60 + $3};END {print sum}') + ok=${dict[$ip]} + if [ -z $ok ];then + dict[$ip]=1 + time=$(date | awk '{print $4}' | awk -F":" '{sum += $1*3600 + $2*60+ $3};END {print sum}') + dict[${ip}_endtime]=$time + else + if [ ${dict[$ip]} -lt "$tryErrNum" ];then + dict[$ip]=$(expr ${dict[$ip]} + 1) + dict[${ip}_starttime]=$time + fi + fi + done < <(echo -n "$lines") + + for key in ${!dict[@]}; + do + if ! [[ "$key" =~ "starttime" ]] && ! [[ "$key" =~ "endtime" ]];then + if [ ${dict[$key]} -eq "$tryErrNum" ];then + timeDiff=$(expr ${dict[${key}_endtime]} - ${dict[${key}_starttime]}) + if [ "$timeDiff" -gt 0 ] && [ "$timeDiff" -lt "$tryTimeOut" ];then + #׷Ҫip + dropIpList=$dropIpList,$key + fi + fi + fi + done + + fi + +} + +#errStr ֱַlogƥ䣬ȡҪip +startGetDropIp(){ + i=0 + while : + do + errstr=${errStr[$i]} + if [ -z "$errstr" ];then + break + fi + i=$(expr $i + 1) + + getdropip $errstr + + done +} + +#ʼipset iptable +intEnv(){ + ipset list BlockIpList + if ! [ "$?" == 0 ]; + then + ipset create BlockIpList hash:net timeout 300 + iptables -I INPUT -m set --match-set BlockIpList src -p tcp -m tcp --dport 22 -j DROP + iptables -I INPUT -m set --match-set BlockIpList src -p tcp -m tcp --dport 80 -j DROP + iptables -I INPUT -s 192.168.0.0/16 -j ACCEPT + fi +} +#Ҫipӵipset BlockIpList +ipsetAddIp(){ + dropIpListNew="" + for ip in $(echo -n "$dropIpList" | sed 's/,/ /g') + do + ipset add BlockIpList $ip + if [ "$?" -eq 0 ];then + dropIpListNew=$dropIpListNew,$ip + fi + done +} + +sendlogger(){ + if [ -n "$dropIpListNew" ];then + echo -e "autotimeset:MyOpenwrt IP:$dropIpListNew" + logger -p warn -t "autotimeset" ",ʱ: IP:$dropIpListNew ---- ʱ䣺`date `" + fi +} + +#鵱ǰǷ +PocessNum=$(ps | grep timesetsecurity | grep -v grep | wc -l) +if [ "$PocessNum" -gt 2 ];then + #Ѿڽֱ̣˳ǰ + kill -9 $$ +else + intEnv + + while : + do + sleep $timesleep + dropIpList="" + startGetDropIp + ipsetAddIp + sendlogger + done +fi diff --git a/luci-app-autotimeset/root/usr/share/rpcd/acl.d/luci-app-autotimeset.json b/luci-app-autotimeset/root/usr/share/rpcd/acl.d/luci-app-autotimeset.json new file mode 100644 index 00000000..0e858925 --- /dev/null +++ b/luci-app-autotimeset/root/usr/share/rpcd/acl.d/luci-app-autotimeset.json @@ -0,0 +1,11 @@ +{ + "luci-app-autotimeset": { + "description": "Grant UCI access for luci-app-autotimeset", + "read": { + "uci": [ "autotimeset" ] + }, + "write": { + "uci": [ "autotimeset" ] + } + } +} diff --git a/luci-app-autoupdate/LICENSE b/luci-app-autoupdate/LICENSE new file mode 100644 index 00000000..f288702d --- /dev/null +++ b/luci-app-autoupdate/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/luci-app-autoupdate/Makefile b/luci-app-autoupdate/Makefile new file mode 100644 index 00000000..f50f92d1 --- /dev/null +++ b/luci-app-autoupdate/Makefile @@ -0,0 +1,11 @@ +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for AutoBuild Firmware/AutoUpdate.sh +LUCI_DEPENDS:=+curl +wget +bash +LUCI_PKGARCH:=all +PKG_VERSION:=1 +PKG_RELEASE:=20210221 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-autoupdate/luasrc/controller/autoupdate.lua b/luci-app-autoupdate/luasrc/controller/autoupdate.lua new file mode 100644 index 00000000..54dc70e6 --- /dev/null +++ b/luci-app-autoupdate/luasrc/controller/autoupdate.lua @@ -0,0 +1,5 @@ +module("luci.controller.autoupdate",package.seeall) + +function index() + entry({"admin","system","autoupdate"},cbi("autoupdate"),_("AutoUpdate"),99) +end diff --git a/luci-app-autoupdate/luasrc/model/cbi/autoupdate.lua b/luci-app-autoupdate/luasrc/model/cbi/autoupdate.lua new file mode 100644 index 00000000..d34f40d7 --- /dev/null +++ b/luci-app-autoupdate/luasrc/model/cbi/autoupdate.lua @@ -0,0 +1,55 @@ +require("luci.sys") + +m=Map("autoupdate",translate("AutoUpdate"),translate("AutoUpdate LUCI supports one-click firmware upgrade and scheduled upgrade")) + +s=m:section(TypedSection,"login","") +s.addremove=false +s.anonymous=true + +o = s:option(Flag, "enable", translate("Enable AutoUpdate"),translate("Automatically update firmware during the specified time")) +o.default = 0 +o.optional = false + +week=s:option(ListValue,"week",translate("xWeek Day")) +week:value(7,translate("Everyday")) +week:value(1,translate("Monday")) +week:value(2,translate("Tuesday")) +week:value(3,translate("Wednesday")) +week:value(4,translate("Thursday")) +week:value(5,translate("Friday")) +week:value(6,translate("Saturday")) +week:value(0,translate("Sunday")) +week.default=0 + +hour=s:option(Value,"hour",translate("xHour")) +hour.datatype = "range(0,23)" +hour.rmempty = false + +pass=s:option(Value,"minute",translate("xMinute")) +pass.datatype = "range(0,59)" +pass.rmempty = false + +local github_url = luci.sys.exec("grep Github= /bin/openwrt_info | cut -c8-100") +o=s:option(Value,"github",translate("Github Url")) +o.default=github_url + +luci.sys.call ( "/usr/share/autoupdate/Check_Update.sh > /dev/null") +local cloud_version = luci.sys.exec("cat /tmp/cloud_version") +local current_version = luci.sys.exec("grep CURRENT_Version= /etc/openwrt_ver | cut -c17-100") +local current_model = luci.sys.exec("jsonfilter -e '@.model.id' < /etc/board.json | tr ',' '_'") +local firmware_type = luci.sys.exec("grep CURRENT_Model= /etc/openwrt_ver | cut -c15-100") +local luci_edition = luci.sys.exec("grep NEI_Luci= /etc/openwrt_ver | cut -c10-100") + +button_upgrade_firmware = s:option (Button, "_button_upgrade_firmware", translate("Upgrade to Latested Version"), +translatef("若有更新可点击上方 手动更新 后请耐心等待至路由器重启.") .. "

当前固件版本: " .. current_version .. "
云端固件版本: " .. cloud_version.. "

设备名称: " .. current_model .. "
内核版本: " .. luci_edition .. "
固件类型: " .. firmware_type) +button_upgrade_firmware.inputtitle = translate ("Do Upgrade") +button_upgrade_firmware.write = function() + luci.sys.call ("bash /bin/AutoUpdate.sh -u > /dev/null") +end + +local e=luci.http.formvalue("cbi.apply") +if e then + io.popen("/etc/init.d/autoupdate restart") +end + +return m diff --git a/luci-app-autoupdate/po/zh-cn/autoupdate.po b/luci-app-autoupdate/po/zh-cn/autoupdate.po new file mode 100644 index 00000000..e9b5fd63 --- /dev/null +++ b/luci-app-autoupdate/po/zh-cn/autoupdate.po @@ -0,0 +1,41 @@ +msgid "AutoUpdate" +msgstr "定时更新" + +msgid "xWeek Day" +msgstr "更新时间" + +msgid "Everyday" +msgstr "每天" + +msgid "Day" +msgstr "天" + +msgid "xHour" +msgstr "时 [0~23]" + +msgid "xMinute" +msgstr "分 [0~59]" + +msgid "Check Update" +msgstr "检查更新" + +msgid "Enable AutoUpdate" +msgstr "启用定时更新" + +msgid "AutoUpdate LUCI supports one-click firmware upgrade and scheduled upgrade" +msgstr "定时更新 LUCI 支持手动更新以及定时更新固件" + +msgid "Do Upgrade" +msgstr "手动更新" + +msgid "Upgrade to Latested Version" +msgstr "更新固件" + +msgid "Automatically update firmware during the specified time" +msgstr "在指定时间段自动检测云端版本,若有新版本自动更新固件" + +msgid "Github Url" +msgstr "Github 地址" + +msgid "Please wait patiently after clicking Do Upgrade button" +msgstr "点击手动更新按钮后请耐心等待至路由器重启" diff --git a/luci-app-autoupdate/po/zh_Hans b/luci-app-autoupdate/po/zh_Hans new file mode 120000 index 00000000..41451e4a --- /dev/null +++ b/luci-app-autoupdate/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-autoupdate/root/etc/config/autoupdate b/luci-app-autoupdate/root/etc/config/autoupdate new file mode 100644 index 00000000..304ff347 --- /dev/null +++ b/luci-app-autoupdate/root/etc/config/autoupdate @@ -0,0 +1,7 @@ +config login + option enable '0' + option forceupdate '0' + option week '7' + option hour '23' + option minute '0' + diff --git a/luci-app-autoupdate/root/etc/init.d/autoupdate b/luci-app-autoupdate/root/etc/init.d/autoupdate new file mode 100644 index 00000000..beb23482 --- /dev/null +++ b/luci-app-autoupdate/root/etc/init.d/autoupdate @@ -0,0 +1,48 @@ +#!/bin/bash /etc/rc.common +START=99 + +run_autoupdate() +{ + local enable + config_get_bool enable $1 enable + if [ $enable == "1" ]; then + local minute + local hour + config_get week $1 week + config_get minute $1 minute + config_get hour $1 hour + [ "$week" == 7 ] && week="*" + sed -i '/AutoUpdate/d' /etc/crontabs/root >/dev/null 2>&1 + echo "$minute $hour * * $week bash /bin/AutoUpdate.sh -u" >> /etc/crontabs/root + else + sed -i '/AutoUpdate/d' /etc/crontabs/root >/dev/null 2>&1 + fi + if [ -f /bin/AutoUpdate.sh ] && [ -f /bin/openwrt_info ];then + custom_github_url="$(uci get autoupdate.@login[0].github)" + current_github_url="$(grep Github= /bin/openwrt_info | cut -c8-100)" + [[ -n "${custom_github_url}" ]] && { + [[ "${custom_github_url}" != "${current_github_url}" ]] && { + sed -i "s?${current_github_url}?${custom_github_url}?g" /bin/openwrt_info + } + } + fi + /etc/init.d/cron restart +} + + +start() +{ + config_load autoupdate + config_foreach run_autoupdate login +} + +stop() +{ + sed -i '/AutoUpdate/d' /etc/crontabs/root >/dev/null 2>&1 +} + +restart() +{ + stop + start +} diff --git a/luci-app-autoupdate/root/etc/uci-defaults/autoupdate b/luci-app-autoupdate/root/etc/uci-defaults/autoupdate new file mode 100644 index 00000000..38e88985 --- /dev/null +++ b/luci-app-autoupdate/root/etc/uci-defaults/autoupdate @@ -0,0 +1,10 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@autoupdate[-1] + add ucitrack autoupdate + set ucitrack.@autoupdate[-1].init=autoupdate + commit ucitrack +EOF + +exit 0 diff --git a/luci-app-autoupdate/root/usr/share/autoupdate/Check_Update.sh b/luci-app-autoupdate/root/usr/share/autoupdate/Check_Update.sh new file mode 100644 index 00000000..2712d6a4 --- /dev/null +++ b/luci-app-autoupdate/root/usr/share/autoupdate/Check_Update.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# https://github.com/Hyy2001X/AutoBuild-Actions +# AutoBuild Module by Hyy2001 + +rm -f /tmp/cloud_version +rm -f /tmp/Version_Tags +if [[ -f /bin/openwrt_info ]]; then + chmod +x /bin/openwrt_info + bash /bin/AutoUpdate.sh -w +else + echo "未检测到openwrt_info文件,无法运行更新程序!" > /tmp/cloud_version + exit 1 +fi +[[ ! -f /tmp/Version_Tags ]] && echo "未检测到云端版本,请检查网络,或您的仓库为私库,或您修改的Github地址有错误,或发布已被删除,或再次刷新网页试试!" > /tmp/cloud_version && exit 1 +chmod +x /tmp/Version_Tags && source /tmp/Version_Tags +if [[ -n "${CLOUD_Version}" ]];then + if [[ "${CURRENT_Version}" -eq "${CLOUD_Version}" ]];then + Checked_Type="已是最新" + echo "${CLOUD_Version} [${Checked_Type}]" > /tmp/cloud_version + elif [[ "${CURRENT_Version}" -gt "${CLOUD_Version}" ]];then + Checked_Type="发现更高版本固件可更新" + echo "${CLOUD_Version} [${Checked_Type}]" > /tmp/cloud_version + elif [[ "${CURRENT_Version}" -lt "${CLOUD_Version}" ]];then + Checked_Type="云端最高版本固件,低于您现在所安装的版本" + echo "${CLOUD_Version} [${Checked_Type}]" > /tmp/cloud_version + fi +else + echo "没检测到云端固件,您可能把云端固件删除了,或格式不对称,比如爱快虚拟机安装EIF格式都会变成Legacy引导!" > /tmp/cloud_version +fi +exit 0 diff --git a/luci-app-autoupdate/root/usr/share/rpcd/acl.d/luci-app-autoupdate.json b/luci-app-autoupdate/root/usr/share/rpcd/acl.d/luci-app-autoupdate.json new file mode 100644 index 00000000..86d43bdd --- /dev/null +++ b/luci-app-autoupdate/root/usr/share/rpcd/acl.d/luci-app-autoupdate.json @@ -0,0 +1,11 @@ +{ + "luci-app-autoupdate": { + "description": "Grant UCI access for luci-app-autoupdate", + "read": { + "uci": [ "autoupdate" ] + }, + "write": { + "uci": [ "autoupdate" ] + } + } +} 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-beardropper/.gitattributes b/luci-app-beardropper/.gitattributes new file mode 100644 index 00000000..dfe07704 --- /dev/null +++ b/luci-app-beardropper/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/luci-app-beardropper/.gitignore b/luci-app-beardropper/.gitignore new file mode 100644 index 00000000..9bea4330 --- /dev/null +++ b/luci-app-beardropper/.gitignore @@ -0,0 +1,2 @@ + +.DS_Store diff --git a/luci-app-beardropper/LICENSE b/luci-app-beardropper/LICENSE new file mode 100644 index 00000000..e963df82 --- /dev/null +++ b/luci-app-beardropper/LICENSE @@ -0,0 +1,622 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + diff --git a/luci-app-beardropper/Makefile b/luci-app-beardropper/Makefile new file mode 100644 index 00000000..bbdbdcc0 --- /dev/null +++ b/luci-app-beardropper/Makefile @@ -0,0 +1,22 @@ +# +# Copyright (C) 2020 Nate Ding +# +# This is free software, licensed under the GNU General Public License v3. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +LUCI_Title:=LuCI Support for BearDropper +LUCI_PKGARCH=all + +PKG_VERSION:=1.1 +PKG_RELEASE:=20200522 + +PKG_MAINTANINER:=Nate Ding +PKG_LICENSE:=GLPv3 +PKG_LICENSE_FILES:=LICENSE + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-beardropper/README.md b/luci-app-beardropper/README.md new file mode 100644 index 00000000..efb0e223 --- /dev/null +++ b/luci-app-beardropper/README.md @@ -0,0 +1,59 @@ +luci-app-beardropper +=== + +[Preview][preview] +--- +luci-app-beardropper, a log examination script w/ iptables firewall rule generation response. + + This is the LuCI app built for the elegant firewall rule generation on-the-fly script [bearDropper][bearDropper], only a few modifications were made to work with Luci. + + + +Targets/Devices +--- +Written in shell scripts, so it shall work all good on all devices. + + +Config +--- +The config file path is: `/etc/config/beardropper` and this is the uci configuration format. + + + +Compile +--- +RECOMMENDED!!!! (推荐使用右边的feeds---->)You can use [natelol feeds][feeds] + + +OR + + +0. Go under `openwrt/` + +1. Make your own local feeds, say a folder `mkdir yourfeeds` + +2. Clone master under feeds to have `git clone https://github.com/natelol/luci-app-beardropper yourefeeds/luci-app-beardropper` + +3. Append `src-link yourfeeds /path/to/openwrt/yourfeeds` in the file `openwrt/feeds.conf(.default)` + +4. Run following scripts under `openwrt`: + +```bash +# Update feeds +./scripts/feeds update -a +./scripts/feeds install -a + +# M select luci-app-beardropper in LuCI -> 3. Applications also 2. Modules->Translations if you want translations together +make menuconfig +# compile +make package/feeds/luci-app-beardropper/compile V=99 +``` + +Logs +--- +`2020-05-21` Added a new tab listing the blocked IPs. + + + [preview]: https://github.com/natelol/luci-app-beardropper/tree/master/preview + [bearDropper]: https://github.com/robzr/bearDropper + [feeds]: https://github.com/natelol/natelol \ No newline at end of file diff --git a/luci-app-beardropper/luasrc/controller/beardropper.lua b/luci-app-beardropper/luasrc/controller/beardropper.lua new file mode 100755 index 00000000..c28f0b34 --- /dev/null +++ b/luci-app-beardropper/luasrc/controller/beardropper.lua @@ -0,0 +1,19 @@ +module("luci.controller.beardropper", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/beardropper") then + return + end + entry({"admin", "services", "beardropper"}, alias("admin", "services", "beardropper", "setting"),_("BearDropper"), 20).dependent = true + entry({"admin", "services", "beardropper", "status"}, call("act_status")) + entry({"admin", "services", "beardropper", "setting"}, cbi("beardropper/setting"), _("Setting"), 30).leaf= true + entry({"admin", "services", "beardropper", "log"}, form("beardropper/log"),_("Log"),40).leaf= true + --entry: +end + +function act_status() + local e={} + e.running = luci.sys.call("pgrep -f /usr/sbin/beardropper >/dev/null")==0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end \ No newline at end of file diff --git a/luci-app-beardropper/luasrc/model/cbi/beardropper/log.lua b/luci-app-beardropper/luasrc/model/cbi/beardropper/log.lua new file mode 100644 index 00000000..c725bcdf --- /dev/null +++ b/luci-app-beardropper/luasrc/model/cbi/beardropper/log.lua @@ -0,0 +1,17 @@ +f = SimpleForm("logview") +f.reset = false +f.submit = false +t = f:field(TextValue, "conf") +t.rmempty = true +t.rows = 20 +function t.cfgvalue() +local logs = luci.util.execi("logread | grep authpriv | grep beardropper") +local s = "" +for line in logs do +s = line .. "\n" .. s +end +return s +end +t.readonly="readonly" + +return f diff --git a/luci-app-beardropper/luasrc/model/cbi/beardropper/setting.lua b/luci-app-beardropper/luasrc/model/cbi/beardropper/setting.lua new file mode 100755 index 00000000..2735200b --- /dev/null +++ b/luci-app-beardropper/luasrc/model/cbi/beardropper/setting.lua @@ -0,0 +1,54 @@ + +m = Map("beardropper", translate("BearDropper"), +translate("luci-app-beardropper, the LuCI app built with the elegant firewall rule generation on-the-fly script bearDropper.

Should you have any questions, please refer to the repo: ")..[[luci-app-beardropper]] +) +m:chain("luci") + +m:section(SimpleSection).template="beardropper/status" + +s = m:section(TypedSection, "beardropper", translate("")) +s.anonymous = true +s.addremove = false + +-- TABS +s:tab("options", translate("Options")) +s:tab("blocked", translate("Blocked IP")) + +o = s:taboption("options", Flag, "enabled",translate("Enabled")) +o.default = 0 + +-- OPTIONS +o = s:taboption("options", ListValue, "defaultMode", translate("Running Mode")) +o.default = "follow" +o:value("follow", translate("Follow")) +o:value("entire", translate("Entire")) +o:value("today", translate("Today")) +o:value("wipe", translate("Wipe")) + + +o = s:taboption("options", Value, "attemptCount", translate("Attempt Tolerance"), translate("failure attempts from a given IP required to trigger a ban")) + +o = s:taboption("options", Value, "attemptPeriod", translate("Attempt Cycle"), translate("time period during which attemptCount must be exceeded in order to trigger a ban
Format: 1w2d3h4m5s represents 1week 2days 3hours 4minutes 5 seconds")) + +o = s:taboption("options", Value, "banLength", translate("Ban Period"), translate("how long a ban exist once the attempt threshold is exceeded")) + +o = s:taboption("options", ListValue, "logLevel", translate("Log Level")) +o.default = "1" +o:value("0", translate("Silent")) +o:value("1", translate("Default")) +o:value("2", translate("Verbose")) +o:value("3", translate("Debug")) + + +o = s:taboption("blocked", Value, "blocked", translate("Blocked IP List")) +o.template="cbi/tvalue" +o.rows=40 +o.wrap="off" +o.readonly="true" +function o.cfgvalue(e, e) + return luci.sys.exec("cat /tmp/beardropper.bddb | awk /'=1/'| awk -F '=' '{print $1}' | awk '{print substr($0,6)}' | awk 'gsub(/_/,\":\",$0)'") +end + + + +return m diff --git a/luci-app-beardropper/luasrc/view/beardropper/status.htm b/luci-app-beardropper/luasrc/view/beardropper/status.htm new file mode 100755 index 00000000..808b3a00 --- /dev/null +++ b/luci-app-beardropper/luasrc/view/beardropper/status.htm @@ -0,0 +1,22 @@ + + +
+

+ <%:Collecting data...%> +

+
\ No newline at end of file diff --git a/luci-app-beardropper/po/zh-cn b/luci-app-beardropper/po/zh-cn new file mode 120000 index 00000000..8d69574d --- /dev/null +++ b/luci-app-beardropper/po/zh-cn @@ -0,0 +1 @@ +zh_Hans \ No newline at end of file diff --git a/luci-app-beardropper/po/zh_Hans/beardropper.po b/luci-app-beardropper/po/zh_Hans/beardropper.po new file mode 100755 index 00000000..bcffc107 --- /dev/null +++ b/luci-app-beardropper/po/zh_Hans/beardropper.po @@ -0,0 +1,115 @@ +bearDropper#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:36 +msgid "Attempt Cycle" +msgstr "尝试登录时间段" + + +msgid "Setting" +msgstr "设置" + +msgid "Log" +msgstr "日志" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:34 +msgid "Attempt Tolerance" +msgstr "最大尝试登录次数" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:38 +msgid "Ban Period" +msgstr "封禁IP时长" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/controller/bearDropper.lua:7 +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:7 +msgid "BearDropper" +msgstr "" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:20 +msgid "Blocked IP" +msgstr "屏蔽列表" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:52 +msgid "Blocked IP List" +msgstr "已屏蔽IP列表" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:20 +msgid "Collecting data..." +msgstr "" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:45 +msgid "Debug" +msgstr "调试" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:43 +msgid "Default" +msgstr "默认" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:22 +msgid "Enabled" +msgstr "启用" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:29 +msgid "Entire" +msgstr "已有记录" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:28 +msgid "Follow" +msgstr "后台监控" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:40 +msgid "Log Level" +msgstr "日志等级" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:10 +msgid "NOT RUNNING" +msgstr "" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:19 +msgid "Options" +msgstr "选项" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:7 +msgid "RUNNING" +msgstr "" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:26 +msgid "Running Mode" +msgstr "运行模式" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:42 +msgid "Silent" +msgstr "安静" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:30 +msgid "Today" +msgstr "仅今日" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:44 +msgid "Verbose" +msgstr "详细" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:31 +msgid "Wipe" +msgstr "清除所有" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:34 +msgid "failure attempts from a given IP required to trigger a ban" +msgstr "尝试登录超过设定值次数的IP将被封禁" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:38 +msgid "how long a ban exist once the attempt threshold is exceeded" +msgstr "IP将被封禁设定的时间" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:8 +msgid "" +"luci-app-beardropper, the LuCI app built with the elegant firewall rule " +"generation on-the-fly script bearDropper.

Should you have any " +"questions, please refer to the repo:" +msgstr "" +"luci-app-beardropper, 是一款能够在开启公网访问之后对潜在的ssh attack进行防御" +"的脚本.

如果你在使用中有任何问题,请到项目中提问: " + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:36 +msgid "" +"time period during which attemptCount must be exceeded in order to trigger a " +"ban
Format: 1w2d3h4m5s represents 1week 2days 3hours 4minutes 5 seconds" +msgstr "" +"在设定的时间段内连续尝试失败
格式:1w2d3h4m5s代表1周2天3小时4分5秒" diff --git a/luci-app-beardropper/po/zh_Hant/beardropper.po b/luci-app-beardropper/po/zh_Hant/beardropper.po new file mode 100644 index 00000000..00c1da72 --- /dev/null +++ b/luci-app-beardropper/po/zh_Hant/beardropper.po @@ -0,0 +1,115 @@ +bearDropper#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:36 +msgid "Attempt Cycle" +msgstr "嘗試登錄時間段" + + +msgid "Setting" +msgstr "設置" + +msgid "Log" +msgstr "日誌" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:34 +msgid "Attempt Tolerance" +msgstr "最大嘗試登錄次數" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:38 +msgid "Ban Period" +msgstr "封禁IP時長" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/controller/bearDropper.lua:7 +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:7 +msgid "BearDropper" +msgstr "" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:20 +msgid "Blocked IP" +msgstr "屏蔽列表" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:52 +msgid "Blocked IP List" +msgstr "已屏蔽IP列表" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:20 +msgid "Collecting data..." +msgstr "" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:45 +msgid "Debug" +msgstr "調試" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:43 +msgid "Default" +msgstr "默認" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:22 +msgid "Enabled" +msgstr "啟用" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:29 +msgid "Entire" +msgstr "已有記錄" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:28 +msgid "Follow" +msgstr "後臺監控" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:40 +msgid "Log Level" +msgstr "日誌等級" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:10 +msgid "NOT RUNNING" +msgstr "" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:19 +msgid "Options" +msgstr "選項" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:7 +msgid "RUNNING" +msgstr "" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:26 +msgid "Running Mode" +msgstr "運行模式" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:42 +msgid "Silent" +msgstr "安靜" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:30 +msgid "Today" +msgstr "僅今日" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:44 +msgid "Verbose" +msgstr "詳細" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:31 +msgid "Wipe" +msgstr "清除所有" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:34 +msgid "failure attempts from a given IP required to trigger a ban" +msgstr "嘗試登錄超過設定值次數的IP將被封禁" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:38 +msgid "how long a ban exist once the attempt threshold is exceeded" +msgstr "IP將被封禁設定的時間" + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:8 +msgid "" +"luci-app-beardropper, the LuCI app built with the elegant firewall rule " +"generation on-the-fly script bearDropper.

Should you have any " +"questions, please refer to the repo:" +msgstr "" +"luci-app-beardropper, 是壹款能夠在開啟公網訪問之後對潛在的ssh attack進行防禦" +"的腳本.

如果妳在使用中有任何問題,請到項目中提問: " + +#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:36 +msgid "" +"time period during which attemptCount must be exceeded in order to trigger a " +"ban
Format: 1w2d3h4m5s represents 1week 2days 3hours 4minutes 5 seconds" +msgstr "" +"在設定的時間段內連續嘗試失敗
格式:1w2d3h4m5s代表1周2天3小時4分5秒" diff --git a/luci-app-beardropper/preview/1_setting.png b/luci-app-beardropper/preview/1_setting.png new file mode 100644 index 0000000000000000000000000000000000000000..6cd9b92cd2fbdb99b421de1e82788588d5e5578a GIT binary patch literal 114021 zcmeFZbzIZ^yFZSI!i^Ftp&)e|bV$l*CQ=dtqeG-&G^0i+3R95~q+4<$Mvevr0Rib4 zFdAt_=LYOM?{hxqoX79?k@L^@&o7V1*qgojdR_UvuJK-5Q<;jAiIRkbgi2NAi4FJMX#WQRF`a z-Z6iDHPou~ZSt!Q`qQg=)vL9Vxk6I%S#7b&j7--($Z5NUe1&R+xP%f#ZVMR-uLwVm z&(Z(MsK;QFXZM-wF)2_S^i5K(IjK6<1toas!KxkYc5SqhZA6{PAkf$cO@8dB0(di}) z@jCQv3{`D4G)Q=e&lDt=U=Ac?#HUNd7ZdSCytSAx5_01EP2%fGCh5OguZCn^{@3&6 zkH0%A=mJ$$iSN2r9yT^Ep7yR@Re!S-6Q@Eu=oxw$YCHp2xjGA2TD!iq5%6_(`#pq2 z+8024bhh!bWcPIjyLbY8W&ZxB2Y~qe`(wes+5hR{wc*FN~6z^q98|QKk0prfWJ7h!WjIwUVMOVX`m*2rt9kp2OJ+DZ7$zDnIW&N zuMnxIXihSd>kB-ZOsQV}bZ?zsuy3u0Pb-)YGUNK}+Fr}Tc2WBEVs|r{VKpku%KMtE zP4P&Mue7oI0-2Q`>Q|wD!qPXmww)mC+)A-ks)ccnC~__ZA=xZr8%+- z?!Ji=LN1@q#I5Q#c+2Q6kvRyGQ zle!>Ima+SYkU?a!Id82JZamM&t$%@Xy3ARmv+$#7ld8sol*k6wKhX8fVGC=b8QW%lFNn~eRCk8WIz(hI)x z-j?oGm7mKPXm0$OeTZ~vy8K#5S-S$glgSx(u;L2L9MUR z7ZZ2hEzkb*#%ESmfwVSJ4TqShma~U(a^16BV^{vSZBr;{`}@{d&o2m$Sf^+1t8*G4 zXi`Qw8BhH0&VvcBKcOBeL^>^xC%HV^0j31ysYO zEMlAu884Ux5cAa%{~1#nQE#N$Ik-g0vT7E5)L{$)x%M@Sqg{gC{Bdp9tfphl%ZoPO zeuQP(8M&9U{aG3TUtTF@V#6R??_kq&kwyw8m64X(j`oj(dEJS}tKYqz|0qFMRXg^| z>PXF-i$t;Vex@4xgb#1DXrJqKs1Es!r?0O0EQsu&=1zn(Q)gW39v|eKi*IJS8?`p# z^wXVC!q+ZP5t*&mgzirI1XIQ?ovg}pl1U{qa^WvMVC3Agvq;JPUnIL)-rxSQ;G!y< zy6_5Ii%$!gDP>d$jWH27N+JJWhL#b%9wQ z;n%}{?Hj|2d_;C;NbkiyFuZobCDO{z;%T{_H5Kfp$2n&Q_A%T_x&r3#CLzt?$V?=qPAEy|!) z^PDhR!FA@orw8bTjkG8yl1WSz$KGqpJI2hFL^)|Qlv|_`UOB{eOff?&0)_~nkH0o$NU)&_!`5UwAr0atRY2`9; zL*=w&Vo~mu-)&N42Eeb835@#psJl8-;x1rLcJkK_L$-d~p5C!ygyW9pl=G_6|s%sH`cRKQVJD+AwRQUM;u5sT5N*A z+3o&XMWM~}CmQ^&ZRDk}mPd#i^ERe$>Vf#nm(!uGD9mPuIP_2&Iu}}vU6v!fU-c!Y zE-H=HoS3;vQ&LH9aMzw6w5O+kSbk05aaUo;+S#E#=4CjQ^Inex1#)k~iEToTaPlP$ zGMc4tYHA%CdPht~Bhq$nbx7uY7ezPXVeb4VuJnZ3Pl(K4dY zNs%^3EhiUFHrO;=epR89mdk`n+fn!Y?~BB7rsQh}Td;$lQOk!iD^4-LIYx8eZrH1o zK_VxZdXKw7kEZ%I;!Rk^sg4eZb&(V6$lx*S#vAt{Y4$ET*h}xu zSi)Adw&ut-;hfdn%PDTJoqK>anYI?lstHn6E$dUQR68bY1qV;pd2yGe`LHsir%QTj z)?mjg>dzL~1jl#^ub1_vRrFy!i9#^;nOh{_JX?>;b0#nf#&ZuV4;+HC1RX1}zFIu# z_i{=`L`_VT8<15&T*0u5G(I2jwP&y7r1#{GUC*KKV%*W&uMcG1hcxWo3fUZQ-^klm zZv9qVzloT02o<2T-QC*@Fi)=&QjSi4M=x_ULwFmw+i74q)xiqw-6!}hv)p0jB*$WCicHn9xJl)bBN>XWBHVM_=UTpaN*e*!6PtMke&jciiwuDLIw>Ol zIY`?UN;vBiVGR9{`T8<1xaBQ(-pMPX4vV3^>Y!3h6u8@?NH|>V%45e0yFMxfbp?ec z7N1GkysSA**^^g7u3Cm!;~D-?;_+H^u4r6i6rhYk8(JwLe z(@9U)w^p)8llKNYj{1QFRJh=ISJd1O8)0SbprOn5!UCp4`SbU*eAiMU*%&h%=ERS- z3qn~+Z(m?6&Xuo-2AF7QXjBkHBpC#XP@L($>ec1YtVN0}leBv#&Xyc`{J3nvPpfjk4Mcu!GpSYX+ksGy3-^a473> z!3!)FU)5LsYU!81O-s+=-eQ7P3Lmqi$1`73qP~P;tBQ-Orya##em6TrH_P5)Jz7U& zM4wDDy9QYE7K{F%qiEdif?5h>{yJw1I_}iY&Hj)vVt}kNs#pqp#Vshs0x# zR>titXtMf=4n(>`6I+i|&ewu3Ukv=uMmMDirzsro>b9EH<9#33jvl69Ya1FPS?@f& z`avOjSz%iEGDq-+mapDte;%1Q?FE11&j}N;GphWqlLr289$MbxI)@Ys^mGQfi?Zhyu2L7NAdw$3y1J(IjVHwThMe>a&|z7#{zsch=33nyQ5i3p zohxl`+m@7+^d8A!{14QM_lUANM#+2qC({cDPRdBz-qct~(3g|FLNIRM=(h!bn52el z^K7W-_>|p}Or;PFlTPm__`BdygX(7Io3!n>a>$RIX;V3*Y{hUTGKH8-jz60#c{+P1 zTDt0Glr!lgiY`~o68L`!dZ({YgiPS?%pYIiq>#K8r=%sTx)IrPVW&d@dD`LWKH82y zt9p5Ih5`g)>#Oq2BN`b8P1@l{eH_XWf3ytpFk0X9s#=!$$H6M(Nuq+4{#x_9`-d$V z`}pB|!gZqLJ{N2#lZv!j?y(G547}i?uQMnbZr{2&mP3CDM9NL}VaZs`6`9>sU~pB> zBE!yaPMnXrOxucy$=88`DQ&a-nGO5M9lbJ5mHKax>|{J*(~g#3T>`WK)4U*-wQgn^)VM+u<8hII;| zCS`GP(Pm1^*|{+y#n37vsJ8!UP=(MsfW^|%;fNIDgHDf6co3A*oY~uS?Efin+bFIl zT^Dm>n!4lN1v(FFnrTL+&?=6#H9_4Zdq9=nTToUQEH?s-jbx;tTD7n?Ijc0;#acHa zXV)$I`l{+#)6)<97%mjET8heWb}m-?z{YWy`Hk4|I!I4-QzK=uQ$oPHnZ7+^x}GI0 zLwt1UXJNN#RjV|sRMrH8UT&mCsJ0B0&X5Lqn}_FTMM#J=#=UzJwNsadZE$)xo&y(S zSqgN|yg(!M2a!#HX!Ue;T^UWK;7Vy`)%;a68|DlxF=wZT@zDIL8W(8re0j=4J1SrQ zc!n{fj)SU2a(a`kUB&w2&uUUXfr3o`y2^iN_Dgd}jcf~z2F(I|*5wX=fm38f#DaT2 z06#PzFuGWFeMvR1F2?kxnmOg03V%D_{a&;UurcSZ?CE2WOHI{xS$A664+~=FwcNif z`Kf{GPvG9`RN^U=v;~xo6^X)@e;crGT543BV@}ChMTKMUGvU*lz=g@REr!`a@ zWw5hR1A>G01+HV{j=D_iSJNLLP5rmal2B8&QyQ)F*lLp`nS=Sshl2Gv$nmKo&%wDs zaP8|h%Xc!^XIoAmX`cHWY~_!AG=je>?hHSEa||$;1hnZ})P6@Xk51um(C(wTjmoo? zoe}T0;#lY2$)(nPstp5cJ1AtRMd{!Wv)6%ngg+{WpjS5Zuguxl_Q0!rKKW1N2 z$1Qt1Gg#>pm0Uq}@tkElKkJIM6JwgG1MhX0BGEw;hiP)*Q=^za9c)}T+)qAhZzA=5Bz!{`di?9wkgi*@C0cFtWOoa)Oc|M zb?MBRr6YxYOy7D?Kw6{sngesuRBh+bL{LHVjENx2?ImHRlb)7`eY^pK+unf9Yg$F6 zBL=Ez2`dPB`#p{N&{wOU)j7u+PI_8%WPCO({jr9f+0OKv4$V@2v#3$W2i{BX-gAJ} znvN;oNQFX1kF2I`QU>=Ajg>+AqJO5)IV0Ibx=sKLfEXTsffexHp0?p2)4sjEuio<} z6L=_~1(V+jZ20O@15I`)s4};?0;m1)=3Q~nM2{@qF-rzNlZSEI%(_k5xHEmKEwjH^ zpv3WnDd>eO#_LQVE5;_n3_5W+I3?*|s)KgrObfA5OtWO-*Qba-UC*0S8Kp8YJnsC_ z?o6)7Fm8yP?gWQJdtx;Gyu)Dfp`m^p(L^>_J^b12*?N}YJUl|Zr^bAR7r_AdHC!f+ zDfB8A3ze@*ADRs4(}Q*vg6Zm}u{Cp$CAM=m#AKz~&p^~$uK!OaK6=Hs~!4-%C|Ywyo^ zu?B5|EPz+(Fz;apk9ul97gKpjRQ(m}^lZckL4oKzXQ*)Q75+1Q0hRLglp%Vxdq4Pr z$*Y>lK;0+cwi4+9#I&WLE** zb7T^K_8JIg(%)Re}9Q5+5;MwqDD8sQ}v5>Ea{q3#~aKeR0!?9XTrh8Xb8#t>Y`quUFO_iaJS-<=zmH+5% z&ce9*OL#))0yaD+S8RLD0LysV7fL96A2cx}A}(Re+8}+TFH$Zzz<+9ydFk+ZM{^jj ziK&TAsAeARebk)_M-76L07s9y$XD0yK$TiWHgOGLejEEkee`#1O!ZbkCHsjRe9PcC z+Mz5^1a(sC=3i2U9^Q6lLTO-|U3;!okDs3|kNBZJ830xT9j7zEo(BQ5aX|j6zGic} zr3DB6`_R>h4J1;Hqn7u0VB4pR$_(zFo?jKn%AU42np_eEcHXT_F52S6)baf}?3jf; z>`xS}T<{SOR!DPbN>z7B+}P{-JYIr{PhJWdIDMQU{xe&5oHn@tU_I7u#)x-`XEp>2 zHjLiZI8Dv8o6E#2hSFnI=?cXe<5vR7F zWC&}f%!}W8y)t48+Lv2T4oYO4E857OG39}cP{n~YQes$%-s0F=!l=1tmzUgjnErJ3 zBkT9w^UfLO5eeUNxW_MN2(xJ-bMsF8h8>Ol2#DjPVcOd^oB5uqj`$Nc#Y8@HJD4utwsfVb#7-Yw9!q2pTyH`*FnQ{YfqH700Q%rTk^?LE(!Wu^cj; z+}kWFR(&k~IZ=n}0};UFMvPEuQdk(qDL;J`662!@D2if1Y55&nynYTYEFODI_-R29 zlM>LJaokLf3)IZoLU5DR&3^x|?SXh(dl(6K4qA1O)tT$kl301E6#8BwZEWE%#fK&; zuLpenYdgm( z-3E7}4#qBFV_7$A`Y+fa^|G#~?7#(JK_*;&Fa0d9uR2^=CeW~)rFz3Z^Z86`lE2L?U%ppcPraT ztgEp)t-Wm$O(=sqX6{erc#j!!^~$n^9218B&QRQc0SZi%mDs;bOa*Wg6H1%8m?A4|cpxIp_*#Tsx zk62)zrSe@C+aZOU>jyGq2`bFc#*QtLqCRb4|ykJ zo@#Im$s?~D>uY2^b8?<*@vp}navyqsQOm13F!6V(?DO0|uJBZh&O7p02E75d7a14s zJv#LFdwk2;VqY8krq7r)#AUz6ky$$P$7Y@5i^TQ(u|ALozFAI2YNI-L;kdoEnhiPA zHfrJNHrAx<&~#vb`=;jdUOP0|KxXRThZknJntSggf-c6n-pD6q6QrIz#HBCcfVm+d z(ac~BppO4@!g{;;e!n5>u1wQ96LRI9#=rs$7*rAzNb z+Q-NKf_G(ZPVE+#Ygvu$bp8nS{+_g;C{JghRXwp~!}`!(lSK?vcijxGOTn%unWL7_ zah}E`toaRSlEPzP>^Omp1dga7TqL)DJu;fHQpZ%IPD^0(arPv0ac7Ob}*0X8hduENFUk}wcO=Tp_ zy-m6*li|Ng23>#CZaFvKE-ZPvUzV4tc?7D>K}T}*58n~UK%3UNkkcU-m>N-kM>++K4#0M znx1dE$^0J(qowniLx4bIL4*&$Z?^QXzgN5__*3A*UQfVjTZ>o!(4YXs-U;Vs(@i6Q zau9LE9{4PqIL&FO;~o0Cp>gzMI48&>s)T&U>`q-~SX;OEB%(j2yD>P;GD;?ivQ^Y{ z+T(I~>)|7>Zd7qgWw>U^buE@(-{N^H>E;WB3v}~OXH)Ke5yZ&O3$q}XE-}^Vyw^xG zw_*!4UmQ`W+Hr9C^MU2r!{zIlm;}0as{96iM^x?5y)(k3Pu8qjYj&0R6XQ*&Q-%}I ztntK&mnd88xvRQv>EWqUgs0SET@*lY6gSLUw=Z{5n!@9jJtMGn(YxS(Ddj4?{~MhA z(pL9pOUnLAp8V$VH)<;M>t2O=Sz^V4W6}5JJ%{c9>1zz5m{dR6yp(F=ygdi>a?+bW zx)H~gl)tc$Va9`aJN7e(6FO%bAGaJEkz3T#y1HA;p>#_db>JH#O~r zT=N@J{=ddrl%r#A$0zam5qo@slj4)E<;}-$XWHxMP9D-QWjIbgA9M9E@Y6_Fm(9j& z93`CaMcq)L1f$#yFusi?sCJ$QMuZHJ>QN%*qV6)dgb%KHnb~-{ByFM%VmmCu9Lj*l z+NX$dIfM1o@^kz_`EO9k9BLPYJ8|k;cg^P1!+drSTeaEgeYg%Oi;Y^bBKQYsntpC- z+^?h}=I7WUyi_H&t4QEwzDT&-Yjlm+;q$94%e&;|_&7Quat;=+a`X zWye(g5{6i}2U{0nEu6+zoS%MK8gmUFxFa$ST7%6tXAI0XB90iwTxm90nkv3n4L(JC zDP{bP_s~1si!(h^cJiji4=g_;tf#K;WqM;z&RQV{J!4DwahnvK^Vl>PI-mHpEloSE^)v3YQDFKSV%Zk)bavn-Z+%gU-@Xm2j~XJwacD5||H4V=r- zmi4Bx(j*9HJZ4+5IelVs8*p$CqML^vn>m-k9G)p@nY2mi;r%+cudaKc3}(_@gK^En zP&HcwpqiMB77w&_{=45fVExhk`C+N$!+Q=O`(Ioqj~zO?@i%!-4yap_f{yLJg;n^Ravz+PY$32PNHw7$hLUO_ z5{LI$aP=0ffSyaYdSgmFk0mVYE#ZAf2CTAa!HPcvrjbZ)f3y-&(5o zD2uls*sKTV*EZNj?O#DbN&w%B~ z$5c{i<3+iT7tgG2zk4}Mj`G^HuWOURE?t-=n&6uonM}$YN^*hEwI-GJ6Qn)5 zqkXG8u{(?(tINzIypHcIG`wuzI0oY0I?c6&$t&^B1niL16I?}ri?NXp#37ozPgL}U zSIun(?e~Zl*0k)BjRP;nMU6V<6ai-b_szF3X(a-E0JS* zCz+YM?a;i?7q0s?N*aKH1^*rWj(*O8IT`C0Wf4ao@}_MfEQWXm3^ulSux%Zp9xPqC-mh zh9cJ%(3WX3%a;Z&K|hD$$)RyGd^E$52z#l(gfu*+Y1K;hm%-xPUIEMcUY^=R(Dzj) z3rjanDLdbpeakgp*)tDI-_y4SOx&VFM~S^kgb#`|FiJ)HTzaoYR;c{eKB{@5HXqV? z{EQyA*t}C`*5Z_FurDRdw3>DE-vtscc1R;+K89OVn<2A4kU;1gQDzjX=GQ z%DIWOp{$R9u0C0Tk>~zBY#z4$DrN(w51M zoGoEB*4Ud%emP{P+^Y5

4VHe84U$oF-*zIuK$tdy@!7^SUe@pTAUk9gjZYXq=_L zi2;xDzm@K^8r~~}9v^gJ_P~1@brVaQ+r#RfEjtC}xd{fn-{*QOUBJZDB=>dBe9hIq zrXtGL73W2Iqazu>y^@9iI&7(PDBDCWLG;5^);c3KA$|TH9$`Wo2M}%j_DG4e(ILG$B~1V{oK5|+49F3gL;+*>Fgcto9bmY z?*2m0XPLi0N;YV1T$r;5FK~ij+iLU*2>r=%-aWc$R{sgZp(^iRMC@W@!n{eau|)P> z8TV(i*_lgL4~KD4cRrj!dHeMDyPgJG@NYW_r3ae@Z=IAzJ)+Q=&2@ZSrPXRz(Z6); z6m&k);)eZx)`8Jz7}S|jFKg>dHP_v8YHHR8`^%9jJb&|VqQgwcYj1io2d-S;SwaVS zn)JiK;WgSJS~aE+RZq$l^be+&$}HMUbq?S8brr9?2JlF1_xkiye^Qs~4Tcw6pbCK& zanyvP{SBd_)SyMAMU#^~_t^&{jibIsTb&g{bi=iKjj`ZXNJDE^aBV~X@?j0WZ%6~^ zusE^5zUJI`PiUr<5|ozedGKAE>I>!7#+f+guzM*>&A6tOy3SQUO=BtB9%kX)6s0Ur zjlKN4LAWuYsPM3>gQX_78b}{V(!8IBA*e)~Bd1{jBd>j$@YK6q55%anymt;_154u8 zgun?r(t2gub0gwRVH-pQ3C8iUa&z8P^lfz5yv}yk_7l(4({Hc>-Hzia^QxT>27IUA zu_FVG=z(kx>ix>5rHo_oWW>vt%2o{{>l^2LgKpC}fBI)>`J8~T$Ak~lLsy-AcA~#7 z=etW#_2sO^XPLvlIL1G=PD71sdq_-)jGzvw{ToMjWL@7)K&ifcQ*uG}>Yv4!V|55( z!O}2F?R|n{lSLYkY9a3fo0u7p4VTI<;itS??zkq67INh$9wiR!k6iatq2+y~ht0HH zr(-G*R%Yo&r(*gdC7}Vwd>zh^2=LY(1$W1g-NKUk)ro^3XT;y?K(K>c8NBQ7t3u1> zGTeG(a2}Ppx8@eWbsJPoQ#>y%psf%XgS|y_QciW`jXC2tsIljgzaoer?F4(&@~W%E z*G?xHJiDI33yL-kX#M4Ow&Gb>YasgF1dR845Jwsc)V#yYuqtIKLI9gVJM^UbnzJMK zYvEpI+}b+Fr9=8tK>B3GCiQ@3N9RUwQSgkUL2g*p>0U8#gEj-NiU&NrLF-7J-RQG< z!(18N7y#+v{eE{LPLk30N^*+=DD(PWsn(1P<<;}endV@P2Cbf~JuAYI{EP_Gv{sfH zDsSuOHO-<*j?3YL8Ng7Eq0{>HWKTQ{QQ8xzQbB|!#op53?((SA6L8xV{KbrBP z&wlwkeSX^yI$H2go>3pMqI|0tco>dVGbv&R^?NJ>BhWeLQ#uC`<`x7e^O7T3^XPPS zo`!dX0jR<4;w;vKsV`Z-^c)IMFy?}ZvfMmJlfXR9J*UQI1HhWh^jt^u-N=J!r(R&rQna*6SAO|-(K=u4 zKS|f|0scpKW2Yk#Bp(`pdd}bPoGH3x_i}>xugeuAus~n9(x^W?p_MTg8xR8P8`j3j ztsOHh0h!Kr1Vt2=%a+u&^YdEnHa0D72=Ss~17xWnvJPY1JqI_dRzc4Q`j0Q8|zBQE#3xT#bd9}PQDL7p{7Cp zxo1nqkFqLCs;oxc9apM5(o?ZOdVWgJ^a5S|wAWGo%V~fUQJN2mEMioT^8C!3b}dKJ z&$cG}{e0V!;^xp}h*Is@Opebbk1H~;!7cW3G@+ zPFSc5BzHVvsV72=HZ-_Xab~}Fd458o4T%83k)%Rr3qPlzu?#@5r$g|`GGF1owvY+F z1z09AgT_l_WxDbyKslqr6601`s`s}w{#8s zh_h1@^ugdPAREklEE-?v>f#ThC5ZdoFT6b1Gy~iEm+@Dh@iPGtp$Kl0_*Kw}0 zrfC!HviaeWfvU+%>jTSAfXGIi=E6ZfAHH4pS4F1% zM2}dRH6s86cD%iBvUyNrbdd*qJrbd&Obi;phX^Y|#(5I@R08*rXlw7%=tIY3&ug`F zKPLC4we)mLA5Zo-+oAS^OkTI;Q;n#&6Y4-Ka9WkukqAVK8(3B%0)eKBT!k)oKc{3} zddo(~^+ea^bGmMSF(pIjLnK}ZN^@NL4)^HwxlBI|<-QquuvrozAE7Z5Zihd$v})W{ zi4&*P5R>>UE3*6eto;34y*c^=&*uIaa?2@DaHWY3#}=msxRwi3#A zloadf%+8b)4~?K4-j|_GiB!nAcE+5UC%?Ae%^9}!NmbXe<>(cuRv_nht;n#GZt4xu4jPQpNHZl}j1dMJ-}_L&HLOSM_e5_dMGa+-qtI_bQg&9=lG^ z+ph&%)zy6=pOGv z#HWOrXBzA!lu6D3Gi!8uE16ku=X1uBubZ+Q08plpC;A!W3w~Sj`a^;{2i;ImTmgJ& zQ%i!H`e=cz=P&oQT)3t$1mJj^y9e_HGP2+8-Xrm4jYA+`5*XVFMfe~cyEI%%xwP73dvY&O!U#hGlvW+;BCb0LehM9z_5QB^d zdcN>jIcl`{fRrsgS;0%7=V?KUiY6t4%b_PC(hbC4@WvFxKy%U{c}=>YelFxZt7UCb z!WO2f4wC~8z}2e3%@a!s z_$@*3X;si#(nj#er;;N&UhCmiWbgb8bVLVC`Lkr(X>~Xo7dD4@$$3ad!?Shd$N*Y| zmuqA|AicabgW{cerB5`{mOJydfgn5Gy!?<`p%#Tuv8T4gs{HpX-En~*6bon*1UL0t z%_Fw^T}M;v+?qtt=-NTMX9^KZhK_JJllyrH9f~w!y}?)uc$4RycAEwqcJ+6GVryUb zCK932XcrnnIW5XKKz3xXUD#J1GWY0~G+)+P!Hs|YFM#a@P-)3mYgHr*OFb#<*Im6M zIe-Y60pjK0$*9}QWQ&JaFHy3I22282wRwL?Vt4;yMfl$y6q3#&{VXB#>UrV;s@Whk zyX>sD87g``ZOKbVr6G;RIf0*IaM^Pd+@n#&6(F7-Y?F>Hvx*WTOIgw$gk<(5Z5DEi z>V!v$?I+3>;$%mg1-F9q7J*`;p`|Jrgf^o6cG3kUu=!pwPjxLE6_g4+!bR#H=WR)X zq`HvG4uJ&|gUbpU^ro(X(Fk9icex0|K#78K4FV_TLB3vC7f;%jwXQv~A0%h1ZHPcf z1RB^=bcf2OrYvpgl;-6*snRR^o3A@2)^MJSNc~L6T~~iyh{z?DUxni=Fl%_txnENT zG}k$zmgsc4k2nv^7*fsyb!l_f73p)cNYQc$a5j_gRmn4J%B-O9HATY$b`@+qK5v}+ zJo~Re!JySv@4)M<**D-<{@z(%y>X#=!Nee^75H0rvqlFmutq!ar?6Pi03gS+=7}XJd6lmmfnZwvU z2%Sr*enP2AoN#hI$GE6o3ZRMTTtgt1W(3fA}_1 z19Z)X8Kst1_ekYErlj8geIsEtL}=zCz;;9xVVNUr^4eg{-UQ_8;KHGyg5-(nmGud0 zprbw;a?gsp9l9(|gqmG#P*eiIhjJ!+lp$P6;V z);Ytm&C0bI$l(OzTmxn7#tb*5U+{XXOT-@H6R}*f^gBAz+@SRZD|EBQjpEVd@Il1@ z5u!Mn&dQJc3uHT>_-%_=utz=e5%E@6J0ROYk>^FT>WHB1+sWGVK=`bDoYJGa=tFmb zzZ=IkYOCf%Zkaz`(0a|uXy$W8%?u zNm4NKFx&ihB?Y4N_67>kA(tSIhy{b@hXzA}C_B91rq#jsiRn&y*o#5I60xWdz};Al z=AWa2Q59m?qxo38iQE>g)BsFXr=uXK7HKiZnF3g|viTVHYanL}H&SnW{pmao7uN__ zqyJb?A!d>yf)w`(S(gO;u)ob!HDa(ycUb&N9;>iL7U>yM;Awj4GeD*9APdIe^Rw)- zKK>5&R^O2;McuxkM%p*ZZ!dN8?ZECo9)q;LTc-c|vX^xvGbV*TSof8QL}puVh&Jee z`D^Xv0#B=s&af*rj<;C~O)3=Ums!Tv-D+CMZcDBW6p(3aE_s!1~15I}-er%qt ze;oB5S@X1mcHmx5!_SMz?-}4|{fJ)r$Z`$WUmyVPL1WOIg+&Gkj*stp;Ls4g z0vfug2~K8KYUP4^N||5w*ZkJ`#=Pu-MPt4(oAGAi85CBVre~B>y2`Ni6}>E<_03Fn zCJcp^=5nNLe~Gc5>YX!g=q{`;7Xy{Ah`sE9q98Hd!w%A&7S&&>c}&+f27<+q0lGFo zhw9;z;e#8Oc|hb2iHI4wXh6KyQ~glOpLF_geZ<@NNl|Tlxnl(W2;2y~Th&F>o#b zErLOr^AEMkrR<1Eqnn*JgKAbG$T?0cr}e6A*K1celQdWktBE;;<5H7Qf{w>h+v?4ksuQcp2f6scZ%B4&y_xg zZ4Olx62E1x8`@L0{BbXsMs0$QYy^KLFF4!F%w-nn+D<9e7_Z2?Osz53bRIG2qhTvG z(ieW7_F+zAX%APlcB*%BWN`Px^BE;d0Wok2F;Ezt7jnn>n6@H$HiiSBQaB+9RJE(|rTiX?HELLJE5*mK{Xmp4 z9FQ~oDBsencVClO=cu|acxX8y>Xpjl{nU?M1&p{pDELim_%onx#INu~VE@|w*d6BI z{;3+Q+co_rU}X4xq2C?45O}P{i2T+`G$h$|{_{P2Sf)zaZ0%jo-Kycvl3wLd8@A(Z zZAAP4tz9QOS8dZnHUrL-7W%VY<1M8QxJ6*$kmeq)AXX1QjO-gxD4ty&_)fOPU%QfU zz?8Q}%)unCf-hr22ec;%VL^6uk)-uhwcJ#>UZ^iuxG zBDHMrz?B886OD}+O(ZEt=zfPEsPhzo6MB-egw}bWTdpWnONig(ecXQluk8?>OjQJ5 zQRvLGD%|$G!SnXCDa?ELD6t7m|I(@CeqaaurgBExJ(+-wUzd=^0)(Z8!_AQGd#}XK zV3%>#^50ZWFMacP^PxprA-PZ)-QvD%OZX%&Z5|q3h`h_T7*wbYBIvJ40ps+@ag)wW z6Qbgc9o8#s33k(K4GuN3Vm%=Jd2}{U_)F$G9o0lBP4Do4F=AwUy~FKsA8+N$n!>&` zQvBoVsY_6QY}%Eqa_`2l+OGWtvcO>8AA=`D&D@ArLjl&zC9w$c5jO}Wh`t4p20h3T z%1NKD4q*pzt>Pb?r2il0-a8)7wrdx@??e!Z5+Z_V(Sjh+`w&9(PV|TtJ$fAz1d)i| zM(>@$=ru_6&S2E&b&NWgG3>eb`##U!zjx>H{rmmL^}FVrHD_JtTE}s$)v7;gU`3Ok zF9tJWwWNeRENy3M%7Kdvs$1n|k9tUqJ*I4*?rUSIe(yY<_S}irO9(Xt)|s9)tVS4x zJV*&<9QMlo`i&3yE>aaUwY%tk_-WL(NR5ry>S1a?IVj7^lIt&x31ikqJZVFHq%0+Q zm69B0iZ>M|U_2GVu8STOPFTir)Qo8;?F<^vzYL>ex$1Rk9%_QayD*`^aCSWbRz2k< zn4g{%>_Y0IDU^7^!sC7kAG7C*{fCBH9MpJ(DVtHX>&~yK*l!Lxin)>ILkT$+7o+0N zy6e&9oicP`L=PqdQ@GtVdT?kzPT9?BF%jox2kB&5#h$cX3E9JBqh`tRE@F?h!liaI z=aPd_SK{?NB|;B0E*k$!ubK}Lw96KjC7q6;spb&U^(ZPn*8V&9)dOO1f!fgwj>sdS z;s7DBS7n1#%B5HPwmK}!7Oq^n*Md>mktn51ZH2DNUj@sVCqCn3Y9*f<=D5DP+WKJ* zOvFg&3dO>89dk*Lg9XF0mJ?*UN$G~voVD&ef*{pK(%k8;(jS&NY71ScZOT_UYo3`v zUCLMN+^N~wgxEYgdY)PeUYg8`Pek`Fqr~z({3ZSAnRU%Midt5)x3}F2vg(@&nBf&b zlMxUu9X#solGy}%;op=oSp(8#{IJgg+$`$yO(td6ThBBJxtl^EpFl=Ls{_m?!2-Q@ zsb3N35>+5%fwl|;7hdxAs@7M|ABxn@$YwqqET7ZL zzR^^CRxkUTR2;WptAegpH*#+YATp$Owo^>t{NYk+>@2y&On`l+SSrfEfoS7;-;LE) zs?0c5ii&1Oe<)%mD)#{ zBc7$7>;l7Vz=+ojJcwed&Cq2=+$4DSSYE*3L48$wyF+$EVkx=iabNNFl5R+@9nprs zXJglM!H^50p3{ZXT2e$J{9)pbTh>T;Th}Qy!?tWn#VSBvqc*)lHzbh=dD^HqhuxGM zmr0Wn4ogog+0)9R++1$HZt7UZu!pM7@`&aYykdnfUS(xu|0(2RN%7C}^Jpm!=7Ak` zlD#DYOa_*k#jvM_{x!EbGiL7U<3Zk|*i$?FovFz7zJ2VR)uR6E&?|kLHd9%;fT~|+ zE%t51*sn&q0%%>g>hFi)eIt)wGC4rP;j0=VeIC^d(?8G9W~y{eI|6#i;X9I_Ok5=KF4GCc-$gT_)X=CWYJc;Mb<0zLxcbgj~v+ae^dKsk=m9!RY!H zv?tW(*+bJJZ3(!c+n5A3=%9oIyJFNsE-poRg>bQyxGrw(!{B=Ov#4GyChAOAH3ygJ z8Okv$V?e+}Q~mNI4ey^#a+H01HG;%3IU2Uf7Z!ICp6~h|zo()CizWCiF zUKl!Tt1J1TNQ!t9ruFNy6qmRotmZb*3eseF@uQnFJ&wop;c)3jiDsco*$aawUrORk zkJNV0sWrp)3#3%Et>e_IZNCVo-yUi|WrpyK*7Dgo)S4lW9V0T$?z|?V)QO4nHzU2a z&_g$AWqtguXwhZQMJBEUqgiY$b0bTY@}s$>F^x{JIlY%@1AO$*)3)M)f!*7NdZ`cd zY)+{Ny}1uO>>;{hk7^g{kPl4H(n{GvN18gnF4XbX4z+Ts(Jl2AxM8`jBgdbZT&vwz zFZ2*Hg}AxGtj~~#<~2G#MI)aLFC(_DO!SG5cF6B7DU^H)SKTb^7oVaO`BhL^Rr@uo zA;Zb7)$^gD%CTrb!M&(?Dq$p1<7RIWI^oKI)Nnu~3MV5Pfz&dS+N% zi*i;w@>AaA^hrC?C(K7m>L%^CYLjAW^$|tCj!Q-&Dr_6?10d^mOvENdNDGs=zEAA* zg>6Zvk~zpn>A@lr#hf!b4@x{Ox=7hpgqmQNHZ)3_2{`#IMOoFI<9vo&EV7Q};v-=p zekWrFOx|h?hi&uA zYhu1bp+{KXX1H=!@{M45DwWUyfVj1@m;}Q1--u`z_GR4((zYaVq9BsPNObqdl5O*6 z4@XCBg)a_1Tq~QlqB`{vJPKI`99(1y z+)w2JhPc`h74bzWx8q{rLo|J5bcb$ZMuf81fr$?XqTfYTc!7AT$ZCl}&xh%l^ zUtPSUzhVuh4v8&c8|BmO+`_gWnjUMsZr{@nd2KE7_$(bE#4j?}QFF##kQZp(Q^5%SVyt8(U|V)(?dRcrqx!y>Oy+_kIJ8BCbI zmjxFsvub_>MaT~L`kYQUAPMyaGdX7hS_1Sj^`y+naQE_}5>}GJgbRQFGJ7TxM3Mc| zHU>$^uA~zrd)oKnqmdyyTxU6ZTK~htxmZ(imu8208X|SK0N{GUQ*am7%IG?*O$GLn z#)%*9&h2?~x- zQRDpkElBo0KJhb><@ZPYL$KI#Ze=PD`EhWXD%k2zjr`ZM=U|-FMyyYj&>yZx z|E8;tn&Xk*o^(&P*pR*ni~Kj9D;XnU|KH)de+nD^>sesrGaMNC!3a%H#J|7b4=nFB zMrpG6+vKJHnU#q95S=Ct^~;WS!J z+*>4X%7Sh(-CYg`k&g7960yDs{me*!d+SN`+dDS_mbbp(aMW~%WiEsNc?fZ^eiGbU zqKs8UH<>>A0EZ_RTQOKozG(~tpWqPluF~%*Z!$fL8K;fo@e|tp@=pP+e~*|bAsOEK zr=OfRny&DWk#OgW&3B9cOr67l@BjZgv9ex-d9=mp2GnWl<2Y}8;`{S1qU{-V+d65} zD`?$&yNG<@4MD%FqX`Urb!51%Nen9KwPTKhKDNQdxVg`}C~qThxY=rUv*d|!PII3& z1qWd>z8@7$jwLuAqxsvq{hf5gfmzbrn2j(f3P;(U>)!RW^~m&fo&RZvv9z=Ufw}A% z>P^K)NdUmIp;V+ZPnc&G6@i-v!?YX1*8|%m`aN%1^5I+&sy}7<#C-nqV;;=7I=uC=8Ygn?f@<^ObK+ zcvI`^!r>pOn7k)Gx7xs0m zZtR^D1yx7f;xCcHxvL5aSb^sg4ZOFwE{OtDmX3_2pAq$u_aFrj_XT z10&8(lxNHkhv(;W)QXGka%{%LN#uW)SFN1H z0pPZjTTAojI&e^!s+@>iQRHVL?J!>)$_X|jSYLSS7B_8xhI6UmTbpksyRz&JQ|UNj z`t1x~E}s5-*EaYvr9L)S|4``gNbixrn+KabhwD$Lcb=F%1=8Lo4xz2$DB3nK{B7QI zN#^@={jg3dLG^Q(xTCIJtM8*(9LLjPv%ERXYUc#GdW{oKKsJQqaE%wJS@B~>SmTh88~Taqe!oW_G^bE01O)nvDPj;YvmS==IU!ejAG!t`1E`~|Lk zD!1!M_Kbsc(-M_7`#bmS7{@Sm%=Kt`n;rH>tgbOYwTOe!&YnzX+kAo-wAh8?oP{v% z)e{J3$eJ)m&GWIegkGhcH7hPRi7ig|@%BP*wSV@Yx9~eZG?*%E`LTFW)L-Dum}jqq zz`^b7GMyK_1K89{tG-X~#*zfNn|geQ34DIX+a@*QbhTPjS>8GHt5!0K2DZZat=V%W z)c3k66y^zU5-?sOVz;0b$eJO-N=DHyJx=D{7X6Ot_cQ|76u=@GtU^jF;t<x~g%BCN@#A$71%QoVSjGU?0pSg_bu}LW**7^0q!?&DxOaI|i-~1V!>CjOv zM0*GJf+(`$P$?Gfw)-li-`NuhZfwF@pH*vof7ySVGKAKykRB%7n(>u$vI?ShEZCYO ziy3sNHxYW_rs;h-4H~K@xJumlYsq|IAJs>tTcGsqado_>vd4K(&ur0r7kEbJE)?mk z{kOt>Dz#>ZS4~YTd&@xCj}+6_r@X$iSy#Uf%?aC1q?umBa=L%ZAaxU-6FtERg>bjx zoUYal9KpUIi501msu@QTM6x)raCr#5PPZ42kN172Ya^@Ab2wVO$kX6c4Mf8_+04UG z&^Us3NRXkG@VublXMsN8?iJkBTmT2%7aNSmQ7kfT83OdIFo>xMwT6$c2t8uw9II^W z4~$*mYsG>nwBNC$JLkdK_|U$edjU=&$7X<-v$|G~`!3~k=;qXHPo_RAP8|`WercoD zQ1MW!^#~==+!jpvti7$k0U{EzsF-IpJFdg`(J9w?9umhPTBB&W zs#nB_0K8(2d{X!8m3F!&rnar+SXdj8Qr^ymmc9>;x=C6zc)Jrp_MW!MjV z$V!R3qh|$}npZBSux9U=FJ7WQn(4Brw%y)&S=wSCnLLN=cUVOOwZoZfPl{1 zCzQMMt6bwzy43LwJ7m)bre2q}zK?SpW4zuYy)L&j;9BtdXZOttvgd?O?8tRZ{kJ+g zsy6dNU9_!2U*(myK2_|{rh>3&6?#{9vMf$Vd-#$HFG_NM7Ktm!6T|4ENZcjQB1p^g z3&`ZV9DZ$FXg7(;$wV6#hY3n5Yg2OnqVCG$c&M51rSoBJXDGCICv`UT!KgdP3i3&d zERO{95BzRw!MUCf^UE{eGlk$`pLt7X95qNl0?x_hUOmT)=-U9sXLPLk}Y_MB1oR+VI9$2bX=S%=jMre~M!h1NDsO>$9!{)-9$s#_A7u9gf8 z0ctSbViSiYjlSHk+`8VyI5eAyGnJ_@hYl-_RdRwr&%VAAF`Dqi!OC~>=O{*os&G&+ zx{4$VQWaf>;_59NO9b(wwO>{CH{HjTWVYt9V|Yo24s`-N@nlx>*P>MOi9m?1y>~;w zuJ&fdkEQmCu|z|o5nE-9k>0>J;f3z9EZYyYWvHQmfBD4!V@3p`SPohVWJ+F8OIFPC zh_{Z13J=2E3P+4`NluMtMfFu{)Z2|8-+HKP@WgX=W>gcB{R_vmcRAhJKBP?Vw7#e4C8VCu;N4yj_Jphj6zr1S{Xsm+OxP%Er;QMNigQ!^&M ztZmd6M_U=$_xJXlk)s66Ug0#N@^6=5K?aY4qSvH!WAd`(5MTLINjcas6TF#^Go~@3 zh@#0+jXtIyopIcknw0Uk1O;_B_MrCa+OP--m}MnS5>kt_`V!_ZG;KE8u1GoNPx@J{ zB{Zt}FvHd}bVSr0k*@?R!a%!KI$HI%JS5nqjyPY!T*LaRr zEMU~^n34v7Xfk-A={^oS=waiEo-wJ5`B-Cd96P0M``WL9`XOiR!{>JUnGygnk(|Xu zYB(SgC!DG(M( zZTs5ZaRq6kyENUbC%yx%LVN2h(*&$lBi{IhfT6(&%am@{%F^vck8J0Saml z_4;Ur=o;p(NcZ<<$n46m5>wbMJyMYMFQ(a=x$PT*!JS8ST>P&dm)EOz%?s~nOtZN-ajc}?`rQhThqcM)S5Se&8)0mI!F z0xpK00vN{17u;?@u*0>bNEKtmfF6sZxS66#N6S2VcB! zDpV>l4h#J@SF>K1N@`Z0LOOSTf@4a24D16&r0O`P9CH{Atf%du=exe^9sPCs9t0>C zyhBa&F19=%F)Rm0|8!bsE+;9o^0MuA`9xx~0k)IV=wx;xakHy~L!!v+_q5{kY~_8% z0W4Xa_l#ys$D=mYK$!p0HLh;UCmqni% zX@2|msKc{s~gL{a!!ZbA&H+7_^#NByPp-tSf@H-NWVNCb5;JmeBTWP@@);L&X|mV(cIN9AC{m} zaXX}o(c{=C_ggs*7D66^@#8KZzU1Ok`mcV8M^^qF8TzUzDwZm3+wW(AYF)NwUaNsC zw5}Wd=#++$H7xyoK^XWNeEuECj7UnIBGzpf~RD;MeDc*_q>)a=v5v{sJaiWXaxAy!> zFGisdRbhRX&pA=v?^wYPIf^wB@HcFKX^onMvoN21U~cDEPP;?8Alz$IqB`JFT#YMb zkbH$MT;%Khtk0eTS6R$P<^;l6H(Ai525e1cBdt;8@pF)m4lU@5fJl&E`U3BVwF4pB zU`CS)UJ-i8HEQ2fg@(-W4KzMYpLcqMSA{V5nuGziD0Hy}{eBc|ArAgj@{>n)>oj+O zVrSeX3V__BSRbMn$L6V3Uw^4{?YYfm844Fx0x<*!=1&JGgEo$vb1mk&KD&s?D$=2Z z`1ga_jXJ8L79i=wj{)i6Cd+pwOU3x0rt9%Ri1r+Qrsj0x@Z#7(;m^V7n4I_FHM`I9 zY36nGreFf=ZNoI2G&RBCUlX%6OV3`n5`+&+aKcxm3!PlTAEtuE(1807C`Pv;vS(H< zgb2rpe$DM!1~E}&Y+Y0?HG07kWP4o-%YMT=E%^o)YWxv&wVx! zw3b)t%OC*5Uk-!p1tO|}5ECn#%}K!xtqDC@YDv37(6iUU_4O9hyDRBuiG~!5c%;PP zE$}zKBg5T%*-_}PaOF2Pw{1V=B8wC>k%4Sq+^%S|`11sczH*!GC0V%^gZU@$HN=9I zqu%q2E6SG4Jmp{Q_mA?8-)n16x3c6t5Bzh`%-{~qYqC6kbNRjT*G+L$#Yxw^JbQ^V!j8(m}cS$7MEn+{2^3!_r*Q`!Zqq}Ciwd5%>My3W^S zYn~UE`)Q7e;*)5!c+m!_q=C8he*Bz)y4bxvVE~ei$~3_n;?rF)x*B|+|Lf7Vy3OTQ z?0ccSkF@fBpOZ{Z(53#XisI0oW|UMdaC^}LLGCO#0jN|?3pYRy0ak{+G$)5HM~XTd z6l%2fi!ZF3z|{QniE`rXL0Tr{YBtE9`YFIlyOKe2JEYIht4vg50ZXkj|LQ27^y^@+ z%G1)J=V^8nkM2Y@7?h~l^jp$F@dca+^BgU{ZGvA6Y->Z9*=E9P+!CWE?Ipi9v0oYG z@w>V=wnjt1f9HpVTKR63<^Rsk@C1tpKj~k~8R+sx&iS{uwK}X&G z9}e|@|BKU7c_=g52r_1*Y1#rTkg}eK{r<6}j}`Wv7!>o_>>@_ZmQAwggAK%+RKQmq zz_D=}=yL-Vp4Nb>_7>ysa5uIKk)b`K+yNlBuyP{!+Qaj@E|fp_%+WrWF`Zh#{76jv z-kY=IF-E!T?Xlqq4-C_Ti=<{i)RN4&B9i_WUzU3DysdTc6NgSB;uHaYB`N$9j;g?k z*V7^(mFZUfeLm>-iWbLWIM=U>T=X3Pg3Zd>M+iB3unpEvZ#AkJoMV2IlzrTpncL$Y zjYTJzQ1LksC(~8)1JO8L#oQ}JPXW#)i6WsM2O#Z#>E`J2e`EX z91(uTFhWY2cO zxA|Pq0~=Qga$R@IA^e^}3for-;DO0&`8Pi=S|{KD8oT)Kl4JM`v+6LvRV>eYuHdDn z?Y_a@yZDr1kvSy883tk$Z)`YUi@C=Z-8E{V<`1yhSIleBdC!&j#sPLT$~{+q_uUEh zWHf*JQfjc-7jvl7hV`F%NpSlKLcxae*L20B!%kZ0Nh&^HHZ$3i?Y*L8_;K%*!jx*; zs&!o~{o;)KUdN1nQqqKh^kPgO>v+?5_=s&5L!K@6?Jrk;<^jA9v{TA?&t^)eX*2&E zCy!Rl(!`Sy6Tz-l)4#Uf=ye3`Gn+DwH!Fn0Zx>AQcv*8b0Njs#u)&x4){o?3z(-jf zBjrhFiGYRbw-pVQg$UW}bAVSHMGoHFqt~mR_3@%Um>Z6}wBp{~|4;CE#>I6m)e8%emHyYQSQ=xuBE!2cz#) zlX#A236P>zi~K=e;|V@zt4CXIl&DPo*z=QaY6oQef^!?Ka}-lK1S21kiL4oWA)nMa zr$Zh0dY}YB?xa9B-!Z&n=uqL@=2v`|$geNo8k7#0Z6e9D@dxXvy_v6h}>m(kEgJr zZH~IoJ+TT?FWgR$V11qLan!w5YdvKcemOVDCqB8KtIGutYnzv7o-zp-w%>Jcp2Q12 zepGPPR{wH<0KX@H^Wth>r_3{ew>6+f9ay+9I4H8f^(M->-R;$Qh_d_rj;d`RW7i8c z*ohc440dcy-6O0*nCk0|?anVMHK0cvld62uWQwUn42@f4qG7pW$~}Wmi@}nzUkRLS zlHQkQ2q`Lg&Mig$f_&(vN5 z`P9}x_wK;`D%W*qzy2uoJxjAAg&y%tnh0;d=?{OoN8Z(Qhu6W6OV-9|A1NE1MJ>>f znS8vsb%Ee*p2L1@OEKX9VW;`VS`}Jk&o;pqs`)KP1;+#q3$(rBCsD^VBqzd9Z%#e- zM5hT1v!~-KvNacjtq~dsK-3o=6PUC@FofF-t8r2FgRWKzV6Z4U4LH~)LCYmR05UV? zwx1GPP70N#@s>mxdtZn_GKI>A7=S}$ex6*3wFZg!$2*(o#=*hRrXAFQ13ob`YF_l^ z0Ba+!bD7~H)X$~&T`=5li^8itf6a5d!lM|f5{CcxHp#+u4~C+0_%BXDnJGU8NK#DK z-0Zvct`VW$PmB51;cY}dXiE0KFblAILr7(P@!KkxdGk3vzR~0;e&xTe5ZQ7far-_U z)g*}A9B7e~fHGBvSjBuO53jm=Kv>P<-9T*Ii6LmDj#|SGmCOmn2ru~Pnr&;DT6XXtD}!g18ICb7Lv+e2=LUA2S!#TTt&`DfWelE* z&For2Hb{7*|IYP&-{tv`_ARzup`UUfVP2``=5%kjb~vpvh~Q+jsgJ)Mw>CWF4FShk z$9C1y6Pf6w=pFvS=d=rc1+Ja^DDZ1+UDZGZd^6R6HQ$f!xvup{O3JqOp6h!W!q?5B znC%(-#>*EY6Rln)0N~QearRx&9M6%I-?2_(8Q8q3=j9s-+sT&(VjI+Bi?{QRhBh7E z<_vTuB)hEp&Q#hAQ)x-AGS8XHQqj7CNxlwUDZm)onG;s8?U#6GYYXA^TYuR^ctnU^ zT+sZU~K(!TkxA}RqflX(TiaU(W~_;$?JoU zx!@jocNbI+*00`Mx{i58K+L#woh6YGzn&B5S8qNGud&@6IX}wiVEm5_oWMliV9?Noh9M$20V|3ta}zj;PZr~0>12C%b$tfei13S#pZdhYspQXSi0Cr{d8kmw-!=%G^V3Q% zu2ZmK>^-!Z`|AQ-gJokHR%z77E@4RnR-0#){6A}o zc_0O0O|}79OkExzBTiC@DlHVlm|j7OWXO?dn~@H;mt;%lFy92@hio|QrYe5`0<&+A zfn%ctdM8)cat9CqVm5uq_i+5!rk?nKoulBw07#raGMdB_KW*P7FYIa&KWdkE+tIo! z;VZr;l?ik-G-FmT2@BmQK+}=31TeT4%VH&!q}VD2X)sI&fNY;nX7QhQv7hvJo5ue!y=K5W3 zncH+U47pR+$4a8S_Nl0CoJZ(|4@O@UdiO>S1EF5(6$*!=CYL3ipeH~8VoB2dk;Znf z?4Ak}u>Lp3hSsgp48n_Z*KJ(*F^X|-h|7W$N?iaXrn7Df%td>Z+76=>94`kbeUXT% zNy*TD64Aa;VX>*v4ch`Wd8%WcU*g|iD0d;8dRD>q^-UwuQgMHD(*wJ?$*zo?-@8;*$9vO;PK%(&DE32q~o5C>G^^%U>mBiWLMHj$LR zdsS}s{JC5kVb(P9Mc~cib|W;_;(H1? zAHAMrjcsCzHgD)g(8$F4uD~1MY5C8+{NF$vc*;w`<`tsFgbR9U`u#cIHMAsPJ287= zi8);`591D&U_v4Ve2hDGXZrKCE{2sma>{)dXFoFwngKaqLX*^r?*<7;`GG!2lt*1K zz|ZGzkMI1pu$rJ%58D^qyysDzc3JW;)oSA_+PT@l#C^M=`gWAla9RuPA9g}%X7b)E z{j*p2DLfP$d6|2TxX?lTY;+kt4Jtt-L95>>598x1>s zw!4swi>h?uc!@5yTGwOFVlXCOPTcb)<~FOf3fg%l$i)A)+Mm)fDdp13AfHA5y9&%i zLGgwAROL|lbjlP2l8X1H8b(ISS&a%f`#$7Id#(-d7eo8 zNvh}H@{_$H)4#sU#9DkG-2URl-uT+Q+vp|XktvJEZw^SJR`hHr`5)b*|F%DC>~7wG zh>9HfbG6K5@BEIGi}nRQ!l0JGLK2}9&g^fKP4WN6==|x& zjFEyHWR^^@wIdWWo{i}uHTk^ja$|`t0j@x49&!=YV8^nc=GJ&8h|yUiywI-; z>ece?C&D)^U#gToeeA}P*@T3X397FvE*WIR1Di?>ecB`sKI0D(jZ}X9-n? zfx<`hYJnr!H`RC(pbH#IQuCJFjL~S&Wp>hr5GYJED=q!g9=TcG_1kL}7v5vA@YbMU z^+MmSCR}WV{s!A>-URwrhjwaxe^>e>vjC>Tf5u#hw1VQxTvcM@jJqHDA2#i7!fK~Y zlyWa|8sA-i_E-LES_vow<}qeRK4vPeyHlL2NS-pKHm$5B*g9!f(1dwV6x|kue?O>` z^nf6GwPC{1?cw8AkfDuNT~K7mA5VsV1$CauF>=`SvZfW~Dvl!rf{*MbFJ1udjN{6O z7s|F0)jMY~KD&H;{oqP57+wL0@zLn)$ z$dY}XpQX#Sy$ATdbHK9c&f;SI@H%2LypZOzW>11>b8jb?2FIqR08mHjXMhax@SmX~ z|9e4aRo%sdMo2$fTc`J6XIYkJN9;BlsMxW@eVD_62~!mOoMSfha-Lzh3f#@_Ro5$? z4Ba%^jH7SxE;V{T(>YBpuQS5qNLzPdg9kjm;>zr&xXzTE%bt8mZWwHWrD&D*;fK?^=I zs5SfI$t)90zx@28x3i0Ip0GU>@xpE4UGwCzcLQXS=;nRJ;0`%lVWXw9F|G()D|=mF zYn7VJ;56+E#&UQ7m}{dNCYcG36zqHKaL4)M8a=!GcyiEJofT^M2w^}q=HpFey@kTA zoY+7rh4`w2exe{0M!@$y@KF+7|0GzunK63z*-(Re$e((D?lh zpmY{8Z$iLP<@;zf;x*b=F&#eeCeh)!3HG3Cd@AckIoUV7(XyYH*XY%Lr4?4q+~q6C zpKC|OTxlBaNH8J(nh<#Yf>6mlbKNCei8_?lF7^0%){~i6bOfQAo3_4FVyT*c-!L0f z0;TExmMxg0Ub*A^>YJOmwnfy?Rx3ArZRp-a+ zVQ_Vqw~vN^U+r4+)su{$-!)3&o_P+BPm=1n*xa%u%;W9*59xvb+DdA4{vJ}|IXCdy zJYBfY3Voe;pDlV}jT(=Yo@$F(Gr0@AG%P7y<2P%?eo)-+Y?~)8PDlA(Hl(p8_%#w`kDA$OU`YRY8yTuJlx2R)J~E{T~ZY0 zI|coJT9IeT?i8=}CP&MgOs98Z?;Ogm?cevO^ZfrjlL@>9rHor&dyKb!{Asc&z3R)pH*L znG5o1UXlJY+sXf2g9W!&rqoMI!IjNrG`iU>6?2~&>mM<-cZpwi=A z%-PnF>g zGSL8$YZeLbn>;XF7ZZ_vgeDn3O&)rL#~NyKZL1vKCUWC&;AZqbeBcpbkRdv0%ykiT zIQz?|bx)Y9ZMd{eucD$n(QolO%-`tHanaHCPe1;@o=GcHJX;jwP4m;L_2^DQPZGmu zEw^V`ufD%w;lvJLlv!d2esZ-NOvNS8>h-6nmO9ems_68zX+7lbpDn1GZ#fV7wqB=L z-#@qnWWtJ};uf41b*FSI?hzw9gL&eiD9O3R1(8Gii-m7geQp3BwJYpl*AeUp^2&q2 zljhm=Mdo#A|H%s02RXo-A)?)Oju?#hd-#9NqyJ&~=p~+jHiyKw86_Ew2@H)BXj7>1 zJbx(+f3a0nm>RTUU+o4-mt7ArO*{D!&S#GLsd3D(e|5WYbImWmrbs|%afTOlBLC}=6 z+e1wDPK}^TvBK@(t)bbT+Y0b=yOGh%G$DKx+F|x`*y=o~k0PkKg{BEBb(8 z;F``C{QM;}YTxIYzR|0{)%8c#?X^wJWhavVf_k69=p zSAAM&;ix~$lRp&AGuQjsOf6oD&X+b$f6$>IfWsrP!ibF&cv3lk+yPkY&UK20==)nF zc{f|lb8~pK1`U{D<64A~lH2f#Lhcl(T}6$MMVoU!@anWrJX4NrE$}e>KQ1w8X&f2k zQ_Qx&qbPXv#$L?koBFy1huZ2DK8$D!GDGMwI_~cC3h>9;$)9#s8W+;wk0`lj_j&D1 z0P8ho@Xirp$A>MNBeq$+!AOnakfQOR@!t9(>3)nUo5;m`I2D^5_}yGa<~FV@>Qx*J_EY?N!twKwH|j|*ncf?#B5OOk|1$>F;V@&WM}ae&6jPJXT&{MeEYnvsJ6`+ zY+!$Y8JqAEU~p?iIP6WTvf;O3ft5db)BpV}P$zH_Ct2uW=-*cpGT~5pxWyjTTOo{i ziiPa4E6n?So_9a_&gYvtb_C(Lu3;Jl7S8iRF83(G?bdDcmm5QT6L?%U5-5s`5bzK` zBFJ_eA`9^GPoWr;;Kx!Mm^8|hJn_$(_qbeI0}8(x+x@LcS6b(Hr}gBQvgdsD}2Y2r0bU*`4pL|fG527GD8>9lb`=y@D- zC>;}NCc3h$*pOMj)iZxo%6Sa)g>y5ZWvsOE2(-%9ppmf@Dk17l-Z92A&ECJLmp_e<`W{P3sBu8t7>gVZO zM~-vu3wrbtr%XQP8~0qt?zPALvfda#N!Hc#o4Y?65w#8-bL?5Lo{MPQeMddzm|Vka zk32j4-9tK?CEHbyDRrgYERc@NnJWL-jz~GuTR%G49(fZ3_TaZ!cklsS5eSX?z#_c7 zGbPuiESzhB2;mO^pNnrv*iBPDH2DSWY7_29CE?b#6;Wt!+TJ}p2>)TF!+K%FHI7#Dv z0pPUfM8vw@7DLq!)Y(3EJG%=yJ45@p&*mOYJODtMqU(HIHokc(iY*)~?3%i4WjgB9 zRH~f&2AN0=`R%_Hr?)^33HhBo7lZ~!KJm;m7GCxpv+?1NJ)skbzHpC$s-y|)&Ak{R zO@H7HhRm8N7JkoFX*9~>2e`>K%EzZ7V-c|Yg^d+0d4NE`kg6Knm)_GMzP*x{FOTLjW z(~!9=DFrc?kghY|^6=cz&rS7yD+^wJmqdyWr@TmZcBF508fLQb=wfAL{RdO-S_rRc zd^-auX%FxLB#Nz?K#cY{`F)u`-8b=c&In8=fb%(TH%_sZBlsMedPdx=*}n74p@tig z=N&QiEGa^q;fXV!6q3~a0=nIf_69dC$3^4T9QlPL*#h`A)n?Z58ZXL?_Ea)y2VGtD z+XHG_3zd5)6}}C<9jTJ}wr}8mN<00=u|-c!!0#c@x*IgxuAU$s)vPTLF=imV_|}m? z5#Zh@L>!NzYsidf@KA5&9sLPm@23ZP3G)}IC4Dn(nc+DuV49ij_Ye}f*Y?fxY_{xh zys9kt{&w~EB}{OkB#T{+@|fvPE_K}k^IsuzxsLIk|3&Vy{ucx$go1Z75kLfMq+Jr^85 zxo*U@*L3uLItm=09h`y}Z>o6$=uGy9#7%|yznwHVt$3iIeyL8L_#=V}rd&WVRE#*= z0+_t}(rVsJ4nu!6y!Q^F?_IGi-l7Ek9iKbCR5sc>C|-HLUQZN4v< zJ)-M*ohf6jGJ-wv37327IutYA+ee!Id~T^Bc*|5$pCO?3(gB${P`Mil2S)Gx7{B!1 zIWAoLOrTb2F}l7}0XXvIXSO31*H*-Q?^$(4JeW?lI!gQ0bI-pHAvB4qdv|(k)rdJt z4X7eds+hbrw77qtOHzH2;n_u-soM?S8Xum3UmxNNF11kB07rFSb}a4%SO99X_dl<4 zFBb5drqLSGM4^S#T#vO$)2S(50%!El*3+?>6f{3uO25$99To9lJIZn|!; zb(2aUJMNb~m9o#S>sUU#MOHQ%IY{mb6i1yd%{5PxWzxLbcEco{one+xvyN6a6hhdu z9(9~{)zch|xCVxCFtHcsL(WFePbB(h|db4)T&z`uWe6t30Ei)7V*5)ksF z3LE3vAIv^58KRAd$Xr7$VVA{e_nurub(M`x0DQXjr~?M*kNR?oQN}g`w#fHq0~=qm z|C%p3ccwyJ7ix+fjCD!f9hLOLcc=O71u>7p&0EZc9P`*Hv=tlZPD)Q)>g%z!UVp5n z^i9c)B(UbY)avn)T2h5$^DGZrx;T87b9FPlXNd#RKZ`jtLthM3SNZ1BMM(iBTxRzR z`>Vw1Qn!WH|IfYkfBq#P9vIrIRcAqiS^ZmQJ2&cr+f%TaROr>#&Cc%FUzXV#dkYy}r_kLSvz_W_T z+yNxNGW{fUH?S_>k)Nl$fdA9@&@H8!jr;$x0o+}-4tI^q6~A%_WIpXck4AvUA3c5$ zb<^36M^h@jai0~q5xXt<&o!0KI^Y9(AB(ho&2ks)hXAsu@E*N`!vJg?$A zQ9Kz%?uHu!*<>HcZ(SfC6?C;K`W&M=}pDj+g{`88~Ss* zOg)Tm#7Bg5AmUh+@=|WZ!DZY#?8#mqwi>m+CTwelm56mZ{QkaHoewCrpBG0zxZE@o82xMOkNmKIwf{lqmeY%s zb!KY^-yIwF#kaMiPxiyyVpc~ag0kdhb)0mDr z+(~2U?Nd8pr7%!Nv#`1VLVh}G9MH?mN-3Xlj2shPdhY*~;pdnTF`xVW{=V6UuI+*P znI`cfFWn7M4(S2%XDqaR3Lj7{N7q2-C^$6{4JnheqTik@9jYYz>O@A9vuW*?yA#`RVSBFBrOW z_6_P`)wy==DfBQF7miJZ%Q)tPkXjr(p5iV|L|B!RN1P-PT*Yb1HwBK~x!tpj6l&RG zvBDD+bOF~_DlKBYTfuj0W*Zp@1Np3Sz8q|^0Zk$utAVs$FP5&mjVFU&A18?09RXGeY+GnK& zmxKt&GHDbXT5<|YhGc-x#y@6f&)h@s4y?}O8!}&wvWr3^t}Qi`b^75qSYmpleKiXAY$+J%3yO6ihtB` z7ISmJ?3CwE}L$*+o9n6BmqvYij6;uuuBigi&a5XlXQJDY5-dl!6xvlZT zil7K0NQi=jL6?#W(t?I zL9X}1`{BLb>;G+F;92Xr*PXvR)?V9NVdJ=7Q=8?0Trse4Pdz!>3YHym#ztm+KV2(6wSXns<=B(iI|`7x|zAcHfRk@ z5`j3w@DDo9yN|H)nXgTdUy8--1>p%=b~~+(!r7wOiVn?W!^dQO{Uko+RB1&ZZ$~@*++R4 zyD7sWTepjsr}pI3AXOBqat+IU=3QWcuLQ7P=UtAe8zy$oUxt8`RKQ^@w=PJl#UuJ4 zZtg~QFp>XcwgIscVS^k9zxbkm>WFWakBL>oNW|uV+6I$cgtfcEw0XMO4+ZJ~)V|;;w&9GE+5X6}RM9B|#HUou^hP!FLk!(d&@!@i~bS-{`wx9S>G@lJ5HHHK{9U z@eS$;Hq72MSexAz)2j*YHR!2@-FwlJXl0rH`7(i@-{);X0n_z7SFIejiIxK3S~ZCS zgRVd=Ak+aJjoOHVybi0>lnCtNhA8m<=~(_HY#2z#o&0ha^yZZ}nvr=A~Xf2)> z{T$ot|e$ym6t_bu1ZAKzm(}@YL%T@)~it3uB0VbLuS22@(J6GQMAP5`uDTy3MEP z84Y%jiu8yw2-RsGR9xw>xw(N$5V?YDYajeu#1r_!M$^}6BET&bY7(C;=)A1JYlDZr z(OHU{h+^Lf7rEwOP?-!IRP28Ex+7VrE=e&Z9NJzNHPQ#Y_T#~EkJEfj*NY|(?d>&% zxz4@w+)&?njxY}E4i~QH6aohwxA5`q5iY3vFp3H+!S%D>i~o^6UZPE0VraN%NsV5( zGac8kVz3zOfC<;apRM6$GU#tAw^?WkWL(bTQk+~k*T2pdYn1idiH_5y2xA_fWh^z( zPhI(z7g7LBV)9HOv-_I$b2Vef%lqY_JJl%NKB(t&{jnUwVDWB80d>w*(et!w9N`F) zsEi_mAA{TOs^X0O0ZH&^`{dKH70z)*Umia{uGx1SKO=tJuXikYf8_^=shP@Lr~WJ1 z^aEQa);FM|lqNZ)G+3P>!<4L2)DU0hd2gZnMa+sk+=WywUH2Ee@wXd=Mh|CP0(g0Z zIyi`t*WXjQGrdXLRgBf^eD%Ut{Do?}dtN`$XZ9B?Q$*&en48b{hw>;3X_#G5jvIo# z6%DqUA>V#PDETWZLs}WmvAn#J7X_ST4$O3H@f^cnRy`Yf*>@81@{?E@RzXeWpns59 zZC)v1YlBg#vgNg5kVl?59aL-BQ4K4jPnjzVJnrS5<)fx5c zS7FlSx}SH>(}flhK(F^7?hK<(rBX5tw2R0;vB964iCw3eUchAwev<^3?_);WQx_6O z+`p!rTbz`*&XXd*c^e3N4k%GXA%Zo6NcE;)C@8XuhNr3|Rz@v_zaFrP|-x$=DJxw*s>JA3SQS-i8i z0t9<>;Q%l6ww@CHmrvmy=j?F62$%O7m8(qcP9vlI787ii?FWC)eSCr|Le*Xum6dJF zH#Vz}t|uLz^N6=%6%;akN)Z)N-$Mc`5}wsMX0L7I`$Z&}*C}CN`lR|UDWE-K%vL^} zw~x1CA*A@GOt#s-%-LB;mw0ZM=!%Pnd1=oxxqIbcue}q~6&Dac2h%$ZoL=LqmPcmV zFqkuuHIb9!&Yip!Yvmw4uz{1jF(MNJcNyCmja>VETG%(6`Gw4wY9b=UEJc%i{k}XX zL7RfRXOk?V#2R#HD28p|I; z^%#DAmY-k1Gd3eFky@Gg?09eeE*iD}MMSuc$@cZ{EAzzEZVY^6NM^XMKbnq3=0A6f_L`FzLk1=SN;|*uqeb?Vp^Fc!OgOZU9mPJ4qb-TR9Z!@JdBqTHoG*6 zwfk4fMaA|{A!g_g2bvYtbvSRG#In`7gO7x#sv)-)y z$W&5$ZVpleeM&W~w?&-4k$@))a4*EK?r_stJ&9i z#l>Z&3=FNRn!2p*wBBKc=FPLjS=rf|p+dlr@0(A9T8*}wS2j9aBrkVeN$~{UOGpMQ zB8+DBM;(N7CJ7zG+__5)?L3P532D1E3nOZGC@+UR{(Y@RY8(LVN35KrsQYaij;n3h zRg=VPB& zv-s4bzxGBX9KlKEwlD5+`!=NFnX-_URml^>Oot3L(+MNg#4Yc7?k$i`qk~3U+8seF zI+kETvhTc`I`vKghOPhcPLA|jwFCiXDAeo+1UM|NU=X0D`4c6_(c&st1 z0a$!g!Pq!I6|VEjq--_KNdIMV?}c^Q656Ru^Mk&$UlG4ZJ!r0dtOWGP7kcIgt$4rZ z<0U*QW_-C%PSs`ukr<6jSp`~hy(OVhi&sS>JNSiUOxk~vdMrH(>Oa&@54>Y%jypQN z#gx;eYCaz{4fBx_5H&NuF^XAI@PIB3A)Z0@zsS^G-xoZNBusMYzA3vl%J|soLHqcn z{pdGO_dK@W=kNrwP7av0v?-R`NCgxkN}Jws0#naiiQQHjKAYyelAJA=*im>%9^N9o z!A9pT*wTlyeLSEHUceK8jObgt*4A>F_40KOKap-ao<7QCQ8Nup^UrcF;4YE5OuT5^ zztCqm8v~wHXW?m#Uo&+4{ZK*%I`5;;fI-8Qu99d!}rZBxsw8n-rMv$zsqLFBweNL`55i=+yp_xfN6S` zH!1?JB-5$UO}|3N=0cb5L{zOhv9jSw&(`xXwPAl;Ha|b#ba}z-_ESf4O3Lm>fwatO z*@`g}NY2gYuo_p_rLn9E&#gUu7XFG%_k%^NXlH8rVd#nUG4ZOoIdPSMe4AT)eAPmNOZQm?Pyou(nRxcy5kY#mW}t>*W!*ox2LCBYv?V z9T9ZTwKSOrq;QYLxvPty#o`Q*)=(eyxmOmKo)vOCB04()9(fI{v;4PArlVzkj=P!Fij|Z+q#9 z{8UjG_AnzTPT0$+M3`f61O53K@zbHzg$h|KB^t{OO3~fW?-=Kdj<7WbNcXg=<9eBQ zUAFsBBS=qZcipVIH~h-R0<_Kk`N#eKz1hS2#MR>cGyR`x<|MBWmwI3_e!uY(_J_0TH&y~!*W1*!9L=H~ol#aL}d&DP@ zJF&txGVENMs0RcwU`T4d{*vRoyzF0D?*lbu3l9) z39Pbhk@f(A{T`uTs`zT{`%~sFlC&4E~$GcV%#SL{Eaj)$?`rWQ`LXp`lvcl4Nhf17`Bs~=2AWWJh4 zM;m=4Lz)S<+~53cVM|SRScUzFI`d!2LS+*=Kaw zGspoyPhd|&DCn7idrtvJ_|yS~PJ$cVUFffyB1`(yO*V$=Y)B!SFB62!kF1yI$-d%# zCi_fl%q4nsBF{6^7T1(f;X4*@I>qZb=;dit_Lay)1hY!`WGS|6sFz*fpcUqbw&fKY zB9ZxgkL;->HBlhHhUT&JP?81qe&7bXa1Z-^VSd~EFHd%Ej_+8S`OqhUc>6v=yWVMX zH9qRZ75~&faXp&u_ih+(>02{ar3+uOW-@IUwTH85mYU;VW*w*4VVGux+B!l#g1=Nn zEPkbv-5sf5;NNl!LZex867Z10A8DCdi5utGDFtT8fe{IFnEXL;7RJHR zfEqnAx7fA{jjRdw_tB-7J*5pm#Pevw{)1>J318Zb5d4?+wC_wm?69TK{j=faqi^? z>Fp_Zw^;1tR)aiF9(^}Btoa_p@kJ(vmK3{ssV?Wm>Jn;=)ZUvx_>s7(2@vB5Z>xt# zbwAkOTq9kA%cq;g)oRy;lBVprs3UGv|c8h*!@WHNP3RE{;Mi}QLbhn_<^ z)qWLrooZSYP`?i;d9kV8=n$olc#_63)Zh>FLX!+-A)W4AS#79GlC6Z<3Uyr|BUxh4 z4ovZsb;^4@CA9eUzI4J)Ub&N704!1Y_bxerMn3fH+=TnG?h*S<_ThM$y|JURzBWPvDXp)bR=Hzy!)~eNgFp;kPnY>sVyOCCXWbvb#z&+V|iXqm$iJ z-})s;6$KL=M^*VWsHYcjhAsYNLadB?2?W5wogvf0kcro(m}Un4XSYY7pBIm=sO2p1 zehi8fjo1!d15ahN)4se!NA%X|YR!Sju|i|Akf93||1;^>0qGdm1k9X`N8_6%g1Cp4 z!6WevK@p!bh@XhTt1OMpnJmL*X{d0P2J6fPSXeltebMfS2}vIF-fEAVORDx%W;9>> z*Busf!}(2g%WbmGB}jbKTQg=CEFDVImSDzvb|*bNs({~0nX&)j)P(YI$dfX}39g7U zHs%BM$5?1j9qK}yu99<*+of&F0v^ecJKw4wF=ZzoLHCEcb&cjT)dIiwkU+6dr&H%g z!rew(@}=AFu$945uGg?_u!cKSJkYTZ;_0vm_YoCAuEtd~#fi^Q#vczpnt8ClDtT{I z!@JCtRCxAHkg^x7hh2A;Vs208A7s>Q=ECHsvkS|RsDh`y{ z-M2*g8fd+IUu=wWF+--Z#?`zGC(8G8b_PI4p31gW#V<>Xhysr;50m_a;*&t8J8{La z+`s24s!w9A@rvFgv)_3PTrwnkoYs+pWC?pVQ}i7@I7=h;-B*CCCG~o^!`>74l|M~y zoxX=}Rc0v6^}E_@-rK&xqm1|tOp7B-_`&mgZGu_teJgndQAOHX4Ck1O(^B9Od3q1V zNJA3!&%P#f(!zq-EWZyR@aYF|a2>jJo2#m|Nk(u^+@ya0jwE8KDpvtSEWgCR=`XoVWI5{pyUBrrqXiqw$I|D5s#-)PnsDWhZe z*tEbO<-ZTK-X|?fFimC)cf=my{%bS5 zH+@fsz=(1cMqBdm%V{`2T`855zgNC;y=X2oL$K=yCQE0<;Y?=_&^F&brbZw4?o0#f z+X(N}ofb9lD(S)6T59@hvoj{J7C0PJel{ltmy2{X|}x#YI}_t_Dt+K z_4GmrzCgQh*HcsWH#=#&q0gK8Sqkt16~?>`&ars%V7w+`aH65A!v#$ zH`L2__r?O|Yly|FV>_B{mCV_UaYN$N00X*r8uc1NPHBGK&&pcuQq&xq zX7?Zx%4}kPfbI{%AgBW0i(UC-V@}s#BUSVibCO^5=vwlbjU!@_HvsL+ZAfwHv~p~j z>GeW`vgul?B#K{ESC=$jZMrOJ(i?r`J%KfFulsnrD(8;#qKLPSBnQ!g>tgb1l^%5* zW|UC}+H^J7@9x0lM*eJoz}N$UpHycj%TA9bLhO(7z4!z%4UJD;Sw<0b0r_2r){!87j^--+P? zJ+^1OWoj#MgGkkQNiya03%=3!N-dTMmf%?#or}_;8nBK?Vttk( zJ)yfj=?rY(s(v%i8Lg81;^=^oXxXR9kd!dPyo*Y{45KF})VArjea6eczLh8r3du%tcsgbj4mP8GE?=QSK@(buTfqJ=w zBa>Y74Kc%pASR@cgU@Z(@7~@M026hH+I2*}yp?%(09$rPUvhhh@=xvmUmr}2@RV)t z8uFF^T*aYAPy4z1yQ@gJ@n=DLt_xs+neJML<*UX!Rd#KG9#&L7xF;obW8y1I{puu?)-^h}d&GW4Q-$aK zn{33FGfQU%(t-P9ba!F>-Sn5$1%L)6>=8LSIc*i6PzPFjT2xpKsS19x}w$xmum_KSK}Q(}8!HR81B z{Ewq#5MzV&@E2#^=L0YbiB4@-VJ+FC66((~-@W6pMOLRipE8KCBU-x03k}WoYp5Qb zNynlPeN{ItjMdt2E=%>;u-k@6hyu`w)AFK?T(JP)_ocDw|6#yKBww1gQtcp-U!9gF zRWu9rIqVdZ8QW>RUdnwItXo*3oQ{rc6oB`11<9G3R;g=h$X_8lF%cXq1leKhrW!%> zf^qO{Htak??r7$dyh(y@7Pq;#b5~F5EI%+&BazE_uB~t8$tOMxmYAy>a z9Et*g00%NIN&9qiu6FzBu1>ppM|9=gP!4*02mQl8v{Gpl9&c&9aETlS)oc~V?-;4m z#@UO#EdKH%LK9wV-{ZpTx+&GYR8cW!6_#6Uok|); z>%s-#fvH>gk5>}sd8*nAz2yi--ZY9yp9N43EaC=JPkp#Waw#PUy>z|$> zSwP7105Hjy{W7V~+VHv%vhqK(0RHnmFogjyKGk;bw$Aa~PM-@+yD9IFMsXZ#t1Ap-gu+!{1wB1Q4yEKhltK3 z#=qUIf$`G?5dzI`&Ry{`DWH|;WgzENTwTPaN&pr#MoHfyK6gbi;FyVUWd+W4_>9Sb z1#OV{Gv}`;1Kj21OTTn}`LhkM;HNd}S5MDf@zUv8lRTI@_ozQ90t=RT-T(OeJ^{vD(J=gBDY(+sG+HOEcxNtJYiyz{u82p(oFq282Zuo4-d8Sv2Xq|l}>|8gH2&!#G9wnzot_tr2+5Y zE=ka{OlO@uCmW=uoctm7j@@mfpxxgcH5=iJ80^!UWMSn$JWqUl3;fDAZUIh9BjP}A zka5uB!Rr_`fQ+d}_}`7}b*fy7&~^s>#Yy=7@%>ue34iC4PpSZ8sCaW+J1w%baKrgS zllKAmSAERFC%|)%x@s}7hOSYD@Wk^jjw^5+1T@y(B9*_|G^Zz7(PGJUjvcU(v?@K4uH|7kUF z>{_FY!QbbGSj?Wv#0jC%n{&@C4fv~ouEFbna?Tmt^#7MfF^io#TPV6-_EgjK&ROE@ zZXgp(hW8|~;UPx&$h{8-Iv-Op-yJf8tbwtyj&*o_u3tqKte7+lrF0-RyjiLFHM^|s zyw$awe*^t}(Z@i=GVupLSRvu^~Q}S zd4>7W8P_M;eQy3+{hWw;99+DmQB~}9Ld3Br(2i z{~1z}2;p4u9-izw&-%j^V1YvdAHq^;CJ8MSM(7aFUmRtW^h0rio58P>yd*)ut|p+E+oBhuSnY*U z5^d=0MbrrlDz~@JJ=EY}nVcxQf48-|DWSpR0A38LLnCZsQY;OLP@PJGWxf<_st>gT zw9ZzZA8z=5B}#B%j7#QYY>o4oU!=WY)hz0L&12MGTvVWs1BRU>z%&>NcalzVMj)-F zw?`R{;@l$_Y1tY339(7Bu_i}5>nUVM1CChI>{Dr7WhgaWxvp1kQ&o~L+Z~lhU6b4p z2xnNRDhufo9&J-je6^_UYpM^7~>}?2Y1ObN|-5;8b_#eC>rDIQ(5_h0W47 zp9?%s5sZG%!G9c>H#X+;r%2nlsz5_9QIQzZ`(9BG994(WDBjL%-EuB^D+IGxyW-kg3t~_&$ZnU?yW>3l zF0aDNVysxh7<)XpaDO$TLb-~xmEbuDyI|>an7Wo}wkOfOhipzpL(4*Qcq^8px&!8U zfQo?j_uuNJF1S^fMqtYyF>fjaO{TQ#5GR1@%_zbaAMfNAF2_7yV8*BaC zG_NAv2FzQ8!Ci|Hc`>8MbR5y(P3u@wbk(0 z>b+RZ1`#TBXytZs2zifTg7*bp!*)u4Ois*4KrB|wM(XX_PK>Ap>~p7OdeMv`pBy8 zDA;keABap3kUj~1sd0{!6ArGT+Y2GYYxf1XKHcSo>rQKhN^ zu5}XlGvCQZXaRn&G0s^E+1H0vjAU22Rhtg@_A!pHxFPywidUSz>)eXgiK(eTx_x4-HbsyxvMx@I zAqPHd>F5cwqa(ic3ao6qy0E4&4qh3v+aDhEW`Mkv(2x&TG^WyE)*AxXu{fw?H>PkK zClk5_YsZnc7RrSWX{KAeVq5o?BWE+g16^<`&E7QoHc&QJuL8zqIAdMJCkQt@t=eHF zmPzoOdOCtZa#E>kB<66q-+dZPIgN4jfaMxZ<%80jyWx1*22@`I;9GqCYUkxi|t36fe-UD{T(gMx{h?etba*PU^Q? zA$INef#~(a)+-L5)=CCyG4utdTszPZq3Dh&r!E#@s#G8|_C6UE!8m2256V{5da!1* z&#)pX1?p}`Mg1pEMavXLvMuo}V+qHI`T^7tVGN+f_V62s8Mo(qjk$!qLJIsQW_;8w z$=KGukWp#-Lq=7Tl#HGsGxIyH!u_C{<4lI3)$g72vvMzYC9%bT+?DiJR-*F~YNFfe z>g&FmvcV>dV55dtU=4a@&3HvJKXIZx3~RiWZEg2YpsU^CWS$gZp=iw8pN-ukg#C{v zkTd#E9Cg$Dj=(=7D8}HR_L-91>q_BgYqn4sdY9xMG=rw4r?d*=!{yEX?7clZO}Dw& zqrozg>rKSA&Z<2UOu=D-{FGpoBv`q-afKM&bo@1p2}-Ta5ktr_1UKu!4C5&z6v<_A zkCk~jqGoqCPHsI3(T_2M_8Y_+33wbZx~gTz@fF0>5Z8$=#)$4C4YHTBlxXyh9kpUi ztq8IDw(Yf#0*$hW?qD*O7GA9N@b`MbY|!sNK61Vq(;uK`MMsS3tKLx9)DWx#)qn}= z)HV2QRv#2-<`qV<=&Zi2!24-{ zK7xT}4W>h=5T$kLy|o9DI}9Z`EMLb@zHd zJVIKhCxrj3{_n8xtrS)4S>%~H^`X8!x>q{pT#-GnkcF*lHQbtR@L0>Qwj;NuhBaJg zDDtA%^qQgbP86&J86)KS6s)may9PVz4cuPyez8~m$j1|1wzo7ZtniYi#r3xCbrM_h zWxu#cS(tZhJ_`91jl|P$4IwYbncIfgdv70`2I$|)c%A*3FlfEuCn?>pX9&09%T*E@ zl9VZ4!F#uPy8;!Qt<{68Asf2Iask}?ZO;w0RkXxM@-2m-$vAiMl(qB+M5Oq%N0J@_ zfH$|)%dtY8{iZ8)&xH4#VIXr3-ON=b?&aW~e`et5F9Bf$H%Wrzsr?VfA$XYlX8nG5 z98ch$ZUM;zjop!)i@TCSm$_h^@US`!LseE%} zuF9>c-|2;0i{~ink#f6hs`+(wX;L2%@lb$%}ca43UgS&DQL!A1|hC^MoBpIVY zdqw31Z z#@f7fe@!)$0Kc>3LHCI0?5~6+ayp+s zzt`=xqA1kdBgpH+hA}yQ(bR_8hX^e^rmMHmr^Ax~>+;K09r(6*S8m#eRW=I>ct=3| z3mo5aPMXzyQ$l^VX}I!f_o8+p^~Q4zkX2Kq!Kjmx@}zTA%5;@SO%$uj2qOA5Xq_)t zZBzthmdIgH4d+rGuR^3GK=ReP=U7AGl`>vL-gluSV)Tr-eNT533~y&f4)XpphwiHl zgwVmGLM?80--=a}A1=kj@f+`_?2lpBt4SI3V~o8T%L0>^Z$mVlZ%|g!S1xWXH)v+7 zm%Vh!hXtm1_g8O>TgpclJux}3>4%Q>Gb+V_Ih1qF`$gOv=&mfdQ$EvhG{)Uq6&}$- z*KeKBXf|nFNt#N_8huT{6~!98KSL-*dpM1N#J1fU+OrU>fNzhkcv4z7ZSl=3wFu_b z<*AX77ikoz_ra@e?tsJBrW@M5Q+CWpOkOJHiSJ^_lTjJKl}Y! zyNj>`Woc{ie1+iSqs^TgX>K6Fs;i1V0^ae8DGdYbb!Cngv}E}7Bq$t8gEy~MQy!TA zqbL1!4{)hH%?{ng3jp=*X02k@D%BEnSE7l~ zx1P1?w+4HwZ#e>v%OV=KQA5E7qv3ulIPM+lG%<2}rzpN4H~pXC&A;#pF)M(qx5EyU@t zFOIyDHYlzo*B&6RRqQ|otvS6i z^!41zMi=T=+;x&EDhWD6^xAgQKv&VO}FeES&$vihb_r103#ZQKhKe~-w}1oMnANC?<3UZ zypWwuU(%ndlD6b}?7fz=w^AfxII&cepu3h&vD$F4<>ZZgQT$j1LpMwt$@M&NjF7Rp zF4TH3vp8vL{rk%sC4bq^fA@GNT5R&YqEMuQ4}KE)0P$>7BF+#;PT|l5Pec4gOtWd)X+o6k^=g8KD#pNNR||h5`E6YeiN!{6AE0Cj&+=!n;ccF zR}Qatt;72E{=rgr^#6#HJYPrF8$3*U%GP1O&oNAv<29kMEkEwzm+CKB@dtuWZ;X4L z3BN0rXNDP|kJu?dmzBcd@%QvbV$ncmv1_{~jPSqzcgCl5K=7qpUvd5& zL;E}G9ySMf9_1$-vpDCx-UZ)9AW9en#fJR-pa0JBCT@Tjv-=R%o~9;#`;LDjl}V|X zzJ4MDBcti2%9A^%ZnYcEao?~j-T!FzU2-7*tPI-!SANCJw|>jbW_YZ~(jbKb@Hu@8 zIa4>DdL8_a?UYdl_Ov@G>@-)36E^hNxr_Kl0U<>_x(eRn}Q zzj=VK{!*>uzt(*#ri-^d+i7YlM_$#7s73{5$jUmA#b^qRNdjA7NL~N2-L|lgbUR+p z_y=3khb7~j7$z^}bvORuA`h{rs&H@5_JOm4DP(u}3r}^n3E20s@w?PQuPaYH{zgH1 zHv9oTea)}(iT6*Vv_kwtru3&bg*9yjU_sx?IDRy)972SuMRD|n|8~-0;yCKKrX;+9 ze`E(9SBiyQVpv*Y7H*-T`p5^^0&9Y>i>AG(Hl4pi$vWx)n}$q3R-y)2zM~IEoc>Ev zNx1cypfvq`+(jzR`(K`%JGvz7D!@H)Z~N~4GdlPym-v1J%G0{=O+$a*9C1n`KS0nJ zQypdgMxcK%8?Y?jt z%__A{tiWv)_l3^Qxfm$}MBHD$YJP6z;2jEpJ2RR)l+Imu9LVwnH+VGP{wGiUP5hoq zy`^8weOOL*E@k!s${1}Vzm`5vy?j#v((8h(A6L(Iy#MkP;ivO>X z%UA!oDc8TZ<(oktR%%@X93^=Psw*^F8@gt59^rz=A0`Y}{sczE59u z_~#o>$N?v$H>JdRnilJT;1Kvm7wa2m1yfd)XUS=Y-m%v?Fna6=5c3B;PEe3+wJE{{ zo1~SeZ`qvcuU&@!cXRNg18>Q08g^Zuh#`!XZ&Vfaje{*NSG*8;fd_1yTmNsSNo00-QHiYK0T z?E(GkucrtTTf56Y_y5;@iG2iYRqG+quibM+p#|{o1@)g)pSyP>ec)u<>_~C~zm>6; zIwP(lO6|MFefHNCpFU9Dz#!q1c=E)x)75K2;F;{Aw7u!2y{uD!6N;>GEkQqZi^mITmwf-J z=4S>YoUMP_mM>oezn7SiQ6b)PO&M%u*MJR(V%6zUvQTa3is$hOnnEq=HCbV*oV(xi zJ0Cx#t5!%7fnjtZa1r2ssObC8yXqTPh?EiQ(1Xlz{*&I81AWV!qpLKWh`pO#^zgQ5ym&jhf(br3kE zA=bh?(Iq`;eD`aIqTA=Q{fY|?d!Gx;K2eV-JaI(Ud8d5lcGO@C zv_iN(&;|fL;;-<&cOZVRHXLjC*Xjmz6XpJBji^o@sT3Gi3|;%|=A+|_bL5Hd)V$@4 zc4r8oEYsym^>U(kHs)A6KhOx)`XrryD)M_u~dU?1pqh18c2LP10D-n0m$%Kl} zmGpV+z0VS1RvR4()>u*S)r9&YkLGHpj+3}7Vyt|6{%TbJtEGH<0MY5v_X!2+^sn6b z5E3GZNY@Lo8r3Ha=a{?<^ouSgb_p-;a4_zFqgKmwD36B|i zNy~aZ-?iFi>Xor~tQix3!NNkr3M8aJJFQX}wMdi(0{QGc8LPJhQGP6}p)}Z_jHgpz zo>gH`YV_P1+l#pFUG0~rg~aqodx^HX*1C*l(I_^B;AHRg2~ISk*C`F9GQZ82q3ZDJ zwo3$4`Wx>=8X0U#r)imVQ>U~WV4#RqOgnOastLU?U0}2N8LA65yc@+WL;b|1T%$;R z?27m@fii`1e*KU)1^y`}NP7fL=KQ|AOstk=bXyPls)EG=QZC=#A-O~QU#k4|lhNt? z>dUq`Ie=Ns!&@HBTW$%Y15ttpbtx#d$?Zq^#fRO|R~WQ%aCc54=FasEqUz=VRZTn= z{ADbLtSMh)a=c>U+sw-MxepbeuY4?RmDf4~yYJIlIqn0IDaieO!Mx?HkA#pD*@COr zIBg?Ju0X5C>d=2j%&w1*@PXc_X*nJTjiqbg zS_*4iY}oAqbCM&h2|S`p^sO5pq9z`gY3rKFgK{t7A9!@JM0d6us=!|L$STMrn;zur zMsu;}L_{Nw%sfG3?oZCTe0uhy!Yp{QJaykveze$8xFqa zH8Ypb^(A!&KB`#YtOj708?}#j8v)?k#U)U)8s;35oqgaoSxqHsv39Ij90PeUJT4^O zy}|mna)U-lO>-$1o`XX9qhlrL8qgo2STxwjAG8)U$3IVAx73Mi-ovqqJ<&@s2}HE1HCodIftCQZYs`0Dy3(jjf!5*)8n%gtcZwmQ4aRK#oF#V)!( zAj?5@2ny=n{Z9}-~r18{oYMduB8~us~!FOFg2CWQoGyr z3grYyFDp1}4H%PC3Fl*-fZC$%O5O8e%NpGXl-*McIv@U_t{Apg48fGuK1laG4xPrf zz!y!Im&cUEwUczC(1j_JN9slTV^$ibGmfNegZiU(KY(XYKVr!6jpAuW0xgs?E5r)K{}MIre>%KFU|Kp zqAa5@)tPI<#BD%0>So$Pipr^BIWYy-R5j#HG{V|$9$U*gxZ1&y zP4Qy@MxMiG`{Mqn6&~Si#m^L|Ma>j8pXI@jwy3MfA*3Yss-X_3VaXiRxU#sj?$b<( zT6%S#>3Bs;YOqQxacyC)KL$n$8dWK2M2<_k8omN6+5TEsZ~{%{CDf9ImRM)BEAD}y zQ%=2ZW2pvvrmwOo-jCXfq05Qnpm7ZcGia~wkAe_hO_hqa zDiD4Zyeo?HC+ny6N*ugxIFT#5|1>#7nSx-f?C*&kuQV;NWY4sX$-I-3`%XxJ>Tki@ ze|-CP09hC)!(9DweB;9_-&AUT=elgoZyG5doky8tKu+-+>1&R#J;WSk3hf@j^x9sQ zrA@-A>AH{yq<*srqF-K1e0ks5W8bV_ya^%Mm>*IF*dC!-cil9T&h%`t<(FVH?E{-8 zcVIZhRYtXXtI1?UF?1l=XN{~oiY-SmNu=L(Vc-3;Z==KlTEq~sCZKPUBv>t1HU(Jw z@f`p5aSoV4m=UG~+Q0J(5raIj0C7E;BIn0bTqs&jkMm*Q4i!anx7_5^ebqjiX9OUr z{)UQ;@}Pi-{P)}y;K}-4^6wfQvt5}zyg$azbP(?V)oY7l+&w@!vjXLKxoMqfAQ(Z$ zUPCCNZn=X#TuQTdSHGH3Ja#VuNWLXa2yr1-C|T-NYRv3*Z<&nde^DN+f=|%sLdtw} zkM}V8_03wl_1mj!ja||_Sipt(bcuKR3VZnIGw=Hc^5UbhblFG2884F!tTov-+MepJ zniFA;uL!M;m}zFdzKAuTU?)&L_U7+`5@VwPLtG%3e_Mo&*Q@U~Q?2c<;IC`a@aUpW zkuA6FSc%l)7$+GD9Lp9vX@$)wg`66pyOnf!LXhej!{Zv^11m%7AAaen$1-dzPQWdd zDf1kQ;3>m;#8?r+=2V-bSGFr8P`OKx6umW^3?P(vKX2Oh{U)pmbX@?W*6)oRUv^F? ze4TbOR&8o*?Wy0DpWE|TAoTCmTmN>k#moq2J66el90C;n=8KzOM=vF6Do3$b!2G&) z4?<|OIbfe{m1-Q z7{Z6AAl{uI@cGj%p3V_3xG&rTD9Q*#zYnq}R z@{Lsu5=)0z@E4$~{IL-CyrhPxxK1$1u9APh-E!aI;3DTL^GjjFIwZNnly^(O*wIP# znB5O%k9G|SAeBx5S2w=kwSC0A;_ym{Zq>qf9}9({j;xC`vl6L2azhT(VGcjR`;)DW zzZSQ!-YE`brQ@c6xi6Z-_n1u$$K3Le;` z1NSv&-S+0ZbLO>FzS?9RM?WM#i&)wV7CjblX=@yIB8XSyRg#-+zj?*qM|(k-*zQl{wAVEk)TT zrmhK*vOf=fobb>xn^=qW3!5bXf4l5N@PNSwt88?2R?(LmsVg@($cu(CU$Pqus%h!2 zZ{1ay3pSPbNMOsTm;@%Co*2Et0N5N?-@z1qk3J*7-3dWI{3&2PSeRVUCQDl*L%lvx z2NQ8JCZ6kz>`p%FCvw?=8g8SIrS=sl+ivRxS1Yh#omHZuUiCzxoBV2V0#_OIV6}>G zg+IPIggYx3MItpr*IGw#w^wa6qV2NaP9+%{1**eTpA^g2GjwYrB$f9n?Ve+QwMi{6 zwuwMGT!{~Y2z_|>2X%_`^PKXG#(aLb?zh53b=}O>vQ%#im<>GG*cbfkiJhtSn{f zmKso;Qk6|)g`Po|T?CYFSU64~YAPmtp`+|?HXcaeKBs>LOC~o?zS1ugS&>K&l@$@d z+8TOCp8S%$1AXm75cvewq;iTslH>T)ZP}2QTHHxBY9%=O@e_tzNXWNQ@7#_kcwY+y z3!ELy%QzqUJqLyslCa}?8$LfJBZTbgzYA8|B^#wQQG2OOdmyqjhn$P{SG(!-khGtV zZO5u1#jU(bq3|T)hIKYK0*ao6P{VOLC{RNo^3m<2mUz{;<`YCgt$V3COM1_G9BKyz z$`4pfh^L(cSgx_?n)qm0PC=4Q^KUJ?9K~Ve^+4r$R7~{^BwGgE#SLgTD3DxjU2CbK zb@A=tXVXdlK$uv(vryPY7nl3%xp=5v%!Z9` z)DD~kW7MW%MF_HZxh#^nUQbxZsCxu36J@tsV?G1@ zHG0;3Suq{8;w8$~TJrt-gM&>ctbYf6uUr|a9RTsfQflwQc?l6{n0H0I3aU3gM_Bh`U9@0+ROSr8QHXI`&eEndeOrbvGZyMHkCZ9%Vx%vt}M{D(M%hMuNF0HAAel6e1* zMuRX}9H8Q1+I^qS%rG>OM9`nHSmFZ-^Y?(Eu2R;)p#vs`&Rl%cB5buNso1f9<>lOAX)BTR`#D{+G~y?g>bO11$+%nl+Ij z=c3j70Qk06^RFb{|6%XFqncXZtx-i{31Zk9Kt-B`s$iigN(VtP^Z-%>M5GsmNCyD} z3erT1^co;^q=qJ-f}r#cAs|u%gdQN2?~VKX&e?nG*<;+l?ilxe|Lq;aS}W@<&-2V@ z&iVdtFRMulJo&)vv!_@7?S>yb0VKG?bnhor{V3%>-JS2J?9HigmI-7vK7%CjOR75q z}LRH{r7?s?71Dqi8ABh4WWnpd3~Q64`#7-{#D z_D{f4*o7#+Pm3jeHUOrbJPj zHJC#9n`thA+-Eudpn0bxg|EvxuK2$-cfc8g|LN`QdP~K5ap=}KzVa%d&!)Bn?;AY7 z;#0K6`eXZV9T0CF<|M0fom$yAc5r|D*M~1Z*t+sGwc;KvgCge#CqwA5fAVC~e8J2R zODg*5aqiu4Le=Tc<89RT*i0dCn0|E0`?}I@Ym2Vgw}F2&A|HwG$N9Cml3!n=HaLq) zq?QdEPaHHQ#(w?uyQadU=zWaRr*41q{@1Denu;jt*aiRZo{(T7f=fxO`l&f^{B}YA z*Y&}?01cbo*k8J4|EYq0PPtP+(DT-~`^-PE_rFirCLJ&VU$0I6f|mbvJCgDP?OxN9 z!iWBK8D7-_=!Z%5jbCQ#Ul%~AF<2J=&t8>1EzM1*g|fL6 z+<*VMW^dPx<;ues9%Q_eh|QpoUbSniVSNE_704`D8o7ymmJ;B6!r!7T0jWEobz7Y|a{vkB?t+ zS{UXn?T96K?cud@bjI5BrixHRt)UVt?Ev=pN>9fJMSS3M?2fr#WC)x1;B0qR_`}U% zU|Zw7^nG`@M5^z-We?v_m5al4hLkrAXBnKOQuNiUSG^f3?ED6}V$qlSY`YK0W@Gi} z-2~bdZsoY?d?hkx)r=S_zkY9z&gAp!C9>QUORmjuc?V0AY$B%tF~4@#(zN+)A;FXK zO^{!&)Vdfk4?bK^ykd|YQ{@L^w_Tg<3B>J=eeK>Y_VUo`UOlCvsJNI|*R(Uk)`W3g zn+*%Jo^DUxl{hqYx}qK?xjmYH!EU4~EO0J6zh=1w%5*XM;k(vLUc1{`<@RIk?s!3u zgV|cSr(+s_jg@I3QuTS_ya~RvZE|l?-%|6=Qm-<>+B=?4YRT1v#QL;0m!kh-sUFjl zg4Hnc@Cd2xQ>}4#87eXj^m;DoFnOk8N6dO(g@al4{r8W}3tJJAP!qu79&ccRoH%gs=%RFx zmgeE4_Q}`RS_?3U*sahkJ3@`8VMje3gkMa{xvR!&YlfS>+~Db#3nR*PQS~&N*)ux^ zPIyM>cSp7`%0RVS8SGu~&4uzsyk3cAkNS&;I9LQ9vZ&Cc(XUtIB}P?-Y>1E!T3`9Z zY`9S%+s7byYh_EWv0N3Xs`Uul3lvU+VVNhEa@rV0<-ix=xrmfTrw zf9N3se=2XaWzD0nDU~vwqgN(S9MdY@$3UwLU4*Ysd*tBe87MeeGRjH4S&XigTBlNPkFg-;@@D zEZvtJibymxs9ks^(It&aSdjm*TTlKb^h410I=vOWT~icIg$(%?3{(NXQ@RJrjz(Bo4m z%^{>fyhG~^iCdiwt6Yefjd?gW&TXM0`Ouo@WQ`%z>1-?w3|UNzU}Q5(aKYeRrs6#b zVqWulec}At%U&a>Z`u!B(s_?|X8ZUpV%inGHB}LvIFwaw?mg78r?!20@wL6TgHCT+ zb+5OHll3=j-A%(~au?gV51YaDAqcW8`Eq7(=T&5M6ZhfH;)P(=o7>e#_%t77a^-`O z*h)g|PmqB^PC_YXWpBolj&R3~Mzt7>MJz=4MBz}xtxc$~ra`)@8iFiW=O@A4m7zkO z60_($&wiIzCsxv{1~&HNcyV(Cf2`-^*LUNx*CEnaA@$3to0hm%PFX*l`N5L;q85So zU_NiQCDO17qXoCB5Yd1+99XtE}2TBs7D z#j&=b0a5$h@UKzjXWV0O0HNiIlhSq0pRx1Ew6TjSs=da;ZBI%UHp(JuYYn}qIgso> zK0C=@b^L65*8wka2JMp!#fy2LTg8YMCG{w3%ns6PLG?+20=Op0IPDKf{y)ZS28v82 zhC6&6gdq$WaZdwaxtcb~m!-$L21~3wN;;+zy=>V%R>SghvJ7iIH}dXDYdNbPzj!oX zA3Djq(H?SCv!tukMz2IMWMJw3MzkJ`Iu_7|DNB z6%xc33a8DCNs|v`8jIa3;Ht8cK$T_Ke>b|cjDve-T1lXfF84j@cD#o^2Ypd|Z!92& z&m68^O&)QR_^MWr_F<-5LuIYS*AQ!d1lOY>l}gk^g~ZgeLlnjG7Q*s0$m#}PA%4&& z#rHr#cD@8=kSN3dt;;2g_hLu&VH$Qx2ZA6PG1eo8Q^~JhkAWqe7BV-2F2mv2tRe-9 zmQF_73mU=r)L^%kOJy6V)qzg&_7J`}AL30?)ylTGCkUG!su^t~W{Dn?lBt7>VG3+Z zL*(g>29kE73PjhgcBeEk-w@hW9E5Gxyn!*XU`2Ax=rX>YAp}a8Z5`#K?Gb^l9`=!W z{j*~G>i{#nr;e?g)%7c2Y)AW?M2q@h)CrI4+^mB|UL_!yR%2=PCX|dm~9owoz*$*yjpF3%j9a8idQ&&|qLXqk(r5w(f7Y z%ec!U93NHx@`TE*j@mv!$RC6G_4~xP_eOnT?xt@`>0|QbjbGEm*y3^M&qnGKVKPDH z2(l9A-OG_7J}|Vice)H8vQx-zOq zQmnMP%(ynl$!$Tqh%cIrZX09%J7QbuZdnZXD4IGM0jVH55Bi%xJs)9IHIZs!FtqFz zIeFf3&!=oEjsV&s$k+<~-q3B<_Gl*E8vYWMI6~(SKzO0sGd2 z&}s~3g>6ac;~TS}x6E+} z3-)>EQ{*+?i)tD@uh{0Y178xW2nONx}_!qlcQG62#+ZM3KB%GCBH^S7i*v-aE_w znz+B3EzipOB+`V(Q9V6~ZPi~p+1#4FTKjs6kqoIPLf@V>Cf{aaalVYO<-dr7qfRir zIO3XL=nA*wNmH9nE*PE3NbEgZ>lNgkYWu;qYU#G5;Br)OhAp*6#(Q+D31yRkA!=$Q zal~>bIM>(0Jij2OGL~Grd*W!SI5rOV9(jObdwK-sQ@pphumTs$q?9#b3KYEW*b{sO zriukol}ynVm8E%Dh2$if6KL(LTEfA&IgQb)Ai*c4x9K@+yyQ|6M$%_dZlHy+1)F`f zyAuYEiSUgOPN_2c3@Wrkl1n@KC818Bks*L>?$}U<#&$=<^F^<|dz|9(L|VjHOmAOBmLaluFvyl8PJN@ z-u9D<)Jzv2!Fv%J6MWOO8D3lC12IT^9VuX7ITh!ioSA(KWx{ky3qonnrnz(phI>tC z$Yi5ihsM6{7LMkVhu_X><|=w4N6}ym{k(W2CQtmZg^-GfbV>Z^r&$KdQVA_8P0l6XVaOru(5SCDtotW-@SW9pBANHxA`UgN`r zyq3jZrj~l!A`5}e`kkrd}IAeW^%n^NAd5hhS31j33E2|Z!uReMSdsfVjH>^H* zsoWp?QC$iXP%tXy%f|x=G^l*GwzB5Zc?BNHcT}V6ispqhjO}-L_ZJPaCcd$H=`)Mx zSN2+&eh?q2!h!y{>2PV3>T3GeU(WFJ)&b4ifQXxQEH1DM3;e0IN z@%|&(yg#mM($PR6M-EwuMFwZ9%6j|MbD%Y_0Y`k^8o9afy*P~Z6EbAv{T3rkr?nIz zoGhxwaV%Odb#5Y<}8!^BQaufO#nrHu(V< zFf{5t+K*IIo6kTL#uA_&-N;znyaw4B$F3`=8!oH*?nH%tA}iWLHxGJYURL_;=iv&F zJ@4FtXk&3|5uq_M%t1pdv)TDE5-iaC;^0<2qzbg%r#XGm0qP^DW`~ z^RA0Kld*PN0$)C+_z${X&YOK{j=+0oWyL7K3Q6VT!R-y6;!^CloC{!)^_73nt*0hQ z;d8T&-$o>de%4guNn()Oe<%Mz_1uUXi5{7lSuevV?i$K|>tvtoT8#%qm$E+ZYvBI? zDV++1L3m~#C?jQ|F~u-cWBL=r`pOcGPoa7823}c8C5!v4hs&QNuN-D?Q8=V=;blx7 z?_mf$GV|sYG~E~@!t;|yEqpd}`F5kaQG2=)Gbz7a&H#%(Brzyw9O*-YLT1=YAt=XS zrrTeAx8KZz9PEUy>=?qHU05UWz`!84JrG zmnPQitPky6b-~Ig_F*sc-YV`agv-ghHea4Tju?U%#}SNAdsz^~A|oADkWR35s7Jf}(~wXVUi`vIxAydl52Y$j5a>?FVgT5)F1L zJEs=iv{9I)4EW1uq!GM!>K9~VXS9--*{?X!M`}GcM>y9??J8b>41vpJ-n@!FKRcpi z@QU}Os&i`LqqEu9&nCmqXD-VaxPSWeY16jGXUT>SiT%;otj5DYdw%di-76o6_}fHL zyM%njBW&wdlGso+2kLmYdksdwat?%!Ib4grR zeVJkd56z^z79^PZL8|ARn6`l-L-6K_z>Rd<_D2~@_V6@N-0AHPUr#n6o)KydS%?}I zZVkdER_<;QcXlTRQsn7~1Mf3PXO;W1tklVFz6a@-y_43jxvg6p(o=yQ!-3R*T$seh zhY%~crX6ommzlg|M+{$>qi5Zgw^uRh+*FqCCEYIZjw!kQ;hx8O;YPeiHKQ{Y_MzgT zuCA-oW4`i8u`i0q$6H@##WYV{FgrzS93PxIF@`W$T_g6jS@vKVp(lMO>T1tHbg(1p zA8!8>ZQkeI&-8Mrz{2d!%z&DDoZHJZ?LNus*u{|W`Uh)$ZJxGqdU<;ljN5KMJ5Pvk zs=0wY_fK;Jr`TIgdnC|z;@5iQ#VoS-gR^GP9)v0+ZAJZXN`aCIF;nR>su8oI1_{L?H9Jy5&lk-ME>w~v*nN26 z>hdAMsf)Z%^%IQrPKj?XHtgp1hRHHqyeR7(xsb)@-i=K1IfM7T)_T2xUAZo#J_JlRg3}kw1T+HvmFI=#bUKETV#2@O zwGQPANxOP`%4s$$!;de63KceTyor^_79FslV8wYky@_ATBI6D|A$mZP%Zqjbw4{&+}h|s{8CE z`RAuvh!=#MNxYz=0GmW9Z>e=j6icGKGi=UgKPgTq4GZz~v4J0yFEuyegb;Z&)e7tj z9J+8~x9vTl^gd92gG!nZ4k_q*Y@{~Y2>S3?x8ppt0IoG7+=-mZ5$LU-;$Ky3a?E7X zZ0EUmqZ4ykUE0Lnj(*8h4MQTp{tU&<$l|iW$v6a zvOTNKyFPxg&0%Awy9Ta2qkFE>Sknk=WAWEY_9s*kDgnybnepZaf9r2hn>l|$=K+7` zx~{Zp@V(mO%76LzAK#+>FNXo>rFEhs;(tlt|EIMDq{Sdfe7i}0e(kR}`Q>VzKo`Md zpfm8V*3qGx;Q8Nq!LA?p`y>DTYXA4K{%oTBzwx#>v~hE5>~oHNc?QWPlet4SQ+fEvw{IO+pM6aLzt{WZaX=jhrvtg^>1>xlNii_*@9MzjxoO>=Iun&A5m)pK0jNLogAUS z@h7&_c8%a-s>F2e=w07a+5i1if4;XfAd6}r8!G&H@ZtwG_)l%kcX=rLr|Kep>Ta=4 z3wJyOv^5L-$STFT`1Ai1U4`1vo;=4hG<;WpDrjmNq?tXIXPzu`pK|s(RcJTLet7z( z3c*9@&maFk!`i6Vke8|DV73`HBEp zAYh5*-wPO*$`oJ^PkWE z*XQE+3}CB=+XtVx{_nQ~-lVM*p%QQ z*(2EXgh}vz#KYLpZ|kf_cuNC^Lt5AD2RB|_vz}xRRJYmcSv(>#*=VToO@(;WpfQT@ znw-r&HyHnY7)I9baTTTzlH?w2IeNzMr;vv{xG=FP_hsh)H+kNM}M9{a|B%g#M^K}J;B%`CRo0gW`sCczD zE#7@M@}ebzrDr*C@{;~zn0U`Moo}_JmJbM?@mB~`AAv5?Ezgks6kK_KZnEH^o8xDgzDpe+e5~#q4 zi)z<<-oY>Ff5@x;Zp|J*E8X5XVKtYaC#DB{0z5vox7c}DYCB5ctL=;gYc{iHPUhco z$o3Gmjk&L`&STWkDoI%cK<(kjj@3)=jIOTYTv|jZ&sNV9yOYyx95}nm6FuJ(^KRWN zz7?(L*m%b=LeXt~u0+4$>DEB)H+}OA+&;5y!E5tgcB^GmY_%N;9zr*G=t{eY*`%Yz zFATi=AMdQT938@;D)C-ZrdpM^<(auI_?uy0h>>!_=bHss=L+}MpGHN(2mOxxem%Xs z1eRMrjy(>D`p;lK%$BgsS7=LKLH>wyeCQEdlJ6#j7QsF~MecIEIkq9@Ng|OqKO?`r zE#_w5)}A)+a}@825zeyV*Um4~9@)JJW|i|7^esSzs!Y7~Yz95QJ?8^iuAGgo%WEmI zz!XeS&A9XhRIzF$KB(FL&f7up55*-;&t{vk;VP{P`1i0Yr-WAh;VV9(H}%V&9I_NG z=i@+`W^gDP_g&VWfRFUr^jp85x>(BFH8ps^$zY*1y-IxNp`F{+zT?f9_w!j3Qz!#!U!Bv>+TseL5T24$sPiWBDF6c`1(`5%?GbflVG=Z<=j&AuBo zu_7o0^9TSyJyS}|8KpaVZ<4--&$(;AJ28^5YiLIh)-Se99v0|!nVbj-KM)u9#h@qa z%`7m)8h zvUzsFM`-6)I0P$5?(_WnCn$O{VWjk3V!~yM zNH6??Of)6YS+uxHZRd2&&FkM_b`j0MQLHlFN;q4)fQ968!(A<41{={bI3!50**O%n zWROjjN-b0^ouzU%kx!E~+q-k|pQcI+2Zi~!?n_p#WT|K6^w=Y>kIk=&e6wDOoEKTl ze&V^FUn^KJlc$F>+jB73usjr>Ana7ge(esw%@dP-tT{oflK7CoG*qw?e$GNaO>e{d6{-xT%X?Dy2)ir1fmAy6ZV>pFd z7!|s$%0P>s{(Q8vqSevlEH&^H3`!dsF6?Ga944O5Lk0RB(l=zhGb^By`*5>!cl+_z z2S4Vp_bYoFDFW+MK}0wGgU7`|3pG`uM$s4M25nr%9Vh{LqqqEm6U+mnfNhiDf>94& zWC_*CFUhWPsQ*aU{Aw@4x5xPxyqOxqIrONjia6BriPL`Wu=&LVCs+DAE0C!t_-c>! zv2Y9BT53>oo&W5cchjo%yJib=?L;os!w|ok?=U}6CIR-$^INFT?iyrMJCDV5i{V5V z#luR}&>GDF$>%l8 z==$Uf{Jk6Gy8I=L$AjgsYAJ52I5{K2-ksGcybTf|kSyg*!i zUQ2mLDG*85+PEj&lAy({);~LR)Z5V}EV;WxJHdt!obWc~G*{1;7vG}Cu>Q~=A!LWM z{P8|LlL9)H{P=P)FM$UZf>k2~NBwFq;-|{_;cI#Wp~mC$9cFF=!<$NTyF-HXA}x!3 zVmg^CL<)~Dz7@nv{- z68|&hMlH1v;e`xBjshuJ>%A_-ZFh-fepYXnD1&t{K(*6QRs#!5LGoLPRZ;*_7?pte z9(w&p{2JJ3ROQ_3rhzO%2&yCtDkDM8}-FNYqy5vzb>BAF=Gq zd}OM`?0}!0C_Xl?Y+pAhXVqDN0ZG((_pa!;UAHziiutIb#s!^NrXcmWR9rB4;%IfZ z+&&`;9%4!>&HK{%chu!jG)VW07Qc;mgIcBJ!yym<0YfG2A>i9I+DIBGwurTH#G`G1 z#8G>}{1ywE8EWKH>O^{=SLPZ1sd6@KRU%Rb6y5g5 z?X06%0&kD6XBIv3)ysQUs<%6wo!EZ_F-uK8cdE(^L{ZRJK&(KL1p)Xu4@eU)8Pt4! z@YG~AbEusErc(i(*afG`Qqe0Nb{SF%Lu(t0{F2J;tfKnx)2Ryl=G!U4c|{YElm}}> z|2=h8aFpfa?9tMYUd`(6{HfFqrcIY2r@5y+>R$p$L)sG>K$cZGHtQfW)TGsixtm1Q zLA)OD8a%g0uED#E%SYbFH=val_MMn*U#Q+~uu-TNpjwM=Z>ZK`vB&6SIKE}ieU^?X z$=~AF@&CQ?V^I-EX0&SD;%?F$PGjgVwaLhOBR^l$II`3ugogeo1I+&|+x~8Z9>|^6 zy#&__AJ|EZ^6M4b2A{d%j&6$=HJIafqwdAXZ1q;S5AA#a$TAyL{Dv6gRmcV{h`3uV z4_qiKMulEI(UM^Zq_ib=a0WP&Ve-h>K`=+d7r*OtppWe1UTt@t0 zx2|x$oyWn~1xLakZ*pY1SG-y8mhCey%$DMN?CUBCtfG_{aH#lvNhg0~mgb~X ztl8l9uI%RxTY`XOetZPK!FJMA*fq0YUjZ}D-==`~5gfJ+nD{%G+I=bkO1nz-^amGq zWd`@uocptPJBQnX99q^S%Y3{@+A3FfF1anceN%j_xO{Dms{@tw_LktbQwmE+!I+Jla;^%4#Fdv)e5I~pl>T8jjdvW$favEtoOwG-}r_91u|`Jaw$ z&!t?UU-gQ+vE`O>zqF3RXl@?Y7dYWKHqLag>&tteGu$rOKeoA|d$VCrwvY1pyfN4S zPDlfC9D~lHV^LZKMl}sk@8XbDRvL@MS>*-A*!o1@pe~1J{!E9&U*K}OR36chBve|U z%+2h=w4Fug=&4`EbM1)q`AeB9F_QPf;zS&3BwzT{<7}(W{qi_JF@r|nz0+Q3A60Q1 z1nAL|4DE(;v|fzKEjt#?7rlD2du{gWXr6OliBC^(($j;{X;sc zbv`^iKF?pCm6r}3Nh6x%Up=T@dJ72m&0C*k#gxUO_8a%;0m#5Va^yWC*pnTxH7r2gd>iid(P znf&SUILFkFLuGsHto4a_Zac?bf0FVoL42sxdf*|Nj=A*B1*ONQ%{G@OL|m31S@jnf z`%x|$;JWWd39xRLU7C<|26U45-(p39GkoPaNk9uOx#jY3PcMM#nnal|%LUf^T2;=hHgEUy?su|+tbdAICL>p-CJmvP*# z4=0)8 zcAys@HXy?H^4BOaUr9+niZ(F57}itjIUdjj=$oyG;jN(V|e!dPH4A+MVzmY2Slmp9HEFjX&1;9x~_$q@JiI z5vU4W=A-4xe`{KP_$lCivJ6_kpuN(`j&j59HzvXV2x zkh{=KK>45a$%oJ}m0KlBc;G7gaBVeTa)7?T_Sw?+PZ;7VXE)%@&d8i{!2*95;&8?L z5?lNrf*1lMBsfYI@d%k%Nvd(^bFG6g%a!(s>l8jjf2jg0l~%!`tI_S7Hyx*qsAPDG zGMeODU;X%7%zZSJ(Hi(!=h=;UG<0pT5fk{FHHS)VVo|f*UjQTG7MZn=`=9QWAP8Q+ z4|cS0#z$UMP}y7KY=KE*u;Sq~e{!FJlfjR%Js`v|K!y6e*xjKh$oSYRNNoN%p|NoS z4}UBtiX;sK1((2L`;x@Q=z*>qtEvx@rMobQ`Q;Wtr%Lgqk0-L8X(I#cU)ZOIZDlhZ zy9PJnsZz}>w8e|{i6Y&3%2jo`0KbN^)W~jtZhp(Fadt}edMbllV`mLi6n^!K!q}a1 zi+8)GFI&6HpO_5QcvNP;sF*8inUmbx3>i}BW5$m-j|XW6!k^Kz-Ri&lmgkTAc^sL5 z_ajgq=2p(zy$PP9Ay6L`PQwLJ8N)ok&8P&(K@MbFpohv^miHbkGHuBLWBzP)TCJ>> zpduYVuRldT@Sbs0Og@u(IhWgg{xmi7b6&!b*U*Q6nKOZX zJ=>R0;)~XtM|~6SE3e58xJL-Fm&*8{%6NP50i$-!7X$$aod6@h7kP9>S7<(V>&!7{ zM@gh`It4R&2SHY=i>&8I+gm~dx1HKAjl!tI@SmLV&;Q~Gr*Z&ZJiPXEgyI-go5l!7 z(iWwVB2cqdAXTv<)Kq^5Et&cF1|%jIjwva121*D?ZO+{f601%vj5I zfurZUJ?DyJhzHh%}nE5f;UZH8-{O8OE@3$$dK4s)hMfFf7a&ZWjYpnFEw_d zlIASo(WOc{!K!wHu9ttD8{SzVZvG}qR+a;rZn@%qChBN#G}6{{HUj3~I1Qb+j&?y( zbM#sHfbyCbWpqxhk~-QEFKKA$&rR_wC3vjgubeL(8h%nw$?TMmV8^zrNiE)1=`HMrP<5u*RFgvzs;2;!H8{=Np90N^q8RG zqIbby0+^9~nPO(`Nz%6Oe1vNs&=u!BsCLbY%))&ZW!JTM;L*9(qB*s~coPS+e5!#C z*-AD&{RUBYkGz04Fby90lIoDPj6r5=iSTAdFZX5bF!E(RRN9Zo!H@#5_T2zhJD`a8 zjIH1NBg$Y0Wi8+F?p^CMWIu9pO_?8Z7nlFeMq;tM5PmmH{Vu^t z(%SHGNW*Vj7oUR$_40A|pWK>{5mMz(OvjBwq`$Nn*&+6))}(AVGzfq`HdWQ|#rH})ObpNeUw-EO#kL_d`$7gozOSKOvJN2Bmoi!l5VDEp*cn6xM`6=ZCm;U_m5eZ;J6haU=(=2C~ z;bKE<5J4lMy72N$-lUV)?Tv6dnu{2A2q)CZ9TGaUIVI@`6SW!qF(SGO)F`-slW309 zohoDgy%vh1B|sa7<6}eLI30;#6azw#aJ>wYFW?wD-a~fqoLL%khuT^3; z27Y*^CYw)5IwCj&v*V5osWHROzB(4MTCJKMwoXR$$Y4js!Z1)FgYct{xt@w2PTV*+ z^cyOYG1$@z4tD*Fu}{t=8Og~$-o#*!q1mv|BmO6`Om_rn0l{v)L)MdCY0`hTv*^eP zuJW-lM|X$_7N=Sg=4Y*8o`mt=qUwlZwa|Vs^$hg%5V*$7N;n>}axm|8=;R3v0JMCSt>*_q+xq70^pDm`PkjK8X!S*Ko zF?6*JUlO^i+jON%B5O1x4tMToNu`p4u(|M13$fv18%I=3={u0*P+I-UdY0B&`3dgN zGhGbcF9c#^;ZidaS$sjiVa+^3f^Jgw)487<3H!ScIPD8x4)KfHXf&U2Jz_{+6v6}b zUR7p6wr5)0MCt&sR1H?jy?osNwFAGb7mpNGgh$5$f6N2#SbWlv9JqzyOQOct^#|ql z$=T{lbTOiK3s}qTDn47dRMz0_x>qqW31B5w7G_zOwh2|s|NWh zZQPQlcpB`xF7=7fN-Q#ak}1oFD|LOb0hR&nhd<|at^l-p8=x$-RV>vxcKWJvk5r$& zL(q^RnTU5HpeX515=bxJ(G>)vjw?B&H5J2=rVzp=psCiM$~m3jxn)5X;I1a$AzfQ$ z)W)WTh42Mv(x-i}*#X8??Wa8XngZAIxY2H|us3-VARl%z)-6ulUaMX~cn|5>RZrBI z0M71Jr2Xb3DKSwy(ZeWxRE3}fkr{6caf*@G@?EW(=G=;xT>s$3a15r7B+y+R8 z^HLP+0pAFBaS&oqI7~0}&gC}Gj|LhM(#0Wj0JrJ((#bc#AeU&v2^OsTn4Fau9vz*SE>hMa?2G4`u(%BH-nv?VhW?Ssl&Jv!`BehBj-mm~EO zKG35y2b`w-tn`1pe9jg_IDYgCCV6;u)Bwrn+LRAHhRoa;`w-lBs+y%q+kV3a`9~^w zBa`?1Qk`G@e(^j>bk>wB3QC&IT#zE;+VXiM1{Uxs#atq zDz!j`^Hu$^c#YP=k^Hm|2&5EFc};dKXrZtC$+*67kWUIwJ>rae;EJ1ktnqrXTNc%= zg4%ZZAHW7AS?qn_5N@;$9G3=rRAW7Gl{~`Z#g00&CQYD2a%VlflN?&A!HyyzuT1#2 zc9G>t@tsbx#`i(xf|q!TWat4BZP7hYomTD$&Bcx6rmgVkbh;(M1Desl*_h)pr3Se* zxLs*W6@Dhsqi|^ERYh3aT6j+>u)pdGeOxoMzuIqM8IkPE=g|$l)-i=f(FsFJl zDd`SuhweYnMXI=mD2t+Yf;iGIV!tg}jF zJ*0kvAHBmtoEbE8)%HR)=?-yiAr-hbRP6GYtILP+g`|*F(i(opJ()Rt-kR_(+Imaj z!5h5K8sc#2N9tU63=6ztonpE5)C;VdtC-T_E)87jzW3&)b#teQ z7uSUgdSNn+lRLG?B}!lL{<)DUD;v#prrVw@$+;y(CV9Q;IRK#p<^0<;@&faG#-1k@ zryw~i>zrAp)7W#>aA2JOZs(A43wTLq?;xaK=KFM1ZDCNZgnK!dBzYpEDw>jR{6*+| zoM=~pY2k=Q>T@~c2)}|ZkwU+5jXn68EZ+8|{jac&s{{}9Ddz4;LZ?G`cxlg~ za|c4UZnOQ%j@?PJ3uNy-%vG=_725J5!D3_Pt-M6zor>AF+n-g4UFhq!`=wO_=)8WD z;r$OJ`Q%)vfwXEudBs_=f5po=LUXANh~_VKzZ95%sW-hhsFJ!wH))lh-+Fl19Z1bf zAANb#6!Y<;92L%T+e17u=Himrnm#vF;gE4jr{F_xogBmYEP86;___Aj?wf_Ey>Ak*y!n;q4#B}`caD9bH-b56Yr5iSJAE#!Tb zs>w0}il?vJCou}>U+=}ddw}sDhcd>15LKT|w{yCI#A5CvG%@H=|y_`4A6lQI2;CjLG7h6J1wiS2$& z$BygPOojmieBgTg5mpjN&_Z(Xz>VeFTWv55xr$+D!%!V3X2WH^F7A%m0Am$1sH-~> zT!Zh>CGCxrTBVVCJECM4MPk}5y*=-41fN!x`USu%$fsJE;HRjj8F+j~-kqsewp$C6 zEm3U%l%aPb6hG)Yvzx$Y&Zk$JQ`xp9@#o3Nf1P|BZq%MpV_53XaeDOrIol#}tc=DV z502;T&DFzC0s3YRsPnawWgz55gSt?!lespG$3Iyr1fMAckS@-@&vi8K?m1TOGd#RT zNBorwgHufhm8CytBzn&J#GRn`0g@X#cCYP1Vwq1;e$7_17;5$rv%bCbR}H=w{eTNR zV~lIv=~NP|@Sk-J>T4|(H4$gAsJ*=K|mU58( zbefnuKxQ?*Wr(f-;j}IYRhKw9>ul7Mr1p1-zwxc-Kn9u*iURJ!d3O!@&^*0^V_HRz z?ucfSLVUtro#56DWV)n|W}h8@zW>14%4)FpQe|Y!GUmyAcEF8;>AqJLWv%I42*CY5 z0#T^B2IgL2tX<8Gp5;Xl8cc?rN-VlCrRE)HnTv<*8|X0{m-rE03hOUL&u6%$ z5=njeiFz24&t47RoEuO!#l`Oi|2k-+Kd4#xNa(qrgBC}#AIUgvT*&r-|6)ghv1@;> zloTu%xJZHI<(@Q{8p8Up?NE&wltQCs&nrF_#~gd~D<4krDuCHi44U4I02($d55Sg0 znuFpS5@DFjvVEv87ov0krZJr7YM%GuY&8du`!)b@ahIoo<&HgUnepfjkX(u&>3J8M z?sds}K-3udwZ49xyi%riIo++}y;)l{@tSUCl2nA)&fAd>DgW^TppZkXF_)#ua%4ra z0;3H0UMa{_+iWzzRwGJsYTsl$Y0)G^0664{BMw6FBtGpFU%uL0tct|;qAVD_XzUAk z=!V<(vX*Zt%$~^{(WF`Q6}I zeX+9!@GtxKe<6ogFM$@S z1)s=ISgYyIetHsWD&7efDr+nSbSm@y?4AVxG9C~mxSIg88=x2*&eqOXEL&aN0r|%3 zum0StqxXC0Kr;j;7<`W(-oao4g$4J4^8OIsHFVyWqnaRxfED(1Yv=9R?c%-e zB75N|KjW@YD`>waFB9Ie)~<41q-+Dgo{o&bY)Z)e9k$h7<9bBLj(TlMNWSG+$Z6=U zdc;n6_(-9{T93AZ42MlB<-|g5Yc@s5d2v)oIy5+!6os{>>N6$eAL)8A!{7J~WvZp# z^NxY_6$@08eDkcpp-cj49hW@{{a{t=gH{Gf8@DeH>rsoQolY`P7w7-z5?>@3BHekd zBLZtAV+0Iqs_6DLNGH~qLH#xFr`Nv!Mf|~V{RS1WUorXfcohwvBrJ>g3u>3aZ8Z1p z0b~siPsf4Bki)JP)qV}j(*C_f&S&LW>N2p+hB^i3Y77#elK8b)hqTghz=odD2^{TM z5h`O`54uIU06JS3tMyCoYH-=Pwcc+M)&+RHx78>7efA+UGSw%(2MRuGaI(<33Q^o0 ztIj{!aexe#Ub+9opx~K{UzCi)*sAy$)C;~71k+3`%x^)ifeJrlRrbVbTSQ$m00c>X zw>21&Jx~{`&8C2pjzf<&l-UksLPSrit4wJ>KTG${{P4$BU01>(R#}g(o$l&R6##*zZ(;ca(Wy|E zZb7`6L1pkbAt-I1Qt}(D$LdZ8`JRVXPb4gGl`KukdZ^rZ;c!5D>(zhOUug2lntXC4<;1Sq0Sq2LDM^BmP0(JZ_yaL;YZuF=P5Z{6ba ze#i0sc>fK9H)y!yM2|O?H0+l>q+aN@eAcVlS6OXdre_*C*O=}h& zAusY}G>OU)mB?4l0?s%(k@I@pr`g3NaIqt~R}E*uRSUU3ME5Sp$K&3~BUA;5);3}6 zcEsuuU^<)iz}0w}Y$3U)&X1L`z@BT`8)%_98yF6DxseGVX1fXu_1j*#os_j_eAJ9C zxYNmTP0TL1ItgoD9<*NN5FwZ*rCe})Z3lR#`w`|sw0sT43%Rtk+M}B;k|(?0!_VJ6 z$M0A7?>E4X7hwJY=bO`=%FE;K1soOkB0}O!M;_jGFd$={YLkH-g9+H@Yngx}mh>CS4Ztj?LBeWSk5NjIR!J7jJ2_C4S93d<>^& zizO^G{zS*P(}Q~7jCb9~1GYkBHZ0ljg+k2XU?yyg&g8V3dQ$U|)-yglxaPbwUWPh?8?q^?E~`?Lv3seY;pkW`B>%UU(2Cs0qSZ^WqnpW@`D4;zoy;r49)EIt|Lh`d(hcCTX2x_^dO;!T;7TU_5XPAZfx(B! zEr1(~dnZH(I9M^1^4i7Qs|wpC8TIKfWL?OK`qLR0uCo_L!$@XAb1nYdRtL8|Oc^-q z))N;|UO1vkIg0No>K!^wtyN}B$wkkc6!|0FMRDx9J-tzbb;#8s1XdRyM5p{Dmp)sY z33+i`?#vClaF9|PSTQjyc`^NzkUUA|Q@ShFbRV7L>6#ak9Q@M4TKeg@k=ws9VNq28 z57vxth5RklB}*I^#McMSAeWL2anHcmHVa<=%gPJGv6E0u`sx@7Jc%5+(^KDzyoUaR zc`5`MLw09AG4L^^@o~jxS4y<5JOxLdocM7lS{feTi7fdvQ3MtBO~7wryE;0=2_5*$ zexg?re%&i_b|**`aL;Aj*j&2?B?gKBWOIyamAPvtHo5DUe>@pvmp`1D>ub7wsN-JZ#puT~Wt z*j-AY+Vd4VE^_Pi-6>h+KVIyOTx78mw!% zj?+7Nj+V5n!N~@ww$8%a680*JOh=fm>FiIoLUnYC(+hZcJu^aVFuks2U`EjE`Z_Vc z3dls=M0oj5=6>x9R3^}waVQQzqlk%RwyvXB9B0kX!X z_U}U@LR_sC4~=?0F_{4Q3+|O>s0>4gNN-DNgs^7hNf&z&@-6WmAy^6s-z;5p1new# z#uQLIbG2VkbJU^3N9XIxDEXado_pZKw|fuEtsc9`)&f^^#i`=elP2Hu%^; zxW-+NOzm0V+vH`N7sd8(O&VfkGXr=G?lC#>>r}oJix&wi@RLM9Y=v5ZxPhg!1hEJk z_i%5Xt@!Ygos+(zjL*<43UI-139jl5ER&k0ZojI(GZA24YcuAk|GJ)VjBM=k#C9}@ z0Ua+mrEaC0L%4O4zwpGMmc>Kx6!$$7A5uONbC_9kqYZ>EZq?*55$jLb{axQU!Y2Tf1l@dfj8^ zuvSxrd5uYu3FG)ReJ%=xi-_H2#<$a$kpvBJX5@=2Zf2lGByP5s{~JuFHfuL#)t zF=kSXuEI&vL>}?y9i$i$aUKJwA=#-j7j*z!KmTRV4UL?Tk97=u<$c4rD?uP)FXeeD z`&bVMxNRpfbG$pP%;FKo8iWx><)qLF_0eT;yu>8x6~y38c}7zu(Hiq~_NLQvep9#2 zh(dqb@bnu|+6P|vHQ8#F{o~GC;<(4@c#kLFjI$?_-iKdL$1?^5pbx~i)ug4;_AWOX zWjvNHOIm?)=`u`5OlZvYxIw%l0}GC@8_5b66K^BKqUI~( z*2Nog8jTKV(*%6NGdgbqT#!m?oLpUS{kzW$ULlBU#LOvap;X`dZJFtko3CZFQl1IA zC)eP1i64QpTO}>A%$M|aDVQ3bW55~BjqFB_pMkFLhp4|r=*qs33e+JWO|0!5OVH29 zQEf@i&u7s++GlgG4gmEsv=6n<`2Ip6fN;ol#fv;&_cY;@>-XGN#ER;vWLrth@U&og zJzhfH;d;>v8Lzut0ZSm3_u?BqKMUQ!k}lxm842IN)x(r=qX*jwxD1pv%2bY#An1mh zvv3qVlmU&FJiEK>utwTlzFoal2j4F5i5%ED+*3Nph}bUiFIK%6eu|mCPyt5|8A_=& z&)D5`EA7P^!(}8OW3y>lwzR#aly)fY(mL;|xBKp2+1)&5K*qMk-#*0nkId6Z?#mF5 z&A2~;Zi$1~fxl!m=Q5M=%WVGn&%0<-qUT{Fzqw!2GT@w}>iDFb`qyRg&j&ptezEog z@B2@$?Z4jzi6W}A;6GFF&!7G4%LyrBL&G~Zf??FROr4SUJ? zKgzWR(IBGN^`ChEG>Go|2=TL8C%(WxmNG$H)8RbE{A0ZQLo9&CACFyk{G(8=jvpvh zLT82jrzuK&3Y?#*wV2Mke=Mbfys6tN&GMhl8X~s%^5ynOjdkgYD2HZqbMuhJBTNLK z_(LoYAD;(|M)gxmFr}6k1m{I9X7?{oc2`BnM`Zp-J|e0dh{*PvjcU)d1{a9Tv?|AN zpzE(Tb|OS%iT`p>O41prwvRoER;ac@sgJvorTCry>A%Bdv59mA!+z8I)3$%zXv2tXn(1tW5TGo9|Nhtv0D6S)D9D+xms&FsZTs1|0frsml^;INSNDBbYbz zL*Li9pe`4e3XZ_kMigtDy?Sh1HwqX_R#KzwboX}6#xfZ3#ap4s;wNS`ec5V#Ey1*A z813m=tqM7%aAT$+Tn#sKns&}6Q;l3R+f1eEgq3kXMNLLnBm!$u)Lt)VWYH@FO#hug zZ3?Ee-4igzWU~MKlQWp`W7baQJ^E$-XI9?uOyxR2Re-O)oI)lUs}E*%(N>4?JEO6* z2eQjv16(CXt5w5}HpXE_1P^~}Jc+T15H`n>XdVR#Eh--AI%!)`$4ALhexJZHs{NH% z_57-*n~D?0wE35nnMC$7`m;u~pVaQR%jXP#DUrsOEzo(;`ZlPE>%=*OMkOC`=Px#5 zEl08SW$nS9s$nxsz0Cz+FY}sp_QiY7ZonrXf55yNeu{kJ(P^IY)}Sbu(wCbopL!(x_xLZC}hgwfFO0-r7Op>(;k2x zP#^yQ$C{q>5zu@(QvH8d$uA|J=|hrJq_1~BN=j(`jMq(r3J~N zWl!u@E!3wKyRJXsa;T?~vF)nZQ8CrVhMugX+h@W3F1;2{j}iL+VpACi~2k`-I%~N0xw+v2tb76Dp^#*-^01w-;qtX$2cpXWCBx9c%g zVb1R}X0F^@d_FPsHMh`qy(W4Wm!TLC2dHG@g=EX6Yo}n(zRj0agLm$J8RIH8hFjJJ z)F&j?<(Y119?$d23bm5pW1OAHovgButqHeuQ{2l2uSl;O> zxN@}BSFfO^mRRjP-n)5vSCa15__L+TncwzV669#=$uVMl07z(?e$gk=rJWo=>?wGy7S?j2YvwP-UlcEymwu^R(&u z-5xyk)!Nl1{kF({e`>!N2is4nX0N?tB5|**l{n8hDxmk4@n#DdSSy9~mppXP=yW1V zzNON~S2#;uTzh6IwLLj{JWDfTx?81drhEkCUhmV_F3u6B$zyAKjrhCJa+>mXPT$-z zt!FM23lRw%wN)!q5&Oo5{kKv7{>effWbsG$mB#u3^~Sd_7OU+v0?s!&PJ1i%7sa%v zc){u>LzCDX&SqBC!s6bI8pCn^Xw;V(TIyc9>sw6OR{#bjIU+D7yw*WiM;d6jstQQ2 zQPBb;wvFlS*~9MPjLk4#GHxbRQGPj8rI6H+KSh+SnEoV<^YlZce2tiJkCS(=w+l-h z*R7q9lP$NkVvt=@p_{rCNWd$!(^45*K6wBVmCYR`ubpF+13>y4LE$%LBo-}qw_27_ zppt!aXwAFwbU=Ksw#1lDZdi9!jd$$|kvYOgFiCt#G0|RVd0jtAIduG0N#*v`RyO~L z-UH^RlsDK`AE`uZ4wl>1by`T)ZpT+2ZYPoz9gz@#jCp(RQm~ejo(^=P6OiLGjc@i~ zW-8_s?X216SKnkYpD1o3u-(`!-aVbqU9KC+&7a~8>5OrCx!ddZSTU8UE$d07^%&EA zECN%#T+ha_EdU6 z>C!N2j+EKKk{6F*V(x>5Tb8=(uRV7fdNl?bvfYLL=YE)3B`6 zqH<}LYNgP!N21I(h3}xdKT(C<>7j#uXL58$=~ScdbF9e39*jjf=95RIcyOvgfNL`y zYO(DvFyvIpvk4*KvidMft3K%w2RtPeA~~VHTv-}Nh1uV(luvM^r&fJ^76>sa9?Z+Z zv`V8Ha0+ucWr($Yj(mAkJN zx`b2Jk$PquHvIVuCzolv`Esc7(ObhkuFWL;DH`WjV44kr%|wXtxvGPUV~-COQT_<( zcHT7--{I`N(>@$prI7KIRMV%gzi^5>YIJsgaS=B1b5(t!Tw;4fD~nd7*MNijEP5nv z*Kp}B*>9=ih{=G*YQ-0B4H}UHQ{4Qj9J#+kjn6oXZ|`6G^jNpj@%6d_Ukb5tq$izv(DYdS`B5y>V<`xpG>oG)XM?baxG_ zVv(#Gbz$tPMwErF^fYp+L4uio3+;N>!!1CJ8mhL8lP&tvxrJRMT$TnB;Wa1JVq6T64F9waU>5-?|{P*qS4^*V*2e z)_QLq3^Chn8@yS$?2+L*VB?>4S&|wE!Ddes>et$?jJ6ENOnk_e=hkpsyy`U5CTTLb zj&4>~*25~MTGkO^CQ}>Qrc`tXEx)8(YbxSWA9s%)ja9=3Q#5a{OzC94ZQ9SjwS+-S z$k$5N#Ki2*gg9Am-ykF}tNEhgZCrm+xzm|?+E}I%ft@vQhJs)AwDf5K2})(kXJcMp z*#ecc@O$=y!O2ahz3UvwqByUpJ8NxHzqyESo*j+7t6QV>B6r#&jTq0o?z$FOABMrp zBVDa5awFfUjWn`Svz#KUJPw{H*HBEOQq!IRr&+6yTP~7@bq?FAjNWbyqk%1mZnO55 ziojX{1r$ZYm_Y8p@#%-ZfY@!kVkUjH$wEu9e68K^-iglch1?qUk0oovPXfosnpW<7 zZHjdr$&jZucJho{if7Nszn}8Cgb0TgYxa6}Q={qfvEI%@Cx;RQC7Z;{_syrP>?F}s zaliP9mbdes47kg6pu2d#*<|USW1&zJZ#F+J;!=C@6-Vl7@Kk*)Vu6PuAK#zYwlkBf z)%y&`OK9`q8IF^e5>AR$Y*WB(RJNyYg`UpOInY!CKmhv?Ho0@wazv=*kPL~*Sc++X ziU7a;pf!GfNp4N_QVM>mwRyqP@h!ki_3zWGy92h+QNas`d6>)hq@XXzD9{!GRO=nj z_?=z`u_$FP;{6t&_Tp43{aUk(^WT>uh>fpY?OFV!)sOu4hmW33zHSe~7hncd94aXL zV`14*x32v3c3{nh7#VKCc*_@!>l%OEMSnUtH35qep!6T=;Qt;Se=34DO^Jx;*s_=3 z_)Qc4`{FMk2fp*c|IkPL>41A~#cm<^G4=k3K4K=q*8NX?#3$gy&_w-beMBpSK4Q-Q z(nquq1BpfN{)awd4kE`N{=f7Q|KSDjd|`mx1NK!$X47!_Vk*L{Tgmg(Zf#cv{tA?R zpALe3Y#|l5zN;GcAPGQl3&x!GbRC_(Ax7G5E}pda{6-BiRR+{tZqdpFF?{Y~mxF2G zqa|h&hV1rh$@JtsMkX(SYn$+l(tW#9;=DJ1vZusq&;P!6e#+vhLqf@NoY~y%Y3E#> zG_ay?_@LV#umWftK40s!umA#yYaA!5|H4{ZPy%;UBAK@7+wR43(H(h@r%1%BfGiIy z@_SI>!WtS|&l>T`cO3AK9bgKv0H#hbySPCMzEEHN;_1Bn7C^{_+9MfDx?ebJ zEFfTVNL-}!`HrNCc;+oi|5c+&Up%n-TOEb+f+wEp%jYi8{2bzXA5QkZ(?WloGqDL_ zCvtFv4hA-!^OhfyT3h~NYQFu+O3EW36(DVW=T8fRSRdhp_eU1~kpvSw3Oo2oZ`7aF z2oYJIQ9H9HzpKoT?|2Z?Yvu+c*&l;^R`THJsb9^C|8o!gYyyH1%ZK%G+sl8Ow*RjC z3+_>f5UY}T`>zxBr)NzgC^G)Pbyd`J9&PO@;pMiRA5Ht|iBT>{Pu+Hwnoc#*E7p-k zEn*|Cq>LpziRCtrZU|cPp|hNN1QN>m?|WW11+G81<96E0NNLBnjP-e^Y>&qKATrt5&$2o_TL8 zh1(p~Y#oqHr=Ni2@@?6E>O+Dk1I(&+2677!k%OnpG=ji{srBsVe1M)E0S%8OrCujq z8pthe@WE06?Gxi|1OUlnO8YE;LJfEAg%Xl4OJ67gP}oloT(A?q2)Ms6FCDXsoN0?3 z05qrzp{2$H?JJema}u~B296!8FTlQ_b~YCOx!u34u&AbJ|-i4&*u{?{gem19@G;;>=^g zMy$VyYJp2C5M^bWaLGY1o4j~(5ni~DEd*nRxIlT*TtN2vE_mJ`NLkPa0*FGevVBqI zDu?{c8`6XEUxez!08n$(2;T7O7Hc=iXEt{^+ARjj>w}-eABtZLjPQ7c0M86H61k50(GH%XNI+b{sT*)R%%uiN zz$L^15$8zenrIlU?Z}}E0D!L@mfEc->t~;mPj^?XzBGrF6xG&q!L=z~$S?-2DgX@X zSoLC8qR+{I+ez3&qf3rre!UB`42{mEzb({{Pb{s#61Q*OzYrD(EXjw=XZ1HVW&nl( zS79viLfX@<*%S-y@v5h^HsPF3cAtsK4=Wg|lmPPbt{;qpW2aZvtc(G`gCBs*tEv9X z0zv+q^oYk=J%B`DfzlF6i-E`R$uu$kD=-URUFE{3eD2D6`BPfRl_%sSXx4eqzS@{< zF?TysDLoUtUp*a=c|oAA1psb{79#nuQCKp94M)rJGx55aGGe4d0+6o3TR)|N6z-fm zLPxf9QFZtIT7L$F=*5Mv@UEQgze{Oyzl7gh)kw17OVlg`X21F2a=R=__)9Li_F zk`G$QKz|(RtzHR4RK|{MpeY6~7~v#iAU*%}-ZhFrX$>3KYSdH!x?Qm2=Y1JbPX^GG z)$@4pgQTsKS?1c8%Vz-6st9tL#~#2!)24(PqA6^o*Ap+y6?SkHhSI211PM+C@sX{h zx>DWi>NGNf*g><>kSIBHBKTm{P4h%&`#w9XV#lkRt2XN#$S zXR!n<_T}(x%sX&$ibqcCb*O5vHzhrlFBs&ah?!cMdH@u7Iph5?{n^v? zFTA(~2cVOrGsq85*4);ZC$ImQR^MIwZ_WxaAVGrGYks4YB6dZthY{gnifc82Ekg}E zQA!I8NKWDD2}{is=|hFMbsiWwz;4>!ezn^rWdz}evZW(7A`C41)$+ND+x<`+!yAPN zk8_jcu(ZUSnw4BeY}%=dN zM~4(S;=z;0(+&_rC=dC*l+aY<_(`IL;G{?WB>?M{1e0j+AqG6fg5RYp$ShGX(9Ye5 z(il2rz>PxhNcP$Tml5R=(4C2ORpzgw*k9lJ`qAHdt+Xr1yepf}3t~3UvLntv39t$m zWTa9^ub&v~b1 zFh2e49kz%Qy(Mj&)&RqYcjk^AuRQ+3z{fGeE1-EO4rjpY2U(6UJl zm^Xo(VaocWhL#0RPP{i_2#wkSI&-jF*|);b7H&akz)WT|eF!win6tH}062nO;bIb< zNJA6n$#ze=w~#gdCATz51vT4{Sn<6c1=Pl2O#m7+6JmrzD6*t=-*~^->JxE|MWFRN zn|yebbBqX3o)|$|>*3PMb^wG_x#Jl7CW0>!fr;6>^({Y>k_d%&TrNZa;^th5p!NXd zI>lfI-WRy(dKkaIT^)4ycM(wH65s@y;D&xnjf&E{h|!#adYmyXExVs!@yX}Da*7DC z7hbsG@Pxv|BlFzJZm70FHKm>$N-vOd#tlZu51NIK_a$cF!_m_zY`WO(W1KgImq1!J zLV~!+zdp7-ntcQaLavVMCS}|u=wRmFj`X;*qp<~`l&{k89$%CzONST$)!Rt{GiCm- z@GQkHUns>JqiBz`^@AdrrrxL9gh^nhA3;&L`}mbb-8m9K*;_M#XJf{6i}c_(h&r(E+`7)P ztFt&rpYq)gV_89hJO-KaI8I;vnN@Ej#R)X{FL1IOL8PG{((vYVBI`-vE#xm8R*DBk zC!t2*mP4z-dkDxHhs;9p2-}%=lEKbP`&pW}yFgbo65z=*4Hkj&(Zpvj3Xn779vRDO zostRduJm!rH_Rwo1SU92;Agy@uI^u}3$-Rm~m^MU*sAgSZPEB$eqWC49;~ zYt=ZNBHh8fH{tA-kXdu=c$Q9?34Gnrj?Ld0h9Gw^Auh3GeLJeKR3kyq&1z5V_HrUY zz7`-=U&;a=IBlmvcam@fV9==chnHVdCyFrxG*Avq^kZ2{4;91{zwmP3MC8_#FW!R} zIRn6TidHAXy-~y_JKm58!NI^NHS8gk?JRIRbKR@C>qQ2smTOK-*)nh`1N&>6HzvX2 zctZqj}Y9QF#QA6timJhylpPy&3Pcf=J6fO}yQy?s}lh{2_8&FexJeWMP$`z>o|F zSx|_;>Mj9UP>KkYcb+vwdpjo*LC%8m2)M%ma%_eNAm?8fIEIaH0JYPFbfd@dFY3b) zqQoCwUSH``(69~RhQ#-Ryt{?*xrg?vs!m`{L{0vM#qovj=FY*0d2KP!{i{PLV^P}m z5^=wZ%m_jt2i9VLv4hgcw0r7iuzE z$W={~*M$d?@I=L`xIH4rd0p)!0b3|uYP)9gtAQh6AEU*VDZA!65s=~I>}HdNfzMQi zP2#A?fnk~Ik{Ia$Bj_NyTcv*6-y;!hLgl_B7}jCxU=Oy(S#Y~Puk8FKczm}&w()H{ z{>gZP;!#>GBuyuK3GHkR2}Ki<(c7UYZnr2|c89Xxj`}xp6zx!Vf=bLJN3N;Z5ad7! zk6G)e;7nl<^0aAjj0GZ6$z|(ge>&h}Gb0Vbkdt2#TxSjw5d8PS@SodQfhdR=RNiC7 z{Nn@lLBzn)j(`4-rGnHzsUebP%Rjx*odp34D#Yir|6{3TM97U+IN+BM(9a>v4?reI zDryY7;*X_t!aylIVXIqz4Cl0i*wWOpcPGIgOI3nW1)^`ho*U#u{KFDK(W%e;eD#l| zh7hPAwKu;HG5;8$7Y~88V5z)q^V>l5k5Zp#L8;|8(=5M@sQjlEJW(Kk)Hs9@&;G|! zcIeZsIe+Qyu%KcQzFLk53c?Q8`xaFB5w`o+uzi_EPD5j3<=*}6?bVN;O(7yvX66_K zznSlUKT<*h1U09R2fqbFfBf|Ce}DhTM9}j3D2t2k2R{!>v@jt(FFGFZ3ji~T9{ozUAg8TX>d#lPq=I_gGh|FSs z{pv`uek=(ghYkW*X0I850J(j5{S8<~tN307=e`lj<`#F;*ZKZV*iY3YR)DOZJ)LbC zX%YB#+Y|GQFHRiDy9{-cWQjCxhLTCvhudG>z5!bQ={b*#Ou@=%Vbe)_rd$q#mK5pd z!EZ;uzgtbb1lF%o>633M-0mjdC6wq%M0LJOvqC|A0XPs+ak9pCvI+#6bdGJ`5dIST zoW{F2el^(Gj06{f=8GCa!o$pw+nCbd73lmXp@fXQ%`RDc^sm!sln5A5+4R=$k!X6F zID4cAw^UQg2Z17{l{ZEzK-THG!FmP7L2p(JicjNS32F3z7in6paK(fQtV@#nRn>8x`d|>UY*L5<8TTocVBcb-wGK)9lPupmZ=R zH*!*DRjm?Zq}BVmr4Qe9yKKQMJ-`|u(ipgfg@vV^9{7Qw`Hf-PxD#|=osEwh^pbm_ z@Rv6GrXhgfqOY2s;BfFPHtZvBFs+GUYcd+hGVxy=5VL2Gp7YDqAChFZQwf)89J51Q zo}<65DfJSSR{}V=*Dl6=X(ld?_5q)3cg9(m#}ZXkoVKy<4{wIx-&s0-G$4_^T*IEb zS@`etlyCLpxrMM+U2SnxXv7wF=nRH(BZL)m74L94=i}XymAUj!t(-P?q|-wU^#)d5 zb`RN~EPDo$B`Yfwi?BK^PhK=T86kSb94&gg{bM~!whF+oSoTQLB3G2?lN~uvU7?b# zC{t0-5o`Wr$z(FDS2#;s=ytZ_TDlxqThmAC$~nSylf4f>Y2s9NBbzkx0RrjKuGTqb z5Fn?C$!k_os{!1rP$*8*{aC)l=H)wuC^GZK*X+gvSvsC(Yax0gwZ}`QOWpa&#YWPA zOuZiEa@m1y>wuD{wb3Avo2_5Adg+ilq&`VQwZC0%p{G(1wKBgWx&PE7W%pxVem^JL zi_O`#rCpGP;pTRzwq&DaohehEMX}yh@^ot^-veb!CH+mK7=OL#P)P%xzLbA(hV19x zj58Q}o&W&2nPFiiL%63Bs&NR^6!ndEn!{?|gRPmuh(4;}a^6PCGJp^$8vrdT;wOq?-v{m!FQ{ znoQ)WW2odgB%6*Nzg_a7e6>9uhpypbPUUG@spjlDt;ot6&y}TG+T5P5L}E3pv=ycl zPkhB#^}g;Wj_SaLh6iu6=aN?tVm_}|a8AlT+O3V5n<_KBqJHw*k#HYHa8*Zs=c?8Z ze&(%@f7EFI;K+G@{WU`?Y?$LLHn4}|llr~SkZBZapAw!XgJ{w!0q1kl2paB6obUQjxqh%Sc)~~(nhI3!#NvKJGu{G6^ zS-&CQqmhgSb znPK(PYz08oDvAT))sJ%bwhmkg$Hlj}KOc3?(yC4>2ykItg3$wIwO5~0#i*@`PIAjX zII542=PZx6yBja1R~?Y|evBWkP19 z;AT{bcNcMOSU}#%fhKu6_c~I0b!;!7sfSwf(_2kARY;*Ne(5mTlhk2P&z!=#TG!#6 zrM@9rqk+$+-1c==><;UB__Pw2?UskXW;iBb^)sP~_R4KMbeToUR4?`bg#P0+qVnmI zo!(XK?eN3n1Qqt9=`F+l-Q&l*Ut4x|zi_%Nhbuf*j2(|2!?unrUCo;nU#f7C7$Bm- z8?aqdp(LoPG}!)NZfb^&L?IS=+HmJcZ`N4>#$b4O>u7O=)lQ+7&}>AKOu{}s(0k-) zAd{$~GgW!U%5KRvYzXUe*vO#p!{yzj%8}h@r{(m4#~=&$Yt`?}Gg?$IxQG|t$bSf| zcaSwwE*8NP<9@ReV@JCJ!wDJ-Ua6CcJ~jAjERRrH4gI^^k=p#~`~H~$c}+5MH#8x zs&g1AH_la2;JTr{VpFtGh&xouO>LKICY2gtyVeUpy&xi9Wbtt{nYQy_r8?c`qYD0W zL%*=x;#vR2!APQjQhE|UmDA&=l1(HQV1QW~kat(dBDDhjU{s-#j`F`U=>#E2(O7BP z4-i`rHAD=fK9;JYM7S96rVuRG2%ed?dRzcpu?_u6yfjWnCmXBPoTkc*RwJj34n#pn z39lk{y8^wPmTU!l;u6x{jCJQ$BIM~7do!lSv9`wrH7Ys&tj~O&uShf z^2c`DCW}A|Bj8lSftmfNAu=PQ<(QW+x5Bb)dRjgAPH%~`8BKJkEYAAjQfcoPD_Fzf z6#>aq17M5ew`(mPGa1hEN-fI0bqhEuKJO89V2GsY&wk|~K%Olg*;||X#OxE_uanzK z3hWrD`K&O+Si;=_7Q5UiDzt5BD5m=5>jt?@neo-iuauc``LC)E`wgg6)8cGRCPuwc z*9bRxJ15Rq=+M|PhYNF^O_=vq^k6Mv0n54QC~VBT<-Ky8(~$w0v9L_03g5e4RM%@` zU{&n%e5K8c#gVEkN#S<{AO~Ys$Awx_SCeD0xQ>SHR>tSrbK^%JyB$PFN{EOQBqdFM zat?v$s$uu$=sxM`5M6UNLZO1@L3Cv)Bjhg)>>QE#yz};x?O{M1;L$FV&kKu*6#>dI zZ(NnL(-U-enU}xb+hgAc1G`~GHjfINLR%yRg7nn>gksi~2rWadUc8SdL(fpIHl;11 z@G~X>m$s;@>Jp_5tLu3~QI!sj0A4P+~(M8)EiJ?ugFAG)7XnH)!LjEAaf zMvmi~VhROO_xzA0Pj93y6}?69&|0fG}4!IQ~k`osI4<%wJu9iPBk`J}v` zSie!h_b!CuANylnt$d{*nhHLU=c5JpeG^wpPY(#?{^{rWaK=3q9rB^&RgQ}#% zquZQ-S{NL(^*x_?J0eUxW10fz>`eQy*2_M0q?h!`eod;m6V0@7Xs)Q43w!#GBPk}Y z4<%7Yb;K*Zohp^`=aoWG?RUwE}sdV)N!ku+?$nh`uLMTIIP`MlhrK^e4*uqO3 z8$vY)O9ly>*mH>Ras<9s)X`Z?R4m49@3Ph^xh!?pcvW+3Kg=Ykx-87!8hyPAb)is` zg*ANKaZGo&p?-$RuKUW-4yVglL8>~wRv@>HwWE&?D`L&-x&s@c+(rp2sN!b-#STuZ zyPu$XsFDUp{-7W`{hNXe#!Eqaj0m|-r||$BIz7k40S%r`nR@Luyzgxv0OaxZ(3yvu zLfiqBKBZYQjVX(5!EGtMqt{(_OH8JWC!vKhyZjpYjJC}8+0 zFzhR!VU1b(pQ?FgU-5o%q*HI>$M{HHhwOVG?N`5qg&$1g_D+1k(r<_20CbZR!>~*a zIHTkNJ;`0Fev{F~3^>&#{xPqS3h@z>|EU*~%DtFpWMh+4`E@-qOs9N@y4i z=?(U6o@+cv=;)%I&n{jOys2gJ)8WL;rR4kS{+n|3f>Y&1S%YIJOO zYMr~coi=w}7FN@97v;w?Dz_bvc2-t3{Bzez2NY_L+9UbTWZ}qY*u*@~E?h+V{^32} zRcvIMVDlC(bnty#;(I^0)6o(aEbi4bi&IwpqU~tA7UA2c6h!(lc2*81*C5e0^(j`? zj)I*jcLx-P<$iwJx5rXLFYVt7*+lP$%G`PeC z5AnjkEAs89+Z8+-x#pdxzj^A9!g{2{Xc6I&O24$@zYV(J9)pXGymPFe<9U9OaC9^e zy;(h+AHDGRumAH++#CurFXtH`_CL3XrXG?|3ERh|Wkx6h@9l4y3^Rg^(i#Nbh2pSAg&?Xvzn zAn#QnpIOj0CurMe2DDAVOrqv=XQWbi-lk&zoMyzn?4iMe%Sq0=_iwJfut#ciTbinU zx-r3p`g2#l6LoiAr6zoGJ8)|uAQ_H$KLg4oRMdKD{C@A1O1sqBTLeUVXSvjEwdgq! z@27BI1bX5VDu~3#uGezR$qWo5+Ciu5z8?#{LaTxkpjfKcVtwTv z&$IXSIB6*ML-&`>J6HcX@$#^d^^Oh7yeuqtzm3vmG2#>dGz~x6Jo7d?bnJJpc{a_X z-B$JP>0kS)`eJItr;?KP$l_zILWrgG?uq-heL{2K#{P)3q<7>K)7I<6bmmCS+?ETq z_FE+v$w>b>*WHuvSqy??C2qSD33G~*KC5iRBg%OWFU!=DM6i18$cdD_USf_7+$VmGjimWVk@oSarHJbE)ESeJcydg3w?_B@2CFvn``bb z8$uUQcvpDH)N9ACnEs{)Kg#;>YVPt%MT)n0562nY`K6ja3L&G3NyjlYM{_;3XMIZ% zw$<}l7(4iWjQO2xT>bkHVf#c?aEo~EZ?VbId$)pbexUp-89tkL!=7o}?j$}wKA~DZ zvJM6xL=1%-1*Ou*wYm%$m}&auqCfI^pTCMiOL!`s z43rDPLcP6*M!E2EEMr8{$5N>N`kjsY@m4(=x*1{v4?4sC$h@By*pCw5YRa>Rl5z{# z_G@o_k{P-3FH7<7l8Q!1D-T0=vvnhtPHxC!@7nz`T0Pgu=kCwEj2=!ULJm<_kz2JX(K$v|imG%F#Viw&A@Qr3~VR0leqF#y$B?XYk_ZF9rGp$na9BY#{aqZ39i~&@4?kw`Rzp z&v>$Wu zD-?P-UM<&@lIN))rk4!QpYhaicSmn}>ELdTBwds2tH|Ph`MU8h^&~6&UXm`|J$JHG zTe^qq(=-zBj$O}6c{HP(YPHvHO7fo#`ro7XehPa&I5T*pkjm7w8KvSHGUI)XUOzt9 zisOe1^Mhf58^Y)Je?5|6X!mWYbY|S@wjDMV5;P;i(SVX05B=MfV-D}VZQW{}v1>K_ zLsbRbt-Rla`gteNk%Wq1%SAtE=IbkzPYwMV6VQ5(fZ!-1RF>rYhLX5rvWgj7r{<9u zN}if~5F0o~G#V~?C8%qp^r-Rnu={oWVJ6%Snxzrgl@ZtQRqmQtq)#MHQ)E%gRW{}n z=bj zIY%{LUjDFrPh8RWU9vj);?=Za`31@Y@oUH-kC|Y8D1LlQacTXR1**AfWh5zmF#Q>` zvqa8o3btYelA)apL{6j;nw*B~RRB+X5UO_zIV3EqOtnHO-E~z)lqCq6cNG$$D0Tn5 zEhCQsSzGT~;oD5nXica4SXUj zr(FUFf9qkxdmfGXwT@EerpN-0^Xkc?8H1vI0ZN3*+!f7Z>8Iq_O~G$C!Sxh7xZRK2 z_eN^HG<77V;VUYUWWH=e|E$a#LF!-JJ)a~??^u%(W$T+4-DB+z4%pbFl#P0r?1gde z`o)Rmc}2GoT{Z0kiebX@8pas%ba$~<275X)TFRp*p1n78>VR?|22lcOh z%<+|>PO1|v*>QYe+WPUsi?o=}_b`ebEvw2p9VrZR?MW`$WO5ZKO_Lc_Do0}Ox4#fFJnlRtzncKW#Dm}z%#BpDiq`zL+2ze zZwTJ4r_c`Xj=OWEMKbtG%bkQlso2-AI?Q(sv*gzTU6SJ)S+!Nrs}6PL1e5vMkFkku zpLLzLiQ&BFVHA9~T<;r~`1QT^Bk33X_#p{$(1OzhW$32Tj(6y;^JQVdrJ$<9Edt)g z7ga&D*WAPy#SCAW2ESPlNVd_J;t({s&n5CedR(2`bXVG3jEtdJ?qjlOsB7?Si1G+5 zb+55hg%|(436?jA;yWErKCPf?N^T@@8-HN+rC~l9zC4j?ge)aaVnN98S=4$!9197p zVu$>2u9OkYM|sH5vjhrxKanFk@))|>_03Ap&GZBBh&yqIFNaI?Tuf<`#ATWKCC{_s zn$3_8bLjbL=|s$1)$)EkW7^CdS z_)q)uvoUEwine-jC!+b1{f*E$!iBh$2mVIYy#@v?4>L}ZwPyTNW++g2X$rf0Lax0_ zxw!G%(A;u1A(^ePE9&zn+Uf!$F77sq0+D_VypTX)g-?=E&Y=M&Hinw%lCS?Xxl3O1 zk9>6Q6FKe)zM=c1U?Evx824@6PQap|YeHxT1uAdjfp&awLs6EZIk|T+&L)j~LxN4) ztpo>R)e>dbO&u}$&#rnS2E$@pB}MrnvOVkFbOPsf@iQJLcagzPSD|9Y4i1rQ)BaBp zA_OabI|7T*eSzKR%6_t#9#g$#W)X==WNER9H#7w%hyv!pQO$V*20p0Z>r z(ov8RC>4*s)0YcTvef&UhG||zb^dWJg{G4>o1CVbG|Yg3Q6%Kby>Ru#^!xJWhAZUJ zS>=kCdmtW^Jzrmb>>&!7ofUbIP#lEm-?l-X5ZO|8%vU(BEfy6d`D*4^=#oy`3fmTM zvNcRRB*af1<-A5}Qd|}zu_ZqcyCoT%;NSgT=0Q%cT=so+^K92(iP4;QS0ql&hk2zq znrxoD)s~=63faF)=pV8fT2!to?4yG*)L|m=M33$6k#vlL5p8se?!im4P+aMs4lDm$ zHKA2JsniJ=Vzvgw{j?i~c(1`gQP>9inzj!PGprDk(_WR7nSLl+MwLdNDnlXfn|&}N zXB~O$>pM+m{K*x^f8p4O#T>gc$vzw(G{d9%Q`A=q>y~7CfOJ(V_SFKcy83%bHg2nmLRC+UsJsrE* zA-5^dw|6-1k1utN_LY+n48>RSThk|x%i>8op!-UkR`i&2EWN0R)iRMH zfSNDdSs4!v?%0j~)IJMpt(`o2b!mhAQqhtLH%X-8sS>q}ncVr^_KN2yN~^myR%iIb z*v@zguXvwuNzf}=@fVFZQF%ASEZy%g2~&lHvLt=ID)=#xp4-%LL0IK$U=^7;`Rpu4 z+h3cz$A!9lbVF?)ySxFoKo-w7j<_>V6E-n z)SnjA&8~XjnnE!1nkIV2+c1nhn`6aG?A)q{2J!ejj~BO&Ofh65p$f*KfKe^k(4e&_ zWJjf?ec-#gG|f+TLY>0gL2DnZ5Kc#IbW_nx>fE73E4n%l6)C!j7fE`POW58=ATshT zT;y_yZ`)s$TLxvb@U83eR^cUq_Qo+o97>S#~ zL*Sum8%4sFGDC1^U?Z=vtgnM!&WNf?oAxS^mf*7O?r;uyd8vf6L5@_SD2?mfnb3Us z)_7UGYe~vmCisXenVK7e>Xy=`I5b|YD+p${HmoX^-nZGFAbh?rk~fVkpQReBYR$=P z=qnkKaeeqRaJgbR%`(tDwV$|zQOTR7Vco>?h-34@I=33=mwWkxnO;gprl3b-s$fIy zuQKDF6QR{r5oEMx58HDa?8lEs() zjqrP3Ezd+qG(M93(?b0;&onPWpzcBx_=eT5y3_jGDM~(zVng@(s}4fbQt64)i>??L zzMCS!fBf^-_>V`hj3Om}NtB~rOW?PD`l+aO3kR8TjX_=2)!p=NOx45KcU&U0xxw5c z?X*~bm@+ofajYKoWZN7QUYt9s0&DulYb=*y}q=+A9NoG22( zmT&t~ho;C}Bk96IGjZBjOr$jFXU7QCQWdFl{Td!kOccl4If`_=Qd@g;H^-mzN^fZ| z{=KOG(NM(daW{mBg~G+G%UN&MXnMvqGvFYd>I}rip1+~vyVnefF@>F5fG5r##8In{ z#s+Vm+c-^m5Jy$o2tUs`1aVX~5Jz2eWwtwioZf|iII6re>G{jcQ31qJD<}M;&)>WC zNI+;A7TbJ&2aUr(XnEECiT?RTln|liM*Tkw=Knuk;_f~^7I9u<+>a&MkQd$+sW*&LLw_V$R{MHdgtjqc+27_$at zaVTg72{zcC7#9-%cEUKy5_|K+9*)}GmI|wh`9FC6| zj3SQ)@SYZ<`KPf50Jc%>QNNCSQ+u^W^GJViXW+&<>t?CVR*Fvql}^-fuY=Xxl)4^H zCnbuxHx&P}b}4n;Wi))6wO}b7X?eS`XTLxGkC^nrLfe8xN^@WXK%v*6Kb0RuMfJzgSgHn7EpMGo>T{dd#2BrG@fSe4e^1SJ`d_to&Oay953TELd zs??=Y6YNknUfe+%sTp(Qmj0<wkl3IVN?_JRg)S4cvCm<=1{_YjXW_ag@5P=WH( zqiL%XFK`_&bseQ1^t*%&dF3#qYA~4ks_y!v$7oB`ejHsMy&bK2Zfgk=83-lQ+#YP( zYe7n*@3aj81=Bk*`r9kdub^n~wT@@i!J^O18yORbc=H&SxtEveYs^|rl2-$V4Wb&v zHeW_0M~*hb&2bCw0Og0Q6*u`o{BG3fTY(zTeYkstmDAYI}XE!V00+K^oVS`-rU# z06L9nGkS(;((bmY<9+I4xM<*6jAW|VPV_4?!(3(GNu7V2cmARJVaV+g$s2#P*<>Sd ziCT!-ZVO*6dT71I!TRl4IKFL1HqD`6_|nujTg#OXne7|Dja+T}_@h8K_nfu34IqP_ zbq0f7KVTDjT`nDkP6OClz~-wU`^%G$Wt`Dmv=>gi2N;VzsCGXGRu=yu?Ez+luto(7 z)0Br^Xc43$PW#M(XWhVh$7-N>=^=dt@z))p51BUQJWd$GnSbAiM3YUdh6f-(qm5z@ zXYs21d~lnEQ?+J^Bt1fRb=4Z}8J$J`De72T|7#hT>4nW|ycl*y-|uEF3jR6IMys-T zb=VFb=0BRcEFKT-h34pHFTblDbmEQX|7DdRtD8gRN6gAvXR=FM%i%}Q^hFD3l1FuH zW%Tvl;mIF`cDkbUq^~AH0aO4rYr&?e;B&~VVSBC`4Pf$l5D04v)wwU zl*t&OxsAQ$yglguJtnRaPdXy8@EcE)=h*eROx$^gr)hYsq?G-b2TRVrxvjXK%cmCXx zC(odK@ z&=EgZIL!Y>MBlWZ$#JTqgKnNpC2BD?lCpNTSkG*iu$+v^5M5{i!DZu|yX+-Zg#5nE z*L!m5f<71TmKpJkehly$-IPjp)ubA8*cL(iI$eJTvu@cHI`E78NouJoGZU?hdEzn)M@5+iv zoWPK3;)no^3;~VD4wr|kt2!#Wx_Pg{qNsWLOtAt5H3 z6j}R4$}7Iy#rU249hk$4+ZlsDqi|ZfoWjjE)}JFtn!Lv%=kyiVstd)t-3ptsGe>at z*a_xN+cE9)wF_!-_@&lF#a89)kGCG`o8x6o*(c4~1n!_0AWPOl-V?ZQ>q+Cm6jvHdr?gpy#M2K-4K&8QELK|njzhEa$$ zj0t_tjICASmf{Sud;(nx6D>Wwo5audp@RFKDLPMra4Vnc9Fuh@k7v6FePsRlamU$$ zTMxT!lT$<&|}1qal6LFtXd!Tw%g*xprn($i!YacLar&cU4V$y-5C;X+Fl3vOK#08 z*||bb5HGegUfZFL`v5%ETRYdi^0~tNWd%XAaKri3BTh9KBBg@A&K8nrIC{Z~{WXNR zVLLTqtYf`x-M}us4zViR<19+piaTr+uL1NObq}HRiDw9bXP7$rW zhkcYQ(MHC_H1bJy3VuxFM z?xzNEZw45@fhUg(7Swz-taJPKm=+G(_|Z%f`FKDZ+f8nNbprT3#9%VF3SWvDNDuFG zq8a1?zvkFAijj5fOw2jk3LVY6v3Q#gz*+P8_ZXs1rWv21%{DazzI9SBhQ_9l`$wru z0~uf1=ZKankLB$5nj6~GI&&q#l8IV=X#HW0(;YcRd*R?Asy zXt7ypr922omrXtNezEEejNjwBUSWud&3fvio|*0bU24YITnsvg+;VwVF}d2{r=-EP>lO- z%>U3KlLr#$=i^>q4QpZ2$#y{Y#XX5%njmP`c^6^C`Aj`G$SL>Btq8bK(6dXn)-QLl zqJT#l!Jo(Pb7svbdIw+(F8$Ra+t$=T7{y+{Hj0Zvh=xHjSV|A`Ny^U`?4P9Rk-A_1 zVR`9nE+BNl8@CwwRQZTk1+L2iCw$HHrU=N z&de)<-f#vlGD%aUV$)+zw9h}(_!}xBU*4(Fe=B?W2Ti5>%ll-%fJf98evOv9PH}w4 z?L;y+`$-cn_U!2EGzZCa#cT73s58A7p~Op9dv;YWq<%}1ODk;Xg|rw-K>X(pBtDV?%szBBea`O7rbdFGYdE8CcbUddgE2gYdp!n=s+#+x8Xnkcp?QQrD$**id zGKDmZ=F>zioB$;}H6258Pc?=h#FS*m8%Mln!|Hbj+5p+{Nhf16&VjW;il4 znS`(WqZ6LCRnB5e+m!0@U--F|3V$)89NEi?lO*Y5Td-61&=C-ja<<|xe^Bq039YDNZML&Swhf2slS#mxf%tuF*;P=565&&)f zgchvI%~<@j$GYj$EKuVv4Y0e!cETkz0EY0B-im){&$W-2i~1(o5Lj@G=>0^tpO|4m zWwaEF@0{C3ZB6JjVrkmj-CiVL!;y?#Q}8}sE}4XoP8--*T8*JL}xqej`Pr4psZc8zgS^G2b1=cN>ETUP~f zS4;WQ_4HJNlxp{GS&*Ht&$e6uB}MDg@+BsIRJFG}iqi{-u12)0qk6RS;XBJ?#sVpa zWWwz8Mw>^ve=hp1An$izS35nG86-g4OdJ~`6CC4!1dB*$vu;f-(d%UkaM(7LUmxDH zAX_N{a=F)g$X4!Hw+}!oQ-J=BWdj@5a0??hXy_>hnDo7B)Ne7D$pI<<5~)8d-um=V zy;X8FC86X#UT8(&M+ESKI0RWB6vX=x%iF>J!}!BH_$l1EPQcya=ONc8+v8!}cd2bw z#OvNEBYu2GDNC8SQ#OUFK$%eyx0o{kWNfS3(;^!MNtx!3fwd7o+_EgGcHMvafxr zguIw$~me^e0oI5+FaZLGq6?Ye;3%yZ|uR*!pcrapqC< z+raIzP zf`L*4)oJ8levHM2=lYO$arX}soYEvb=Ny?D)K&BN$JR&frA^9 zL4Uh>KS@E*n9Aa#?`~jq{%(itj1=Xr(JP-eFMC<3Q*bM2qH)mXbv2)kDXg23Tf)XF z^f!~|w%=T3fo@A4{vCdQd(KnHFO}=qmM0AhTY{zM<}WKKAzK7MupwiLJh0t$x@u=g zaL<_*kEW23T0>RuT7#~9P=5*6g|V8*e|fh`tKt6L$>8|Vk=y?d(hNM%SFLIb?OmAC z%wxgq2kcXhjl`Pjxh+4ayE4^(Q!D+VicYOXsGk!C=^die;U#~j$RH>V?G7CZHfgY# z5M+;B>*P&0XamW)7j5=_crkhpk;&!0b&L5?dG};M+@(=Ysv@ck{J!zUg0DhESvhiiU z*<$~;pc~|3tNLO6=rMAO3UYAvjdGj~theP|c1s|{{R2}JxNUCw@so`$xze1!hrR<* zmRsbeQIPXX*e=@I5BUhPZn~cYV3&Vvjb?x3^a1)N=c=p}yr-*dPg%;TXfSclO-Od2 z%p5!RPom);j?4e3pKiGa$ik+QU{VzrbZ_K}VkzJzvdG;wQ`x1vrK?!zW=IUPS723_ z-?TXXA1-395;zDVW?5~-^Tl{o{EvcWS(u+3#x%znfk$`q%#aMw2PB9MYk_ zb?DO%NBJLLl|&}IG~fkR?F66kQg?K_clPW}>Q5=jy2;5GU*IW5fUQ(2yo$t2+@_Uv z*%UwI&%B6WI>SNpV)9IBKhFw1x964k&L5Npj8|qay?9D7LaD}pKL0j_&eHVNaO?GV z{EBGmU&3$MzP;*iQu#jiO?T+?t6H`5)zUelGKv|^(TOaqmtImcw2OL+R*BvbjlX|Q z)ac&Ay$7+`247z>0r4#QS8d>SU++AiRF(vNmsY4uuegPJqWb;5h_SZn_g~+7D6;98 z>=?2XsDm}_m}H_D+QGlRJ_HFDn!_&l{-%0}L&%XY_|0cdo_Wb!k$oVj5Jm5;i zl_@&A!=De|f|G5X&RK3f5ECt#I5;^eXFYrN;MVyt4CBekN&Ujf2__<#cy?w*k&fb) zm&5N5kSp}$=`gS{QnS_6q!1wA(@>lVcc3^&zB@y{SjiW8*1m*MP?Nu}kgrGSl>bqB zJ|z9@f83w_@aIJ(J!LgD^0%J#OB)*~%-+Qvb%Udb+|-bRzLC3;rUua3#aY<$g^QJq zu(z}8pDGlx-azuLvyHnYx3{ws6bAH`yYY`VfaLo>k40{9|Kk;Rh};b$O&xA!mzOr& z62jubqBrCL+}zx&DEFUsEv;NU+~scE_(SMF|Nhxe z8*hjIq6CHgYgps~iu@@N5fc^_`Omh=Rb~G?1?o6>+c+6La&RWIhfG6WOj1%(_8%4g zN6~+g{AX1V%;u%Ci!-^VyZnDK_+OR(d*T0H@gFpe|BI%y=!5@G^1qe*tEQ~TpP~OZ zR{WFC|9DDfv^+potoNE2j{#5 zd7pgF484(~GsfFIE@!mC-Ta=}{^@?@*Q-JXV=3p})-K!boE&$pB-G2u)Q-?zbo%X= z%6GkXw=1Q)9=7Y#d2Mmuu!HrbB;mrFCT#n!C^`|RxD+9GDR2Oo0L0E zf2@x9Yx{o+dTvvGe4UW-Q29{m^d-G(v!3F?vx{xbu+{0?mU0F`)3WL$l zb7j;@od#4AVzX@dz4ts9M$AuXdav~23;K|T=G@!#q^sVA?@#M>MTR0YQUWv;?R$)) zlF@XkrB$FvdiWQf{F7O~gnQ7;N|VA8Z4KeFr?aF)pVC7~2O{WYQhTVo$|lJ3_ZcF0 z(*I&G!#N4#UwXR_qme-oQnsK|21({0!QlA?YhNZ4c>g;0eQx`EOFfp!mDx&L_+^mwJr6@$^kO zmCHSS9s2iGbT~|Pjc)Bgp;2w?!~1kXke#>c|6zU}zv5n~ zb+ak>dz;*^zR?RSGHk!*qV)XxP|0g!4|44^2TCI zt4u-Ryb99`DT7( zmFR+Nr`b?*RzXOp*_6>ylY;zwHF@mpQC(f#Z7`(uVm|lV0XVP0-PfnA(#dE=4-Ztp z-qe$=jvqfiCcW65Jn3dA++M}W)Kl;8`*8j!WakVbEe?5hh{ffA`%}P&R*W))x|`08 zZ}N!?S=u-4`}d_BjjKioQC@Hr5L?dQ!vuZGHHv& zN)X3jE^ofs?O@|}zvX3ltd6#>H5?G!c3f+FA45hz@w7{MYthRetgzv{Ci~gs(pKM9 zPWbk`kBBI%AIQX)>7UD=S8dhFl(^1hV=P(9>UGNcp$N{o94}@aNv(jFG}_S)B84x4 zop^c2SDIM}0D8ae1xIT35|}^#7#-)>(9g&eCp~xvO;pRrBr9fSkb%x8m!pGSHIakv zpoteLGP#H#xK@h8!3wNK$f)EOw0iC`&U*&c*S@Ib;}crH-e`($qD#V!RbO1miJL%y zk2me$M;xN*16tB^ifrO}9R_A@uOvX7dIp32!Zi!mkO0IE4(GI7Bvn>~9u=+YW^?g( zIw1|Udv-~On_5~1&*AOfy<}Z^wncAJB^j)}^`Y)G`J4=W6~au#o3Kj6ome3oNP(oq zh5)~j%c?60f$W4!9KP|L$INa(bjzYMGOIz01!rm{B*Q(|{bcC|`YMvQP^@A?Qs9B zp9DTPX!3qS=M3JVaV*>8L&=`p{JV0XpqxzlmYWu6BYpjB!eVDjR9fG2E(_m94lYWl z$!q-f@AraXBL{>a%bSm79a+~_6YMN1r6v!nzQ1e=PrEjMwyy`8c+vjXCuWWBy0-m? z3YFtTBX80h#xPu+&&9^0@~)a*{kg2_w_lq2oy%HHJlDV1+Cb<10> ziI;nNAcTekpDbSSu_OVA6?w(x2E?Pirkl1`qqQfTzyT7%vYbHoCQ*Wp|1;Q89>~Ce z)B}w;3Xm@kKHFZXo%ZEC>_YQgM8w4atxQlOCg^ZRWqG)C*mK;&-rI+`;xmQz+Z85u z2Q|F-$C`KlC12T{pKD>)5AWREj}pI;G;)?+_B!H&J6O3tpTlRCm-E%!UXME@5fK%O zzI;xoh<*7KTldXN*mc53b+k+7q^|eCEMO;q$Mv1a*vocf9*yggPF4Jey{@jy#kG#! z#u*VI31egIX>qx?J1%FlSgCZsrkA%#3m|$J5#RAyh#uAc4#{eonGFgcZC41J1L0|X z?25jH8S@i?2aKj3*tv&PUqaHyJ=q)&)@qe~M`k%XwX<~`1`GAQvs=zm$A+m~6*6Im z9uQYo4-$sBSJa_dIlGu7?zbCrCQIEfPtn{xA6_AB^qIeo$RDn^cjP`)>3MY~N7A8B zyx(7OcQVMB=Cyb>?!6!#O}iloltjsns)pgi(|JWihO{17D)jfb=BE1U#8>j&?ODK> z_>q-YV>ux4sz@aaz) zej73wo`ri6nQm6DKk^LCF(rMPJ^CHa)U)mk0)ajr+pP6ZH^&eM^pK-y9Mp=ax8=e~yh{`Fuw7_Kp-|V@*hWQ#YU;Qn0cOfRVIMj+W+twnEa*r_V?#9=K{D+M^b*`7-*3N1i6mJ;AM@<6rU8c*TlD@D)X*L0&O z73C&}2bEM8ua1z{-CR4D%S?-QshIWcQPj{ezmxYu4{f8f&;GP~PG>k*j~-k);ykSYq{InE zFV6Bw;1iRX!><|wB0yW|6C$#qmVU#0s^nCs(vs@&2k(w!(vTh7>JLNkN0;@nyk|3w zGmVXuIJ>k}=lUIk@~I|5DduRkdcDeJ(gMyiJ>k2|XzGv?3|Cx04aw8M&hS>Akj+uJ z00-!>u)!DAnQ&j>oCY~ABhJNHugpZLj(7~EIFgk`{LZ4@mH9Ke=~=|`v?4ZW+;$pq zW^V?0si}{a4L$kg>WKj|NL#6=a#Ype@!uVX;IuqNHMJofRP_Fa1Yb8<_w;FVd5ty5 zW4eRk+;`BcXxu=)fw7R3=nuHVJgU17HRw zBJH~6D#d7dDtjLvv}lf)K#JJI!t@lk54T*xbnGL92Jd(7X8D9OU5kk&YKTmZrLchg zWzIdLmvuER2#hsN( zVMKwjUAb*%dA^?A8=d^BsylbHre@Axx}zzAe4kcUW-*9@e1cjvMFu#yHWi=XQe(O80^mI)0qPQT#>+~_(xM`JBUMKtGHU_V_ z?GxnOS04P`xhBV8brecETk@w`VVb+;l;@P%S2C@qM+Gr+u;~d>ilfKb^Ab*I(0&k)8eZ24$&5r{-p9g+^Npoy>XX&pHKJQHPjPdWDt{xl{RjO`XipOyTgp9 z4KiJmicIlq^v6?tF0y#4{t-|1i^OxMil^Qm@%;bn`hUVMZj5Fn`YRh-neJ!jdLR7l zq2l6V)P?ARl`Z5|TwZTPl38&*rU&&jbrs|1)!upqBV?v;eG`*k64h|0vU&@FJ5aSe zIYsK8UuUpqQR*>B@<2N$UI_UT*>49LL3wHH_PiLm_~!hsV2N|3J#hVfn%?&z3^>_k zR~C3*zFFv0X?G0vynL>?zPL!@U|7)Vo+)0ddN9|n!DA^NQtvy9YtH>T`q}P7rO!pj zdo1R*oKb1|4iRm72WipPgY~AV9$W7-LJry6+uKW1Di^Ji3US|stDx^S6D&|2{=%M2 zr-=OV zl7=_WUMwoI8{d3{i>PS?IRO~mJcv`}3Ip}Hc?&De}S%Vs05wEM5R=c!;% zu|SB)CeKxpt0Ql$9jNm|EW9m)qjJfLmow8o9@W-nk|bH)cD#v{CibyiO!QC6Y-E?Q zM{*L&X=RLC=&E^)dR;v(vS5do2|^V(&Uj1TOcmxhUvLwiYqf@Rm;yQ7v=KSJtRLUs0N`5|CxBoGG zk*%llTi4DKyqOtAJh;d=>PAhh@EBV7ZQwKIJl|1(-c>MuAtmzNt`iiox_+cyI1o-v z-tiLa%*Z~%idFBH8Yk4UbEdg_igCNK6a%5zg*A#IVraDH-UGmCt8EnF65wzpQg9PbX~L7)4>kGv@+Ro zMN^hPY3SX{P*1gl%9+n&4Otz`L7x@^DvylqaL2+|4%>fU~IqIc^N@!wtNP3=6NdSw=K> zyF_VGgXO9g0_Qflt#Cp>91B+dbg}oa^aeQ zF%ef^E4RHnVyqBwDOmonaBO1VJ|o7xyHW(>a4qtMdFeYo1vU@{dQwKoM!?D>II9ti z&AwXO`Oth#OJk%=@Z(By=&lDUjGgTNOj)5pRy-@obj)bd;&Or2tMi%a(de&AcNXnx zRvOl|J`&MUq&@Fg;rGnUxM* zIZn>6YV$P{O>7Wdx+*##VpP1dN9y1C`#j;Qy&)NR^5SF@tGaAoc)s`IAAOr6rRA)D zCiA(aAD6o3YF2mq>J{*9^!0Lta&sHVZkN_FD(pi0r4W6IOt@te(}N#y%emruSmH;c zhM;Ri=V%WZ$?NAFQmEx_`5sQ@?*~jv#u5!ORGkEc48Kay^euPR<2N|1_|NIevhDBgZm+d$;r+zztR{+w@LS>=?(E4=3XiDRb*R zmu#ct5{}9t-c{CJoGx<_a?M-tZ)(c(4sR7YgDVh*w`rFQ8Nw1TUfc`9C{!3$6{u%e zcO`tHOSrnf{>n??-u+9Oxw~dTopggaFzDdaVnwh>gUQ&P7XY?-g}=KofwPnrT)hp6 z57Rn=TIE)-Hx)W0vU=`}ptsc1u3a;qfla)CR4T-?UeQwi5`(1`V~La5?AY)mf})j; zuB1Jk2wVg`a&!w!nuTl}cZ^`2uTnZB0Wz$X2YC-NO#1wa@vzN2{!40Mif*;hxu67r z^a1e>Q$6REH*M}TU(Ft4wGo5Q*lHZ`vrlQ)PVmh>iwt-6Lj=C+PvxMuB=beJcAwVZ zbHZKy_D*bb<9Z>bMvO|g z`b(T0PyFnZsyd02L16H6Hou%``P})VR!PHdRSW3>{e#V<_o7_dFrE=X7n`6U5TMok zdsG-E!ugl_&X#P^>K4Ufyws3;;0uVJoxaVH>`3g~DL_-86XlMYvdr-dvPp`cZ?9f~ z=gT8C=y3rD#qesdxI!1+V{73nHuN@v?s|<{E^lDs+`sAoqRAG3u*=l2r(%qC^`#a#fu6Nn!c1Zf{_a4{hfRKSf zjy@iabDarb#?%60Qfx=>)~HPWR8OP&@nlYJEL=JLS(e~R^AH|)jo#Cil>7)J&(-DP zMSz+L^E~epwQ(K^oN5}+cc^uPrgW@I?WXqIk|KvtU!XfYPyK}_h-=0{tQrZia_fsz zO^Xs(afK)o(ET(pvx43dWmdm_XGE-7yZX^UI)Mfs)TBGyIV7pmr z%U`_-n#1^WON_5aHm15O)a^yv+B= zDie&_RvAy$@QsSXm^qCgzHX0pORkW2Eau>N{yv!a-_-)clMC7EVzE3Q>%Ep@CvYx5 z2k9M%f#a^WtgO&9^P1c^wF&9Dw-cT}0(qy>D6@tQOiKfg6EH`9P=8=RK{dpHC>`2> zgi|bJMn7%BKiu(lC@78kNusVDm%>7^6K<6FRoZ8ymQSk6<_SAg-kAGXdA-BZ?Tgk9r(vw;=ilW zLWmIh2uX8fphbe&$yb?u5?gT!!hhe^EVNTg|D0yZGp<)FrOJ-O)qCHEhyqy!T}u$3 z$&9Z8o=lHd(dI)86z1N#`OQ;(oI8LVs&_p7(}AdMB1u8(V#Jahw7LSrU-eFt;MU)K zR8%GWwt8;j`bN&bWrj;7bZz%HHNDZ zAY^E43}KlR0cRt6r%xam)aRMO2aR-;_;!}nrU-ukn^L3(pZBT>y@2t*W05FD;cAzU~#!~ zy(VLB5*G+4=Y8v6U>t&+I;SvwqT8FPYCPzdgLCmfw~xoB}H<^a>c> z7|Cn)92jAIsK_*_T{*hO%z4{hi$elbbICaW&N&7IyKYW9X;AX5~t+y<-dngyxbt&V^L(vfdh9%IKm!FT`9@q`jdP&h)eZl!}eB39B zfEM=7lVYxB4>YvCXh_qZdJN

_4N=w%=(bc(>z1uIWR#;yVTawZZMFwpcEG`}?*aToOT~V!km6j_yxQBaGbamNY8Ja;TC8v1z7QDBQI` z9~p$knysDS?)ptH>R*FTZN{?cTpNtaFhzSX!_8kh8hbA?(4+M;au`%&lvGrzze`C! z0;8RO;43hR)b_vBnls z!v#=^y?4cY*b~V9;3)nJpsHcjAD9@Wb`lHcH}c!~NUBaTsrkq%GDsQ|tl5q_4O0?g zv}aLnLOB^415S&671JfiC~;A*mGLRMS@HSxD|@|kw3U}QUVGLTkiA>u(r$dY_}0c< z6En!x)xCJ=1R|j;*PP4F^RJlx?-u?~<=v$>18kGo@1H23P2{?qQ2BWBu7J>I8{_)v zi;`yOcXRh9!%wk$e{fmn8{c|dog05WJ_P`w2qy9=G7KC?UhsSK*M&zesCY-l(UU|^ z&tOVFy1;M_g|TkrJQa6yzCosV`-9Wzuv-wB+pC2564k%UJ@+fcBpNcs3pd$LM=8_D zoj;Jdy>j{Q!SO%RwazL1e|C{U-Tw#dQk-CAqpj_^%V%w!5Vi9XjZgHGw~p2C-kGf1$4c5+XtqnD-{c&7V=2gh2o*Z7PV#PbOXRrI!tIpR zl&GsV=3DV+egENBxztsP9+7rfw#!SS1)N7eAhux}UGQa(3caW$=aWD;3x9zCzy0er zgO%FB0ee0^r0Nctv!tuTZ`-MdBaq$N1nc>G&O3Xb0@PQ2*ZU1)PH^7f`;*q8N}-+$ z4ZOrr8UAoE6x%Fmiir-`GoI-#+p$e?-VY9adKkC7u|qbZQ$=)#9`s2vn4h-YnsS5D zRQuAN-4bV=r@sm$iB{i(#ocWYv8gogRd^6^zxamiAke3p_QauibYKcvLYv}+Pcw4t zZn!roP*8Ta=lNn7{kD8TvCa!qr-4?_QFy_hkcmhPk0|taYe$#2qs>=81^5obkX`g_ zYkmAfk;BMa$>DC`osqQNAwdB>T-~=_2?ddsZR2v(V6qG!S1&HCP~V9V@C8WlxVy$K z|4n`qcHiexS$((mVl~*QccjL>tDL`o3A3zvjQ)W%sR1_1#k@%V@kjekdLEW>Qcth%Z@54(&Q8!>!D;^_wi0+ zT_N6gv)-5Zt2{|$(M200-i=slfQ}lbv>@wH+|~9~n9WTU%gOV*A{CL%)sg`QsMYeP zUdz2g-9NPo#hsA_Y#wXz5YVw4qWA1x4;x54|V z77N2XL&9>X4q=Q9LNm>H(qVA465K3fh`l`crE75zT3Zwg9zPo~x!OD4#VTK2Bsqdu z&0{P!jWes=no1}#LDmZwYCZ9A?M@x4qAm?`P#Rt>WwaC7Su2?F%$a-NNE)x5AMwG6 zkQ2W~dlswr&vPWL>`jniGjwM+5C^K%EZ2)%ah|E`-|7wOLYGbKqkp!kp!-Z#Ut*vVc4ylFjSaV7 zGlbGF{nnHWWiqdw%}MLq4TuA~qZCf8(V#&pW?!-Hs2Mlvor>l)Nau?ip`p?|47Iai z{FX_705%!F2QPEL3Rbx_M28Pvfm}5%^nP1MByQogH+LTgnp*-JTzqI?n^W~pWJq(S zebLk-Jih(+JMtM6Th-yCy7yHhCGFh;j2{z3#ECaEzAxn(=B-3}exb@!(q9M|pwe|ROdy4QRtB$9(Qd|;X63vj5I(89Tw zDieiUYo4|w-{(23XZL&}B1lwJ#rsp!o2G8M5{ngbiwQLbs}Cw7j&@P{_Sd8ax{)6- zxbpDv-8f@(3mr$}`73It<^O7_|K@Dzv2ktLs zbPU-ZO#MzBthHM*OSxCyrd8)^C3;=j*R3jS!qxJ`71}mC(PBHIkd~AbI60dVxHj0{ z4P*T`cJ5o>#lzqAf=k)#1DJ2X0})(qP=x>V@L9h^;0e}^Ri-{Jb*|PJrh^G_FIgY2 zQ{FN)_j^)$LV3_4!TQ?_N!qt{ngQ3v@dDeE3>`=yss|fpy1(+k*#&J+Qg)Yqfm)8t z4e4pv;+Hs50DDaC$xBmFjUj)$wHVp`jQ$;rMSd3i+hd+@v-vT^UY2}1eUCTAXsgdc z>v(MNSZfdu+0Sfcov6mFv2v_PBV`ljm_;zerO%w4=khpELE5-A{LYkyci+jMkjT68 z`|3Lu&58|+kM6U^jCEE&SAI14hQp?&YZO&3PWn0o`K=SmmFJ>~ypkSTf{&gU+*{l# z#vfcw0{Y`c@;0m~Ub=_>* zvZky1DKz;?$PR>%Yzq$5v*bFE_M9&bSP3HBU58jNv705rR1e_4L7-b~e%#e)YFA(} zAVW5&qC9GuLm@1`|0FV;l?%5`**WI044I9wBcjCCkZmqwtT;wj!~I zUl1+&i+x#sfrH!&qcZRjHBM21yl1?zjWOQEc{Mut*kYlYpeZi+8v?v*<9^gCNAX3G z`ciH)>c=FpjzQb5;*;JV*4kaAc89EPaV`)QjFy~#e|pLLhO;&3A1y!@_rO#)4HpG^ z$O;wxTe{H#RWdkhxZk;;?Gd+U~f+6iON;?8s870=@CP8n$3 z#q3=rh_?lCU_5Sk>pVAp_L+cr1zy24cGJd4lX#Ee%U%^%2n-;ZA(=-gZMLFu9*(xW ztiv%zU5=cgBR3P@cyZeD9PkFA+IpzR*!OF=I2Mb7^YrO=X3`Dp);FP&!WG5?4o17= zqH=)4gntEF3zr{K!F72vJtxwd zy;1%wY(qjQXr-EQy6JJ{u7xRA)en}a&G$(@4fRIP((w@gIEzidyH)fG`@_^(`K2AK z+@bI4I29TTPjM3T@}7_Ju?*55>FXD?n|8G`kwixnr(Fq)*2~>y0mp<}ZlibJ7gBSk zF|%B#1P7KsIOhS39F1zy=1Sun6*5lA4lTHXRrf8V0O6vXe-;W%iab@wg=nJ26cDPHZ{o|_4#9B-2qMX0*cSx z7QogpND&&4KR|7;^m8rX6Coc4NSZ~5@xTX?_+rB9S1pr-r)&W5CY$?nOmb|gzUj1Q_X0bPoT ztr2d%ih=oR2NZ`MTa+$tF`QGOh5k>NJ$RmK6vU97@s(~D%*pj~scPGzKv_fijswl@ zPX2W8O~_jg4@HLs_|#2!D1g#KAG(l2NOZ~KT|IY_gAN=irV9W84=2lEO(ic$F_^&p z;*6YaL0gG&g_9co3~Tc(;SZZyWgiDO=mbyZHm%ZdGZUB&aoQYg9~^AxLf{Cl<}}D# znyrKIg*!5UL>IP-&7{~zE}dX^d8IToyJ3A}@{oy7WZd{6K5<@Kn!I&k$;m=Xn{8Qn z+lNa1CFhj@IuM(EAV&b*KH@Cl;V#EQ%u`3!)RjKAT#}h!jODN}$UDy}W1zrU{L)B) zi^wJAYYrp4)%G+zw9Prcm8ag#KiJQrf0i4$;aBfCBY`y9OTZOm`K4L6R6OYE-%Jde zuC+(Jf5-80!+=nZ7pV=K8Eh$d?kFqQEB|BPa63WLtTrqBoV>!vS_kjjpvp@d>dc_> zA3Vzy#bI%^a}A5ci-hzczm$cou)F{r7Iw2~;*t|qWDzU83*Kt6&ZAH{G1yvNy5@LI z3Urva$W9u@J5@K!e8C~|x6GRA$RM{YsBE#k7|)|r_(KQvI;=>~KD~|I<1W}M5G=Dc z_HL?{eF!UEmeqYTn_YYIqp1knb171F{`EU z`;y>cTdI?$o%NYK6IL?c1oN5huzQZ~t$!`PU`p~@CS$`ms=$xHQ9QiQCr43js!15< zc>!b(*caYfMF_1{XIUO})!vpUoC8DIoWl3Vv_}Ws-o4U+U0bb%RIbYd33CN73!eE0 z$d2k?f;~)h2uhp0@PHcPoojpH;GmP(z2rn?JJ^X|`tpacUA??7MT?0(y{$Hq-ik^j zzdX?wVc^g<)lnLKEky^wS{nLsXZjQb*6US@{zz#E2i%z1 zfG)X2Qht45+I5!U$XWNB+gy=e)4`%g=&cwKv!(qn2}Axe0EXxg|7&OP4qZmUTFaa` zCJxcUM3YZiF_dw4E(_6DY9EgpNQ)-b<}9(*V~!mxis|LezotGFsC##k+g&VbqAa&G znwc@H?~sR%W6K*Y&4)Xh2IO|F!|Kxvfoy~JhSx+qLIu#(f)%JW*{e5L%0uVE&AV?s+kX1aQ+ z$-pXTjn`uuGtb?9Zt+W46?xen6}~v%a9hiTJ45U02tf5_$GwB`cQX&|%wY$GM*}@B z+Ol#(;Q|O6SZbc0K}v9xA3g=RFHZmdA%_I57~IFAfoO?MJ()c0@$trv*h~!#BT96B zr}KO*2G$}uy!(uhKYvxC{ExikO`q4-gYy_R8K~8a|qBf9W@j zuN)ax7VmtWG1WZaliy`lbTBG&v57d~F#d%&6x3OIkDjU=^_la1{gLI-p(r3zd`15$ zF1ow>qCw)#Cn?`c7wZJ?{-RAOS&~hin+gNg%=EZy)-}FPG9i46OjBll81CCrAGm|; z>aGv)u98*g1eIoV?Iiije=0v@7bJp5AXO-B|1R1i)|1Wt_C_E;79|wQ6bqAgS|3h{Ofu$UPg`&_(OR|=cNs`>9m@T4h?wqoSN#bEjX3{A=`38c3kuLNKQc} zwew0q7iRUf`qAx>G8D8swKO2PA#GkkC~`h4@ULlb9)DeKj1|yg5(U!w4k@{kpkT!|H4@`9V(>Kc(#}*gT zj>xWcsJdXNBB_gTQouRo2VY{R70QE*UYB1P=8w|=;5{JSDIL35>l6$E*y|UMvso-6@%!vUsIYdCz6t~00YDB=CVV0dNx9gDx%_l<0XMGKymBZenA;s z4qQyeYh6rwq$WrD#?W%&z=0i`X9XBK-W;@Oe$swa<%Bi`eXJvSI#RlUemUWB2D#}E zscCtc_&QV9IAWIah8j>W(p8=XLxzapZ7+LHE zB>7DL%^V-oio(P|>A?IGpgES!ap{mv-pY}N|9CE?3g;KTG??T;K5%5=(x!6eZP;DC zl62=hWy7tmm04Tz-txqzb*7J|NuSmR4|dQiniu8W5oRvR<6eb^N1p_7s^`xfb#t2K zM@vY8D1V4P-h$*Qlf$1jeq*t08*FdkCymvvsk4nm53^fRldlTY4YYEFLy}fF$^n%6 zr5VzJ`j)r&s4iBL#6YT5h^qri#R3tk{u9Y6oCD+T&oDZcJ4>c8WxfK$>j5U$g&`7z zv~KRWlx@gYDKKe;{dD`eVXnJ>;auz%gDx!U2ZCbtwaJihwIxk{v`Fy@DsU-g<)q-I zc^bdLue^S6O0$1GSiHcRq8`Ee3I8CxICt;N5Tb zD0&S19of(h2y4;YEcv!;_`QZQdN5UH)QgI)RXUH;-`|s_Sid=YrfBMiI7Z_VC6m1U zUX_Pzy1^&d&zNXg{Tx0)|Kk-W`^X|G&>R!`3#|hE& z?ZUduIyFI;8`wk|(BFuo)uz`%G+}oZWqWotcCk#X`OPh?z8aGt^QfKOxg+hifV`iH z3|AKqFxePspcKes|Fhxm=6y8cs6x*h2}y30GRNz$-oZf4A$7d8%2S$&n%uXHa?_Ma=c02+soaLy6tX$*cQH;{qJ@=D$JfITnL#S zV-Z{EQPqEt8I-U}x=0Gu`rd)xF@ibd!3;23Yv5SY9>_zXcn~>Qummjqg1xmQt{?LT zD1m((I9|f2&e6q6r@`TZu>CbCK4v&(2%;w^KSd2ZtC}+5XwpM`?H!|Sg=dToY+%Ra z3;Hc!$RBWN>&JfKu4NA1sk7|7Zo*fDvebTJEw-fvt@K(7(BwoK$kMfsDRn0E7r9cO zU~WVe@y9(RZ0oE3&Z?w~j0o%cVdR|2m$pl{5{p*#f4~cRo%irDPr_|J!%sQjh?Xhj z7hK{hN3-Fr!0&1PMb!s!ekyA0aFOa{guYg-lkUQ>K1v5|Sul{#_WElT`2Z;kZqP~P z?SK3hKzN!6V5>9F+8`yH^|3(toKH^VAZRCc{%YTwZN%onZ7^tzFoTD&%lq^ zfy+hDRW-L}?)3O{%b>90FVYhQgsrflKtB`*RaB|-Joe5Bv32?+>6vs^n^@>Q)m88n zN>r8qd{NkKJ)^Am_c&Z6JXi}xl~cM9&}XWU;HxEJZHmX~kKF)yE^Dd*^uZR9@;TXRECKTb_DmyqD8Fr$# z2PZ@|UZDLLH!{Fe?D+M?uN+5Z5AS8)Y|jRIj{NR)%c(Mnk-X8zAcI<$Ni5x1!H+1z zrA&i)?6X>ugbELV5HMVH!9wCCZtlo5U~M5l;?n#EUYn+tp-D4EfenchGux$82r$dL z7jYF3s4bsqm}jfcn;bHoRDVVH%z+RhaD!*IYj-&(=ibGobPl1W%jA}&XL}a&o!CxQOXP;eL%^#fnKg6J0OyyWVFjD&AS0?-jmbf zxOB;Yh72>xSw|@U%=f)Pw{?q!gFawQX`;Fq+_LQE&qZsUI~8LEX;Z;1t`h1`2rWNV znnYnF4_~JZ@0OO%am0I-lfdQgQGv!tK+5pt+NU=jvB?!Tk~iB6=OwW#5WH^->H9?f zaUJzd!vh8%sd1TceAOK~5Rk-MA2h0Pe_TvQ~B0FSI&E-#EL(;f>etWxw>E-<)YK%F7T=CJ8F*Qs+8o zxU2BQ4Ay)kQNVbcvvfudcdr#c;2_&PSy>S$VCJ~85hPXYuV%J(FPWQzAUf0DTTq{Scw&x+PfSx#{FL&h%7Pj>Ec zq!NY_{kWXHCm?&R!?DD%UhKo~YPNdeM=6GM>(W8Ma7#vOhV-t(TCN0U;!~_QK2^sN z?_HA50D_&c!-#LzIYuG5Yg54DWexPIT?2S?<9f?B-Q+uR9xj)_NAYvE=xVz!%eM#x zn;IZF#N&aUuRt!&sz4p1>}rg(nCqYq{FCw|By_L!xkN*hfR(s=T9S-4dJNeF6ZYF$K`j!8h(@i>%F1$jz1-*9qFkHe`>$W`$-k^Q+-|V+ zek_gXGdS5ilF8tqKiDH9JTe&+Pm~=Tk4tAgM4;jS?g&xvPs&wt`nar26P*~>RfOMy z;=m!*l7{ZVYzSC_9A$i*BRFx#Y@Z}M0}I0B zS&9?DaJwB6aCJ2|aHmL1rgJ$s-|V4RLhq3iZNsWf zr(YsSpHHUjqUg66^BY$imd}TE`zV<&>_7hLFYY!TJI3jygX}Rb$XJRUV0w(Wu|Upm z3R~C0+oP>tW_L%&jOgd&Z0&n;T@gMXK!PHo4LR_n<6E5-$5YVE>a6X3ag8x%yKUMS zW!5V%X$iLsb2mTSjgjEvn2#Zcw4F=b-|-k zGn+wq=w_%HkS>jsY^W&#I?Mk}7pwO)iM$nXkrcL0(BOKk39=ERdEcaBTL92CIy4@y z)AbdhdKpeI?3=|2lOZAL9M8gnS87l*PHI1!xY5hU4PrEXhvJxtR=h}!eP+N+M&bPT zXWZGJj?WoA0#$tD1-#wKXT>pa=%)fCI~VHEAOk@*HHjJOh}QvYlC;jON%GeBwxhc3CYGuk zs^ld)K?W=MEP)6s^3fx=co{8EW_c%5CqS6>gX9@z6R|Puu2ygW`+2P`x%!QXOdaD| zi*Yj>l3PgeB%sXwa9c`+*)=iBDa%6_3ui6X%0N6cLTw>au7nNr;|&q7lb`}A;dK^IW-M?lR9r5VSJiFQgKqEDxw zb8wkcD%q_-^dXGl$G)(>TW^z0ymdc%r=ikpRKcAU5v`_ty%`Q(=33zx0Z&5} z~nkj_Y(}6<(g!Yx7@7DqG)Y8nwT}>tQSGkk)km%1NtRxR4C4x{370 z`5m8uIPcY`lUO?g8*HfjeoYu{zqQ9D#J!uI(-8YARJi+-Zk`No%_gem!LJcc`f6E` zmYp$~0sF%;E}*$jMU6@v;eg8n!HGidIxX|-aJiv^zUil9eQb@|^cR-J* zVWb_+yD!TD8y-G1DcfUrX;l`eL0hi*DgLcL+^O`v8&C9dD~QOXZtHA;yHqh=a`)~B zbTDmuZalw*t440^6HfBESVf?Em8@af_~=A55^%0FB^we6EDR^PTFo7ggW}VrE%h&C zlqg|YmU$`8b$-QI%lCqh_(8k6Ar5!LGINdwwc~f%*9BR z@~>3!W!-p^p^F~ugQ+eHxc7RM<-@!4)Z4r}8)l}id%_L1<^1)Ib{-9hfiU)3CH(=M z<-<%JCrx{b#(t}8McL@k6-7s`F3^_ET zgfv5UNDe)~z|ioH&-2~)d$0HQ$KT(7Fl)`M^E%Ic?rX__Xa(ea+{-=;#H))M4A^%YZP}gH}8N3Extb6czk5i6TqrlgIEKdzYsOHyB?|)$Nc`&NA1~ zGfkX|E)nQ=oRCwli>FkqihNM6OCQn*O2mSnw0@jJBrS}JrM2-$rNxx&s%8V_Jr?)+qwwkTOje7%83bw2G@9szYnb!vgXJ zBYbW!TxKoI!P7s94W{&DfC>nFi&!TOZ$$Lt*Es1q$v?gPT%E>#uGPN;^dO;IYBX z>IXT{l4TSssO0ne1kqU@muV%XC*_5FS)3w~?O(|DGbs2AHBPd!FF4aQ)rbf#Dt4=F zI&hB@TDL9N19wWD6&q_`ztkMm$W>g`GOVV?*Pv@%NuN9v$iZD0^iD1qpv^QM!?)wd zNb$4s0kI4>vYUG6XTq^<(kKnkC9#OqW8$v#qHdfNFIrTy><{QyJG>b21wKrm-~(kw z_^EAPqz{x~7k|(|OJ+XAgsv79Pqi(z8r+0S4CpFQvBi!#3tf=LEODKX>+bW#(-te* z5O`C2DC$2;T@Q^k{ZxSttY9hr&!M{U z5{nN_%YY1foQ2es^An%+hb-}Pp~;mp8N3Mo8J5ZC5%Gla+>i8q1*)Y`)9i!U>3>81 z4Z%bM+a0wxG2BmS!r2rYYC&$L&^~=$l5CN> zpjnl$ZjB|9^f5;gSFy2)_oPkAQ%31=yg~M zld4a-l^3TkIg)YWv?!ACfgFo}F)k`MAwH|Lj}j54L$lMho8(Ii@dPM{ub^7Enp@3T zuVhYm6c8+1m(BT0`@FSIn1zJH+ZRRfW?%a(2*gd0GxsMK$2pHs-3iUD-?YW*Xn`Cc zVVG&EnRM$vb(o}TRoF7_t$z?3He6Hz z8AO>`VWD$6&oT=O&MFlbuSnh>se+lp<89=KT~-(g`MLu$2HweTY?rAgNU=+N?|%O? z>BfS@MVxI27854^JF5iqnq7G2uwt+L_kGRXZy&phf`!yDvkf}@ z)(|2VFSuQ<7~<8`L=zefF1lLy^N8ZQU&Xo$v->ptN+)={FgmFuTYWe_~R!HW27wbw|160<7JKH!8+O#$d*`Q{D4>wde? zV*U>uHngcjU6H~}#kMZKzX}*KwaD{c4HHUir+rgM5WxCWc*#YLXsSsFVb8p5(QQiH z6ks2QIfi9Jf}6;uA@9D1^}=f_#QEXXK96b*NCB+DSq_vb%^Eam!BOL0ogN9bEp2j5 zH;=n97~Bj!lAUu`tstVU{yJ8H$M5RMnVcP6=vUo_Cg5vY%aL|Mx{_?vFx5V@GS<3BlHSj#5!b?8^Nm{Lefw6wI6%AEn!H z|5@0bQXu^~_r!*)-N&cR?n2LJp`$?G%%Y#~)XDs$O-O~Q^E`_5GW@P1sue|@Bf2!x zooXjcVSkigR#c2K?>a{R=YLS<_r6R1zuWkqDv}yVyMUsV$3U2?jG#7GB+br4bqbSv)4SX!D_?sPkTXT&NOs~$ zZrf(>FXSk4jc(1_}6ybmUlu~LO=7zB66IF?vMa?3_89JGDf6v=B~b*r==r>DOs7>*D< zBG$3BH7ac&_wW${Zy61bI>E4(rpye0c7Leh-fa__454;0Z4>8DPvw-r$m9Z^PV#@c za{hMA%1ePaq2_*7g6XRF@Qgq+|a(+;l~vw zFy^AeFNKp>*pBUx0V;DY_<(^$y>$wR}S7^OUFyUMUWb;{uTA`oa?H{t>3Ih`2_I#EMrQ8s4 zg`o5iRnpyE*0BBq8{f)Q@K4am4gutLYff7vDaZ=N9QtKEx{vj%I*3lER;peQ1raUw z8CktCIiD<-%b=IoG??V&Jzo;Qw!X?!AFdpAlq`5>j7+nf>+Yyo$(cU@kcT>5`(jzN zgs6`w%q>~$R80P1^!eyfqCm%mh1FmlL0%N;ZrowwkpHj}0It&Q-$B9uIduyA0&|vL zif{}1ouNpU$ph({`H(Ho4A(_ug2D??dckm9k4Bf^mhs$@vsJx$@`7 ziz1FA`^&eZpyMPO;9gJiF|p{#(xIx7Cj8xX9^&b8zm%tw8V!wke{!@GJ!2V|qMk~o z0jzS?7P3h?WET`yg|lm5etrY&RxHCC(D9OA1y?Uj4yD>m5OizZlRQ?~rUPkX)r zW=(U;XZr9#Z>JsOhO))A{kv5zPoI>EAlIzb>ikPy6hOLz5;? zuJC}|ot9YR{i_t^?4xF(W-}IB6kuAa=+}!?|Il`vy0NIOIDn!g(e|`v;du&RB-_Rm zJO_FaeXj0)RqqF_3c1PHzPDtN%7UEfaa7Bfe4^dts_1go-K|sH*#VqZe_V45SGzCu zgm|dovuab*%Dkb^dwYVU+dWXz+z;QNLqp8AW6@WV9+Ex>SZv);nxW;o zH7B(~&6!k6rsH9HsEC}I*YCp_ZZ|*#Gf(A@Nu4@g^~!;C1Di}=?F_wgjnm8vc#A!N zKJO1;(>39dW`66D_>a0dSN**<$N<)yS|!1f8HC{1tVv;l_IDJXH%X})5u7l4KBb5} zsGd~U=3XiV*Lqu{Qvh6#-Z`0wu$m22R7FJ@z2m1(v_UDAqicFH-Eh)kxfk7+SzHuu+1 zI@{KLB$fbgF>YLtE&G&P9+zsTd1_^P;PrJeAjj_e(?9fJtiU3w}P9iZ4d3P|*L`3<2(&lN*$*3MUTHbEz)= z+s@HrBMl6iRQ^t`mMML|43c2;(gVfahl(%B7E52D@t-9H5-=crTR0bluZk({) zJh^;Y&`(w~owBK4EV-Km4h-8Xo) z>~q|yZnzjzOI$)v)RHm{DBUOc_rtX(KCUxiJzII_DtD{pQt2nzvuKUx^_TX;& z7`*Gm8TGBazEa+=I*?KCv2%6{%Y22yXz31IhPPJ`vklXV*^+KjVK{*ZopYL!KvO-Q zNa1$UI4!DtyQb2Wh{95Ea;6Q{huI}RD~a_?TD$c0*?s1hR&F75{imLS9LGlNelLUt zBi7FX)h47$nE0KSo(Z^TJ{!Y#M^O3E`@DS+%+YW4LZ@y5Jo8V&dczrLz6Vs&P7&ciWed#=ZPSkJ zjqS!cSh-4wr`)W^lsp&;(RulRP(%Br!>_Yp6;O7UB43X08H-D_RU{dg#%JsGSA7qo zpjiG<0hvaAQ)B8ss|ws4AxPVjHwI#z#&`~#Ez@?cd;8)Z%+*ugZ+YqnytVjU9L&**V$A{l1N17Hejb9?_tRwIyl;^UYnBFGGgCnHOzP@ROOLo06xB!3aHaBw&LvU zSn)4G#HnXW8p>GXf!iBgjTg<6(|3PRY0Do>b09G&3+q z22jys4I|Rmm7qtSmZZY_C^EscwlHk?#7*gRE}wF78ys=?eg5S}mh;y`s9^XD)pCxzSnX4_9i(yEn3jed?-pBV5X6uP-} ztp?d9-1dm@7FH_1&VUPHCEbyn8kp;#CR@*#P@c@1D~-vj`Tf@STng(_cFDn7WB6ts z*Gcs)>mgrFO1mSg(-ifY?1uZcTvA(B^FuWs#(K>MS~z2Ay;WpB>oL zVQ*-km+BRAOSTt8`mq@Kq{MAE>r2W97K-^1WfkmQ>JVrE zofyIr#}$RD>!Hi42I;x$8t1vM+SGBJQCNwN>vfFhvlAq*!V~8}w)=OXncC zU)$gz!Xpt{oY&QMPQnIM&UP6Q?e_k?HuA};7AXjNU8`QUiSx!Jvhub2+xa&hD5N7h;SXxv zy_a~Bj6xC>CAFcNnbq^c56jF`h00tV8Z}xD%hu2A?XmDIiO)Tr$!*4x^*D-rWu|Z? zv~8#Z#hGbjwvxS148REvekb`;;%1vnC*~13%4RPv1imO}syyATFH39lZ;tq`na{lusqW*+ ztZ!#_l|`2r+^bx{Dv=;WHTcr@#gNL1Qk37^TD)9ZV6{5oRG>^__y2 zshD1G`m}*KLa5fzm~9)i2|<$G-W~@l6c2%J0~YHpLv6v1+`iJhZ&FiZG9fnL!Zf=3YyN8$y z7pBV2jYOb)u+3kzSq!!P_?~;4M_-$q=W9Uxml7T|-N6~dS{VB}n){y4-{sjZKWxE` z-c=rNYo3^~Km_=~=?X6jIpW6+zW^PGuNJT(eTD%i)<4b$$Jb~c*7y{XUTxjTsTI;q z;UHu7^vvMqXKLoAJ<`7Z65CwyuW@X-t$RLlZ8Z*&_Q7j&fn92I;|6r+aNdstr!N)zOK37X&2k%lECxPRYv}hibqz;AxJW3Od-oHKw9CT&teSeH1pHQ~GHB7d(RQRV*l z_!MnRK3V^A99-k?3hdPqOedpR1{1fXx#lEJi#=9MU{MGFx&D#-Lqh!z z|%Jmp{3Q&xtBAYEl&!PQI{u^`{33yMjJyBZ%?X& z4xViFAjiOO&OE8YYO?b@w>0>p=Vlo-+}s%1II_Ou{9O5<;e@jMS`J75nOUGYZ~iSx z47-L{u;p-v@<NJ*|_G)+pxPMm1{M6_#SN7M4i45Q`7DyBxu?Ur^4C8% zfCn8nPcO28%xmO<3t2tQZG+x!O)t|hXzM}|Yx`salwE@oIoO~~7*X$8agA+@xF1g~ zPWnmwe#0n}WKtz_BJ=iMW`Y)L(o(w9fMbXb!0*w-)gf^b5GW9_TSk|T?z(J{(l5!= zxnz}CRlIqqokAknSX;>9>ny`YrrJP+0AsT@Z`Rc>FA(nyP{3y|$1fxwV$9Gi%0g}j zSR80gw|H*9@hwUEIw6*d+8d+*tEQ^_t6m%&1(4RbDQb%N?O1z$FFNq}ZlFff2vat) zSd;nK;*!fPc8;3^SK(g#l82OTTjxMKJ)5D*!8c(3wsV2}FE%UD)nHK_9)7>X$2Do( zC;XoS(xrvW&ZS!?-#{d<{KA|+M6%QqA8~PH9S>K^iy)5vJ7d4Y^R{ygw`G4!c{zs3kiNuC08U5lQ>67xD?jzUA0e+acS3VPd zxsOdJdqWJ$>ZVNdX&ZkI%#N7!9pmjIo+qZ5^yWBrK{hV?`x8=x%$`NX4YqML%};%< zF$SKCn4MBu@z&gCxY*$5aRe@2y4R(n=UtwgC+*~F&B7(*PwOo4qVF|DeG`kBz$$ep=zCI zhQP(i{1D}Yv>owUq!4R*l1_Z{(&5v?8LK3Ia37;xIpH;oJjm283D;(@+R|S<>AGas zsP%E0vvs|}`qe8wjfSKWXc%DYj`(%@81z>)!}E>N1Am ztrh!H*5TlIIVY<5p95~(<&7?v0*1;)SAX~`V&)o}cySQWPaHz%lBQ`kpJlr2X)&3l z3RMP3RX_xkA^$GQ?O_95Ycs0~%L#iX>>hr|&sv*U?g1PYDgi0}S$ReEO2Rw^^1mT|)F4 z;BJ)YJ0?o&j27@Fot%ivi(=+B#w8A(3@pzJ;o&CtdWW1?Uw3{U?Uv{CeZ0a5>9oE1 z$U;ZB$+`*{WAdQ3&Wbvg(t5%wLh0|7N@==E4Ky)+-s{zBigVMA9`Y&hQ&xPGIc3j0 zEEr&MGsSKYaYlGt2VN1GK9^_%9%cQ6`c+skYeuE8PU(-2g0uauGWq5ns|2_p5T9K! zdOM&ylrtxIKNczdjgD4Q`v0&?zmzs;-C}N!L#_-CNnR+* z0h%wi(jXT@SR;PDQUfd%Phuhs*J+)=C7vyUkwum+9vAxg7m1;z@l@xMtQ$ z5w17ygvSTkMrlqdyj{O*su!fttfbB8D{A}Hk11Ne4#b$`fjlA`xDhB_Ux?BKYFh;z zW5cFWDM2#VgeuWRHZW;B%iJ%tpxga?}XUx@7|I z8384>Cwb(ed{&8}W7_PbfvTm?aG26JRAF#G$9y`QP9#{SvleC~;5!mYQ{L6p8%JI63c|CrWY%b|)tZJwb zekmhW^?h)V)i9M zKD|opm!kd6mvXO%9w9dlfDV78>2qi`(P94F@p*;M&Y2f{(^sT!u-d?DZ{$k z3F3ivf}zDbkhg~jF>pqiXPzWuFw3x$rFFGN@7dhZuaZ+;@LNohGA=JXpS}J1crDh6 zIu@72{b4GqiR{Z;cfSXdB%+eEJr~ENT-8#yP25`ND|2oIa!X5fl-6 zV+-(9#1=T*cv{1gc!Rr{Z9-t?n*bA-AhFmRIGxJ1Djye%PKvgqG);`y7phrq9RWkH zP_^A^E3h9&X`XrgL*v|;nu6m?=$_+eQp|NOH{@6qQ6Hk?xX=q8@69n%iwJtmceI)>eDMw2b1!+wU>4V?AHxl z(9ilr$9vxZysc^F8HTUJ=f%x#aM3re6auN2!+IBOcl4dk&<=ye8_az8tZy+?O}U-VcX#T* z@cjP%wOrPf%RzIpCix7OH?HTE&qo)o4E1h(FGf?B^K)9-xKGp|A^iiC$2${)JeS+N z90IC!9sx7NA5KZJC^Gz6h>=MUD6X(9za|2Ez?a?A{2lV9^XxQMo!4F*aw+n1VR}Dq zHA3msG3B%Aq3C~iEGKG&}@ss(w3VC)f ztaZl$pyumS;i}Fd_Ax5+iWxGq01^oJ8j?CYa~;LmGj7!LG-6i-hgP#JG!!GYsXN|x z`zVm^x}xf8KMTVZBW>RyFXUzsBg#*Iadse>@fptUjqv9R9HF`jmP@lig~Miwh+E-J z)sPFXc=ydV`N6@mVg)|u=Lsx31suo?R)&OCTpMbh`6^M@^7af7j=EvD`4zA|nmd^tWwWw>&QX)e z`F;EcgZnuDcKq*rp(&w&&_|i(ff>@-+7-iIcJ+DtZ0g>_kGWe$s)D(dI7~*HlHKSx z>q@mrD>BKW%qj-Ag~ey-9{shDr&}+2X4iUHWefcBmVGTPbKsji%-;dn6}z%}H1v6> zRg~>iCbasZlkiEBg4z(FjnRX+V>#y_T?YY$i(#6447l#n&=Eb`ec2}QB%IVwrfQqJ zuhVU+YJk_zxcmpGIpSyz@eToGJ_=dt#-;(@`};vF3(#YamdElRQc39fY13)q&U~9P zRY3c73ew87YVz*G!@Jov?N|POYPi>Lu7?RoQ?rbK@$q>)!@|x>IUi`Lk_EefCwabJ zctwn43a#G_$`d3yav$-;qojYX@bCWWAf3ldJsO<|v1zPVo zHo^@`Og4{CrOj}*g!O5add>wDUTPljH#uippB+T}E@$=x%zb^6FXH<~r6x%+=5fGe z>yfm%U|rNzO&J-YXq^AIx%TaTf3_Ld`FnkCZ$U+@0d}YJz51mxmL_MtLt&|LW5vb4 zRl`0pKI^&CJPm!q>0_%JGdVgj!|+FnStGp0vL{xmKYg1fD?4Q9)3WF%HFW3Ol<8k5 zu}cMNj%ubKlzYcPyVhBqB;370R+H(Yz%go&p<0cIviGmN+u*s%FuNa*|6+Ke5ky62 z1{pjC?NvnRV(Y8DvN3g{5!cr%cMZ$@B=^|(J72XRZg`VpVB}dafj>(Lk`qx{=(A9Z zSK@kn{5Ls+e@8NTvo75w4Q$e%%VLDd4>PDIi;@qYKM80dmZ5MTEu~qIuITtj+`^xX z_ERZ=bb>?jH)?kQm(ME;IEe$-dtg!gH5@^Y%52TY`qWA5|I|eKpEW2mqX&>kQxVFh zXSurtCiLA-YP>}A2*kmA$9X&~+3-^HE|isM#Ipm(7)SK?faN1>brt;DIyBMZZWUh^ z*}LYef*GT|@YQS?L0jSe(MeA3K{fRNbg^ijqO(u$JFxXT`_*@u8bP6T;>>?fgZ?+E zr&6KP#Z`Hn9WwQGi@`qS9X@%;Dd)0E`?@J^K&;r6;W^#oHw>pHC}v@Wtk_*Ylr@U3 zYC=r(M54vAKt@QxRvYdfGz#f4eG(8GvWC|!A|q0{M%TMXleB#2Mpkk?rrsdq3#QhY z=Un!sZb2bq8e0eP(P-L~KVbs9W8b;M*&Bu6GA7<1&7~7Y*lg~=iT(J`wls*l-Y?vo*~r7c#q^$8|hy-WVpGEww>bTrKe z>9;oY)#@_8M@NfwWZo7e=?oCMi9A48tylSuT4KW0{dlMOVlW?8_@c<*Y#K8@MVJBb z&QV2FrK0bLlr!vK%O!m6rvLCep=TDD`M^R3lsJ|J2-?w9#V6eV1#cITITXGrx7WXQ zZI_uXXhA=G*5~xsQ0ZUclX}FLUjAo+;aX?GZV5s}hqCTmqb>fzuFWTwyfh~afcj?v zS@sCuu^X9``?GV)O~tYW*1-pKL`0{5FH-)Gn&Ky`rnZ5Le+HC%c6AaRu)DD z$(K*xJ_G4K7E{jBhjTVc!DW7PAQ(OIebK$%IFUn`=N zyaBfs>$%`_TgJwFZg=d&J^%0rhr4fl0Ly~klLn@g;K7*a&!xxe=*uM+gub@u z98LyI99L+*c3%>z-)k5|r_g+dDa-ctiI2c_evuKy*OHmA@%0BrNToL<)oc*u1L|?@ zgZr?%c3$+kzoWzpMZ#r5rc=)60%E_$o#&>wRo(L4IKGn8Gkko987gkP$pYxX>Kd(gufg-EgJsrTRs*vk4d=vCVSfj({| zQ1rX3-W?#@AK5#8RW5<42am{_<}E|6Xsb@!|xr}T}^zg7$WN5vQ`uZsn~i9o#*eW`#uhj(2@{OLq=hQzA1muTy-FPCNUDYs+oFEch%oT!5GG{LT$T*BBB4T(ICNXNe0UP3V&X5>6x zCl5YH>*{XZ8cSTUakw)swcdHK4n#m z)r{|&zIEYra#Jh`2|Jq8?6bae!8SA^tRhC~K0$D_x7J7YtJ}lIl%xjgC zcHXXi)X}9Dm*Md6pBJ4%mj#sVs`vPrgZzD(}8MV1s)QeQNtx5&R^v$as- zw&^R$s_1^~?g57#W^eoLo<3^y>v^aeZ$Q`tsnfqQIptUbus+{n!8H5GNB5*^3VwUlCZEi<=*PV% zHvm!IVJ9yiOOaC5C1vD6GhP*-hPSM=OhiAjowHT3YI}M4cb(# z1bn`nf$Xtxzi668d;VszSw%M2WVBdC$^)Ku=(^RA)aE6_@s$CtQ}+oUz*(E~x?Z<=VXYUG84We{v+XCp++-UC zxrm&54-p^DXJ*7Dp6K=s7l!nO=X308RS2DtHaZTAtWD5^LKDeH&Atg<4%Q%Ne7cwD z3U}GZk(c9BO0r9nKI?;&-Li2y5$g*zOL4-c7(?;sYHN5(X-si2Kck&1r(u!x?Ld$s z=}xRwqV(!)gbm5{VGl80KOOChv0S%)0K4~q{UwWMIeeGA@R*Vz#92h5P1rB?>bzK_ z_sFH++jfHpV`rTFZZFrJxyk)~q>9CemWqomJydyX0H$78`i$7VT_T6}ad0<#EIf-#&wOi)od+ zN$R)-11KHYR9n3CfyI0M{ahKc*?jLcU+rb~QKyVjPhSM%dT>36IGxXV*zXbWM{$C; z;I7fR&l17}f+G{ES*9A&xJotqZLA1qzYu4qw@Y>%iU;n%RXAcH2kLX7;TTWJaFYV9TItE?k zp8}g5Gt$v>`{UA^b}Sqh`(ZMHIT%MPJgjFCn@2YKsWz-p>BkK%+$UV;msUwV-W-Vh zZdajQ`4{P390LRInpTqqtkWODg+!Zp;4CL$JC`6|Cxv{Mbi6*qP zp&|?Q(wG)O=i0SYZ5{~IwKnb0%>V}f>VW%Y{fzdF)3Kkmu9wTK+~U=;0%WQG6rwjo zcIJniIT(S34Y`vZ4q*y#6l&Hc&9nRFS-^=ey<@b8m>tS)?k&Wn;z6`Gm@=6!hCKDS zkPJYx@Wu0;=A*t-P!B5PV!W+CT{50+r_6(uw^{>pJzrXg7aDnz8-e=evk)PLii!Pr zEqaQZUIDFc2rr%)C;_Fwh%bv?>$@!-Gfo%t`JaohyLR;}dNrEZQ#JnQ6)NiM(oqpAHEn#88tiuQ8@WzyRnYsq~Q8~u*C}m%C+pk zPY}mzh3m)q(8^cQlO8_XJFYVP3ka!xfZIVGm>x%KG4&=xUwClmv?oJq)=VT-$n$y1 zj97?^h`g;Y+#tutgCq8soHP2|G^0j7jpw5-TNhsXQ|E-4xlQon`aT@^B9$2~uUc>_ z&7pA0c?^?2L_V=XpP?yjQCyrN-U%Qmg#mxZJ08l@49l{8bbi{cKt`vZ;v6Hk-`XtF z)*o#6bLWjh)*Z34=pfOseEy15B301}&QyE~K$@dr?$b!+XP;hAf_-l)R`1gsJ+4g# zf;c`g?aL2)#?ni#9QWm5eQpTUEQqFEM$q*^)79y;m&vC>fA(WwcB1hx@=kN4?C|HSnp_3{d#Zpra#Cn^Ue&fm}Dy8c}i;ZjD&jzP9sf^P4=T zkF?#XLZNM3t0L#UaclcV`_FNVoF^lAKF*1@-t+PFu|4`mSkz@OOmNxsMmF#p~J(i(c03b3nMxa7RwyDk%ah!o^tq- zrRno@v(rbT?>kOOSX{7n&er+vpgsCmiV~rTr6#Heh3KAWE)88yvOo*6BX7pU%^vAD zE#o>S$uf!=R zUklmJs5pZ%$nY9fhF%;HZ}~d8HRHvSYlTv>`kcnTJl%9~ebS`20KvUX0zR#)NiWXZ z`}LWvaclUgDNvB^_u+%gy;QfF@@w!4&#Eqil9J~KB>WlANJ#kt$w$wO1`*{Ir`C;s zCz1b^5PU-Qt^JVCNF0ZhOl8B0@wM)=6inSL3xC_%=Pl4Wh+$q`z~sz24NL+&)m=O{ zeEq=dXkbDAfmq-NWud??cN3O;rB$&!+;F+Th8Mw|c%ned4%=LBDcaFyrUJtoe zn3J<3;1=@h!_IjXHg$@6o#yvyD4>F-W(l)<%(~43`y&J|`+rqOI8)CMHv3^3kLp<;e9YmD0s&+NQ#sz@^mOc&oLvyK1=yVNp|`i&1AowUdx^~^Xe zk`uOveL`*!%Mg>C{rE{QL_>cg#>!UPV)VB-Gft@f=D5#kcR0t(BUAdGxOOGmtb zQN{IfnRf*wuWyJ2IpqdH=QFZ$a#-&^qSNxq4l1|9Se_ zy$5pvq8CqS_;!2OR3fR~E`GXDRC8NSI#qhs-!-S`-OhDa5?;B7mDj60KR{!19DDC0 z>g(AUNq2-?s1p6ed#Y2Rfa5w&Q&|#;twBx_^#Q@KJdXmKk4GvlLK;UuEbdCHOM*oE zij18i^=cAprMAufWaO@~S5!8p@p_zv0@{HYW$2FEk?nUaK~$Q`h-EcVo*eo$rT6@G z5+*f_%6u$<+-E^AnAq<$PiMxilhNtUWKtb0s`@bo|1!Bh@3lW0bv&-1j7y5H1t`c7 zL#&ar!lVO~uL(xK?c5Q*HY*Am4w{r{ifMb5aYu#x-UE%-(a{Fe{l_G7_8(L(RQG=@ z6cBjYQx<^qhp65LMIz(d76^%2bam(j2M!W+hag*-?l^z%s{gA(qE6udgfAos4Y=9K zn85ET0pC0xEGJFG2{T~DLJb+YVxkt=A=fa_G2_J3^k(W~;H~Q98tq-CquhZu z@7;M_IrIHA*k8V@ndoL9t#|ED<+e_fKdV;Cv3q%C2oVL*Gt$8nk(r~$`!9$2ACrLm zNg01riz&M1u#!M^RO#psVKUUVL0Isoc_$p4nd6ym9Uxdn%h9Ccj1i1~w9%(ZGjCL6 z!L9t*)dK$?uiYeB0(bJx#!Jim*~hq6x`p9CDAJZl>3ueD3hX(4aC z6ffkE{Oox7Fl_B=ELD^DiR=rN%8*@Hsyd$+BL1H}{yl$7+Gy@mX;~T7Hm%@o`hG7S zF0|2sPKwlOYCWpUZ%_DObWRq*gbgHe3A+vCzXH$)rC;lCPmlqTX|%1u9YOCkX`hU) z76p=`f-9GNpPkqAZ!r@pp{VHJ0?4MM46HcH+Q_^^2`N50cgxSTIuJ|<(?iDDVt+kNOVi=11&vzmE;HoA_t zi1-TCqD~V)gLP8#nDk-T@)s^fd=mJH_=>wA2TBBNG)P5HWw}1H{?$4#U9U-}rv$pP zM8;@av%FmvIlhSW`;}A~mf4kAz>Dpco^!AMP6G_Z=2ekMv43MP@FJ-5LCu$1*cz`m z+>zOA1NG*zJ6UD7N9-O8~)@>FYm#zQ!8D94&D9dbn}SbZzykpJo!VlN_f^ z1`chsz((7#TAGRM{Peb}Wh`UKZN;eK&h{Gdw?cx1^tZ{#l?YukJJo0&wYOK(J4?+w z`XP|laEmKjV>L6hAc0Zb-FxEoam^FX-BFhBO;+K1OW=vYgw~jn^0S?<(CVZ?!0Y+f zcQsrqnX!yz39lq_U%o4_ey{d8$(CYegSnt<+$zhXZoX|W-;GWf6E;ITfU0OGIB%S8 zWPS~uu4wg8%%(fU1{GXl?UOZV0$!SidC{!8+}!{u`9P(ixLim!gx|6y?0-MMgvfmt zRr!0+c~zNtE+iOAA3I$vNXfep=kY~zt_FeUZJ zb<#WB1^)Dd2j8_n2o4{-j@%7&x%~>|V2?4sjk zHRYkN3*r9qLip5a25;t&54>1&mNhQfdFBDY0z!Cqd(HIOyJd+)^VfV8GO~j6Rrw9@ zMXW(w$4e*S<3dg7rE^MY9+foNSa4mgdy=On>mGysvhQB*0Uqd!+L9HW9_@LBW4|cd_O)w&u#6ozm(rNy?q#M5i{ZcqnPgnNoL}mf`lxf#D$f&mC0tB~t-v z;-FaKfKpU@&*M{Zvph?ZH=W?|8thQuJB<)6oCCmaUy$$~{rGiNzNm-d9R`^73p<(I zqaB`1!;dM9n-N0R>zdC+a51PVDJK=z=dLZ)P%irgD8VPErU-?)?+T> zK{P7WH@|yC3wAN6w?m}og70>J)7)q)z^_96q^}#$<(JhZSIhH9<;s>56k8~ZcAi(w zgz=qPqRA$!wUXK8#s*}4(gdt-WO!{0O>D^`4??H0;RTmWTOEwM@ra76&&Us8?yFH5 zIwBBooRH@ZSMe$JnY~)D`f`v5VGB9*O@N!4p$E;w^?BVz0^NQ=SL73{c)1Zh8npkz z-gibdxpmztf+C7^5l}#oChgFrgMfhaB1l&t6sb~$Pz04C(wm6%-lf-oSm?cnj`SL8 z0))WbIp6ud_r3Q;@9#Ut{l~}vl019wx#pU4t+l1o>|u>6i1C+)3C8fbx2l>S?$5>T z5%^J-25Z)AzP)ewhnj>7I0gz|&2RY>K3DA`r$v;VtOn3z*HCDV@acUZyUf&>Z7@1n z{1zZmjW-GAx%@)P;k%P!v#ki25K8H-+DYrF3j?C|>_`1`i7CNL?hno%3h>WCz@99( z=bksrZ<82}cHh<`BQ%iml^uw2Mf1|-eW#!3&b}<&bK!ILq$B(4or6b*t_>Kdtp-Bl zq4*i^>-mG|)4`J1?4VJ-U-K>~vd))(GCTwf=(R>7R`rCROinV|(US*peAdDwj5&O( ztX0182Kc^zF|z&@Rfx#GG~lbxV%#fQ{@s;(+d7dw<>l&gnH_pEEIKY=?8` zb1liM+Ieu+5MGvWdcmw7uJtE=UW=0$MRzZUv{_WRVnb#AC5rgHJwf&Ahz-}6GM*(a zo=I*)La1)*rS0PRgCxj~sp@5N-`m{8w`;|TZaUF=7O_wePP6K!J;Uqy!$EqMNUjjZ zpxFZnrVL5RB7ER4cl||IafF4%m0HyI@Hc4z5?75`ycm}>OmAs71M2=91};z%?Pf`f z(rTXh)n+VGa?`8%t6g;?dT6s3qhK`w>pJ|)HFh#SR%!GG>JM+6>WOcTPtGewu%%7L zakE#rE5Vn9gQRBjQi6Y-ZQne~Y*&Gl*u-#9NFKl(PhQoC-q*wQA)qgmq5 zFP3sbYfPPnq(jZYeUh1f^P09Xt1nc4`nG^fv8n4*N9#EYb+nok$LUV%Zv{yAOiQnl z#a(|MK~w+Am7N&(NmvHm-bZ4qdW(0wCm(JCD)@4dUzPojaaVx2FPP_3_=;o_2jAN1 zyRv65gA+(&IInkXJNf;^$}Lk$9^P=$=3)N*wq(DehM2?*+kRikFD^HEeDYs&IDd#2 zRnq_RkuC8p1y?&3Z{cRyFb`umE;*V=#lJCQR=+Q~b>1BMfB4kbD(3%kkpI$qFImg1 zi(hSeLt6d8Sm^0~F;mB?B_sAnf4z#$Pu=a8#eJWasC$tj(L3*-u;P~`Wg+@)L=P7F_Jq8l%X@;m=jCwF4jrxY*M6s@gOTi0CmlUj{onN*y= z&nSkqQW^A=q>qfB7<7?UDO)9T%e{iCQWu*Ax zp4JsIdxvTDfK2lG0HMvGzUvF_rxn`F-aZEkUib68NxFUtSf>5^-TBE`P1r9*k8bo?F6J(uR{`V)Z)pj7WgMDf<%MZ;rj69l%ucBqvXD?s|aP{{SFrW?h`Adq?z{^f0JRCCnhge zPb)Bdq@8vn_m3A?+g`#E<|2xR62}M*DW)iAS@c$Vt?AT+{3)3oQuZ?}k6G9i#*?<@ zOXaVFcUVG`v-Rx%=uZpi(;EatZPo@xYY{Iz=~(4!WqT}KY1I6!sM>}L5AP^#+}nMF zIh1B3p6kv;hYxg%)Kh1Qn_;v5vB#-m^b(tiz}Zsky)qe-Gri2tuqer2BxiLDERn_H zOlJd{ztpqb$X^Yx)abykppZ)?}@J@B0e~* z;i>8R=;P))+-TH8mMkVsH#i%q@Zqaqi3getNp2BsuQ3>gNElJ9LOkthW%9zN>lbIE z9QzfYjU2>1WPeScIM?s#QEmdxr@R>VQ?)XwIC`r+JV6RNr(LB5Ps{zWt4=?pFDYpzFRD-5?|fCb_G3*jg4aLw3&kH&qDiTqKUpM+xRvU@=lQ=CF|&mCErq;QE8^VUkw zZhdrK@4<}58&oWz#m)Y)os=>38ze2g>-tdKuk?pdSOLxbBIA0U>7!XbsDsU6?hSDUJ1LhB57!zAQP9bl}b{tw%mkP^WXp7m|V zj$>KnuDcBh5}}DoKTZZ2k6ZXiSNjC)&LHkaoF4M0(wQ1wBTuF!0!3UUJw%Nij!c8Y zJQ#esseTXN0^0NjBT>h-*?h-8gzvNA?|xD`?0Ozr_x4lbCac^4DFrHj{Am07{kVat_U8Wj^623j^MZ1@=6f4DJH*pv#lkRX`oU| z)Ow2dz(+K1Joh~mB6O-^%GVg*FnGpQ=J`$*R1U6I)r65x9>>Vi)vBZ;nzo3TOuwZx z+&Na*@3xeC|3dLc*H}A^S3^vgkMb^3@>>_}eexu>g*&AlP47SINqR02K9Dm1E)u*^ zm2za%8LiM+MVh!9>m9c$pJ_lBneCT_d~Y-HE0R|9X91_4RS&p8hW_(!qq=Q0&Zp)d zzx>oh-c0(ZZfs_)vp7l;=W0KO`ek>%tTU_T8W`=u9gvYpq%`pz&pI+0Mfq_wL zPRL2Tvgh-U&O~<1hw}y8dhbp_SAr>LBI1A#0><`@Rwnf+2^Lbe3z<~I3s?|eW<)Rc zuEj?AB4aH^)Gh`4>?Q1ptuAy_l~gVpjU42P8goxkGN1XbCHm3(1B2)mM}M^mfq1Xv zyk@Xmr?M3!uISqB$i{lnW=+Lo#69)Tf8fdawNkI*)VR2#4TxiuI;lGB{Z3lxy2;CP zdetnL)l0UFGM&+anlIv%peJ~i%w2S0;@T4EW2p6bO1G8qQN12ZMI0bP@$w(IoVSOXv*Kgatp(pe;b+$~XoJ&XgpJ{O5YosGLRqP_23r9iCR->mZp#!IFUlOXQ@__2~q z_b?y&M3#X>uf{x&(ElM(=gTyu9=llikdY-yCgy&WapXrhN|K6LeXJgE6Xr}DuZ+sOX}{H)XDE6g}XRVHzO5FjPCK8y%!Jnc`!24IWhQF zp)^;vwdt9ST;0NYxN_R@D@zTVAXgJ$oI%GxYRXyW287rImm3(3^kmtVgcEl%VO zLi(d1rZw_m=>yC8f3wgIIbcW5LeuD!$?E{^u&Xn-C7@#q&u1N1vk4FmQ8#? zC*WH{a452jlSG&&f)tAMfASvWBvgGkwHnNqYw>=2;{U{pbakw|YhRBAuUgVF&dp{8 zmFzp$eOjALK8gMW3zP5;PiWrD6%TjWWGlsU{t=+~vvT9~AtR?vqy&ECk)hMZ{&Psiw{e9LBFIx`-=eWXjLOk5tf5TyCmx&a;tzy7?Jn1Wk zy3^6LN!8z%zwv%hnRs93y-v-$-|`%(Zn7^4kE_&~?j~NnKX%Zi`A(quVWLmt5wy+q z181U8tiQk4YOM?<+%+ee*KFzb(RR6FRRTqUj*=bO{%5bQyKYrO{&Gs0DxEh6M&63= zQF6w;B$J4=d=yRwJL?HdX)mK-&(e#2wA)!YW8S85C74SRwH27MERxx+X>7Um!zcNE zR(ukJn@Q5@%)~Q=-pzv?#Dj|=&^vc*a2QcR{0@-yHHa;olttk_{8>tiPvWZA>0uG( zI>xFhX~E>wAu{V4)A8Y*(~Pl=ly2o@wG$h}y|QKce(?_*AJWyPk@lh~2Q-OHzXB$l zMahDQSvS5@{4OwJDWB3BX)=knqPEXA`R!oetrTrdhgu;%E5yZt25U3;Q%wdK6qHUl zFLw%QO(k$-*XBuL7;Hw0qeUuh+8f@5KrjKJyHgcZyPHIVGD#E*%SvcL&a75slKE!c z!R~Oiq=HfTsCo+Rgwjh54J+YV^`H0af?URoGu@1W8xPXkOv^bY=U75|c7q%Du%Kot zPhwE{kRgld)YZzW&UR9Hz6|ZB>2{!}`Bz5*CfavLA$X%t*Yw)*<5Q1Og$ilL;4trL zoo>;?2kq$ctM-D0WK+7VuYM@wKM~wDU55OEPGb?|cu~B58*tN5Q^XxD0Y%d;<$1Alx z_tr*juGF*if%LHxQ01!L1Lvt@!U33#JQQFk8&-q{*7Yh&E`p5QQ#+Qu83KcG(iYYWybd#R--ljbbM+c78% zgHn76AE$7;#t*x%#>Yy9@lkje13 z^E;Hry|qYW(s-vDm`OQ2m^Hg^Vr-mjbfbr<6h!!^5Z=&%%v~cDQ7xa(&yhs$1Cm$e zs(UseTPJd5<6Rv2Z9A>=HqJfp5EI*BoeyYn=6QIc9uv3mPlN$darp|V<7${f z%0*J^DQVM!IHiq2cRO_o4jMS-LZnHKlCAL}`f4oPBlTXR{I*Bco_|hMd`_oM;2+v4 zw6ngJ#ja!M+uAuMpDJ9siBKE>y69z|<5!)Rr7Z$8S_lgy@bf#k^V7Yb=ztJ@YU3pC zpZe)!bJzYil9E(6@zbhrxYEHr*75U$M!@pr&YWV63!%Ogc%PMMr{JmHLZO{uf{VMnI%I)w_Jacht2Br0sP zEssy)O?)EXU87vHZkbPXXp9V{5n_(*uhYs_j&xlgIqDrLHnM3go+mnGXJgyx#8opb z{dlMK0~KFpVIjw1TXN3YcXodFEyDysJN=GQ56IzpATxFhz@h3C5k$i9`l}At7q=-- zy$W-W+S66KC9-fei8JG5uhXKwO-mCWHD(_kCKm^16EA@yd8)IyQL1{6jf7HOyW@=y zko;eBYr_SLUoR2Gyqs@&SBFOUp0N{B^G8g>pi0rqDhq1`CCHSsdAhSNsN?-r#!za3 zDBm;m%xSqc%j$7oSwiyao{2B!NkvM$v8N*UAT9ONgUt!un;cJPkizzc9*?ir}G(G^Wj@jZo0 z^b7?CKmu<&1yxuNKB{v^aBYrPMhBCzcy{le*KDEQjZ2UZe?`RwcH$R3+-&7Uw$aHG z_1f{qwJ0q}>((7iS-3c#s|*>V50%xRcfuipMmg>CRjGO+%-}C#9Z!Uz=|f^und7&KD@ih_)5&7 zMci_WVRfRwX1i*Cy&P6CUTnQGy;Sp2$RYW|ZDGwv;k2B_xpN16P^9hAy2;sn>dQ$U zO9{IzG!AXg1MgUz$uW@Bo*u6+g2x$qia~dBR!=f4r}#FW9QFFfwS>|@RmOUiz0EzB z1k(8&0&d)S@tpx-{3|DHzWEAWOir@r{hi2$?Qhq1x4#p0W-3P8rn)Z1>UOlVq}WEqKlDwc8{W)91Oi1f)z<2u2wASpC%I3TO6!+fbld7}npj?5)pQpr z4?3^MEYY^j}S=xlFGu$cjOHnC6Ch< zXU0u$LY$?ODurnQ>3)@J$-5Z$acLk4+u>v_RT(8c-~S$7ZVUhR4QE2FBP&;-f@U=GOuq-D-i$8lK z;ciC{V5%E3GxZ*OOF(5tsl7={avN_qwp`2b!5o*Fx04#E`o4m4TA$%cOI$mr7D%d+ zgdRU%(1hZW+y%dG&h3^7vMk;39;!E~E@opt-*TPRyvj{tbMC#w-9FQM_J*9|=J+p% z227r^VCPrySIZC!YfhHTAO%_bCbXXQNM_o}1Mj%oU)&{Y7khFb%Mw$zQW@nhZ-`sD z`#w^AsS(Mai|E==5V~x1T4*$J)9F{~m9|0dMzeU&K|N^*MB`{^LuM$?%!ZH8s?6H? z-PI2_Ex;hxX?HE(tFF2hIPYebxZ}i7;``5wex={P=Kt`GVohH}R-XWhmV&Ap#5~V< zL2}QH(pFj2Qopzt|Al;m>f*_lt#^D9-X|9tRQGVrWnYXHN^G%F`ktpIarC3U>oBjg zX7xkbY+AYJextipE}zfIE03+(ecZj{Y!Z@7wN^ zFP)n4C>5&hr(`E;0G`>2zW8}whqXEe_nWVEzR$en4**J1Sp;4u@M<@@WS7vj0juCv z;3;U@ev9~cvUjdk&rsp1Q2o`WkyZHXUUvkxV{Jg3T1> zmA@U6QERlviNdKpsCzCLRCm^|o0XPuCuX$|=C{Q8l%bWjR4w;oRT28?W}{MX9|rDx zbDa3TOZj_le%!~`*#UcCS4nI^aSc$(lr$daPdUiPhfDytUJUm=G0Xa(jiP_im+H4t zcy}sZ-g0=w=|x?<#&SeB{ZrTC(#o82_+NAXj4`MRbhJjIY*5752rd$VLEA*c0Q@A+gc ziM)}++In9c^M*=BAGySJ_wxBhhiw|bXXOz>FP^H=)~)k;%*9^a4NmBGKEhl5PC)3k z-{;ntv|D~hre2V9L(^F+ySu`UJb_-J*A-rWl};@xI-G8SkaKZao~$X>0O85JSpLI( z@ZpQyF_>;PhshJ6iAo#GOSh6Xe|2B~#BUw-*=^j~EuhmM@7h8zOY)cR*8S=4j6T_| z4dulOHpH^)j=xq!F$~CDq9-(Q$sPc~R&&co#BIZB-GgGOJCUV8x8$a`q&WXGYH`mB zz~)-mqjt3{uYra&kxTb^Ho!yubjNM%c{-YTHLY`Mb&fN`lKb%7eQF1KWb?aqe@c-^ zrQXNAO!p=6#TMa1nMsRH$7Zxn}EFX^*)~BVjF7l@*Rb&CJ}8 zwp_YSCt;ZEb8LOI(@M7(A#)?Lr0G;&Rs2Ak=EHSbv8RB$SjOwrucU|ACV|j4)8kJi zX#4b?iHv0*Zv02lUqOruZH(dAAl$h%lYu7REboF&l~*66*ZATIzLl zzkW#n<;yfZhT=XB46|mnYEfUZgzMz`Q~sOOm>Di~IBY~uQ2zS#cP^&Uv?;eLJHodv zwKZuhkQ+Dbn|2!16PrV#)o$IZw4s>r_Co$O*Gn-v!(t>-8QDU(ekCMJJjD)4TDOX1 zG2e+=bVB5Y*uuP#8|>~=XHkUJr#=TTi}w1DNwCcFu>4(xN%2)s%Elb`%PB6^AF z0Z3WPF3(4#Y za^-=23l2FGdV=7A3C=0o=+!zEojfqB5_3W=?oJJ*ESA}vSzgLorfnSAV$TefJXxTz zi0jp@3PnjKb1*&<=W-Ae;_n=7PQ4QA} zgU(-B?3+Fk)Ez4v(O7?{uQ97=VuaAPER=0xFU6v(^lo2YG|_HZ`b70&F#UcWyf{XRsq z*HN$bMQ8)x+%@5iRPhaV82U8c;-&^meau9iE6qZH0c~aZE94B+vfk_S&4C1#P@3WR zY(I?Oe&ZIbeAyl*XL+mAwqKj;v?&@gG}YVDfTy(JRc`*dXFNg3x75&Kd`M5|psVYy z3Py{QC3`bVgn!Jlhl2;zM^@5#dI=4O1^F+!t&UDL8Nw`*7Hav_deEJvK9UfNfbNDP zrG@^S){ZfE$>=2uooFukYSYCRwR0n_3+{o06?_3MUgx3{*#EA8$lDpsT*;8W;K#}8 z*fj_3>^}3+beTz1mapd8TnLguR>=8)&giX6bshIN&rT_V@D&hG-fLzll3YyE(6}sn zlp#hg$8jD1J?pPFg6>lKpCpmew_Uzn4-ciH00YWj6Wk;w&U(M!7b5kLNC0tUG$+xk zh+o z7z=JDs{fVe*4?peh@%R{vx8T$4_fvLvr?RwS>w}3WPNq0lqdE}6?|YWvC%?#3|!N(pyIj#n#& zX0{Vm-8XJOc=n_~M_{v@OwVWQR%aY%`6mGz{p9PNBwN$43FHRc>`A^h2zLW`jquvQ|s^AV+2L>HBKmt`Fc(NC*MrgthP(PW#8+zc~Iq%-RYqZP_+mE^uxHeL>elfk3&R5J((q%=x zNw>sUoLw_BDD;k~pkX{*(ZYA|@aKZL92OETJ$7Y8m1;bOr^R#k~(RjUhDB*KKm+m5tG<>=GmkOvH@w?6a#jN$l z`b?8=c5^UL6P_ZbVJgk^kZ)ZddA=vV`gPTy#xadkzoIRGkjBEq`ykeG2pgM^57sR^ zrrV#EQJZ~xd$r1KQ-7k?IS0>=0T$lTOC^JNiGZQ7**)(K2Ou?;f=B_6Vp7@|%F`OD zb}*^OASX6g`ZKb31l+cer(|Zc`@wxAToWjEJ@{C`Zkr9EIQQ-oMC`8)w)U1&o1u}L$k{hUo>e_^ zlt$)4)2}kDuL@B>xx-8RpZ)p~ym~K&Boi`1E_U@ja=PCe zPnjGaUhR<5{YjuR+4t0AeXKMC(Ueiu@d=1FA0^|4Z}m!`3#L^P;&kZs+!R|m*^?di=wMz`R z*Zs_$Qkp{YtNJdc39=L%ET~MizT3BSndp zf@}tgXxcmulg7#TbS2bZl;`0r{NZaU^{T^!SBih{4LY*ir={svxES~><2dw80f6kn zoXGd_ALnUid0AHh0L82J8PM>Hxk|?Tc0$l$da`%4P;W0WRHN1j()*O)GQ89*5Hz+P z|`wwWJt+q#L-TbtH%tELE@H6pmG%~;IxLG;sx%uV!cd<*4F4Evx=~vrtc7A2Mq;N4NCWah(hCz8- zSJFq2(a|}~w}$toqbl-&)CC7>y|Pk1o6YiSP70C$a?v`k);Tn7asKj++g5y*JtzG< z<5hMxgV`#3;c>1syyijRJBYv2j!DWG$W$bgylfI_W|h#eHB~>cJ@gnHpb zF^{r?4ftTP*RG;Nc50|Uzw6piDLCBv07%}n+5y=#J2m8e^5CwG_woMK(e-=tw=y1u zmI39pv$$dRu|tmctBMo-)qyM(rTiqD4_Y~@@U}=sSQCJ(x2=7R5>!e6qr~bJpHhggN3~1mvu}H&E#B#*H>N9D<+?czG+pZ#Nx!0D5_<&9RfU&S$@Bt&jM< zhtyhj4MJaTjPZy%&b~%mB6nUwtbQ=VjIS3i?bx7~JkBX8@iSqGsE}kLZ``p8aVP(r zGxa_=XpwcviFup!MFLXxhk#$I2})+0|4(k;w!t-Q052cSJSv)rIX!Pt|Ml7_JJ_nH z>>JnLpW`|I&j{j^WjuUb%yKBz@8`IID0NtZ|Kn8m5k&nT){rG-YMM@QU%L%Fpt$0k zH&=+pL0m8NI@;B#ul~HU~RO-#3A0$ zDfnkgGP-0P+zc806F6Kjx&un`sfh-U@;vTP5_oT#OdvKmOKZ_JJ!|%#vr+xmL;2TF z=`!?~CK0*T&mZxyk6bF|8f#F08AM4*K|w)i5O{9wZ)8BGdT^nCK3tNvm`=nccLpd? z$rNmwKU%`>&=iM=VR3WHbG=BX&c(WZqpY*gygf?Lc}dwJ{cDFfYLcv&{Yid|N}^!* zIfmiOI#AnE0@>Xwr?PnxlZNWq>(8_WnZ7Fai6aA$-q7rz_ z0>pQIkX1R(Jv6AWiX@~F>}ot-V;2P>DfGX&5^=}VQ)G1$9K@hiJ-HVX<(6veK=rrm zRZigjNxrRDW*%&U+MF1*Z^F3s;?{xCU<-88xn9c@?SRBoaqUX7C+hkZk$uq@nJw-Px-hl=)4kJVsCIJ(h)+CN7yAFBCtBD z;DvNN1rBMUlpoIOk}zYOw>+Kqg7jUy^nETsqjE<%jT^>xmwOQj4?FG+ zklL&PzxOckiWm9E7eE60+1iS}1x0NgNX5j3vKv$t8o5uoW<&2sv#3=W*w_Bt52HSt zh9V9M89C>xoE9JVzSVS8TEud$uOC}RG~NH9T%J=v%X1*mrrYw(ox=MB)m|sTp2C|cI-Z6a7c%WucJpp9C~Frj)d z9!am6#B0OQ35YSKkr%2>jz2IhH(nqQIXyY@`3#I$Z=j3|dLO&^a!(mn*(PvPy3dCS zjROmGtFx7jU7?v)yd-OVDCPZ9cGkLfg>4d!IEV(@woI_-xR7h_k<^;~r;k8+z_!o+ zDFN=2T=nLP+f$XJ#x(rP=d}b8Ghr8gA<&!}yYQ-%>Jbb6*SHi~Q(uSiKJ!oi8jPIK zpqE9jvR-iMm!pK&yqx!Ep8NX#7`l{TX}dk!j6_a27;H_}dglp3R%LJESyj9>RId=5 zGz%ABg3EM(Ps4+Mio5BeJrahawIVI}44BxlO;J0b19Mk;$5 z9iF2$`RqX1s}74}u+7DZGtrT>&9!3WCmJbOHj5z3%vy`_tFW68oH0}E)%?%%49>93 z>#Vu-d3W=h*zXfYsh%q1m(-TNk#LQ>;V&;GKXS-S;s3_sB3TM_igqCjF|L^~9}$<8 z*i5C|>YV6cz~c8l5$y9XD9P8lw463iL}&f7*iF zi}v=w9{IVrL<(@psEMT# z7wAq<=o-#JcdXQs0k0OB%ye4pNLC@AR7ZxD+3>rmSN!-C_g3q&h6M!BmBzq`xYyS@ z1V#<#J3I5Z@tk6^$jJ}LK*{^$wJ-Bo zVS}==^6>EZP$$62hhCnSQ@2fnja7z1v`+lp5cin`A6X4F^^caV${+t~9x2o_D>A4? zLS|zw0uH6Eq^P*V1dn+>*x=#pD8+>9*`DN?8TgZI%L{COWib7!C<*tM3l0vxNl9r*pkuvS_iyZxsA(Al0Pm-p zewiN_@!srDYN?4sswbU7xG8f!n{D~jI9cZ1Vt(G5MtNb zZ-uh0Mpv!YY0-9fp?w6z2%<6tDWzm<;Tn)!j)9t=A^<4QKawy$di6|RX#aEEt3gsb zK8vnxj+8P;XTZdoEL>zPpzU??F;{B9FF@PYrz~jYAMLn57V_Ex(Y%% z$k#!B!QGwhMsS-=JuBT4mdNYPpWV_&E7$Sp80g_%GpXyv^*yMInwV7SHz)H%fsI4) zND^ug)4f5Cqf_r@SMp*YGg$oWWY4E~HnK&xD&{drsl;otm{wT93HuKQ)z9<~+tedv zW)|SD?OXe+QK~DUq|JHnSba~uyaK`h;bUKHenVzJ@xwbu&S{C(D47FG>O&swRqwZ4 z?{D_di2alQ`*e2iYs{TTE#%#_O#hda$(6+N0CWP>ApwrCPH_xo-fu)NoCnx4=H ziTm?@bvmzT=zpG>YzUZGZFR(y@W+~4^~msmULqjm<>lqgtq#=`|Y2tk;C@PE&kq78uuJm z`tI7m%d(j6-OEfI1|>fW&1rx~c)nf%?j6x6(H)T?1VFpq_vCD*X02g_qjJf&g`Ixb z!wz)Vjp{0l+~5$MGIPa5VdrciVejLLDd%4CxjN0P$8b>B)nE@Y#p#mcuoJ7v4-l}K zbuu0i78t|ojGWq;+>RFGC&KQCHYE59RZqDkUMb@b58GUy##EfEpZYKLEJuKW(E*+2O2?J1)=tTQ{UQur@jG6^V_2j zx1IwY%7>@S8`p%{bU-e~n|SI(jssC^5Ws|aj%w2G>kl{*N^u-J>y6&%ad36aR)Q3$ zO$gkatmQj7+9>aBu)%ZXjr%u3$p<-IsRdMGIuVANh9XORF`bQPr%L{&`O9>xoxAx1ny+(-Kcox}!QSVZ?xBo4o{#HqkM|;cYm*6lWffO!%Milr_c!Cy2Byis7+)7)d|p7}5x@UUzglx^k!?8;v{76cg9#5Geq|A~FloD=p z;%UZsm-}Emp@1cCOu5fs!JtsTvLilHYa|kRyxN!cM%U&8{WG$P(OZ#JvY_>N{@&3Qg~eKV3~{iv`0=g6co8(O^ZhPexUH%Uc1S$jR|c8BDONRUqZ%{`6(&4 zSw>e&+gQMPoiTnZ6o9h9nmGBeN{Lg6 zp52R^cC+32U|2UWQM=d>ULNdEBkH!XE$$Ck8@4!LFv_umzN64~rf~{ItPgf~&G9Fj z;+@6C3d#uNQUCNKPylw|2@8o!F(|iCsqtP2MoJAhgY=PT=CqXO8{xULR)ajjA=Wq} z^qB084wr@}C?HP%E?UL?M*rulaeqlfxaKV#t&aD9?p% zD`2ehguE-b!;uJ3Nc_pS;_XDlT^TWjjMS+2$ETp~cB6y6WPg2DsTWv0eHJ~RSD}Ph z(Eux^P1L;1z<^4MM%*NSNrFS5m3$*tK0ev&^`2pX#p8%mGxG5CgVa{JIX{&(BNr4v z>NLFCnH>oaBe8Eg_tL7NYnd}E^lLetxPM2^bUFHYV{xFEl!J;pgWhCu@wRl2FiCcq0vYb?A#(Un7iYr*U z757;yPa`9M?hW@QB7&{K#L{pP!y zHrhq{0%$<2+vi33bQ5|Dlihypkl>w!mdt<~ zXT@7{jk_!ZbzB**MSXDy<- zgB%D15Qr-f5lGyQrxlcuyir)ws@4g!i#rXX-~;B-^Jw65xYWRDjLR94{6tiHTvGn0 z><=e$XJN8eS7AQmO*(RhWcVV!KHAfN9KRRw)qw*4c=0TRr|Ht4)W6qXJvgQ4R~k+| zUI}9v&^amn->=QaUn2(p&rR%)wCwXJNL+f>Qv&1vmOLNCV}dmL5@K3f>TLGGEw=Gg;I;Ra4d`5J@6X9@4|ksk{p?niXG&bzH0Mjj)R=etI}RcMJr-V;DFrdLR|D-54vKt7{{}v$e0^ z6l6DPY(P0LCJek=`~TW!!JPcZ>RO%*PxR@@Y{@VBw{t8DmvejQXp+QuWmsEeCh%W&q*$AIu3)p%eEUdK`Oy zkxG=((9sX5r)@EQnOT$Mj211{pFc7 zyJ5{2HZnyNmNoV616dNSZbBq+n2JHqoFSKi-?0i;C3t47Cmf1}=ESAqLI%h~>x7zA zD-SWed}ig3#FM-8wJmC+LD$YXc7C~(L7~S~yx8D!!7rDD6)UfmR^N)v0{(q<7;g5=YZ*0H~yv0OoS*^7VR8L2M;)}?;d3D zAkJf&c=)hf(CO`K99Du6**Gze-NRk`W^ufC#@+`{41m{fxdJRr@z-FtQS$FR3*nMD zS|B6pVU@~o137vXIJ}1gF5`PSAYDa*(!xXMeBBE#fCf0{0~r4NGM(49AJ%#V*Oz|P z057X3b+BEs2B<>&)N{9;1y+P3MPMO^bOxLSn#3DU-k|CDm`dt?2@Ltkk`V@aG?3jw zGl#I*b;J292j_+rr+}|O-5L}&YwRM$A}0M~JaSx3DdsZPFX{Bk>g47L|A*uGCVv~e zn@I)u#2(CHWe(Vm8}v1AKnJrICo524IPx950|Sot^`|+_js{as7nH_8Pr?w24O^ay zO~I1y@LLbuGkLU?7D&sB_p-t_@-e_AUbp#+tPoag(sue`T2W69gj!JbQ0E~SF|E?f zNwFE2xshGiB56Zxf9|0w!X7G&b;2!hs3OX7@9PwfZ~r^P((wTsFrA zyiA}M1negtOc{$xXWqu@z z36Xl8c2ki&M)G8iD4C+d8|~)n))sNM3J|wMUDQd=d=HJ6L zlL8C9P{gI3^JX(dFyf9evdW)yDPwnCkc8jZ*uL*Okd*Z>t0milrmc!+y>}peR>BW9 z3o?{bked^McPoA*`aihusoL3QJwuE4oLu>63gNTtibp`c?fs72P~&nB!1I*^34$AJ zW4k?~h*zSUcQctL_l*H5%}Dot2P^~e86~T)uP-**8iIVaK^1x`b~yXS zrxAE^MAUzq45<-+OQNl_N^sc@P$_0E;G@&45qRE;8R77tqr$TTM$&imex5_j0!aQZ z#0>Gj5i|M>$RJ=BOVSB#jTPpJYcb8yqV8L5`Q<&~wBlivy|9+DS9OS@jJ;2;pb({|8r88>%sBd z!%+Uh{DGKV@H1fr1dj6C4)zfLFXH|@oa*%d1IHValxnnSp+Y+qiXz!tsO(G0mL}Or zi^?vVHoFqZa%8V8WzVifLe?Z?DHTEp$8s#+$9-C+cXMWbpX+yB-|PF&OifL3Ua$MU zAJ4~j{~*YI{n3d$;I|zuE-RbqSBCLuxITHZyAe*Km^09dw$++!y8OoqlyV%z34W^R zu3}OOXPe%cPY%dUwmW7V35P67<_zNEfO@#-%^%$7Kzp?~4TnZYMg7&wyuLBrDh197 z&>zp-bhWvLq@MY3OW%8eiNOk(E@m}Dv1kW$;yvxXCGqrQZn3INEaU>XLQcGrSaig$ zuaLzG=Ge|pm)N+E!`6}tlY=%GNToXM8}UWkwVGgf$mzwhJp{6nUqC>hW+lOkvM=1!|*h<7#>D*N79D<3&hELa1ziz$PrPW%VN)W^#hma!C=)AFn3P!1c-@_d)gQfYy?*F#XwW zR>*62>>yEEvjJ%&`))jNhBST_w)*<6r2Nl@yr$Gx#6{MdEH&!(VK|r%Xq}g-9Hlk( zeWe#Urh~FHGAi+Za5&dq+m(q~=;bY<*n^KUQM$EtpH_xx)vEk+6GL^h335uSl}6m* zomoRf%?fkR_)p$gj1{5~A)3@mGx!uB^&DKx&E0#3oY*X>kTk6UOw-Fl#T&sa?~CIpt@|~D|G^J(ZKoNcEh#ipm&6luKgZM~o7e9W? zCfz-pe!S^Zkbvw3lFLJYWT{>QoCf21?4VZD-3pX=|pq3Cqq;pAIDv=L=-FS=Th%#5@^Yk8_zaAHIg(0hEQl`Pg1RG%9 zdSyk$GQqCyr&Dz!z9I0|&P!%JL7q|4Jy#4bm9S#YQ>YIn6B`@cVe^GEi z*dt+&$KpK4#&04Zmt`k#%Uo`$Hy1Ptvx(D<#TNNM$9)gM#W|#_swS;%#msALSmfCs z{T3_RTt#{!Rayg^m5t%Ci5O#|6}I)p%n1je99eKu$M`d7x6udkcNj61aBp_c_kZEM z`S21tpjP4$p}ujs$oF{9Z{Fc$q2hJy9dQsLPL%o(UK>xjgg~B#HY_Qr&QB?vs|`bi z&>z@YpAzfxvTC)D#8JZLhk`OBLLuKtaHkGbEjUfi2{_CyJ~IUeU)QDJzybk`8!VT}+B*hDLT20%7~xGUOBmhF zA|tZoN`0W?*4pw-J_{o!Vs>r(FmhDPByUy4i>_TScD<<1t1;$Yn6ZU$ROM=+vkX=60Rh19<)mI9Q=V*R7+FWuS%RXJ=8#Yll6bzIr7yP z=25u#p9|q9rif?5be!T(D~i|rx>|nvP19UcaMp)fJ^IhP=l|!Aat&Ee#5ipCr8e&v zft1sS1$EQQ@aAzQYH`zsd)ZtdRxV8xue&<79a+?@PyY*AZX_x%0gIjv&q2Amx_bHD z*~dZH@r-l%^+x6KF~m-L&&$kn`Gfv#C5N7O+wzSvN@>=Y^=099ti)S$Bk}l1-`j(r z1h8C#7V+!6w3#q8LJaXc1(Rt85-5JJ->SD22ekATC6;#Yc3nU80Ib%Dp>Jj^GJ$8q zj+KB@_3ak#{gF^=Z`AG3+MM@JHv%k zh#l%wpHIb0@S(2V>%N)Sr?d-$j&P|+^#7%gU51KjZF?|g=kIv3pNpY!Kr?Je=mn4PSFmlT5d*&aN2LP=FNOp@f&&dWzy#t-`E&cl*JP zKX+Z4GpnWMIi@}9=>0doSgtTy`{6}!9b}$1t3gGWS2n>ekz{CSDA^cm-IC|LVsr>? z3$`*FA;Uu6{j=-M!xS=y2gB3+KrnCQs0Mda))`^1XwQhRQWz7Yu*K>heWl>m;l@6f zdh_Per1sg2){E<*nP1mOu>cdR?HsT<23o)Qcz$?$nVYIx(x4`yr208$Kv^SQQ56Bz z_E-WpBZW?b&|9q8h`InvD93}IVX#zO?zIRK2;n$zFpY z``e1VCL%3E;eq&zR{0!qjl`A60f4Yzrd_Z*RYvFHReRfdEm3-`V>O$-*=OnTz6(A{ z4_0|l_p28W4J>Fz@v6pC4DnJ5*7}F|mf(7F{)wr}IQ-rjDFi@A0t-sAk$9oUa-q+R zsu`3lAaU|;08OclDRPCBWydoMNjpVLaJ!#8SO1(SkW)d)ejh6++@IIqTgdFI$zGrq zzE4|*Q)Q2~)CN{wBAVs>6&jFS8Y-S4cr~zoX#?9nhd-KZYLq5788BS0)0sBSU9$HC z-BWYL+!bQIfw7XpGcPX52I(NBLkbVfV72-(oi;`M;^2x58yeexu@!}JL@C~;=>Cl* z1|2ciKhh_<*ewyOPo+8N4lr4~$!N*(c_$+jW0n{=Rs~-7$b7-aaQqUGk(=i-kN)5z z4)d&C`*fIP!{MAvK8ILjFxo>>0hVn5hm&L`Q(;syDISZ z?6BvbMqcS!YXjVOgQ-mu|D3s6U&CmPK9a78YYr2?Vkd20w1w~6qxg=vJk4A3oGx)P z_B?D}z50qYGyS7e6Wk0!sU}ahfwo>NQ7^0~(vxz;Abe!RcA2zuj(9xq%c~>a>EdJ(gANuZ!L-2KVp zqXW7-ce?e8X@<-ECJs}B*K)CHEV97Pl)@KSXSOpcVBvYxd;1(Kb(ok{O;+#8i!JwA zF7~c)Qx6M_4>9558m)H$AO6MoJMRiR{m9>zn(o!&v2X5*ow3emK5qQ-CP(U}#LG=R z;tBWuug)FIl_&aIWi^adu;HdWrF|h<^FJn+dKGfI+gdQ?I^9>2)!Dm#-Kv1do25Yo z9u1?KQ@vwvro_`k-+$kSgjm@(9opQ+|Mg@1^_1Q&$b5+NbI!Q7E#E)z?oTIpYaLO5 zhAs{M^Q-ykD+~$5@l#$(xfr;U0et@P$2sSM+Ay%*%SQiSr zw$g>Flc1eq3@5r;%^6i?P`!0+S}M+T;G0G_g#Nj1sdqD-J8p zNQBp@BW*sHyH=^N=X7F3)rTGQEapEQY%JXv{D;=D@(>z=ysmf~Q!#fnpx0m(HydT+ zAsYaAUHsYcI0Kt2K(x0Hu^uIFC!$aboC6p-vqM&5?lT!LFIzC$5^(f;7XS{WE3B?? z*&dpjoJhdQoesI$=ClstYje3IUV~gQDk-r8B|Tve)`tqhub#xuX;7axZQEAMKK&Cs zDS!jp^trQ&&F2`gcXBxS>qk~VN6PW}+nVFG1?sN@*bc?s8xO`OdR;O^TO4cXR+)pU zU^z+9qq+M|Y*;eJTH-A{Lih_bZ`GqT>NvK!lGk3+3zsdkVEJQt-<&was4rho!BL$I zlHqcTM(+;fe^SO;XE4}qWo+<@x_`GjsIB$gs3ovbBgPXfP$`lizQ>QV7K28A@;7EM zw@ZUX{0(w3UG>6QcM3=Z$P(LV^Ezx$2#vJ0YkS=;@CqZ=C_%wMQR~B{*Vp?<6S2u< zJ@ZY?hEy{{@JoYR*q46uUOR*`srg7!Z<_SIFAc1Kso#Qb*>)Q5e|DBc{;n=qt0>FW zq!r-fwre922#Rq$nNd9IzHc>wH%JzMCE#V%mk*^qAlEk=apQ574JLl_ar?&>KxgcK zI*jXeWPV%9-ycKFk<~9gfXYopjNx)G3}7bpL*G+d{Jt3^=a0ZrhM6n`q^XZ zr|gyMfXe4)&FtM4wP}rHQh)7bcOhT6y^f-x;na1~J4S`}<BoClp740(B>Rr=(&WB7IS3{MIVTg~WI9Grb$PH}LmsEpihSiFUa)s3*_ z7fveiwn#H;;GbCg!1% z=BhkNzYmXQ3l1vua7TS;(@fnO;wDj|N;of*^?ciJfPpdKOhhg?PcuZ+dt{8LNTu&3 zY27K#S_2w=vGB!`0K{e8#TyTn{jNgtn!V!wTaGOHHxtM#-}&rkr1=(-jr>%M%>MoE zCLP@kX{BIGKGM3MJbAKR4(h((L%<yce0t$ZqeYz@%$AD<4_h|O-pir10q)6Jw`gi@ zroG`j;(JAJFh|FSBQ>LqZOaP!W@lK{Md}=ec;WqW$oyjM8OAYW7uTF^%D1g2asY7{ znz|+QfUQnI)5hQuxz^m;aprFC1L0He_hy(PG{N2W)sZ9piTI(irzUBVr{!sL_`;*Y zmEpDO#$y|52fF!Y?nzyv3*ppBh2r`#r)-g9 z=)u05&eJg%c|Dpw4*jwL$Y{>QUgu8n+ehGmn2JncXt5BsrN&%`3>J-&0Dg-?`Qb&& ztJEzp$(=WON4n#vm^E~u>E?KVmZzOM~umJLjyg69WjjMkPEI)S9)J$Hm+^{9(zRuY^imE?3n#^M-v5 zbZhkS#rz?4x_w_IwE`C%o^6AWTsN-W?>};27hkDdX(nIm^#{BiDOl(l^VS>k@EPhF zZS0IZqEr+S-IChw%d}nkAQgI1@AZ??t0afP3)}W7xNc-+wD76(ArUQLZLv*#YOrIw zO7^1bi!Y05^k}_3y^T$OdL2o6`jmf7dNKfZEq@MO+rh5x{0#ja%5 zZ}lnnXXJhQwztBZ24;{WUpR$67X5%=KX1LrOG8BBWtr?yY;x zAVLhX@sI057=8EeH<1P0HEf(tU%)eYUsr#JVU+*BU|4(+n`p@iA$Tu6x_7w-LqyQU zT8oE4_F%;BS+Lq3zZ6?7P#P%6?d(&0ZvX!M$rzM%F+%l3cnBoJKK&AK4JoK|`IUkb7Ew>FM>TlGUgE84T7akxmD8t=? zE~6e!AYNlEIhb7uUxD3QsqV5sGUqOiJ@#@GOj=`vcWIVC*hbk_9JK6*Q|9h^#hXWn zF$(4n`;XU{4&OR$yk~~_62h&RhVD4?<$N6pP!m?S2T6fRFZ< z%>+K8O?dw9E_yMf`FeM-OrqYycm(fW-P01>s2VPl)ycz~E zI7z@5Pn_ShTtq)~zriQx72kZx1Mx+ws(UI3m33h&IPf&$^*F8VmDH;7jeTkSq)7sjwp5b(ye2MgJ4Y;+!D*9rKsr1lFjAN zy`^G0pfd$U60eB2$i-XmpO0ypYshMRhwbC9%Gk+)Oa%vHdR5d3ENA%RHcsY3_9jgcpMWDI1DYY`IC8>PFf6{Pa&jlc^m4wL8V`={p$*ok*}9C=U`}$ zxhIbRP~SIG2@gJ=_5AnM0AgRdd5os>?Twh`TY>;uwNcl|3&p&_vbmyfT7yJ^--fy) zu^8%ckV(8gmDqp7XsgSlV^>pl#_$*pJ!1GuDXY}Jf5ep-)57MmPj^mT6E;>QWbJ1J zZT28)D=D#`yPPyh`vsvFNz38|1HxbSu6Tdr|6rpopSKsQj`-HygiE}uI`d zLiQVJmLdAqdGBOEs0(2taE6kbQc0Eav|0Ab^}gaK@@j3`k9te*|w4|2ZCqZ%w?6^{crZ)*rufi*eY zEuEp?CqkD;BrEn=H+}V=a{r2j*pZ9`7794txt&?ff6E|Xkk~U6-b(l`?4CWS;T2~0 zk;4M5bS{IQ)OTuXF0gfYl{@wz0si|w70Dt07PSCBDTF}#B|S*MKS)uQs*0mEw+X;9 z9y+Uu{b>FLs#x^^-HQCOc~6OQHPuqf!abyu@0{D)6&cUj zBfRxk@jSLn-nMo3`qNT_siS1+5wlT@vzt%A18fZE4Ycm4KP56y$yWH6INM0|z;Jc) z30BjmPoLH!j{LYc3&{hGOV^o>`0XieAwECMoihxWR7#)R2`vg|uounz1;)+d&0MJc zu{^X3QOZiSbj$ia`QeS4ajmpzW>>cvJ^u%?38wZuKP2S61xuD#H327|leDZt2D57j z%uwKe_(o7bmE*Z9hVW*vN@pM-Yf%|4JF;WD z9VWO0P@89;uMLFAS^7u`x#UyrCWaE}{d@XF3`lK<5ujEQ~ zEPSl_G0VajT^KturTvXHn!CbM!*_A@)$eTq5oagE<^!7O{l#eO{Bi2F=FI#Eq(UBx3) z`*`4Jhai3Kl_@C&a2!3=nC~*Bedccq%NOl4K~3B1mdZAQ9IOZJb3uW`Bu}DEXP=VN z+&Yu95mKOvoDbIG)apSDRiV!1SR}VY20W~PwXC#VvSM`$QFPPMAC54=p<{I+jP54f z?FSl*cWg@#L4v*-)7dM{zDKXVRNmeN+;kMl{J(3Cq{%CJ=zcg@o-+5v{N`EZcS9^Z zTZ3S1)**HiH18DhJG8p8IO=(=a1@$-keQ8_H(ClC^rANem^5Pf82+%Z+}L0QP(8b@ z>;1E4B`X|(+|HL<^=&l6yU~mB>Yr6gwT29pLf(b&tr$u3))2uvLi-3ttXKFrQad{KBU` zwO(6*AA8jejss=S;h?rerYs$HL-8}8{Lw~E5BT?X#pdW%QkXRDD_U!is3J`OEQJup z3FsNh;)z?M#SnZCLOycOYw@Rt&(${mg8&L+b+qZMehMProLEW{^~ICwgif$7AngZq zR;ccWl63Oq$yZ;ED|5D0R+~%O58g*?)|S@V_5S&F;t+j}0rzuZ%xrr?~rTZ$-NUfb$)t zknL4)Ls~-cr1vUK{HRsp+wm{o>=U^b|C{s4I+RIe<&E2Nq+l8)%#G788pT;LJ^@EH zK2{7=NL!b<0hhUx_WNoa%zXZc-&3ojCZVlaerP zkB%bvZUNvjG=NRd?xU~U){@=Tr#FDKqxvMD@qfs!jb@w>0gb(-ulYKnrINBf-923{ z-L_Pg@lCvGazMZp3~_#vn;OWmTj zR2`OO{bFj(FZ^%5T9Gb${7G6cp9h8MyQWZS$+(jf}yxDq{YU z7kjqrMDNsOk_iW22bs1TpaHB7rVQwnHt-qpCcm$sv;<~*C*ZU;2XHRYbHWl5Ob*9O*ma8=y-lhXnAkBH*K}hc)t3qe7^Q-8UgN{{WDA zck|f3c2a6VSDTVcyIn!S=|Ivjp*vXuP|&0;%@@Fd4?;*}C7q>qMh;?{-afyV730Ro3 zNHVY-aMrw3QNahAfNB}j8U&(pgi96%!a2t$-nXIWW}+TDbgV-RH1e?di#A!+A)cOO zkYem*=E(SMo(aC`d!5Ls)bjzZ8Z#=*dDc9O3cKoAPy2A~c=Z)XE;_sPiwe2^rEIt=R;DBi;JZ z$D34C8{{b~yf$;8kVJg5l+ICsd)MlhdMpu42XqMrWQhjpFJfG_)PPgDUY;0Sv^EC2 zGdir0NjNrrPhIbGOEL#8U+sI6dj)@Ex=p9LN0~E;NAcZ1)o7J5DzzPWWMBJ0l{~jL zMj#SnkNHpss`+}NRNKYSOW^% zrYJ^_(J^-HwChc$=kgl6#1GT99!*uT>3Eq`{&UOG3n|iabacnRwj8A@k9_T9YZaYW zsczYjBLAB|sWzG+IhiBiZ{!~mVwo=z7vW3_3PHQfoY>ama&Izc$>^+vw3ne$j9bt` z44C%OG^!`ERr{=Wn@wr5FPvYhR`x-$b?w%RsV@86GuO?tah|xJGxtA%h%U3+Yp9+I zjHcf2|4qgpXvMvnJHYHe4Y||ZMudNW5=Ovv_Z@-oY8%hB!(Uc>@UJPAs$(hd-6OGaG*)sYnLcg`?Ck7Nmv}l)CLS! z-B7eTxoT*g6BjCwO0TIkIqO%y6dCdKlWlUkfb5w1H>5o4*7FV$`N-&ECYf}c^Zq@~ zLWfa*JWoc(^&0*T>>)dMc*1Q+S~cQfKRFn+cRu2imYL3QdK0zl9(v#xZ8}s*gf7$* zsqx&w;Xv~6_s}YIApTGli83f9-}UHT{YB3;7Sv87_NGS}i;lp8cZq1b0uSFW$i@jn zxZAg52tcS>v9s*khUbVNE`fa>^xLj)gc zDrkS(N>kVe{^T}lAe97w7v01D+akM{FXCUeWV(?}g6FD5Mjgiv#IAjv8t6lvR5Jtr z?Bd@O*&S6Z1lA(|e=2}XnqCT7+lw0YnRcc_h<#0>9d(Bt5{46YFo$ZQmJ=9*G#yyS zN?w6_2f$!p@}Xny2qWG43MXhuwE+#G`E+J!7Voq#KqvMxdmNbgici-liPBr6z_ujA zkNuiZ46=)B?|3c~E%zDwgcP+&wdoYX7pb1X?hVEVVmAfz6tuC8|CK~yD8I|V{BvUe zo}U~t+6&Jh6}x&9BMM0CXb)UKspwvB=w+M^IX(Rlr@#+}Yd#YI$?%-u zpJ54sxjqJt{TF-ZM)CN#@yiw|uJH^wr7;6yBBKgKOR2)9-JRd8$WOQ~|p@aY!rlT~Acxy;Jh_n-$^g>MHeRDU(uws~=dR~?oh z^=TXUx8SSn8~0g}f$V5+GW^viYAg~T76pcBh*Sz!NVL_9%Nl_mq=cd1Hgo9uk4_#^ z&WJL$`+z+YQSGLTF1E)(4ktj@@G%kk{<5f2=tRjhA{RwRMcoY04;D7@-iAs@tVnuA z;*OpNk&4T2ARsup1!gjO_YNy3k$%Y9YvDFUY=~4HX&m9Zx1*;~_$&H|89tpT*i)f_ z-PYjlaTvC!bWI@^2rw_uPblbf{*-e|{@&83e5TP4mTfbC-}db3Q@hPwdJ|oFR6Y_Y zBF5bI1Sj{wt8Zw$_uB6;+F`D6;kB(A&=n#s0Umiej{=95vCcu#l7riAq-ZWvy;GwL ztXbcg<}c?Tq83a&YYvssJ`id*<+5MK_vj_n1qGXT@yPh@lX?E-;u4O-dNcpjw0yEx zb-IzBr*g4>bok2Gy9)wE`tI^HT~d3n!c=$N?`~z0GShUZz{-68cQRMzGdvKc60U)eZeHMBo>r|?iy5-d~o>uLQ3Z;1*X0Hj^ zD@8G{3kcn}cW$ntDKn?RUmqJNDCVK64y$IQ=9>vp=4Gj0CqZ&ko_s;gpo84z`L7Cn zZp(4gYasJlmA$`$jd9c8_-~&@%VR}^TIJegUJH5IB|XEZBO^|hhe>wTi$8D@w(#f) zu1^bFi+I4nIMv%WP0AFho*+q#HcEAJ^kTsuG|N{sA~QZaMB>Ib%}Hdt%Dw$p=rxf1 zeG5JXos}mwkRwyvv#lA?$=~rzy+Ug&>-0TITGw;u*y=DK(EsLfTou9E7`g3Q_+Plo zHx#;vQG3#}6h?^i2Y3pa`Mx~LYu(qs@3^)rl<`BTA&Lic(iwIVrvcfbi2|Y7NTNh! z_`o@({r1tt$OfUTE1_*bnP(xM+vr2sx3>H8zJCm{o|~VE?E?h~YxG-QyOWA5NUg?* zXgFxrAP&s#zaty=G+E9Q&60@CVva&_Us z+dG+S#8nv$gYQ(pxQ@_ba>y7yZsm~lZ==5 z;R?8R?I;}256~myLkL|O4#aLSBI(2!D^~%np&NwwHlvwO1Ij+$#P+#jhYjy|%}7a% z+Gb;*T@i#?Xs|`~0M}A6;K6z9eAFW>5|z|3=hZCLWQ>u|Bo?lUapIZ6w*R7>B5e&@ zSXfn5{5t)v*mI?EBv^A-D~aoKY#!EjUm}@SiFiPILazsJdLP5X&d6oVlZO}hY2EO9 zD>AEPF0K?ZB?=I+DXL_2H^x$&&2_SRM%yVFi25`j-E77B$e&m35&Kp;9>azN-q(u6 zy~X+NM+l+KoE|7Q5xE?2T_eWZStp%XAVmO4DkjxrVqmp;h2fVw7J%Owl0h(%`1Zc$ znE4LJn#3Vw%U8TmR|;laI?I(kxCwzU5u^2d_oHD{$*CE?i^;*jcHhI-V(ilhvB7dq zKrge^XR(3Kn}=U4Y;gvRvC0rJSZe8PW}<+?L?$EyP5&-#Mq=b=X=cdF-NZMH$H89 z*}{d~3*&%++i6tffFyc`Q1SWbL?F8AX%DGWYQA#XJ9VxpMPsm-{KNj$>tu9XwFvXZ z)h#&P(6v`vMrXfrp+N0Kw~6$CQJ)m8Tez1~{Bpo^UARI8X)#7`{nJtbQF|NFo5|+O zS7VBJFd5%90yOVesBIRNXRuAVc9TW~n#-C(B~%c4(FyeaIq2=e961uoN(GFZuA>Cr-^(e*)WvPI#B(RgNf~})bx*@ zZBfn$TMlpHF;c%1f`%%el8EYFu(Zbut51|a;{NCN!IL<>`qh=I_q5&_(RZCw5d|yG zy?L87K{`xNnE`VNFBNYBjfqUyq?$e9zOJD41zJBf6JB}UL?$Sx8 z1e#Pgtz5Y>Ss|dj^v1?^4h7kEvMmkw@}b>y;w_uYeIy};Oj&)BHboRiD6Y><`Rv7C zGNvZyM^#myw|9@jEVEHDqdypOdG8cJJUTk5G|wRG;sKM6yOKgIVPXXi=a@D`%9j@0 zIb1IbkTfC9*2;TC7;D;~fxkGSD)|Iz`=4KH!f2jjfTa^TR)I+PaK9ZScc-9qEcGDg z28X?+wWRD8#ghxpsK_m8$d^|r?TlUfCiO|E+g4URBpFJ>>_73krDa{8;YwyfKA>D=js9YSf zXi5s#M)}0VE$N?Lr5~?X|7zb8t41BoO|3XwBL8|>xzgs7R^8<8u;7f#S(me-CzLMi zovDB4xq^AehONFWOYSP(V@osWYJH{}=`%lzS7*DG_N~^l-$B@+-;Ao+F~34)U9`CkUe~YBqQCR?<9czpVNxDkJ^7WBICz2B< z0wAPH3j%ez!;81rOeRf@B@v%x15!af0C-efAbN--MSy5U0Ad?qMgs0C7WQWMtR9F1 z!Ph`~eu#~zqMr`Bl20Bj#cxjd2D_eHP6E~xP@G_I4BIn^9>g&k4)1MemzG+3mlZva z=Wkl0`D01`^t9f5!PI&6elVQahhSio~KFcN3waFQH=x&QORzW zjnhi9GBQ3C$lZa0eN=A6h3F>#6)&N>S!>MeIG0ZgCAHlFFlmv!gvH4}E%HM(7{>Pc zoh3zPIFxYV$PL`8SVAfyNwHcN37ww=aT0Lr)+gD!*zFubixPmah_0Bldg_=+esd%W z)elDRUqp=DwF$a)6eZca+(PokZO2|M9t~kA^B!Y!eN*4I#cu!CbGq#J%?OsAbcY9J zx1VK0>T_XB_PDB3W~}UdnG26~+W@K#c7eEif!HdL{)fU2pTA=K!S#F*`P& z3Gn};hjcc4zM*xve+(|J254o*u$q1;xV`}qS2bKpVmOjVfRr5$do;l*uHny)QHPp5 z#g}6GCiCRsCF6Kngl`(@Z<~;G9=c~>S9JZemg-(@S?$o(DJO+2W{3GP^d?i$-0ts` zw@8KF;_rL402-B(wnz_K)Q9@it$JAM2`H)w^NQ@|HtJzV&0MN=xwZ4aGNRBz;VDD( zb~%@}1JfN|(}By<RxMpZ(#za8F4+jqJvmM6eXrX--`6MfwTe`M$fIVK1mqrS_bKb8K*)y>bu z;Fj|N^V6_r7(U^8B2!}|Je*X<)kBM1+X89-INB4EdQf~Mg3FLlMqhu_N8-zswd>b6 zx=hr$)FbY_q?TmwL?)!B#!nOZO-Xwz>9|AH*jV++29Lc#k_`qO+>H5aA9EWL!o6Rc(l^bmuovM9%CdPywUq@(!jwwQ81D|2amJO;vJAL zEi?;C4JRUGs*5)+x@m^Mdx!XmIB}~CYvz;1J)Jcuw0^J4(U;{f zEB6g2S+rig1se2U7~cz+Yg`-@gZx5jN^yD<-sT zeM)-Yh0|`o@HgbAzE;y0D6gTY%uUd5V+#qNNZf@4S&z#5hjtEe4sp5-EvdtbGxejb zZX{g#7mlgni-_6ketLX9iFZ$Ck(M%+^Q+_ug6U<`1gjFa_Wdf_u@B=I;=;6} zT5F^ud6(_0-_I&z#I9KKN!WZq9e zL%rEKf5i-pD82{DX`YruQWFPxGBRv1HDsXt3J|N00G%(Mp(Gdsw@+)m?1RLh z7xM>eC7`|AoalUpTLpSwWuLRw*vyMe8p(`cuZTeMZ^vDV0BZNlP}!J_ZzR_8LI zMT4=$3erhf=fM9$qnCZOPL4@<{&Zjm??%>5NmSYRbQ!Wz?AwW3*N1c?kp_4ZQ8N%9 zXGbJtH!FT*=%4zPTKNa^G4hpmajrO_woVCzLJxs8#7m2|$)>(9RwO;<;AVKgJ1F@A z37lC4y}11c953DADeb3PeUgm_70ors-L|BLkxH2wr8ujAgR{hMZYI!(w6yU}Td2!E zy?QCV!NLFlUFkOtqqz|1wvT%g+XxSR9r{n0%TDUehqoq|9z5QA7>cT!<2TzftU1kDyAkQ8%CTH_bP5~Y0H{UF1Thf zn*3le`IN?MA;%#&b_QlE%(Bb=cp3M&KE>p*!`nBe-oy|FRoyO5h(!G2XO z)Vpfrx@~O`-#dKgCHl!-NJTTO!MT$jz}&HVD_ zbVU#oZ^>D;syxw>$x%?6jy@}Tf(L?I#*0vU^}%5jOwnl3@0ab#ZHvz)8(SugXU&?W zHq2WL*bo-CgV_eWK}Q9|boaRQE`3uKo<&~61R@dG-J3s^2ZXWFu@rcv8^)~R^9NP$ zoO|(Ud7yy)7t6@j!z*s6MURD(sQEK35nngOe|g_9-PaFf_kVo|b@Pdxj$9K2Q&-9f zA5c>ENA}V_cQ^varIU7NP&|*Fl21h#HIQTutsS=WWH7chLRPFyd?~oEZrTk|>*nIS zn?kKIv!yzQCWocgso@xl_zV;5t=_Ae5xcL(jm01C(8f)X+_m}@oIzIyLEvQHNOtpg zS|iNR&qF14gNZy26;Jx{cJ;iQxXuCrp$o?FEaL8tJn;>v3(SDOJeWy9I*PY4(sDV! zU@WDC$ae~HH~4j5345n%LWM{rI~HO=;9%#W@INsU9&#snA=>m?J`41Y-~^ zIT1h{*T~FB-i&D72c;Pown5t?S3C-FiriH$Z7{3PB281=?zFm;9DcQip-0%=adVRWMh z&l+Fxb7NC~@$HR_hz}^P1``c~M?ATYX;Om@g6y`1=EGQ@=c5V>fenWM$BX&LbIva4 z-ZeNtnR@fAYB{;UGh;(|#58=wT9&Y>OqLPehi(3wWr;IGH^I@EavC)BBJG|taJ+{_N+rly+S&0JZfa+jrmps9_qJKV`UJ=LYW=5LC;46p;7BoL4KtG#* z`3DrCzZO1kr#q8=UuP=VQF+HepSIBMcr({0u1^6}(VpA|JGI_gMQQBPy6rlir)s3* z6gQ#6B7KR|$&)lVk5HkS1zmF+vKA@KZ;6@^R^CbP0<=IEprQTO zF2JerXNGeBq;~(_R(XV7DI4ZJ;gSvFt0B3YA4u!hA00C!1JFoYf5)%C^7H>9V+<@I zRCD`3E!V|G1aR~}YpVj_a1Gf&$_7ZYA3-qgcveG125F0dOUcy zPksI0Fb^Fp32d(#$EclxIbp^D4lb~?=Hwa-GRtCY74BZBZTI#OGif0{c7tLOhEwI% zM=yS98}HXNhEU;(HNMII2`4*o!dfOyXIJcONTavln7@iQ!;1w&NKT)))Wl#7TuOd% zEifcM>M6X+B%D81n-q@$?cg2twJ6XGAjJ^Diw@bLe*}Hg&q;y{<3%cICnG8%xsyoB zg=Ff1Tj21%d*pRo8;(eliKjc8^d2T3NYJT;N;|)HJ@qKaE^G+dai7REE>fwK!fkqg?pn7`4X&YR|v}5**Ur z4Jj@S4jgSfi3F31Fb-pOQtuKoCmNS~j7ktdfHazPQ%c;?gAsoYfA0doQSs`I#(Ly@ z&Sjltj^?s${f(l+p-8MDx&1}UntLyo`5iy9;g{7&|LLi}aBeQ|53<`w9+T8`_Sb5c zl+m(5+U!V!w)p9fo-9ZG`BQP_ExCP{bZ|8ed?;-fOf+i69V#SaG2BID7Vuu1ek$4_ z-I9%TY*O+PP1vMqo0Jn(JTQL2Nqc`?g??KtLVKhRCc|uWJG1H0_M6yG_^w3B_I-ujtX?9eE@Rj0u*bHl z-dCw0**n?`Yv(qrl6C6mKi1_>rWy1$W>lnh>#F+mlkJhrz{FMurh;p0P=LFJn(q7M z4X5{>(K#!?3yx(_qen7Iab=ISKO#(Lz*`OT=xu;ZG-+3-_!SqDj)JHv`70RNmdUsBdmjv5Kww5Oh?;G%5bY(Iy zad~Nh2c081#`0T_mqwiGN+1*+DzQes!X`o}7h;8*q~%YEk8|qmw8F!nLZl65l6_zV z_J@>g1P7can;Bhp5MYfrot1_A%T_QSNqyOfbB360ap8^ta`Kpx!lK#hrDv|$N7RM2Ai?*jyXnOo&-ER-L8Wb+Cv(A0MIU7kokn`Oxc%yMJpWJu_L8H z;?~B*AvrIaM-z}dR~Kbp7d|^{p7j;Fgb8awVhb)FqFDGu#s`pyQXTY}i`KZ6=en6) zCcfCd0)~m&C*)3@%<=df`kguyCY>=tilq~VMffzz8s5p?LbJ$do;WG3;72XeFw-qb zhjh3NUlHz-HazF6e)Z0Z^a~?br-O`I5B8+V+0@A@somtN4@!VHfhjD(TQ5^TRtZ}+ z=hP3gaKiI^C*MuHVKwi~U1P-I2gS%?^WI_7#zf3L1|>=gjdLOYw5&`KjNTMYh& z@U#;X#)pormp+dUyG)(yjdgNoAAzq(iWEHmE=MAXRN`~BNXq@#PRxHYd7!>fRbgP3Nmzg7{ev(qi#X{UL|yd6XLEL;$3 zZ`{?itEqZ2=JwjZ5?{Vw3*R+oaqsK{F}0T)lFsxQ##KF=sn5%J|aB5-R!`u`45&q)k|bP zyi>B~^A%XK2UTd76zQ1%yS3<7%yNvkPlMU5I!X5WTN_PAyyV|I*)dT9e0n_kbAJ6p z{{B5!f{TgQXukXL|NKp7$w1PSx3q%ZD|!SmI{NK)Seg-A5q==IyQ<~CeEBj?s_^0` zY+br=*azxAJhe9N4{lUJ(d8{j6_>l*7QV>0Y81(aJ5u$=+kOxv=_n2$*SqWIIf^}& z^1HD_K<_>V``rgeAAYRIs?9%V+2+-}I$fIKg&$%>gDxLy&fzC-a{}|f03XT!EAYwr ze;@b+<;uV0VR%u)`$KqQV$_;}cVus*F2wR;BX|qC9V9VEYPg#`K1neX7n}v&V`4pDhO6|3HID52EeKnqU5qMH`2dl}rC#AiHA#;S z{1eWvwHA%(3Ak5U__1dM>0I)^Z3A;1r9CnGGr2S<)?x7ha-kHt_6ycO<+{Z1m%p<~ zv<~oH=!8%AK59@N(~PKGoiies{wcr0G>Kq9i6132kdRx+vFDk@ODaj2ikPNR0A*oP z9?~!4nS7BB82u;LY}ehIwi0GB!Pu&CygB^mKa zxAwpe{?Qm7^0*4wwybXFRK#@EF5&pQ2S0ANf5O#a7pnCP})4}ZW^^YZgg* z2>H96${n8BAjW7Tes4*-nCn|88RY9tzHy$~|B$G*Gox6ni4kp2s!zGg_%oN+=)kGT z^%1f=S_&nFR6>ySUISptV_BY|8Yv0ZIm{ox*$m7Hfwlnx#P`SUgPpD&7pIO!nmCKBgi@R71t(JkO^R`(Nx%QaDZ_Fy-`9G8vbQ-1Z zZXgwH6~1H@^$tYJC{@Ndxv>{u%5i5g!bJ#f8ygHwpnXjal;4&vl-fx=i@m>tigA;` zW-=W8mc4isM4pq_4zJq|lM^jdO*AvgDrRKj-BgGeeO?XwP;M>;V|sJdC{UD>;Oe2P zdK;93c0btTnuNiMlz!xNqSN!i`Y_u^{>(S(9iDhUW>}0|&c1iMpQBXmf(7F}3)OdB z{*}#{%fHeldL7BcSIRgW#0e!xy>w2vz`e^$O0FZq^sQrI=(qG}@wM~RGIG5K6giK% zVWw=9aDIgg`mxuGMzKjbO;P@`m1gy z{`zM-Y#~R{o0W=_vjMx4p>=;3Y5B=_cDiKccf;QM8^$SWN-^=NIE{J5rsr<)r{x^Y zifhSe^b4gWla6n|KS7$C%?H2oev>OWa~*J_35aAvKix(yD+jN*!E-a*WAvE(4+}K8 z8Xba+f}&z7h(>MXMS6fAsEMq9n0fyqM0sACRmaz-iR*W9;naytW!KxVpB)14j!O1Z z*jH=fsNrpB!Xcv1T!AD9kS{S%o&@gd57Z_Zv>-;`JJ2CX=YHguz(~>L#nAAAbqHko z_YAlc7xj?)e9pommTl8{jTC;_Q@hPda=CPxfO^=K~GVdsSNik9S_Kf)%% z<8014z7?ioaN+GuG0LHz3jK+FFxi9jYWzN9&XpC9l8_A}($<#(4a>{mqIB>OC&Y$w z>|?+L?>+@HT|lIJ8GrnfIJmY93>3nu=$^TUpzk_7n~|_Emg0?#2xOr z%4o@+02pU!r|%qg8qDDwz&&KM&xxZxZm6T`F}tn%rU$2qWdeBH1X7DI2kjrdDQr{eV z_ncdnc#)kG*S=?;sV?VDt*mX^z7z;qj&m=%XuJ67cy85$=Bv%o8j^kd9%b|kj~*kwYEuwUoJB+#(FBfYWu zno-(tC3XZ!+l46kVN>1g&2}nOx}>}+`3&$9xuDUuZ+~g#9bVt4lW9+y;2^Mqe^o8= z*qJ|=-8Au`EX1<#7G>4MgPyV_QN>R}~(c3EoD4>0&mTs~?kybp@+E zxGgIPUT@RmL+E!iMG`BZL~CThbtsI3p73F`nqko#PTI6K%_zY>$r6ey&jZ{MbtN#NJXuC~q@w3Bww9$OoNwnP&1~H*F>nN5zpTkXN$JXUaTj~^`@dL8$T-}n^6Ubk z(@+hlEr!ck9+0I=t-#I~54SDXYqc5P)G|BbR<;xEX^f;KTc)N$io>1ACsSdMXn;M! z3QBT}(FfE^efY?(3L4!Hf6j9hPYPLrdutmueJ=7s8UjAs=Qn#@&{IYjIEN$VP@K^u zWLuL1572#p*^4eZMTs)5OwI|TF2&0m7Vc}?ur!Lsu4mtI`?6xit@`Dn_GcRyMSb7N zV=x|fRG?pVc?G~njO0ym=%j+&u{-+$oB4PysUD<_^4=uIoj#Qz7#WAoKZnqh+Y2)3 z2;fT!^d9?pa;1;(0aTFtYlwgHd?lee8@k$YDNr&nwT`;_HI`d1^Kh#XZ`Ton+r=fM z>_g@g$v*O2Prd=ZXG#6q$ETT7l6O3dQ;Uqp78|3uIyXZo_%N#1=RAw1Uj+C4=>K+v z^O&%HPmYx%IkxhzgH`<(ZSXuLM6KD*u$@t$1z!sIKL*E+?P~>|4ttKwpx>sU{KM;w zW_N0lc$hw_RVV>|v@IVHr3qNC!c}w4M)aPkH>SVWK0}$>70)vNc@|G&lGY>cWYv+P zNPg$j3;~Yxa*FuBV3DtYB$$s7IVg`dc3xY=$o=tS0-C&vQ)Tk%h@#gonBaeY`bH6p zO;jWB0i&1U`&Z)X5&=fjWtEi1S3{lQ|3I9%Cq9;O5DFMhzgP>8gze`(hhUf5nBI^? z?o`Kg@nH56fn%?^bVp%bj&cYipAu@Zh)LuuUY6Io<2#4|oMb@xQ}~u-zXQ&R zCx>yf;D8?Z9eoGm-kXWS4B4@h>#-|;mf{m6!O|y51>eLbx>5LG!Yv|d1L!PreoJ^% zm_ZUyJw}+0nlo~H3a{fPave0PlD;aUT^qPeq@6p^y8ARba*B|0I*#Im`yh&qwkiVE z#1hs3dk%aNa}J<`YlBvzC9yBUbtad_vO*qy17yLhPuMlJVGkiQrCQIeq;CorMZOnb z0m@(M#pUKcVi+mZBUQ>>6{V%b)Y!jvGlH`;I9JJS_CK*MHUAHLZyi@v_VDl0?W`<5A_a-YYv!VCWE&5&vF|{WR$Mfv~||gd#G< zfQ(IFN~u7WZ|e(WK%h(lzYStTA)OSYz{zjWcABA86m0_+GY|Ho18E?T2$sRXBRaAM z0Bg#itGf1CFo$3BpTLqKd@3IzgBmP?0{$RE7d{?H$WV=@=m4E^x21y^E6I8w+4>XC z(dL8sTuXu6Y5pN?k|5)3|r*W6ZlZ(Snym z8kyhR1gU5nQwn9<(~cb9fw=$)3XtkgAM^r$5US}+)dO8UD6|jyR(;LLDI{Xih6M0J zJHc^VFdx83uvq3C2Psa1!>1qAwKC^tIw)|yAfAP|C(>%rVy+h4_#$ePAI~7-dm#Y%6U^Fhbv6}V6#o(J~ zLHIRHx+#`k{C8?G=!lw^OQ}QM5_2H3biD@%%2WWu(SuQ@142yngScnj>!*ts@^km8 zPA~AX1AkonVN7?bg_DFn+~JI?M!oM6t5MdfatF?izzR@%o$240g|P&i@N9_7T7RA#--3Fjnr~M+jCP}2(X=I2*B=Y(1;-+ zC3Us{tLh3<6R>3LN_2q(^78yH@H?SIA%ZXRj(`_H8cqoLU2WhdYnK%pU_(YUP}ds0 zXV}NZq?o|_ESFzi#hW!Wh$s&%Y(JR5<6K(-2$BA_-#7BRg8$e}p+ABu0Gzz{y&MI> zQJUHnGbk9cC50?H4fcIVZ+`|N@o_;BTkW1ng1NdAkm>=ZwA-b$K!y3Xya z=+7$U&l2P37l0Y(DsjNkX}9E`RDFE&2>j+?qK*<@peC?A<8qerFwODLxx7gas`K5T zaG%2xUVlO+gF>KSGXLOT^}D`OS9)}`>N&tc54ujphZ)NB2KvjSZAOcQC0v!>Ag!gGb0*A15&?@f-;uuI<1(|rvfp|Ik6-d4w zAJbSzPgFqH3QPzUT$2S;)s zy?W;bYjwQ;7oeTDEb2nrO{xJ zl_5|4VBFZN1VD%b;Mfr-+Aw<=7c&WXJl=42vvdVg1k0fpr!UT{R%{3FBKB9@KHDA2 zMFGCPpq<1u63z+P(`J`FW7P<9jGKq(7@nav9qlFzjRcUl4aCWS8c5qL>z{&sOJ z3M2&u4HfT@NJTE7_Sg&=z4uhicLQYM^)9+@lvq;99JT>ihk)Z|)QHjCD8G#bl)56q5*Xh7w9;B?`dzM;5<+~1L< zDgo=hYx5xv0)X5JokpizY=$8oaD6^TW1|shgF>%)jvK^Bhe&OeeyowcFAbUzZPLV6&Bt}&oI@B_#8gMKOSiiy@@1BM4~U7(8Ga^=H~4`NVe*iqaC z^%3u*Y~T;Phz7|i4*`G<tfS2x>!F5;(TkrT6>BsRf(vSOppY&4*It>QPK%#j~ayO&rL7&hzm_Bq`Bzm|r zBsX(H(uIi`A@iV1-0FcSeWGS7PzRv1C^_f04zHIy|EiZP@D8n)JjZRY4{7cE+)pjp zupot(WcAS3j4!>1;ZA@4tdd_IWJ~j(MG{7+X)VtFajD~r8Z)sTUJ^`Tvr0#MG4t#>TzKrr&o>BxJI?dtiaMxfk< z2*_$c!Va0BeIo%4h*XFd3Y|wlKZQffK#7og1{mM~k-0jss!9c)UI(0ExGI(>yBHv8 zLb+g2lm$Sx)I_Ua%n?3K26iA6e9m_@6Ds8ZFBh_s2f`>W6L2(Ag11@$3uh>Z>QrbC zFSsuqU_B@4O5cJM)PUZ+;kZhPyPZh)5He)U=&?yO1Mi9a#^Ds_edwC@$yW{{(*|*T z0Iv@+;OB8#O$7a!1`w)c0yu;0dc%Rg!(15otEt_2W- zm<0&oqFpuGzwmwh%(4$iLGlnOhzGu&3JJ=AyS3Y5!bSt&5xeZ~ZbVZkmp-+E+-=)^ z1rNo-oFOc1aj|ItIwo7u##DM?ur#*I2Rs3YQS@Z&XsasBWwP%!z?U~1P{8hwD({7+ zv2ikF0tYEa>;RJ{b1E9%lB0_%9LIx$cyyPW91QQ`VHK_rU+qHstXEtOO<`JLxNxL7W9LfB{HB!3=A9u03<=!=Y5CbS&$-wSgt;gBKKB zrQQgk?&&vxn%oDt%8<7Y5VzFDG(bhu)SpEY;_`7tQ`A3-Caj0-uijv=Z_~r+>gg29 z{(_E-G7yl{5_pD2P%;9`2=Qv$ZF@gJE`YCqzqmI?Kb>-uuB-q<{tvzor5?d<#{OEx z{1pFwk$)0(CrINZu$?^2;OvjQ4E$yjsIFh4jv4g@*km+kf3*QrH>v-tZUQ@CwoVN$ ze>AsUqd#CjXS3j|0uwUiNBK$-H0F@KhI)4DI%PNrpv1QDsPtbyfm^#In7$&`$EBX1 z4hfF+8VT{WjV^H#VFj|MXTR4+Mw@{qyDu4SiVYpX$3P$y`>|WK1sd`$MRz&qgvH%& zFxik`wtVKaJgjO5o?;->bOZ681Ui0?i3v!i(XWX1@%)7<5l&D4y=Yn>B9wPrsv$`O zhU5?>AD9=zPlKit%iu0hyyrs-F_l(e#$X2Y8m9~NCUt?rq5Sd?1oxew!irW3I{(o? z=}rKKEO;MRo%HCFm{LR}TaqIA-T0g(Ez=!3S*;))rWvrkiGFa+zm5|AHRt)!!~dHQ z;;-`QUg7y)Attb7^#Xg~QTS=vYu7%)xBkyG(C%r7!GAMyi%ligW2R>`1}Ech8ldAo zI|UZkHQqO5cT7pm4-EIC0eZ8ke`p1modzmEQ}oPJOQ-^zI!(uz07Bv@C*=O;x@j=U z?Eenl1MVbgG|d4HB!)|QsO=F5_XS1mN}8i0bV&ne z=<3^wYz!3RC4qABUWqY1NwhN|z9Hmm zhZCpw4f0OINL9Je+hE|EvGlAHMDETAUe{v;gaDRo z$yZaj`g(SLPz)M?jitgwo%HqYlmWgGUpmH_P)6OP@drY~t#SeIPFJXP zurVJ}t5ix8{3I0lQ${8z)87ALO=wd@{PgsiR0+*kxInA)CihvdpOw^4DCjR9%?{3= zSkxGeCF3E#PSRiKI z@DJrzya_+h`+(L?8xT8oO_p))NkEsQ%^-(TlUL{%&JFn2iBB zWJ5mIfF}s3L&hqg3Ib`V%A1Y=i8TR&uUv3uR|BnS>7GkOSbC6l3JA##bYj3$!v*Zb z!^%}xn&pA*ateT`gMrB(__mO?Ti>{`qW`p9?4iG<1Po(RfGi9Qz6FFwkabboUIzLG zCgW!dE|7j#B|ct2@U) zR`L5+Kmw2!31r`kmb#5g3L=usmJyTBq5mr+sY+0rNqm=xmo5GUfIN zxbKz)z@!B7N|JIBLq_+4Azh8^B_2W1 zx3ff=3i6pZ=(tq{K!Q0GLI0c!Ds;Ml25)+-u9wS0lu4EoSfk)89TDtAPzcG@$xpW( zJRHj=9J;4*pnld3U;l9laJ2ac05;=dL5=n1PXH(fkgg%W&qEtykS7YnvtGPtJ78wi zklhbA1PxHi($g6H{n&J*b=XBM2*8a*|H}O7yZ5i&SWkrTA}4N7{n`;{$^wuN%=gyEj_)y$LC~Krf%oUK=!Y ze+={Yi;15g#WDcED+wy)9hCbEY?k-V4tV&1xZ7v?fU^!Q9~mmA0@iPC1Nt~*Dz;vE z62CVG$!7wh)}uCdEA}_`q1a|qfX%D}L)WJjV9{~Rm%C+dsg#)r;Zq6npvr!3e5fYR z>Zawgl0;{P8Pivxn^m^6gr#q+`;ML>VTjrw)q zzgJ3M8Mo_>N5y9fr6ZTU@YugA$_)h#2Vn)he@~j;tzgE0%TC{Vp~ylOu${`x0KLrh z>nznV-8eIFR?C94>3|!$1Nt_4O1T9A9``ZbS=&G0{n`on1017f11oUYOzXkMVkvnV z^xYvvJS2}<2Yyk5fRs~vlBb_v42}hv{KQWV1$~M`tWUH7%lE>YYS|O}PZnh==L=EX ziwNzml1}4=5yJ-)V3S(viw|GBc;Ws0 zE!mI<(N|aq9=*rB9(HY5w<-TxQ??#ccln}%_*K{=D%Mps#T!8}R> zh%&em_>}F|?oEwM1@R*`K;??EL7*d{en>~Ib@+9ej%NB8TM%hdf&|k?MzMNrb+u5| zdFey(7D<+!*;u1Ti+p> z^PUTUvJAuXf5fd;RS8nPcHG;Vav6qL)3~rQf@bV80Ch+eXQ4v6y zACbdrD{C2ULoOhJ*#T19x?f)y0lUj7`KK9jtV>U*(C_iZo8RBA#tvgwf6&oQq(S(# zG5ras=4Il%9v+5)5)?i>F?`-OOK0MD-NHPEi;IivHRQ(!??k(ZeTmy;H8eD2xX9=~ zQc2TrhEIYyk)EF3VkE&$3~d+xnnj`vw^SB!t`e{-SS=rBn)S2fp}jzwB0!*69X#zJ ze{9T$oH3Y{pNJFq4*h+9j3MSeKrAFMr8)k@pnld%zZ6>nNnoQ3R*&31Y~X+X%>4pz zQDivJ-t}{&hkfNIz;{+MwwgVLuYCej;+g<;;{8^o=Z6jE&z}XU1J+7XO%ndUZsngN z0)IgVZ4nm)75{Ui{&S=Liy7tnT2SFnF8~aj|IDucyoS(1_Mi3YxBo2cpg-}S9Z=w~ zQbFlWB{u(Nm4p$)!atZ$bRab$5r?4Umx8Y_9Fq`pyT7O0o+FBN>cD9AXOW@V2I`RX z>87TJUy7ew)+am!XbP_W-9S-}9(UW3t5xhE$}T1YmW6pS;P|Ae?M_N)3+fY04okb3xhkn9`wUw$ir zKnyDuGZz8-n^8qQiME4Q+aKjf`YkYa)n2Sg+h58N(1^Q-p?re}{z}vMy-ZiYWG0S3 z{_;mx+McKpi#``YWmmy{0Brn;$!ryI-gbZlXU69k2bEtm7<9(Ka{d9Mnuoj7;l zDuL|-+slU~1^s-UK@|cG7=lSjGmWqp#J}FjKg+kDgHe4AeNy!`Ny1@W!k=I0Qy~z2 z{*GhdaxM*9PYssGPF5J!3o=$kwgRE(NaT6_CN4kBzdf0sL;kbazDUZ~Yi;Eo;~Y~R zide*H|J!reeQR4lE?V>gdE;}T3xAtcKgaa@HQW+%Prgdy@)@Nob-jo(`BJEW z9Nj(k&lYugb&UBuWt3Fahnd0sbsq$TsEK5YUSu|Ip7I#Gt}WCw_C)O;lk?9@_~Qa! zV~P^kJkVWokNL7bO_YP%)PLD!E9f7?`uiU>X)%-?F_^d>aGf@a{CZxnT33pSbvw`5 zm(nHa_^q0akTJ$V#q)?c{SgGdz`PpB;q_XR#H>{e2e2s!o}*hGeJ+8ic(sgBEyJ|ok8y2 z7sP8}f!M?n6`KNb*_}djFO73{s^=M$$Yzcmw=&}`Q&U>FLHGJ5riZ94eKM;jyYDn9 z>n}^)-=7wA9je{}DoRrqWZ<3dF<-Cin%9iGjp=H5^{{-%yL?zv?B_RVVqqvZJbeR` zrTs$HaQ3C3CjE^?)J(1og1+8LXUIn-+Az3t8 z=cz7bT(f`G^%PcmVg1LkkUTX({6li)pum0-120t!m@+p3VW8-0m}0A?7?D|xC3eoS zC$_>yEN0&B3;sA{JXK%mGZ#38#QXa$zT)xg(B$rv!zOeroLy#ollIlBkuL8vyLNX#-tGod6e=SnKEMbLC zn9ilNer39%u(7nKZs|>=pvP!zEs0Oxr)J6{(Kvh_Z}j4^Ul5L^AZ(f~On+(M61iiR zH6UVNS&|qYkNuK*FDzn-G^X&`V9-;N|6=}NVP-$M8Fo8t{<*0IgRl%W9oyWGnvW~` zlir-;!G)in*4P^@R#wUtlXm|y_Cs!lra;z3s>fc{HVvNg3B<{H;c{g)u&60t z;q;ZVJA98KRh1s^+=+Qgqkic!84w(Alx+7KtD5k0aC~qaAEbM87>WMp-DJ*rh9MA+ zXI}VLz*vWnm!43#0ik`5V8Xx2&9b;%X+e0#S$)MF@kJu|)0e6k%hwk6LCF{A7s#b1 z9!%!@Pgo^$hUr*+JkN9~&;Q5!^F&gAM3No);0l*9+aKe5>tDMgY8kI=wf?k*YO-ML zqaiJu^a+I0tGh520y+nW&e(f1H75mW?uLE6nN0g8`-_PecqGVpGY)>d_J=~s4B~8r z2t(uM_Ku~9X>m8(yOnodox!cKln>r+K6cIXQKzQZl$W0&6{YJ<_|gC-2wR!aK$5Rd z?)|W$l9g_fSte2(1um;r+9x!Z!}oj~>KJESmefmS69O32jMPopB$}mEoo`4y(93;c z`P%-YwZ;jnWbc>`_^UH#w~DupExR;d2{Ky&_BF0t_&|HPM1eiF13A3bNy#LPo7JI;~gys;56%e?zWg3Ra^Z4_sjzGnhi zT=16{mh#0!6bmx*4 zY?gXmFcwUQh^1W$%n6sMe}FG`&Hly5RAj6>HPKuC#6aahvsyKp&T8JK|=(o^(4wiaV$7M z^~&4(Iy%Z+vCT?4IxroM7NR!|gQ4jOhSYRQ(ziL##l zym#RI`^Yju>i&yVgz7|-8zTBU**=c;lMfp2zBzYXWkAg&cQ-pA>&6orM_U~+@LSs> zlJabYbYNEv%=2wUlJd@Dd06``chO$GrFLn|-l)dFTb0#c>V}5sOXmw!)WMfuVSk+Lp$xGOXU@G#P*aKsq<)7 zXq19hxW)wJG!ZJxm>SuVemRrro7eTP0UfXYGg4;ik6*dD*=bU4w=q}n?=*@xHc~Dh zzo`=v*5lkE{2JVQUWfA11211g4u(7OPxrbyt&*a`sJQg5UlhHJ(=N!sNtBTld|xt< z_Ifwliiz0w+e>>B>369KMNC=8?le@JiRFe#-6XgykxQR)x`8+KK(BgK)kZ=ez@q+^ z?kbzlH;0e!+D-bFyuU;%Jx&T5r0{CYR!tcc!SZ0mQx)MO4LYCPP#=2^!SsZdP14Xp zQ=<07mEMaBzAG=5S-qF#V-ic{jO||;^2A+61Vseyiz^&AmuAnCKIpvi;kNVBtLNt) z=t`v~e@tyw`j*uB)&G9YmI_nOu3MWsb(dAv<9C~+X`8gEA0^+c7`pYQ*&%2pUb~9b zee_p~?+m=h{Beej(Z)P~Flgf2@fWH+dQ}KFOpUF8Rp$zQf9mCsaES-=;;DYq9-6k) z;-6}RH;Hx|-{ejtal55|Rf1{S8*zEb3$60x41Z0#Pa|~6>zc|j7xbHZ7O3FGKn1y` zOKV_O+c#z?byZl0<1Ncb@}!hr`9}dc(YFkSn2KL!-nR-+WqNUr1sC=P#J;#&_)f~l zLHBxm!C2fF>$othLhsML<*-fQ&6$r+2>Kk)EG}`KnP(0#_58SgjrE#J4kI$htmq=P zrZu&=-j{F06>r}LCXCrC#O~QXalZAyaZF+NL__H%cp#5Zo7F34o(|=g^IQDmLd%QS ziH<2)(kaIWv*x41N8L06hHhu5UG|K5V@M>ef zU>yq_SNI$q5b%zMN4TDp&jt^NClFDC`{27C#c{s|*Ig2aije=>Tbe8eWNPzyf`Rj1 z&p*#50!z1Z@<~{t>x9OS4PX1Wy*Q`m*R(|Lh%c)zt4~L|NN+2!{OGtv>o<3Ag2KWd z!YZh5oMNqSlumeAUr31~KTl|^>TdNzgq-gR4Tmn%X40TKYok|Swug|F&clYSvwD;B zq>qILU!DJcgZ!97mQs49;W%zJ!ck>LErR=wZ2J$9TKGc!mnyHWyLE|Tm@fl`zF857 zoL)+dzRRJ@vU#ad{?%rpu1+Zp&uzj>R74k;w{zqgNVEvBk9s}9MpUVMO^*6=zzr_h zb`fs1(_TUsQZ7yUs8Q1eCBGSylPW!*@xqj5Tj~xsv!d8_hij6{VYmxl8{SJjI_{1W z)YIGwEEFEgyxQkIFGI*am>e8PN0$|D)A}CUL+Lp~r>v;v_Y0!fNvWB-i2I_C66N9p zqIbR;Dp_M6dwdk2bf2ddiN5(VP}IsW`l{k5T3qSW?+uH!-zfwgCG+nqQ(~J6NjeMA zJ(2wY(#r8`&V|ya^Mn~)!@j$4cHkG| zW!*E^Zsbg8u^3U)y?t!2XTVhGqJ|-8 z>`R8Y=N>61Yn@>IUAO)L-P6GNW0w);41udZ-aeGhPZF?ZZ4$|VKh_&M%f*=zdrK8#I0q-4Rt&1Nywa9ADw*`bJE1-PGe?P^!(Q?+-rx~u>L$2l8U)o z{R!($_ZlKVig>}P4 z)?bky9ClST_q!L1K19EJqHRxqCe=7{-Z;apAO*IhF|NYo9%B{v>8M*1vxB*ZLdcff zKrC7(An}4=;|!@H7d1= zOgN3<+cqhGOFG(`qDh3tof~a3^sOV995WEO_O7&U`Ao*X6;Mte5j{yk)uh8Bsm6^R z<=tXbN{k^mPAge-#PbvgJ8gK4psDwaPhLv=^ORL;Ik|2}pS4x{a6FU*4h9xYRMS%# zD=}(1@s*>HD$Q>gQrMh)B&0n{R-Zbv00D*lj$hERXUw1|0FY;wTw}*M;-U{;6H;<8 zW1ozR(;qSR16Wd^58_IcND4hadU60r=>OSaB~nD_&>gv#j7ktECR?ML5bqbtSJN(< z3zeBosA;>6m-4thrZYgMHIWZJS)8-1*vi`FLf2mX#=_50x4T-zyfL)jrs@JkfTd0vd;qAd9lKszA9kz89_R1U=H8*CF zeuX|wZ{G^EPRb?x+D-cPslqbCF4JZ2#@R~u`cJ3l74`47Sjc#F1TyY#R0t>Ec)QmhvVvONpUjo*xJ}}e)|{j-o4JgA z>ec+cSYhL|0_WCst<%8o2c1r?>0;&!?^#$Gw5Tvknj)BF}+AavqjKR5V@U z4@Rot2&?NOyJMwK2XqL`QD2=Z(w=!^h>OXt))`sVc1k>XvP%4}JH&Wni$8kC3H>Tk zbZRgsyU%3@>0jupfvoe)l})wc)E*gS-=@3Cvmq*Y&D%ovrm>jyR__h`qLZFz=XTD0 z({!|#@73+~5ybKU{>aGK@P4%I4+cj~+BDA2p27iQX{-H7>Abmll-}!#sDlC2A8B{6YDhol}ntR1CvhO zE=-FvXVr2oGv_R8%WKKqIQrAmtu9jS+UII3TF`jRnxT2}Df%>f*O925+KQID>(&;x zu1;ISPRt$!(=}=ebR^TiU-7N*^0;0T4$p_T?hfqRwi=+{jfA1XnOawRsVM2}-qnHQHM&f1te2o{o})4#xoP9g7$q(tL zLD$Nj#PkNwD4ECi8ty=|wEQgw=3F6F_P~V3J#?*XLDBxkw>j_V8h;q?^lIE&p%lI? zyp6#S8WhmHmrq*}g;j~J<(AFOr6;HNacNi-uh6(E$<-E3*CwXhC6up-M{06Bjx~9> z-johpdCf<^sPw1~kS;c9U%Hz|!!wg@aS^9@KJ?kCqfQW$jIG`37iCxCN2N%KmJ48E zh&IDDgaM1Bsl;91;jL9wzar#Ll@zC&47&tfn8iEa`L;wVrjiXY8o0Syx8WignXR3j zvU&CQ)q2E)Rk#q!PlGHfJ{Yaa&)-n?W0`AXt%7SNX9tZhn^XD9#@~&>MyU?5hw{-q zk9y0Qw~Yws4docp63+-iVwy@Zzh z@2uXW;k(shd%kj#DH`TQ78W~NSi7KAONO=hy;k!0mbrS|bf3@h{7{HgVP?eiXq=R2 z#XF+bi8+hqy7*j?iH>a|JR(*c>7{rQ6-VVSigun><q}ZpMf5M&9*uJWd<+C^QKiU+&>5U(7-Yd`OI+piEMHan8}$ zE>t7Guxf#)cWy-X<7hyL-vbVms@sR5-Hv^}@%)AIQFHZvf;Uzx20bNij;vbdy-ROz z;AyuhR`0qkmNiFZCyide)3v3z*R43PYe;40jHa=$=g)e}KjO^F8DN79G(x%HYfhDy z7$+bkP`qyIA0q;AF`Fa$$M#lXX|`p%CsA$|bbQH-4?`ytuxg84mkX)ReOy;AXvroK z7E#1{wXUM)yPj0Bem=ng_uN{-h_Z4AcZc#oiF=@XOh3J(=Hjq{@NK=d2h@qF%-Fty zN7SB;l8>t6DK~;G5SDIBUvBdI_PcEr+C?XT%gsygb_(NP|B!U0VRr#vrX(+8eRIe6 zTo-DzE%D^8?$ommf8sJkg4?6|-E}I8AB%Xn*!!O~1_tw1=Cmq&zb56=kL}g@w`^)r z70gVQuQ?9l*Duf)_Agl|YqQm2i|;NzO>F4Yjv=l( zu#B8rFY40pFGlWdQ=k?Yr;6)b?H@?B4$95Be*fNQUh~=S?!qoib5dW**b=ri$}2-t ztUW+3y<0FRPIy0}qiud~C1VKHZO)J4Gwi5Y!@s}i`Q}XGkKpii6I0{DuQtiqM&AOP zDjOD1gOV`YbCM$zH#R6Vr>@_0H7L~@(xGXdFD&Pktuva;4RjQp>}2gfvLLeT!-A^I zI_?X2 zL~W-ZS%SS`A3PJuYpCZo+axyR>6TW_^j>3egssy6jel9jf7K8{T1GOB+`mTgMPYP& zipt1l(dn-7^L$1Z37SK7sXDS zf1`csps*O^7+N~d+3V67HL~LnmhcV-?_6a6%<8+dm}{uLB$J1Gj52YaueRZuyF1uB zuRl~p8ybK9`k8s3*gdAn?VRC>BaT6G=P{<7P7SG++kD2BJ7q>)Q=7&sBN*a!=bWZ* znZkGP5$hS(x*ICoL^jFyOcG|Zu8w|(HocGBFs#;8Gl8RxXL z!yS#1*iycCyXvKu9xUSpdp`tr{AjRVs-(@>Uuj*d)M7$~4&T0gSz!q==MZJNz13ae z_->%IqC*fP2`w4P_8w{Hiq2To|05lQ+L_o&;n{?mtS$v zV1N0&H2V8sJSX!*3TaoeqWlo!1XdzBZs*hylC^PVgWVGMWG0+7dHBA6{L2W_MZE2K zSiIP6`tj!Vy_j^Apu>)?ZDjkYRL3c&SCPYxA19?$i_7@F;ck9%Ko6Ea%7#yj^V_zOYIuCB%blzcJO22hJlpn3@{GGGe!eL}<`Xq|NZ9DF6TDxla z;y#TkKN90ETBWEsjL}6P0sRtL~Uul*ZA#B&i`@zy=jhdv0$kSbA!xrHmxfLp9u$c|^fLv6tgv z1Tl=Qs(=?3Eg^-@87ZvZ{VJU^_ynf0;1?}}K&!eH)@X6&G*^&J_f-7wfjb)L2QWLP zEB3d?6$Z`(mk#HkQqm2YLkCB<6w`}84CR$CoJpT-mhGh%={Ogyv7*P>T9h(MZ_F+) zJ!i^kJB+e|v&c1_q}rhIHcq%{lSk20Qe|^vaI2?6+*Yp_SXoSjm$@yadZEav z%183pyNg#`RJ+BK;(7STj1z_*EpB*uXg;6vD;egMEvZVcPPcEo(DQUWqd0zmYQ^dU zC}!-3kOqFMNf9ogDPg2o49^Efi=L#Lw?w(xWX_5AVR5)fv>RTv`#ohX0$@Fn~a=Vo{gO=LGDS1K3 z`5}I3utQH`#F?3E4Np6@;B#XI;j@dr zH1e$0VNXZiV0+DPbt&YdQ5J)< z$r|x~bQbpU{YFh%(gT-!+;k$yL2V3oDAi(feA`UbJ9SECami?HWn})j$nN+mb4*qG zlk_c4ZNE9HCL#bNBt1|&0!R?JbjIg8fl_UPGO;ux;GC&F(&dN+$~-k`#)#%6fK~cM zFh+F5UpeBR|3Qz6gOCq0UO&iv=+{&4-~QP65Ws$yV3)&>hy6qW>}R-om-v`(BA|m} z8}*#649Skz?+(~Gx5yyauWkHTWHZJGg8i0iJ{TQ$iIs*B>?i8~Cj~eWs)|ZMTc#|2?d+g~Af|sXl%PKbg;kb}+-chd#pY$2 zhqd27*ULkY+T_p%lhs8NG$S9t>jGMYr`SRy7seb)uBh6GU_J-=#|K}X#NF4&rlhPq z*|bqn?UegXfhuV?fAZpIvD_#LiM-n|b(Ixi3bh8)BYB!W8I`TAt(z*AL?M*hy>+vl zcE07yyP-oHDrOLH>7$%Q%OXbO4%oeE4#Tsx?c#hca}~4OBb(9Wvs`M+D`ZW$92dj| zV~UBW$Q0vr$xma_ay&fhPz)M-SIFIB_SI^|EB$@zFEigJriDE?QId5Q18ab>L2Qbh zQncz#(l-xG#1Rj^Qkhy#uY=FmAYnyWfD{pXd2OWd=D5;)VXj@FP~F_U+LXa>EqbNv zzAHtYeySz(M{RNf5VCv)l(-VyvozO?9T&)~=XeBVdm%4m#Sw zxsndEmhC<38~xzs51WJ)gi_~J2VY-4V%Wb!gCf9yG`YS>H1605JBESj@rL~EaakJ# ziQ?cbB693A{5vW7AG1qN6TIA3G}cFzO9z7`0+vIGS6Rq?k8KaU0SbEt^ZQ2~U=P-m zn5*EeRi4m`YdiKXSb?F}_|_jw30C?D0NFRCrtD_In0d+jV+uE?a8G4BVTi6sfi_!}EZ>6!dte0T4Tf;{T&Tk-EbHvPM^UVH!A?v{-6~ZI*>su{w*mZpHX*@7WrJrDV&r z7>`)N6k~F7B5w&{FSNGCV3DOh@5VSc`@@_2x3rafWJ@#IWe4bBWVXOyS%Jd#GuEqmS>?edLg z^OLoZOT)65rQz^R2HB0SA`~<5*pV$E4;h&U&Q6N0%#js*)h-EZmSvv}h8u6nJI293 zAbA)n(j5!6xn;_6CFo(w!8>dlp4q}0xRd8Lp1YZ!@^qGqQR!)R&AneYS47qtVj;Y4 zcWx_4buy8e=|l6CN5uW9$mz)0F*tRfOxoOgZr+ngQ{5vrUQ;FAsJ!s|x0vTu`|NE# z&H7DCW(O9eVeB!y{Jv(18zP)fZWo%_}ZqAM+ zReSQfEXuNnNqdZpjBFgv6hzLa>;QuyfNNX8K&eq&$>JWi&9c}+2is*A1Rmb>rGjne z-;|KHdzJEu;|hGjQQU4NL*sC*8DmdAWw&MRK(P;Sd9&8r#p``N{DX{p(FOO^gTy9# zdMil2?btdOQp)dgB;9MvdAsN|Q9@#yx<8y_AU+jK>vU&=)TIvnrIRH%WpR3XCw6f< zk*RINJzJ#b>N3uh>I&L_zwP4VYJA*xADP-b%`cfvhw_=yYWpi(c);h63}^|FXxhfH z)1}QhwCh><@XQOmk|$#LCA@I^BH-syc(KmE7`XP7ln-mq*`5&$9+WA_GH?16GKH+- zHr$}~--)yADp*9)M?mi{I>sM|M|HAI>?!pe6 zYYTWSyu4F`OHagxKor3saNyFKno%?t+Qp=@RfHoE{EPOe-tXbz5l`U38RKx4)nW>s z{9@)a$?P0?x{;pTe8Ah^s>B{;sikG0B`KM*IFEOV#w@OJW}$49$0|jUB8@~*)Sg$q zgrzV|gVS-JJY;BkcEQ>1Ty|)EA~NdsyOtKk^bc7NZlIjfa$sKAu7tq6T4+LQh-6$Dsi5k#y=()sM#l3H0!p1WrtkDuR*Ak(+ zTZ((tb|9~}z`}nZ2X2roJjh+jL=eZke8!#$*no~_Ons}y)+!SX=q^u zy;dHTz{8V9VNrMzdwq*FPG*B_#AvvqV_YVzBcC(Bup@y7@{%31ktY}C$;s&XWQs;t zp)!Em-{vDZNgK(_nG7o0wl3%)N0W@RewVo>`qgi2SKA`LudMWZ_ONxjgGZGQ*BMaR zABu0|&m;a#Da@edy>DN06wgS+EA-70-fx%S3temLKC8u!D;Z0InpoFz6K`T&v1OV} zTkIIJhed)&cvxD+UKVj;()~OPQ1xuzhroBPt>HYz>JQp-^i2>d~ z4%bA*bHd!NtnJ7515j5F^Hp$XRH<}8sS)Uf+C?V4dr0wIy>lzo4=Fn5Q!$s0)JQ0cv>zsn%bP;r*-V0|5|8=#QJ^b{zisF_~SRI{~*($|M_xaS8 za^dy3ih0${E6FCU4uPnViXMlr$cU0k?$2vIGc$N%h&I=xuX5(a6f^9;r+W3OPTI{P z-`{S+HvXI?uhpVW!elDE-5o+HA*3C>ob}pITNdW>!oMV{2**e6d9n z%4I)m>*q+ZSsr#lMwB&Wjf)M2hpNmyuv{a)C+}Gh9f}@V4XCKdFU#udSx6vYW5J5n z&9t73O3!*gBWqmho*orlw#JgNWDrYTqdnJ&VATuPa2$x@L-up9Z2l%%X6G@-7X(tR z9SV&)^tUT}fUA<8y$kV|qzyg#hmI>ujJqqT)X3Q>#L{FU6P)R{B>U8dRuP}L3iO*- zmbj8n!URk7I0q-v%k0UVcvye?jq&q?`+`bVmkA}fZ}jLzm;1*W&<>v5TAwLS*@fFL zF84@GC88xa6qmLA{iNMw6J;n;s1easU}@6WW7xmkI9FM<<61D}8p@)2!i#g>X&NqA zCEzjw{5E&j%eqk~x%-D7yR-T}^hQOjuA~%qMORhP)yF;S2>jHfIC5o%9&a)x=4E4l z=?up{Q36^h4q>~n7WKg-R=~IXxvfRxh(Rvguy6%G{sWV-?898<4vKZ&*vg3sKYDvA zmA(xvf4E(>)0wOG17*Ao(qY`q=X%$=R${2TQu}On*C@zvX?h6*N=Jt?=Mc_&)%C1h z9T|%PJQWiaM8(X-2D)%Gg+tN$0}Ak#gleqKzbn_ec%6N7@gA?mM!!wGb9RdZZ@e@D zwK3Sn4~3fV*pn6)~DMo$qWc2HsF=H{yXW|ULV=1@*N zwC}wz@_H`xV}&dZ=F1W<*~3adMil{y$k{JSH+F$D-W*R(*Ejn?(Nks1jofpa1LibJ zor2-vsCw?9PU+;CPwcFMj@S!N?dp?H%0|7MeeW%Lb2_7ygZ7=M?Zdi)PaA4=hWD7l zeedE@IM1$jSTV>(*-P|vN^C8skSMR+j}zHW>*x^8>dog?Ru=6nBD2fIQ+G_3otdTU zN@(nXP0uNsDH@dTOWMo@gm_|H*iKmqi1*GI59&c=xV+-dl{M;5XcG&^l`z{N?p{jv z8$H2;@B3YjKs@Swk7iDNkIOJOOIO2wIM!66;L*+V{qkWuo8O?Ar2D^Qo{f zO+)efZ5bJDcNQ4)7DaHIy`mCa0;cIj6x~Io&PDg)T6BhN$av-GGCZzn+^H}(OL8bs%M>+J zKx=1LwqBX@0e*1`QTvK%E4$lsp^oHs3XBUoFDc2h;;3P^OnQke=1~I_4ucB=F#<^K zxlBHjIAy}ioj7G8-suiD-@mSXH<^#_)2%a9^7Ochi;;9u+dc6)v66zp{$=uStRSys zqu95+ZLP2iL(ECL%PXU0=M(W)ISpGsNv8TccC)r__!imJukL+EYCP)6=DQME#9+Z| z^Q~xYYQtv-TDSXYXm4@qA&9DaI0**U!Kuc&|+=9`p(jAy1X@uTmQKW z75!5(3>|s3vg*yKb>t5adN8;;!?v5(T9!DMYchc9f&6WqSH??icBiE|UJI!U-)AhedQu@UQb-MoDA&Y9~L z%RO=%Ht&45xox&{J8a_JBnf{o+w!7J+*%O^IDxYzB5^kinxn^wwcuqI73GX;rZ?O2 zSYde@3+)am9!br_hKguAUUmjqWMuqaNtH*$wqN^h+9J|%g+yJe4gLWKb7nUCFfa*7 z{Bb!S!op#lUL&o&h7_y9-Cl#JeH~32+|Cd2E#*D1kZvojItI7V*a&G|FmlJ zHwYmqU&kL+Vms3jgFD`7PYP=tc9PgMDQd%8Bo;S*NZt)IY(hkGpCPi9lN(Kyruf)~ z8IC*KFXFvRM?n$Wb}~F(x`TMe|J%~N=_I& zJ7=lwysJPZ&aK-apR}@_Ub46mwK!|py=9zy-7bW4m7~AjCm5w1VJ@L)OK)+>iVG$dho_yO1ftsSUZ=J1?oS) z>?tB=68MA`w@Z%G7ChV4*4a71&tVK=exl61eeboq#K^dGS@p-KDo`(XCS7z*&TgPk zbP14h_o%+pKl8=w3F@2Y2x^f$I8^g5xici%CW^v&Y9-8@qp$lD{T}~+)qQDP zQeD?~ncNn3nUzCX4rOI(X68^~=9E*ZggE4EIiTWjrJ^~f4OWU~4y6VTC@46OiF2bl zqbRANl@$UhDIkfW5BK{%_j3);)%*SB)A?=oIcM)R?Y-7Id;Jk#`u*=A?*{}1uAqka z_N$%V(d9j|1f|zPpmp{)hiH%@NA2Qp#;ElB5!}>)2~)3=jh<@} z!-LJc<%pUQyXK*(*gN{4a5MO2)F*~L<(y64>G9cZVNTu6RaJu-d!V)8BLr->TwR>ydi zd4;yuB3p@?(%oYnHC}gCRF7jJ2kS|r-n8}4sf6|8Qixv7hJbCf0Th!3YjVd}zu?_T zzE63ti}E(U1Fv@WN3H3vlYdvUh%!0U71E|M?0R5)#%!gs-->o@mw_o!hOZDKyRkFeo^@ocdMU|Adl#=2i&u{@(7FC@R_ zh_{p9?VdpezpJsJPA{y;NAe7K(`&s%0k3_kqGG=T<%IZ$0HTffnP~%^+3A3X`c04p zWl5>UhztJ|xvsvs_1|0YR;)^XJ-%T~#AqVGFmy&_HoCm)XGn9pKVU2QQ*{^F5m$!I z8@1fi(O|k2V3S!k#~FG!*+5&hP5cUlwa@%k;&mSsIsR$$UdNM*P%-*h#NogxU4U0( zmF=j>s`M$lD;7!ERklpq-dswT{%a67ELo>Q9Y;DN_ggp$v0bq#>QDgL49>imXv-(u z0NCCOy7L;sRI<0gntT29__o_E8li{3?aac>pH{A7YI57!DwU^1wgFF+LtRlEMv#M8 z9Vl&_ej%8DLOjNXy)bbYn$R%Yp)P_xKo9BD>-ZORH%!1BB#%_fJfIYQWIK12;D z(`zX|4!q?rb!V!mqDW`i40A0)V2@R_l2Rk#S}K;eKDLB5HC-Os0gIrwobvY|#)l^vt*C-nNZ( z>F4LY*HorDGzpS#?0#4#HKiyE8c7YMO4*>H>7a|??O#w0q#!v`8O(n8v5WzX zNHMu`*%w|~uxpv~6oX(eXUNet9)e0wr&hVliEEf6!f0LG2p!R;DHZp)OXLjbOddXK zR?K|hh)3m;aK9FB3eUPBr17FHxG8!lMpt)oY_?*Sa(#Fxan4ow&t@@+98z}2Ry`0&p^ zwL&Y5j8N{e$XdvwZ{11pGqxUCC+0h5lh4KX$d9E|5RkMhUJ>p(oAdAWF81||yAJ|iCB#Hpq2;ZjrWb{))jE^d)Y7s> zy7cM%99Vlaz8vPr%f+51ca$5UM3#9U*8CEm1v%7+xZ+!=Qzc4`i#>4^QyRvoyt=w? z;`lKeNJXag^n(6kIVx-Mz&J*rW?{(p@IUhwD?X?vaMua5djc~F)-jtG0yz!F=jXV5 z-K3JD=VKUc;Dy7IM|S_CTTL)BlFt(?-j#J+4R;XBOW??k<>$g^=?k4NzhetRn`9fO zEycz4p4Hi!AuQFN7IonrQ%XhlGD;_K=C;SnG3ok`lc7dY$kRXj)C+%6I z>d?$0H^%`l>}b>OJGRqeX4<8MPWL_9T$=-f{=>APM1g>N2Vqs58(|F|M35#S+(ZOs-cX9Fj!DnUkCC4=hUx2qs9`Rod ze#6box7XVM(#jC{3+|CS5GKaOJ4(Ajw54828-LYDkOZG zpeX+7fvc6&m*2QK@KUf;8fgjGTfWz=5OPJ87^>rP^n)pI=g)BKrVGRky~D4q5gNpW z$!OmW^BbtTfPq}T5fVE(DyZnjRYyGm>^4#I?@d0uJld9IpF4$ttEVI|B@IJ+PH6Pi zL>-}@oA&E*$_p$tGxg>us5N;SOHlW^M1TVu)6$(*t>A?{qqZ)m?1qccFyzf8sH)2k zQ)69#>et!``kq8^g&SZ(%E#fBaq6NsAjek-m$UPL4X;tL471zzE;_b@a_rn5m1V*^ zrZ9P{1YWojotcq_7wDtO_hv2}(DGx!?LL~Pn!o#5Fc50i#o4L;oCv4r%}zYXI`*1( z6I8Gx??Li)Vs8Bp*_WrwJ;rNbrm58pGQrF>b6U+7ruOhUS-w$;sU>bF3ra+Wjh*fn zF#uxKk7L)|W?uqD11{!@81og*29MPtA|ig041q(;NvA9JNvePsFM4(2X@OFOQ^m}R zir)miTH@_$SE`j#hYp>8vP^HG`3pCNajq{k1+K+gkZ2XEpOe=tXiM=At|h;}xcOv^U;5-Z#;mvoF{*_1a(-whFKIDW9%B{&98tSfp6Moxq{b6> zHXeVvKO{)R7=6d{pYo+nw{L+)II;}JcPBAC2-Q?Ap^ex>@b)m41!!}exP0*-AB8%Um^zM;h!Ttwr)s)$HUd4Bi%n9nARG2c zM&bZnJ|m2u9?q1S@N7=ma(m`LX}Xn-Yv~r#UJP4!J`l5;{NR9yMKseIl`A4gw3S1a z47m%M+8B9fqR`W=@DxKGpb7mo!!>TTSlNji=yD#>9XiuaN)C^WQ?gA`ut7QokGVUW za=Ug_`pak{LI}!kV{eYiHo2yP9_e1UkgpCbU_6vje_LGzx}S0I+?)Zv5(ToQ*zz)~ zA54|b>DG5^syfNLy1K)xAQr@_$bn>0O>A-wmtWc%0V~FN*@ulf->g`X&?M7QMCedFzyi+>#`#*%V`j!n($5;1*eOvlP z9tbzg%x%8J3?1nrk!_5Rl->ewiwwR*AoVSg=Kw40n6rR7bgVDCBqq-D2T(2DYrRlt z1l>iUUiG`2#!U?52yun$$6~3+Qc|bB;7S|7?wWalcvB4^f1o)%9%)BfiQkS74ho-?vyC>)MO_GkUUNn@WhQB#O zC@y}tj!H~HE;C{^R|UoO+yqTz!nv?7_g!m0%4u77ZBvgAA+f9G5Q-`Mhsr`N*Lv0wi{B5)P81t&r zIbh|p+M;q9;aA`~fMjyye)_pQt#B;s)e4Fgsj1Ms+Z|46|HxXER$pAk5F$4FJuzWY zN{~~QC^kNd{f#0ZRuj;JAqS2|^epNlf|wgww?#AtBRgHz<1_a-OusCFS^5eiVWlxA zrFJ^tHuAJl3H+||27`mUa~!R(+&35~|$v{oDjGSsBRiCtEMKQh0aHbErj-Q`dI%B)^n-HAuq=>zp!v# z+U8n$fE)rDp&@miRIY|11ifVM?W5qPq&p0c$51jl4`lILmw(1m404e1j zLm0Sf73M644Gr;5{pZ9FGSEj>|Ed&lu%|mVou| zZ6|^IrZ|}^p`LsK#Z*S#Zr$UAsRHY7NsS7er1-<81@3q-1?ecIE3+q4(1?Z$M!wU<; z`ueV&IA0eNbq zt^qd4mA?zTSf1Vy8@UR(tY(U$y*nB)h2Q%Fc}8zlb)lrI-H^5^=YctP%!YCQ_F*~a zQizrAgw?)uhiEI64$sfo9n41*J=m1Kw5?M$zd2~>^U;LH zZlMdI@hI$-VheR9zTW%ofeZ6R66}%P2W&KQ&Wh{f>@8nKZ6QD%SObs_h7QGlpL@fI z2jUhpZrqu`#HEKKl}II!Q^1>a_mhmDlr=M{58G)tcr{5oU+*%4F%^kGEy-^HPknDm z521?DNrt)o7+8<1JEMJZex&W(vlhE(ahVgGRnM4!rqJ8iEjux(jfR0Ks8EK-h@gn4 zPbaGXUP6-8h7B}(UE*N40W$3)y<&hT&7p}eH=DX>MiUCFCYmIIXS#34Y$gj2;MuCRLjce#rQa>SYiD@_+)Tf%NF05XODQ3eyMCt?K z2K2;Jf+A9F$Hb=w4CZAa&RQ2_%F6}Oq>JoEV0_O0P6_0Iosx6XBbx#bZjXq&lSW{} z3RA%mb(+#T(D>11CA@~UBL~Ch>|NZQs(v#oE!jXwtsdT3#=P0e%|kB*P_zjP6x zrTf_eD|hIzfr#Ho@$=>%n4FqTI%lX6bU5ps`gtnlgXRKxLWSP|e#s zz8wqEiV10)_aIpsH3bL_)B5T#S{wIql^JVCtA1UW_}Q7%L1-of0Zt*nYmf^Q$B=fT z$Au^ljRVcBYtcVh`=%$Ns-@@q?N>joI(b31g500fUR)$`p+?rjnB*e<#z;o;((+V& zbk;8GlWxzCOP7CdW`3Y|F>&wb`%NgO!(Bp@ZFKx7dQv;2o(gl(3yC|*w{2RpPIN1R zA7#zu@|+9oz&(~ozp*3tKD7%yh-%inFe|pkl8ko>)OoZ)9gS*FhJjSfMenK){8Mc- z;p$q{b<&Ae$dYUrGC-sU8k`V%gE0I|Yw?q2#d_Y=^4m7@tbCcv^0ye)6WLe9s{YD}*cv>dw2P z>(ZS=+@l39>ao!udr}tO!>eA_Yomv3gY8mUM9wtW^$;kYi5dyAS$$V({l50;w`0uD z1UxX8KeA~{9eP=vDYO4w+@}}JI1AzghPU60)w_hrs0?>Z(g8^70IgEZ)#qzg#Q2SQeoerp0leVeA6u1G>?`$T@<0J%)& z`(45GqZ9aV7v))TWJVt<|1uAgEQXpmREYrSdc-c|j7V*+4i(0dyAGH^KdSC4;i(0X zIKg~U>v5x^qI=2UtSOaM`f@#+fhKWD{<3+MuCg|W@-;JKaL2R-t+;zuL0qRQ;lk+& z1hm_VVr+bXI_)lV>*@K{nW!Ry2GH@y6Cv_XzgQ<{r|QR&s2+ca2)IHRe zeVYs{={jhm5m3TO3;gm7D>25#93|p(ay~`RD&!PHk`L{h(=JOe;}K`LWX57EEur9Z zC^8WT?ZvR1sG8afdE{P24gSW5MT?r?rD^_506e(m^wcssaXHrRYXJULe(`*pYtKPI zfwT|wqiv6Fdg0a`GQYb7al^$(~gyN6!Y}LCC(^th(yX@+aV~cxrB9Z=X|}Fk2~HA6F{au04Rf-Yc}S zAs8Y~U2>1P+`LQq`bS9+3d632fb`1pM%Ts3RVR`AAo?Y|bo9lI*F;dU%tI7u#lh z_@`{@DN(XN;90BRr?3rZEG3{XBsetR?6zG zSy^a!YJEGbUO%g92l>m2U7qY9{+6ix8#e}7W2K9nxCG02h0<4SsaG`M6Gfa^%|-Si zaOdJIz4pzX6bCGE`K8s&wbK{`5(35Astq5HPC%*n@4tQ!;Q`y+tm-8X;q&NJkkAsurg(fzhk-1}u zW05#xLp@g8_pY-m(5!FFMfGvF_sUULTF%ukA9}UZ!xsHK-&n5TBnm3mR!0g^St|mM z7Lzt-;|l9)oX1!lI!9^8{q)mgFP^_S5^Q^_vg$-7=~4wL#b-uBxt|{Wz?kdAh|gkY+VB**^Lvjmqj2U;$-|GXkIH zuA?q%<8Qs*m~|QWxa~QWYSm}+$Ur@*bNw@0=B(8td>c)Qd_u+l>@d@jpX4~J~SW5Fu zAEvcWIn<|v6BdY&)iT33h%k;t+Uc1vYTv@rXv?In$Nsfe55J%zS900fl!9#1*u-om z=*jY>=`4%pv6Z-?n|wB1v8kmRfl%;!hIM~usF_ss=A-OZ5z+0EN=CP~{O6+kG2nF1 zlfw4XpQ1)zg%)nF6dR>n48rnGKgccAvN}7c9BtF$6tLXAlKtcXe|$+<(71lEFk*TX z_PL2R&ZK4(f<1U~F&=a5#*IAd0nw$7*uv)NVBZ|*20X!f4>lwk>CN^yAn0FT)J9p* zwNc_JPe=!C5HU2&U|3>ol`QoE?_f;0(Cg2qE~zTF>n@ zgten;hj4e3C9UE7dfB#$-}{BF)Ab3>saW%8_9nJxL`2U{7*2M{oq7A#Oa4QjRi{ds zjXZX3xiy29_A=TN=84aK@T1k$5X%C0mCayuxoA!R=M#a_%JcQ?(K6u0Y*sQzJR9aY zz7S9N>-#?NX0u*pTKM^c>{@ z34O4DQadU_O>Cb~PJN*Fe=tGXG7Nfs|~ z5^d@`xRKx7<|!7IPQw|Fsq|3Rc!uy6cx=s^xa61}5^ww*R=%y^?td{HMJ}{wu!uHs zF`Hl4;$+!#v)uM?Z&!)}m!D0jP8$^F2sqC@LhQcgEUUSLr@BA~!E;YP^aW2T66!K< zJJQVigZ17Jeb+Ad9>fl=;HwCcWeRio&vaB_9quB=nM;TNBtQQxNT+u9zM6VEP!Jc7 z&%h1NHPTxg{0wT=#iG#%mgA}Q8Z8<`1apFv*b~}MYhRmS-k4dp1#KMeKX=*V+_Amf z9ov0h7_z|V^~gtJJt|wW$CaWLz{jQ<)UL-rUMYVJ+cD{-Xi^qY7J+;D;W)n-IMn)>d-<%-o5+os^Q|*h-(Yw}fcQ0y=EE z(K-zlX3%m&t|br@`shaX9IE@Ih<6ZLXA#|!_~f*C{+FC_)rAST?&900ifbJ#3nL|e z!^KNS|2MgQuMo*A8U!D^4bGSBBm*_tYd;z2(mH?GQreF_(lU(S&x0Zbaf{%)Q{c&e zy5H#IV^PstCwK5`_su+ERy7iom41XH_}9s$hU4&{XqEr{#{aZjO%tB*yH2z-{i_-H zg9uwi!nY2N1Mxa3JSNJkHT&C>|DfLg zN21{sDnyNB$NWFoBKh1asRNLF^0|Dy@?Rv0nb}^fHt|aSFK4+HbpQYW literal 0 HcmV?d00001 diff --git a/luci-app-beardropper/root/etc/config/beardropper b/luci-app-beardropper/root/etc/config/beardropper new file mode 100644 index 00000000..ec5d0d4e --- /dev/null +++ b/luci-app-beardropper/root/etc/config/beardropper @@ -0,0 +1,18 @@ +config beardropper + option attemptCount '5' + option attemptPeriod '12h' + option banLength '1w' + option logFacility 'authpriv.notice' + option fileStateType 'bddb' + option fileStateTempPrefix '/tmp/beardropper' + option fileStatePersistPrefix '/etc/beardropper' + list firewallHookChain 'input_wan_rule:1' + list firewallHookChain 'forwarding_wan_rule:1' + option firewallTarget 'DROP' + list logRegex 's/[`$"\'\'']//g' + list logRegex '/has invalid shell, rejected$/d' + list logRegex '/^[A-Za-z ]+[0-9: ]+authpriv.warn dropbear\[.+([0-9]+\.){3}[0-9]+/p' + list logRegex '/^[A-Za-z ]+[0-9: ]+authpriv.info dropbear\[.+:\ Exit before auth:.*/p' + option defaultMode 'follow' + option enabled '1' + option logLevel '2' diff --git a/luci-app-beardropper/root/etc/init.d/beardropper b/luci-app-beardropper/root/etc/init.d/beardropper new file mode 100755 index 00000000..a7c1c98d --- /dev/null +++ b/luci-app-beardropper/root/etc/init.d/beardropper @@ -0,0 +1,46 @@ +#!/bin/sh /etc/rc.common +START=98 + +PROG=/usr/sbin/beardropper +SERVICE_DAEMONIZE=1 +SERVICE_WRITE_PID=1 + +getKids() { + egrep "^PPid: *$1$" /proc/[0-9]*/s*s 2>/dev/null | cut -f3 -d/ | xargs echo +} + +start() { + service_start ${PROG} -m follow + echo "beardropper started!" +} + +stop() { + #PID=`cat /var/run/bearDropper.pid` + #kill `getKids $PID` + kill -9 `pgrep -f /usr/sbin/beardropper` + sleep 1 + service_stop ${PROG} + echo "beardropper exit...." +} + +restart() { + enabled=$(uci get beardropper.@beardropper[0].enabled) + pgrep -f ${PROG} >/dev/null + if [ $? -eq 0 ];then #running + if [ $enabled -eq 1 ]; then + stop + sleep 1 + echo "beardropper is restarting..." + start + else + stop + fi + else + if [ $enabled -eq 1 ]; then + start + else + exit 0 + fi + fi + +} diff --git a/luci-app-beardropper/root/etc/uci-defaults/luci-beardropper b/luci-app-beardropper/root/etc/uci-defaults/luci-beardropper new file mode 100644 index 00000000..0565aa65 --- /dev/null +++ b/luci-app-beardropper/root/etc/uci-defaults/luci-beardropper @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@beardropper[-1] + add ucitrack beardropper + set ucitrack.@beardropper[-1].init=beardropper + commit ucitrack +EOF + +rm -rf /tmp/luci-* +exit 0 diff --git a/luci-app-beardropper/root/usr/sbin/beardropper b/luci-app-beardropper/root/usr/sbin/beardropper new file mode 100755 index 00000000..d3015491 --- /dev/null +++ b/luci-app-beardropper/root/usr/sbin/beardropper @@ -0,0 +1,517 @@ +#!/bin/ash +# +# beardropper - dropbear log parsing ban agent for OpenWRT (Chaos Calmer rewrite of dropBrute.sh) +# http://github.com/robzr/bearDropper -- Rob Zwissler 11/2015 +# +# - lightweight, no dependencies, busybox ash + native OpenWRT commands +# - uses uci for configuration, overrideable via command line arguments +# - runs continuously in background (via init script) or periodically (via cron) +# - uses BIND time shorthand, ex: 1w5d3h1m8s is 1 week, 5 days, 3 hours, 1 minute, 8 seconds +# - Whitelist IP or CIDR entries (TBD) in uci config file +# - Records state file to tmpfs and intelligently syncs to persistent storage (can disable) +# - Persistent sync routines are optimized to avoid excessive writes (persistentStateWritePeriod) +# - Every run occurs in one of the following modes. If not specified, interval mode (24 hours) is +# the default when not specified (the init script specifies follow mode via command line) +# +# "follow" mode follows syslog to process entries as they happen; generally launched via init +# script. Responds the fastest, runs the most efficiently, but is always in memory. +# "interval" mode only processes entries going back the specified interval; requires +# more processing than today mode, but responds more accurately. Use with cron. +# "today" mode looks at log entries from the day it is being run, simple and lightweight, +# generally run from cron periodically (same simplistic behavior as dropBrute.sh) +# "entire" mode runs through entire contents of the syslog ring buffer +# "wipe" mode tears down the firewall rules and removes the state files + +# Load UCI config variable, or use default if not set +# Args: $1 = variable name (also uci option name), $2 = default_value +uciSection='beardropper.@[0]' +uciLoadVar () { + local getUci + getUci=`uci -q get ${uciSection}."$1"` || getUci="$2" + eval $1=\'$getUci\'; +} +uciLoad() { + local tFile=`mktemp` delim=" +" + [ "$1" = -d ] && { delim="$2"; shift 2; } + uci -q -d"$delim" get "$uciSection.$1" 2>/dev/null >$tFile + if [ $? = 0 ] ; then + sed -e s/^\'// -e s/\'$// <$tFile + else + while [ -n "$2" ]; do echo $2; shift; done + fi + rm -f $tFile +} + +# Common config variables - edit these in /etc/config/beardropper +# or they can be overridden at runtime with command line options +# +uciLoadVar defaultMode entire +uciLoadVar enabled 0 +uciLoadVar attemptCount 10 +uciLoadVar attemptPeriod 12h +uciLoadVar banLength 1w +uciLoadVar logLevel 1 +uciLoadVar logFacility authpriv.notice +uciLoadVar persistentStateWritePeriod -1 +uciLoadVar fileStateType bddb +uciLoadVar fileStateTempPrefix /tmp/beardropper +uciLoadVar fileStatePersistPrefix /etc/beardropper +firewallHookChains="`uciLoad -d \ firewallHookChain input_wan_rule:1 forwarding_wan_rule:1`" +uciLoadVar firewallTarget DROP + +# Not commonly changed, but changeable via uci or cmdline (primarily +# to enable multiple parallel runs with different parameters) +uciLoadVar firewallChain beardropper + +# Advanced variables, changeable via uci only (no cmdline), it is +# unlikely that these will need to be changed, but just in case... +# +uciLoadVar syslogTag "beardropper[$$]" +# how often to attempt to expire bans when in follow mode +uciLoadVar followModeCheckInterval 30m +uciLoadVar cmdLogread 'logread' # for tuning, ex: "logread -l250" +uciLoadVar cmdLogreadEba 'logread' # for "Exit before auth:" backscanning +uciLoadVar formatLogDate '%b %e %H:%M:%S %Y' # used to convert syslog dates +uciLoadVar formatTodayLogDateRegex '^%a %b %e ..:..:.. %Y' # filter for today mode + +# Begin functions +# +# Clear bddb entries from environment +bddbClear () { + local bddbVar + for bddbVar in `set | egrep '^bddb_[0-9_]*=' | cut -f1 -d= | xargs echo -n` ; do eval unset $bddbVar ; done + bddbStateChange=1 +} + +# Returns count of unique IP entries in environment +bddbCount () { set | egrep '^bddb_[0-9_]*=' | wc -l ; } + +# Loads existing bddb file into environment +# Arg: $1 = file, $2 = type (bddb/bddbz), $3 = +bddbLoad () { + local loadFile="$1.$2" fileType="$2" + if [ "$fileType" = bddb -a -f "$loadFile" ] ; then + . "$loadFile" + elif [ "$fileType" = bddbz -a -f "$loadFile" ] ; then + local tmpFile="`mktemp`" + zcat $loadFile > "$tmpFile" + . "$tmpFile" + rm -f "$tmpFile" + fi + bddbStateChange=0 +} + +# Saves environment bddb entries to file, Arg: $1 = file to save in +bddbSave () { + local saveFile="$1.$2" fileType="$2" + if [ "$fileType" = bddb ] ; then + set | egrep '^bddb_[0-9_]*=' | sed s/\'//g > "$saveFile" + elif [ "$fileType" = bddbz ] ; then + set | egrep '^bddb_[0-9_]*=' | sed s/\'//g | gzip -c > "$saveFile" + fi + bddbStateChange=0 +} + +# Set bddb record status=1, update ban time flag with newest +# Args: $1=IP Address $2=timeFlag +bddbEnableStatus () { + local record=`echo $1 | sed -e 's/\./_/g' -e 's/^/bddb_/'` + local newestTime=`bddbGetTimes $1 | sed 's/.* //' | xargs echo $2 | tr \ '\n' | sort -n | tail -1 ` + eval $record="1,$newestTime" + bddbStateChange=1 +} + +# Args: $1=IP Address +bddbGetStatus () { + bddbGetRecord $1 | cut -d, -f1 +} + +# Args: $1=IP Address +bddbGetTimes () { + bddbGetRecord $1 | cut -d, -f2- +} + +# Args: $1 = IP address, $2 [$3 ...] = timestamp (seconds since epoch) +bddbAddRecord () { + local ip="`echo "$1" | tr . _`" ; shift + local newEpochList="$@" status="`eval echo \\\$bddb_$ip | cut -f1 -d,`" + local oldEpochList="`eval echo \\\$bddb_$ip | cut -f2- -d, | tr , \ `" + local epochList=`echo $oldEpochList $newEpochList | xargs -n 1 echo | sort -un | xargs echo -n | tr \ ,` + [ -z "$status" ] && status=0 + eval "bddb_$ip"\=\"$status,$epochList\" + bddbStateChange=1 +} + +# Args: $1 = IP address +bddbRemoveRecord () { + local ip="`echo "$1" | tr . _`" + eval unset bddb_$ip + bddbStateChange=1 +} + +# Returns all IPs (not CIDR) present in records +bddbGetAllIPs () { + local ipRaw record + set | egrep '^bddb_[0-9_]*=' | tr \' \ | while read record ; do + ipRaw=`echo $record | cut -f1 -d= | sed 's/^bddb_//'` + if [ `echo $ipRaw | tr _ \ | wc -w` -eq 4 ] ; then + echo $ipRaw | tr _ . + fi + done +} + +# retrieve single IP record, Args: $1=IP +bddbGetRecord () { + local record + record=`echo $1 | sed -e 's/\./_/g' -e 's/^/bddb_/'` + eval echo \$$record +} + +isValidBindTime () { echo "$1" | egrep -q '^[0-9]+$|^([0-9]+[wdhms]?)+$' ; } + +# expands Bind time syntax into seconds (ex: 3w6d23h59m59s), Arg: $1=time string +expandBindTime () { + isValidBindTime "$1" || { logLine 0 "Error: Invalid time specified ($1)" >&2 ; exit 254 ; } + echo $((`echo "$1" | sed -e 's/w+*/*7d+/g' -e 's/d+*/*24h+/g' -e 's/h+*/*60m+/g' -e 's/m+*/*60+/g' \ + -e s/s//g -e s/+\$//`)) +} + +# Args: $1 = loglevel, $2 = info to log +logLine () { + [ $1 -gt $logLevel ] && return + shift + if [ "$logFacility" = "stdout" ] ; then echo "$@" + elif [ "$logFacility" = "stderr" ] ; then echo "$@" >&2 + else logger -t "$syslogTag" -p "$logFacility" "$@" + fi +} + +# extra validation, fails safe. Args: $1=log line +getLogTime () { + local logDateString=`echo "$1" | sed -n \ + 's/^[A-Z][a-z]* \([A-Z][a-z]* *[0-9][0-9]* *[0-9][0-9]*:[0-9][0-9]:[0-9][0-9] [0-9][0-9]*\) .*$/\1/p'` + date -d"$logDateString" -D"$formatLogDate" +%s || logLine 1 \ + "Error: logDateString($logDateString) malformed line ($1)" +} + +# extra validation, fails safe. Args: $1=log line +getLogIP () { + local logLine="$1" + local ebaPID=`echo "$logLine" | sed -n 's/^.*authpriv.info \(dropbear\[[0-9]*\]:\) Exit before auth:.*/\1/p'` + [ -n "$ebaPID" ] && logLine=`$cmdLogreadEba | fgrep "${ebaPID} Child connection from "` + echo "$logLine" | sed -n 's/^.*[^0-9]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/p' +} + +# Args: $1=IP +unBanIP () { + if iptables -C $firewallChain -s $ip -j "$firewallTarget" 2>/dev/null ; then + logLine 1 "Removing ban rule for IP $ip from iptables" + iptables -D $firewallChain -s $ip -j "$firewallTarget" + else + logLine 3 "unBanIP() Ban rule for $ip not present in iptables" + fi +} + +# Args: $1=IP +banIP () { + local ip="$1" x chain position + if ! iptables -nL $firewallChain >/dev/null 2>/dev/null ; then + logLine 1 "Creating iptables chain $firewallChain" + iptables -N $firewallChain + fi + for x in $firewallHookChains ; do + chain="${x%:*}" ; position="${x#*:}" + if [ $position -ge 0 ] && ! iptables -C $chain -j $firewallChain 2>/dev/null ; then + logLine 1 "Inserting hook into iptables chain $chain" + if [ $position = 0 ] ; then + iptables -A $chain -j $firewallChain + else + iptables -I $chain $position -j $firewallChain + fi ; fi + done + if ! iptables -C $firewallChain -s $ip -j "$firewallTarget" 2>/dev/null ; then + logLine 1 "Inserting ban rule for IP $ip into iptables chain $firewallChain" + iptables -A $firewallChain -s $ip -j "$firewallTarget" + else + logLine 3 "banIP() rule for $ip already present in iptables chain" + fi +} + +wipeFirewall () { + local x chain position + for x in $firewallHookChains ; do + chain="${x%:*}" ; position="${x#*:}" + if [ $position -ge 0 ] ; then + if iptables -C $chain -j $firewallChain 2>/dev/null ; then + logLine 1 "Removing hook from iptables chain $chain" + iptables -D $chain -j $firewallChain + fi ; fi + done + if iptables -nL $firewallChain >/dev/null 2>/dev/null ; then + logLine 1 "Flushing and removing iptables chain $firewallChain" + iptables -F $firewallChain 2>/dev/null + iptables -X $firewallChain 2>/dev/null + fi +} + +# review state file for expired records - we could add the bantime to +# the rule via --comment but I can't think of a reason why that would +# be necessary unless there is a bug in the expiration logic. The +# state db should be more resiliant than the firewall in practice. +# +bddbCheckStatusAll () { + local now=`date +%s` + bddbGetAllIPs | while read ip ; do + if [ `bddbGetStatus $ip` -eq 1 ] ; then + logLine 3 "bddbCheckStatusAll($ip) testing banLength:$banLength + bddbGetTimes:`bddbGetTimes $ip` vs. now:$now" + if [ $((banLength + `bddbGetTimes $ip`)) -lt $now ] ; then + logLine 1 "Ban expired for $ip, removing from iptables" + unBanIP $ip + bddbRemoveRecord $ip + else + logLine 3 "bddbCheckStatusAll($ip) not expired yet" + banIP $ip + fi + elif [ `bddbGetStatus $ip` -eq 0 ] ; then + local times=`bddbGetTimes $ip | tr , \ ` + local timeCount=`echo $times | wc -w` + local lastTime=`echo $times | cut -d\ -f$timeCount` + if [ $((lastTime + attemptPeriod)) -lt $now ] ; then + bddbRemoveRecord $ip + fi ; fi + saveState + done + loadState +} + +# Only used when status is already 0 and possibly going to 1, Args: $1=IP +bddbEvaluateRecord () { + local ip=$1 firstTime lastTime + local times=`bddbGetRecord $1 | cut -d, -f2- | tr , \ ` + local timeCount=`echo $times | wc -w` + local didBan=0 + + # 1: not enough attempts => do nothing and exit + # 2: attempts exceed threshold in time period => ban + # 3: attempts exceed threshold but time period is too long => trim oldest time, recalculate + while [ $timeCount -ge $attemptCount ] ; do + firstTime=`echo $times | cut -d\ -f1` + lastTime=`echo $times | cut -d\ -f$timeCount` + timeDiff=$((lastTime - firstTime)) + logLine 3 "bddbEvaluateRecord($ip) count=$timeCount timeDiff=$timeDiff/$attemptPeriod" + if [ $timeDiff -le $attemptPeriod ] ; then + bddbEnableStatus $ip $lastTime + logLine 2 "bddbEvaluateRecord($ip) exceeded ban threshold, adding to iptables" + banIP $ip + didBan=1 + fi + times=`echo $times | cut -d\ -f2-` + timeCount=`echo $times | wc -w` + done + [ $didBan = 0 ] && logLine 2 "bddbEvaluateRecord($ip) does not exceed threshhold, skipping" +} + +# Reads filtered log line and evaluates for action Args: $1=log line +processLogLine () { + local time=`getLogTime "$1"` + local ip=`getLogIP "$1"` + local status="`bddbGetStatus $ip`" + + if [ "$status" = -1 ] ; then + logLine 2 "processLogLine($ip,$time) IP is whitelisted" + elif [ "$status" = 1 ] ; then + if [ "`bddbGetTimes $ip`" -ge $time ] ; then + logLine 2 "processLogLine($ip,$time) already banned, ban timestamp already equal or newer" + else + logLine 2 "processLogLine($ip,$time) already banned, updating ban timestamp" + bddbEnableStatus $ip $time + fi + banIP $ip + elif [ -n "$ip" -a -n "$time" ] ; then + bddbAddRecord $ip $time + logLine 2 "processLogLine($ip,$time) Added record, comparing" + bddbEvaluateRecord $ip + else + logLine 1 "processLogLine($ip,$time) malformed line ($1)" + fi +} + +# Args, $1=-f to force a persistent write (unless lastPersistentStateWrite=-1) +saveState () { + local forcePersistent=0 + [ "$1" = "-f" ] && forcePersistent=1 + + if [ $bddbStateChange -gt 0 ] ; then + logLine 3 "saveState() saving to temp state file" + bddbSave "$fileStateTempPrefix" "$fileStateType" + logLine 3 "saveState() now=`date +%s` lPSW=$lastPersistentStateWrite pSWP=$persistentStateWritePeriod fP=$forcePersistent" + fi + if [ $persistentStateWritePeriod -gt 1 ] || [ $persistentStateWritePeriod -eq 0 -a $forcePersistent -eq 1 ] ; then + if [ $((`date +%s` - lastPersistentStateWrite)) -ge $persistentStateWritePeriod ] || [ $forcePersistent -eq 1 ] ; then + if [ ! -f "$fileStatePersist" ] || ! cmp -s "$fileStateTemp" "$fileStatePersist" ; then + logLine 2 "saveState() writing to persistent state file" + bddbSave "$fileStatePersistPrefix" "$fileStateType" + lastPersistentStateWrite="`date +%s`" + fi ; fi ; fi +} + +loadState () { + bddbClear + bddbLoad "$fileStatePersistPrefix" "$fileStateType" + bddbLoad "$fileStateTempPrefix" "$fileStateType" + logLine 2 "loadState() loaded `bddbCount` entries" +} + +printUsage () { + cat <<-_EOF_ + Usage: beardropper [-m mode] [-a #] [-b #] [-c ...] [-C ...] [-f ...] [-l #] [-j ...] [-p #] [-P #] [-s ...] + + Running Modes (-m) (def: $defaultMode) + follow constantly monitors log + entire processes entire log contents + today processes log entries from same day only + # interval mode, specify time string or seconds + wipe wipe state files, unhook and remove firewall chain + + Options + -a # attempt count before banning (def: $attemptCount) + -b # ban length once attempts hit threshold (def: $banLength) + -c ... firewall chain to record bans (def: $firewallChain) + -C ... firewall chains/positions to hook into (def: $firewallHookChains) + -f ... log facility (syslog facility or stdout/stderr) (def: $logFacility) + -j ... firewall target (def: $firewallTarget) + -l # log level - 0=off, 1=standard, 2=verbose (def: $logLevel) + -p # attempt period which attempt counts must happen in (def: $attemptPeriod) + -P # persistent state file write period (def: $persistentStateWritePeriod) + -s ... persistent state file prefix (def: $fileStatePersistPrefix) + -t ... temporary state file prefix (def: $fileStateTempPrefix) + + All time strings can be specified in seconds, or using BIND style + time strings, ex: 1w2d3h5m30s is 1 week, 2 days, 3 hours, etc... + + _EOF_ +} + +# Begin main logic +# +unset logMode +while getopts a:b:c:C:f:hj:l:m:p:P:s:t: arg ; do + case "$arg" in + a) attemptCount="$OPTARG" ;; + b) banLength="$OPTARG" ;; + c) firewallChain="$OPTARG" ;; + C) firewallHookChains="$OPTARG" ;; + f) logFacility="$OPTARG" ;; + j) firewallTarget="$OPTARG" ;; + l) logLevel="$OPTARG" ;; + m) logMode="$OPTARG" ;; + p) attemptPeriod="$OPTARG" ;; + P) persistentStateWritePeriod="$OPTARG" ;; + s) fileStatePersistPrefix="$OPTARG" ;; + s) fileStatePersistPrefix="$OPTARG" ;; + *) printUsage + exit 254 + esac + shift `expr $OPTIND - 1` +done +[ -z $logMode ] && logMode="$defaultMode" + +fileStateTemp="$fileStateTempPrefix.$fileStateType" +fileStatePersist="$fileStatePersistPrefix.$fileStateType" + +attemptPeriod=`expandBindTime $attemptPeriod` +banLength=`expandBindTime $banLength` +[ $persistentStateWritePeriod != -1 ] && persistentStateWritePeriod=`expandBindTime $persistentStateWritePeriod` +followModeCheckInterval=`expandBindTime $followModeCheckInterval` +exitStatus=0 + +# Here we convert the logRegex list into a sed -f file +fileRegex="/tmp/beardropper.$$.regex" +uciLoad logRegex 's/[`$"'\\\'']//g' '/has invalid shell, rejected$/d' \ + '/^[A-Za-z ]+[0-9: ]+authpriv.warn dropbear\[.+([0-9]+\.){3}[0-9]+/p' \ + '/^[A-Za-z ]+[0-9: ]+authpriv.info dropbear\[.+:\ Exit before auth:.*/p' > "$fileRegex" +lastPersistentStateWrite="`date +%s`" +loadState +bddbCheckStatusAll + +# main event loops + +if [ "$logMode" = follow ] ; then + logLine 1 "Running in follow mode" + readsSinceSave=0 lastCheckAll=0 worstCaseReads=1 tmpFile="/tmp/beardropper.$$.1" +# Verify if these do any good - try saving to a temp. Scope may make saveState useless. + trap "rm -f "$tmpFile" "$fileRegex" ; exit " SIGINT + [ $persistentStateWritePeriod -gt 1 ] && worstCaseReads=$((persistentStateWritePeriod / followModeCheckInterval)) + firstRun=1 + $cmdLogread -f | while read -t $followModeCheckInterval line || true ; do + if [ $firstRun -eq 1 ] ; then + trap "saveState -f" SIGHUP + trap "saveState -f; exit" SIGINT + firstRun=0 + fi + sed -nEf "$fileRegex" > "$tmpFile" <<-_EOF_ + $line + _EOF_ + line="`cat $tmpFile`" + [ -n "$line" ] && processLogLine "$line" + logLine 3 "ReadComp:$readsSinceSave/$worstCaseReads" + if [ $((++readsSinceSave)) -ge $worstCaseReads ] ; then + now="`date +%s`" + if [ $((now - lastCheckAll)) -ge $followModeCheckInterval ] ; then + bddbCheckStatusAll + lastCheckAll="$now" + saveState + readsSinceSave=0 + fi + fi + done +elif [ "$logMode" = entire ] ; then + logLine 1 "Running in entire mode" + $cmdLogread | sed -nEf "$fileRegex" | while read line ; do + processLogLine "$line" + saveState + done + loadState + bddbCheckStatusAll + saveState -f +elif [ "$logMode" = today ] ; then + logLine 1 "Running in today mode" + # merge the egrep into sed with -e /^$formatTodayLogDateRegex/!d + $cmdLogread | egrep "`date +\'$formatTodayLogDateRegex\'`" | sed -nEf "$fileRegex" | while read line ; do + processLogLine "$line" + saveState + done + loadState + bddbCheckStatusAll + saveState -f +elif isValidBindTime "$logMode" ; then + logInterval=`expandBindTime $logMode` + logLine 1 "Running in interval mode (reviewing $logInterval seconds of log entries)..." + timeStart=$((`date +%s` - logInterval)) + $cmdLogread | sed -nEf "$fileRegex" | while read line ; do + timeWhen=`getLogTime "$line"` + [ $timeWhen -ge $timeStart ] && processLogLine "$line" + saveState + done + loadState + bddbCheckStatusAll + saveState -f +elif [ "$logMode" = wipe ] ; then + logLine 2 "Wiping state files, unhooking and removing iptables chains" + wipeFirewall + if [ -f "$fileStateTemp" ] ; then + logLine 1 "Removing non-persistent statefile ($fileStateTemp)" + rm -f "$fileStateTemp" + fi + if [ -f "$fileStatePersist" ] ; then + logLine 1 "Removing persistent statefile ($fileStatePersist)" + rm -f "$fileStatePersist" + fi +else + logLine 0 "Error: invalid log mode ($logMode)" + exitStatus=254 +fi + +rm -f "$fileRegex" +exit $exitStatus diff --git a/luci-app-beardropper/root/usr/share/rpcd/acl.d/luci-app-beardropper.json b/luci-app-beardropper/root/usr/share/rpcd/acl.d/luci-app-beardropper.json new file mode 100644 index 00000000..65451ae8 --- /dev/null +++ b/luci-app-beardropper/root/usr/share/rpcd/acl.d/luci-app-beardropper.json @@ -0,0 +1,11 @@ +{ + "luci-app-beardropper": { + "description": "Grant UCI access for luci-app-beardropper", + "read": { + "uci": [ "beardropper" ] + }, + "write": { + "uci": [ "beardropper" ] + } + } +} \ No newline at end of file diff --git a/luci-app-cloudflarespeedtest/Makefile b/luci-app-cloudflarespeedtest/Makefile new file mode 100644 index 00000000..ea1d672f --- /dev/null +++ b/luci-app-cloudflarespeedtest/Makefile @@ -0,0 +1,21 @@ +# Author: mingxiaoyu (fengying0347@163.com) +# +# Licensed to the public under the GNU General Public License v3. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-cloudflarespeedtest + +LUCI_TITLE:=LuCI support for Cloudflares Speed Test +LUCI_DEPENDS:=+cdnspeedtest +openssl-util +curl +LUCI_PKGARCH:=all +PKG_VERSION:=1.5.2 +PKG_RELEASE:=0 +PKG_LICENSE:=AGPL-3.0 +PKG_MAINTAINER:=mingxiaoyu + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/luci-app-cloudflarespeedtest/luasrc/controller/cloudflarespeedtest.lua b/luci-app-cloudflarespeedtest/luasrc/controller/cloudflarespeedtest.lua new file mode 100644 index 00000000..90a94ced --- /dev/null +++ b/luci-app-cloudflarespeedtest/luasrc/controller/cloudflarespeedtest.lua @@ -0,0 +1,50 @@ +-- Copyright (C) 2020 mingxiaoyu +-- Licensed to the public under the GNU General Public License v3. +module("luci.controller.cloudflarespeedtest",package.seeall) + +function index() + + if not nixio.fs.access('/etc/config/cloudflarespeedtest') then + return + end + + local page + page = entry({"admin", "services", "cloudflarespeedtest"}, firstchild(), _("Cloudflare Speed Test"), 99) + page.dependent = false + page.acl_depends = { "luci-app-cloudflarespeedtest" } + + entry({"admin", "services", "cloudflarespeedtest", "general"}, cbi("cloudflarespeedtest/cloudflarespeedtest"), _("Base Setting"), 1) + entry({"admin", "services", "cloudflarespeedtest", "logread"}, form("cloudflarespeedtest/logread"), _("Logs"), 2) + + entry({"admin", "services", "cloudflarespeedtest", "status"}, call("act_status")).leaf = true + entry({"admin", "services", "cloudflarespeedtest", "stop"}, call("act_stop")) + entry({"admin", "services", "cloudflarespeedtest", "start"}, call("act_start")) + entry({"admin", "services", "cloudflarespeedtest", "getlog"}, call("get_log")) +end + +function act_status() + local e = {} + e.running = luci.sys.call("busybox ps -w | grep cdnspeedtest | grep -v grep >/dev/null") == 0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end + +function act_stop() + luci.sys.call("busybox ps -w | grep cdnspeedtest | grep -v grep | xargs kill -9 >/dev/null") + luci.http.write('') +end + +function act_start() + act_stop() + luci.sys.call("/usr/bin/cloudflarespeedtest/cloudflarespeedtest.sh start") + luci.http.write('') +end + +function get_log() + local fs = require "nixio.fs" + local e = {} + e.running = luci.sys.call("busybox ps -w | grep cdnspeedtest | grep -v grep >/dev/null") == 0 + e.log= fs.readfile("/var/log/cloudflarespeedtest.log") or "" + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end diff --git a/luci-app-cloudflarespeedtest/luasrc/model/cbi/cloudflarespeedtest/cloudflarespeedtest.lua b/luci-app-cloudflarespeedtest/luasrc/model/cbi/cloudflarespeedtest/cloudflarespeedtest.lua new file mode 100644 index 00000000..552c30ec --- /dev/null +++ b/luci-app-cloudflarespeedtest/luasrc/model/cbi/cloudflarespeedtest/cloudflarespeedtest.lua @@ -0,0 +1,335 @@ +require("luci.sys") + +local uci = luci.model.uci.cursor() + +m = Map('cloudflarespeedtest') +m.title = translate('Cloudflare Speed Test') +m.description = 'GitHub' + +-- [[ 基本设置 ]]-- + +s = m:section(NamedSection, 'global') +s.addremove = false +s.anonymous = true + +o=s:option(Flag,"enabled",translate("Enabled")) +o.description = translate("Enabled scheduled task test Cloudflare IP") +o.rmempty=false +o.default = 0 + +o=s:option(Flag,"ipv6_enabled",translate("IPv6 Enabled")) +o.description = translate("Provides only one method, if IPv6 is enabled, IPv4 will not be tested") +o.default = 0 +o.rmempty=false + +o=s:option(Value,"speed",translate("Broadband speed")) +o.description =translate("100M broadband download speed is about 12M/s. It is not recommended to fill in an excessively large value, and it may run all the time."); +o.datatype ="uinteger" +o.rmempty=false + +o=s:option(Value,"custome_url",translate("Custome Url")) +o.description = translate("How to create") +o.rmempty=false + +o=s:option(Flag,"custome_cors_enabled",translate("Custome Cron Enabled")) +o.default = 0 +o.rmempty=false + +o = s:option(Value, "custome_cron", translate("Custome Cron")) +o:depends("custome_cors_enabled", 1) + +hour = s:option(Value, "hour", translate("Hour")) +hour.datatype = "range(0,23)" +hour:depends("custome_cors_enabled", 0) + +minute = s:option(Value, "minute", translate("Minute")) +minute.datatype = "range(0,59)" +minute:depends("custome_cors_enabled", 0) + +o = s:option(ListValue, "proxy_mode", translate("Proxy Mode")) +o:value("nil", translate("HOLD")) +o.description = translate("during the speed testing, swith to which mode") +o:value("gfw", translate("GFW List")) +o:value("close", translate("CLOSE")) +o.default = "gfw" + +o=s:option(Flag,"advanced",translate("Advanced")) +o.description = translate("Not recommended") +o.default = 0 +o.rmempty=false + +o = s:option(Value, "threads", translate("Thread")) +o.datatype ="uinteger" +o.default = 200 +o.rmempty=true +o:depends("advanced", 1) + +o = s:option(Value, "tl", translate("Average Latency Cap")) +o.datatype ="uinteger" +o.default = 200 +o.rmempty=true +o:depends("advanced", 1) + +o = s:option(Value, "tll", translate("Average Latency Lower Bound")) +o.datatype ="uinteger" +o.default = 40 +o.rmempty=true +o:depends("advanced", 1) + +o = s:option(Value, "t", translate("Delayed speed measurement time")) +o.datatype ="uinteger" +o.default = 4 +o.rmempty=true +o:depends("advanced", 1) + +o = s:option(Value, "dt", translate("Download speed test time")) +o.datatype ="uinteger" +o.default = 10 +o.rmempty=true +o:depends("advanced", 1) + +o = s:option(Value, "dn", translate("Number of download speed tests")) +o.datatype ="uinteger" +o.default = 1 +o.rmempty=true +o:depends("advanced", 1) + +o = s:option(Flag, "dd", translate("Disable download speed test")) +o.default = 0 +o.rmempty=true +o:depends("advanced", 1) + +o = s:option(Value, "tp", translate("Port")) +o.rmempty=true +o.default = 443 +o.datatype ="port" +o:depends("advanced", 1) + +o = s:option(DummyValue, '', '') +o.rawhtml = true +o.template = "cloudflarespeedtest/actions" + +s = m:section(NamedSection, "servers", "section", translate("Third party applications settings")) + +if nixio.fs.access("/etc/config/shadowsocksr") then + s:tab("ssr", translate("Shadowsocksr Plus+")) + + o=s:taboption("ssr", Flag, "ssr_enabled",translate("Shadowsocksr Plus+ Enabled")) + o.rmempty=true + + local ssr_server_table = {} + uci:foreach("shadowsocksr", "servers", function(s) + if s.alias then + ssr_server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.v2ray_protocol or s.type), s.alias} + elseif s.server and s.server_port then + ssr_server_table[s[".name"]] = "[%s]:%s:%s" % {string.upper(s.v2ray_protocol or s.type), s.server, s.server_port} + end + end) + + local ssr_key_table = {} + for key, _ in pairs(ssr_server_table) do + table.insert(ssr_key_table, key) + end + + table.sort(ssr_key_table) + + o = s:taboption("ssr", DynamicList, "ssr_services", + translate("Shadowsocksr Servers"), + translate("Please select a service")) + + for _, key in pairs(ssr_key_table) do + o:value(key, ssr_server_table[key]) + end + o:depends("ssr_enabled", 1) + o.forcewrite = true + +end + + +if nixio.fs.access("/etc/config/passwall") then + s:tab("passwalltab", translate("passwall")) + + o=s:taboption("passwalltab", Flag, "passwall_enabled",translate("Passwall Enabled")) + o.rmempty=true + + local passwall_server_table = {} + uci:foreach("passwall", "nodes", function(s) + if s.remarks then + passwall_server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.protocol or s.type), s.remarks} + end + end) + + local passwall_key_table = {} + for key, _ in pairs(passwall_server_table) do + table.insert(passwall_key_table, key) + end + + table.sort(passwall_key_table) + + o = s:taboption("passwalltab", DynamicList, "passwall_services", + translate("Passwall Servers"), + translate("Please select a service")) + + for _, key in pairs(passwall_key_table) do + o:value(key, passwall_server_table[key]) + end + o:depends("passwall_enabled", 1) + o.forcewrite = true + +end + +if nixio.fs.access("/etc/config/passwall2") then + s:tab("passwall2tab", translate("passwall2")) + + o=s:taboption("passwall2tab", Flag, "passwall2_enabled",translate("PassWall2 Enabled")) + o.rmempty=true + + local passwall2_server_table = {} + uci:foreach("passwall2", "nodes", function(s) + if s.remarks then + passwall2_server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.protocol or s.type), s.remarks} + end + end) + + local passwall2_key_table = {} + for key, _ in pairs(passwall2_server_table) do + table.insert(passwall2_key_table, key) + end + + table.sort(passwall2_key_table) + + o = s:taboption("passwall2tab", DynamicList, "passwall2_services", + translate("Passwall2 Servers"), + translate("Please select a service")) + + for _, key in pairs(passwall2_key_table) do + o:value(key, passwall2_server_table[key]) + end + o:depends("passwall2_enabled", 1) + o.forcewrite = true + +end + +s:tab("bypasstab", translate("Bypass")) +if nixio.fs.access("/etc/config/bypass") then + + o=s:taboption("bypasstab", Flag, "bypass_enabled",translate("Bypass Enabled")) + o.rmempty=true + + local bypass_server_table = {} + uci:foreach("bypass", "servers", function(s) + if s.alias then + bypass_server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.protocol or s.type), s.alias} + elseif s.server and s.server_port then + bypass_server_table[s[".name"]] = "[%s]:%s:%s" % {string.upper(s.protocol or s.type), s.server, s.server_port} + end + end) + + local bypass_key_table = {} + for key, _ in pairs(bypass_server_table) do + table.insert(bypass_key_table, key) + end + + table.sort(bypass_key_table) + + o = s:taboption("bypasstab", DynamicList, "bypass_services", + translate("Bypass Servers"), + translate("Please select a service")) + + for _, key in pairs(bypass_key_table) do + o:value(key, bypass_server_table[key]) + end + o:depends("bypass_enabled", 1) + o.forcewrite = true + +end + +s:tab("vssrtab", translate("Vssr")) +if nixio.fs.access("/etc/config/vssr") then + + o=s:taboption("vssrtab", Flag, "vssr_enabled",translate("Vssr Enabled")) + o.rmempty=true + + local vssr_server_table = {} + uci:foreach("vssr", "servers", function(s) + if s.alias then + vssr_server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.protocol or s.type), s.alias} + elseif s.server and s.server_port then + vssr_server_table[s[".name"]] = "[%s]:%s:%s" % {string.upper(s.protocol or s.type), s.server, s.server_port} + end + end) + + local vssr_key_table = {} + for key, _ in pairs(vssr_server_table) do + table.insert(vssr_key_table, key) + end + + table.sort(vssr_key_table) + + o = s:taboption("vssrtab", DynamicList, "vssr_services", + translate("Vssr Servers"), + translate("Please select a service")) + + for _, key in pairs(vssr_key_table) do + o:value(key, vssr_server_table[key]) + end + o:depends("vssr_enabled", 1) + o.forcewrite = true + +end + +s:tab("dnstab", translate("DNS")) + +o=s:taboption("dnstab", Flag, "DNS_enabled",translate("DNS Enabled")) + +o=s:taboption("dnstab", ListValue, "DNS_type", translate("DNS Type")) +o:value("aliyu", translate("AliyuDNS")) +o:depends("DNS_enabled", 1) + +o=s:taboption("dnstab", Value,"app_key",translate("Access Key ID")) +o.rmempty=true +o:depends("DNS_enabled", 1) +o=s:taboption("dnstab", Value,"app_secret",translate("Access Key Secret")) +o.rmempty=true +o:depends("DNS_enabled", 1) + +o=s:taboption("dnstab", Value,"main_domain",translate("Main Domain"),translate("For example: test.github.com -> github.com")) +o.rmempty=true +o:depends("DNS_enabled", 1) +o=s:taboption("dnstab", DynamicList,"sub_domain",translate("Sub Domain"),translate("For example: test.github.com -> test")) +o.rmempty=true +o:depends("DNS_enabled", 1) + +o=s:taboption("dnstab", ListValue, "line", translate("Lines")) +o:value("default", translate("default")) +o:value("telecom", translate("telecom")) +o:value("unicom", translate("unicom")) +o:value("mobile", translate("mobile")) +o:depends("DNS_enabled", 1) +o.default ="telecom" + +s:tab("dnshost", translate("HOST")) +o=s:taboption("dnshost", Flag, "HOST_enabled",translate("HOST Enabled")) +o=s:taboption("dnshost", Value,"host_domain",translate("Domain")) +o.rmempty=true +o:depends("HOST_enabled", 1) + +e=m:section(TypedSection,"global",translate("Best IP")) +e.anonymous=true +local a="/usr/share/cloudflarespeedtestresult.txt" +tvIPs=e:option(TextValue,"syipstext") +tvIPs.rows=8 +tvIPs.readonly="readonly" +tvIPs.wrap="off" + +function tvIPs.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 +tvIPs.write=function(e,e,e) +end + +return m diff --git a/luci-app-cloudflarespeedtest/luasrc/model/cbi/cloudflarespeedtest/logread.lua b/luci-app-cloudflarespeedtest/luasrc/model/cbi/cloudflarespeedtest/logread.lua new file mode 100644 index 00000000..1af7b661 --- /dev/null +++ b/luci-app-cloudflarespeedtest/luasrc/model/cbi/cloudflarespeedtest/logread.lua @@ -0,0 +1,9 @@ +log = SimpleForm("logview") +log.submit = false +log.reset = false + +t = log:field(DummyValue, '', '') +t.rawhtml = true +t.template = 'cloudflarespeedtest/logread' + +return log diff --git a/luci-app-cloudflarespeedtest/luasrc/view/cloudflarespeedtest/actions.htm b/luci-app-cloudflarespeedtest/luasrc/view/cloudflarespeedtest/actions.htm new file mode 100644 index 00000000..cd117f88 --- /dev/null +++ b/luci-app-cloudflarespeedtest/luasrc/view/cloudflarespeedtest/actions.htm @@ -0,0 +1,56 @@ +<%+cbi/valueheader%> + + +
+

<%:Collecting data...%>

+
+ + +
+ + +
+ +<%+cbi/valuefooter%> \ No newline at end of file diff --git a/luci-app-cloudflarespeedtest/luasrc/view/cloudflarespeedtest/logread.htm b/luci-app-cloudflarespeedtest/luasrc/view/cloudflarespeedtest/logread.htm new file mode 100644 index 00000000..c118d57d --- /dev/null +++ b/luci-app-cloudflarespeedtest/luasrc/view/cloudflarespeedtest/logread.htm @@ -0,0 +1,23 @@ +<%+cbi/valueheader%> +<%:Auto refresh%> + + + +<%+cbi/valuefooter%> \ No newline at end of file diff --git a/luci-app-cloudflarespeedtest/po/zh-cn b/luci-app-cloudflarespeedtest/po/zh-cn new file mode 120000 index 00000000..8d69574d --- /dev/null +++ b/luci-app-cloudflarespeedtest/po/zh-cn @@ -0,0 +1 @@ +zh_Hans \ No newline at end of file diff --git a/luci-app-cloudflarespeedtest/po/zh_Hans/cloudflarespeedtest.po b/luci-app-cloudflarespeedtest/po/zh_Hans/cloudflarespeedtest.po new file mode 100644 index 00000000..bbc26bfb --- /dev/null +++ b/luci-app-cloudflarespeedtest/po/zh_Hans/cloudflarespeedtest.po @@ -0,0 +1,221 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2022-02-10 20:44+0000\n" +"Last-Translator: mingxiaoyu \n" +"Language: zh_Hans\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: Weblate 4.8-dev\n" + +msgid "GitHub" +msgstr "GitHub项目地址" + +msgid "Cloudflare Speed Test" +msgstr "Cloudflare速度测试" + +msgid "Base Setting" +msgstr "基本设置" + +msgid "Logs" +msgstr "日志" + +msgid "Enabled" +msgstr "启用" + +msgid "Enabled scheduled task test Cloudflare IP" +msgstr "启用计划任务测试 Cloudflare IP" + +msgid "Broadband speed" +msgstr "宽带速度" + +msgid "Custome Url Enabled" +msgstr "启用自定义地址" + +msgid "Custome Url" +msgstr "自定义地址" + +msgid "Custome Cron Enabled" +msgstr "启用自定义Cron" + +msgid "Custome Cron" +msgstr "自定义Cron" + +msgid "Hour" +msgstr "小时" + +msgid "Minute" +msgstr "分钟" + +msgid "100M broadband download speed is about 12M/s. It is not recommended to fill in an excessively large value, and it may run all the time." +msgstr "100M的宽带下载大概为速度12M/s。不推荐填过大的值,可能出现一直运行。" + +msgid "Shadowsocksr Plus+ Enabled" +msgstr "启用ShadowSocksR Plus+" + +msgid "Passwall Enabled" +msgstr "启用Passwall" + +msgid "PassWall2 Enabled" +msgstr "启用PassWall2" + +msgid "Bypass Enabled" +msgstr "启用Bypass" + +msgid "Vssr Enabled" +msgstr "启用Vssr" +msgid "Shadowsocksr Servers" +msgstr "ShadowSocksR Plus+服务" + +msgid "Passwall Servers" +msgstr "Passwall服务" + +msgid "Passwall2 Servers" +msgstr "Passwall2服务" + +msgid "Bypass Servers" +msgstr "Bypass服务" + +msgid "Vssr Servers" +msgstr "Vssr服务" + +msgid "Please select a service" +msgstr "请选择一项服务" + +msgid "Speed Test" +msgstr "速度测试" + +msgid "Best IP" +msgstr "最佳IP" + +msgid "TEST AND APPLY" +msgstr "测试并应用" + +msgid "STOP" +msgstr "停止" + +msgid "Advanced" +msgstr "高级模式" + +msgid "Thread" +msgid "线程数" + +msgid "Average Latency Cap" +msgstr "平均延迟上限" + +msgid "Average Latency Lower Bound" +msgstr "平均延迟下限" + +msgid "IPv6 Enabled" +msgstr "启用IPv6" + +msgid "Delayed speed measurement time" +msgstr "延迟测速次数" + +msgid "Download speed test time" +msgstr "下载测速时间" + +msgid "Number of download speed tests" +msgstr "下载测速数量" + +msgid "Disable download speed test" +msgstr "禁用下载测速" + +msgid "Port" +msgstr "端口" + +msgid "Not recommended" +msgstr "不推荐" + +msgid "Provides only one method, if IPv6 is enabled, IPv4 will not be tested" +msgstr "IPv4和IPv6只能选一个!!!!!!" + +msgid "How to create" +msgstr "如何创建" + +msgid "RUNNING" +msgstr "运行中" + +msgid "NOT RUNNING" +msgstr "未运行" + +msgid "Collecting data..." +msgstr "收集数据中..." + +msgid "Third party applications settings" +msgstr "第三方应用设置" + +msgid "Auto refresh" +msgstr "自动刷新" + +msgid "Status" +msgstr "状态" + +msgid "Proxy Mode" +msgstr "代理模式" + +msgid "HOLD" +msgstr "保持" + +msgid "GFW List" +msgid "GFW列表" + +msgid "CLOSE" +msgstr "关闭" + +msgid "during the speed testing, swith to which mode" +msgstr "在速度测试期间,切换到哪种模式" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Enabled" +msgstr "启用DNS" + +msgid "DNS Type" +msgstr "DNS类型" + +msgid "AliyuDNS" +msgstr "阿里云DNS" + +msgid "Access Key ID" +msgstr "Access Key ID" + +msgid "Access Key Secret" +msgstr "Access Key Secret" + +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 "Lines" +msgstr "解析线路" + +msgid "default" +msgstr "默认" + +msgid "telecom" +msgstr "电信" + +msgid "unicom" +msgstr "联通" + +msgid "mobile" +msgstr "移动" + +msgid "HOST Enabled" +msgstr "启用HOST" + +msgid "Domain" +msgstr "域名" diff --git a/luci-app-cloudflarespeedtest/root/etc/config/cloudflarespeedtest b/luci-app-cloudflarespeedtest/root/etc/config/cloudflarespeedtest new file mode 100644 index 00000000..c318ca8f --- /dev/null +++ b/luci-app-cloudflarespeedtest/root/etc/config/cloudflarespeedtest @@ -0,0 +1,21 @@ + +config global 'global' + option hour '5' + option minute '0' + option enabled '0' + option ipv6_enabled '0' + option advanced '0' + option tl '200' + option tll '40' + option custome_url 'https://speed.cloudflare.com/__down?bytes=300000000' + option threads '200' + option speed '100' + +config servers 'servers' + option ssr_enabled '0' + option passwall_enabled '0' + option passwall2_enabled '0' + option bypass_enabled '0' + option vssr_enabled '0' + option DNS_enabled '0' + diff --git a/luci-app-cloudflarespeedtest/root/etc/init.d/cloudflarespeedtest b/luci-app-cloudflarespeedtest/root/etc/init.d/cloudflarespeedtest new file mode 100755 index 00000000..c0b6320a --- /dev/null +++ b/luci-app-cloudflarespeedtest/root/etc/init.d/cloudflarespeedtest @@ -0,0 +1,59 @@ +#!/bin/sh /etc/rc.common + +START=99 + +USE_PROCD=1 + +CRON_FILE=/etc/crontabs/root + +service_triggers() { + procd_add_reload_trigger "cloudflarespeedtest" +} + +add_cron(){ + local enabled + config_get_bool enabled $1 enabled + + del_cron + + if [ $enabled = 1 ] ; then + local minute + local hour + local custome_cors_enabled + local custome_cron + + config_get minute $1 minute + config_get hour $1 hour + config_get_bool custome_cors_enabled $1 custome_cors_enabled + config_get custome_cron $1 custome_cron + + if [ $custome_cors_enabled = 1 ] ; then + echo "$custome_cron /usr/bin/cloudflarespeedtest/cloudflarespeedtest.sh start" >> $CRON_FILE + else + echo "$minute $hour * * * /usr/bin/cloudflarespeedtest/cloudflarespeedtest.sh start" >> $CRON_FILE + fi + crontab $CRON_FILE + fi +} + +del_cron(){ + sed -i '/cloudflarespeedtest/d' $CRON_FILE + /etc/init.d/cron restart +} + +stop_instance(){ + del_cron +} + +stop_service() { + config_load cloudflarespeedtest + config_foreach stop_instance global +} +start_service() { + config_load cloudflarespeedtest + config_foreach add_cron global +} +reload_service() { + stop + start +} \ No newline at end of file diff --git a/luci-app-cloudflarespeedtest/root/usr/bin/cloudflarespeedtest/aliddns.sh b/luci-app-cloudflarespeedtest/root/usr/bin/cloudflarespeedtest/aliddns.sh new file mode 100755 index 00000000..250f4796 --- /dev/null +++ b/luci-app-cloudflarespeedtest/root/usr/bin/cloudflarespeedtest/aliddns.sh @@ -0,0 +1,81 @@ +#!/bin/sh +LOG_FILE='/var/log/cloudflarespeedtest.log' + +echolog() { + local d="$(date "+%Y-%m-%d %H:%M:%S")" + echo -e "$d: $*" >>$LOG_FILE +} + +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() { + # send_request action args + local args="AccessKeyId=$ak_id&Action=$1&Format=json&$2&Version=2015-01-09" + local hash=$(urlencode $(echo -n "GET&%2F&$(urlencode $args)" | openssl dgst -sha1 -hmac "$ak_sec&" -binary | openssl base64)) + curl -sSL --connect-timeout 5 "http://alidns.aliyuncs.com/?$args&Signature=$hash" +} + +get_recordid() { + sed 's/RR/\n/g' | sed -n 's/.*RecordId[^0-9]*\([0-9]*\).*/\1\n/p' | sort -ru | sed /^$/d +} + +query_recordid() { + send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$sub_dm.$main_dm&Timestamp=$timestamp&Type=A" +} + +update_record() { + send_request "UpdateDomainRecord" "Line=$line&RR=$sub_dm&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=$type&Value=$ip" +} + +add_record() { + send_request "AddDomainRecord&DomainName=$main_dm" "Line=$line&RR=$sub_dm&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=$type&Value=$ip" +} + +del_record() { + send_request "DeleteDomainRecord" "RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp" +} + +aliddns() { + ak_id=$1 + ak_sec=$2 + main_dm=$3 + sub_dm=$4 + line=$5 + isIpv6=$6 + ip=$7 + type=A + + if [ $isIpv6 -eq "1" ] ;then + type=AAAA + fi +echo $ip +echo $type + rrid=`query_recordid | get_recordid` + + if [ -z "$rrid" ]; then + rrid=`add_record | get_recordid` + echolog "ADD record $rrid" + else + update_record $rrid + echolog "UPDATE record $rrid" + fi + if [ -z "$rrid" ]; then + # failed + echolog "# ERROR, Please Check Config/Time" + fi +} + + +timestamp=$(date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ") + +aliddns "$@" diff --git a/luci-app-cloudflarespeedtest/root/usr/bin/cloudflarespeedtest/cloudflarespeedtest.sh b/luci-app-cloudflarespeedtest/root/usr/bin/cloudflarespeedtest/cloudflarespeedtest.sh new file mode 100644 index 00000000..1147a2a2 --- /dev/null +++ b/luci-app-cloudflarespeedtest/root/usr/bin/cloudflarespeedtest/cloudflarespeedtest.sh @@ -0,0 +1,318 @@ +#!/bin/sh + +LOG_FILE='/var/log/cloudflarespeedtest.log' +IP_FILE='/usr/share/cloudflarespeedtestresult.txt' +IPV4_TXT='/usr/share/CloudflareSpeedTest/ip.txt' +IPV6_TXT='/usr/share/CloudflareSpeedTest/ipv6.txt' + +function get_global_config(){ + while [[ "$*" != "" ]]; do + eval ${1}='`uci get cloudflarespeedtest.global.$1`' 2>/dev/null + shift + done +} + +function get_servers_config(){ + while [[ "$*" != "" ]]; do + eval ${1}='`uci get cloudflarespeedtest.servers.$1`' 2>/dev/null + shift + done +} + +echolog() { + local d="$(date "+%Y-%m-%d %H:%M:%S")" + echo -e "$d: $*" + echo -e "$d: $*" >>$LOG_FILE +} + +function read_config(){ + get_global_config "enabled" "speed" "custome_url" "threads" "custome_cors_enabled" "custome_cron" "t" "tp" "dt" "dn" "dd" "tl" "tll" "ipv6_enabled" "advanced" "proxy_mode" + get_servers_config "ssr_services" "ssr_enabled" "passwall_enabled" "passwall_services" "passwall2_enabled" "passwall2_services" "bypass_enabled" "bypass_services" "vssr_enabled" "vssr_services" "DNS_enabled" "HOST_enabled" +} + +function appinit(){ + ssr_started=''; + passwall_started=''; + passwall2_started=''; + bypass_started=''; + vssr_started=''; +} + +function speed_test(){ + + rm -rf $LOG_FILE + + command="/usr/bin/cdnspeedtest -sl $((speed*125/1000)) -url ${custome_url} -o ${IP_FILE}" + + if [ $ipv6_enabled -eq "1" ] ;then + command="${command} -f ${IPV6_TXT}" + else + command="${command} -f ${IPV4_TXT}" + fi + + if [ $advanced -eq "1" ] ; then + command="${command} -tl ${tl} -tll ${tll} -n ${threads} -t ${t} -dt ${dt} -dn ${dn}" + if [ $dd -eq "1" ] ; then + command="${command} -dd" + fi + if [ $tp -ne "443" ] ; then + command="${command} -tp ${tp}" + fi + else + command="${command} -tl 200 -tll 40 -n 200 -t 4 -dt 10 -dn 1" + fi + + appinit + + ssr_original_server=$(uci get shadowsocksr.@global[0].global_server 2>/dev/null) + ssr_original_run_mode=$(uci get shadowsocksr.@global[0].run_mode 2>/dev/null) + if [ "x${ssr_original_server}" != "xnil" ] && [ "x${ssr_original_server}" != "x" ] ;then + if [ $proxy_mode == "close" ] ;then + uci set shadowsocksr.@global[0].global_server="nil" + elif [ $proxy_mode == "gfw" ] ;then + uci set shadowsocksr.@global[0].run_mode="gfw" + fi + ssr_started='1'; + uci commit shadowsocksr + /etc/init.d/shadowsocksr restart + fi + + passwall_server_enabled=$(uci get passwall.@global[0].enabled 2>/dev/null) + passwall_original_run_mode=$(uci get passwall.@global[0].tcp_proxy_mode 2>/dev/null) + if [ "x${passwall_server_enabled}" == "x1" ] ;then + if [ $proxy_mode == "close" ] ;then + uci set passwall.@global[0].enabled="0" + elif [ $proxy_mode == "gfw" ] ;then + uci set passwall.@global[0].tcp_proxy_mode="gfwlist" + fi + passwall_started='1'; + uci commit passwall + /etc/init.d/passwall restart 2>/dev/null + fi + + passwall2_server_enabled=$(uci get passwall2.@global[0].enabled 2>/dev/null) + passwall2_original_run_mode=$(uci get passwall2.@global[0].tcp_proxy_mode 2>/dev/null) + if [ "x${passwall2_server_enabled}" == "x1" ] ;then + if [ $proxy_mode == "close" ] ;then + uci set passwall2.@global[0].enabled="0" + elif [ $proxy_mode == "gfw" ] ;then + uci set passwall2.@global[0].tcp_proxy_mode="gfwlist" + fi + passwall2_started='1'; + uci commit passwall2 + /etc/init.d/passwall2 restart 2>/dev/null + fi + + vssr_original_server=$(uci get vssr.@global[0].global_server 2>/dev/null) + vssr_original_run_mode=$(uci get vssr.@global[0].run_mode 2>/dev/null) + if [ "x${vssr_original_server}" != "xnil" ] && [ "x${vssr_original_server}" != "x" ] ;then + + if [ $proxy_mode == "close" ] ;then + uci set vssr.@global[0].global_server="nil" + elif [ $proxy_mode == "gfw" ] ;then + uci set vssr.@global[0].run_mode="gfw" + fi + vssr_started='1'; + uci commit vssr + /etc/init.d/vssr restart + fi + + bypass_original_server=$(uci get bypass.@global[0].global_server 2>/dev/null) + bypass_original_run_mode=$(uci get bypass.@global[0].run_mode 2>/dev/null) + if [ "x${bypass_original_server}" != "x" ] ;then + if [ $proxy_mode == "close" ] ;then + uci set bypass.@global[0].global_server="" + elif [ $proxy_mode == "gfw" ] ;then + uci set bypass.@global[0].run_mode="gfw" + fi + bypass_started='1'; + uci commit bypass + /etc/init.d/bypass restart + fi + + echo $command >> $LOG_FILE 2>&1 + echolog "-----------start----------" + $command >> $LOG_FILE 2>&1 + echolog "-----------end------------" +} + +function ip_replace(){ + + # 获取最快 IP(从 result.csv 结果文件中获取第一个 IP) + bestip=$(sed -n "2,1p" $IP_FILE | awk -F, '{print $1}') + if [[ -z "${bestip}" ]]; then + echolog "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." + else + host_ip + alidns_ip + ssr_best_ip + vssr_best_ip + bypass_best_ip + passwall_best_ip + passwall2_best_ip + restart_app + + fi +} + +function host_ip() { + if [ "x${HOST_enabled}" == "x1" ] ;then + get_servers_config "host_domain" + HOSTS_LINE=$(echo "$host_domain" | sed 's/,/ /g' | sed "s/^/$bestip /g") + host_domain_first=$(echo "$host_domain" | awk -F, '{print $1}') + + if [ -n "$(grep $host_domain_first /etc/hosts)" ] + then + echo $host_domain_first + sed -i".bak" "/$host_domain_first/d" /etc/hosts + echo $HOSTS_LINE >> /etc/hosts; + else + echo $HOSTS_LINE >> /etc/hosts; + fi + /etc/init.d/dnsmasq reload &>/dev/null + echolog "HOST 完成" + fi +} + +function passwall_best_ip(){ + if [ "x${passwall_enabled}" == "x1" ] ;then + echolog "设置passwall IP" + for ssrname in $passwall_services + do + echo $ssrname + uci set passwall.$ssrname.address="${bestip}" + done + uci commit passwall + fi +} + +function passwall2_best_ip(){ + if [ "x${passwall2_enabled}" == "x1" ] ;then + echolog "设置passwall2 IP" + for ssrname in $passwall2_services + do + echo $ssrname + uci set passwall2.$ssrname.address="${bestip}" + done + uci commit passwall2 + fi +} + +function ssr_best_ip(){ + if [ "x${ssr_enabled}" == "x1" ] ;then + echolog "设置ssr IP" + for ssrname in $ssr_services + do + echo $ssrname + uci set shadowsocksr.$ssrname.server="${bestip}" + uci set shadowsocksr.$ssrname.ip="${bestip}" + done + uci commit shadowsocksr + fi +} + +function vssr_best_ip(){ + if [ "x${vssr_enabled}" == "x1" ] ;then + echolog "设置Vssr IP" + for ssrname in $vssr_services + do + echo $ssrname + uci set vssr.$ssrname.server="${bestip}" + done + uci commit vssr + fi +} + +function bypass_best_ip(){ + if [ "x${bypass_enabled}" == "x1" ] ;then + echolog "设置Bypass IP" + for ssrname in $bypass_services + do + echo $ssrname + uci set bypass.$ssrname.server="${bestip}" + done + uci commit bypass + fi +} + +function restart_app(){ + if [ "x${ssr_started}" == "x1" ] ;then + if [ $proxy_mode == "close" ] ;then + uci set shadowsocksr.@global[0].global_server="${ssr_original_server}" + elif [ $proxy_mode == "gfw" ] ;then + uci set shadowsocksr.@global[0].run_mode="${ssr_original_run_mode}" + fi + uci commit shadowsocksr + /etc/init.d/shadowsocksr restart &>/dev/null + echolog "ssr重启完成" + fi + + if [ "x${passwall_started}" == "x1" ] ;then + if [ $proxy_mode == "close" ] ;then + uci set passwall.@global[0].enabled="${passwall_server_enabled}" + elif [ $proxy_mode == "gfw" ] ;then + uci set passwall.@global[0].tcp_proxy_mode="${passwall_original_run_mode}" + fi + uci commit passwall + /etc/init.d/passwall restart 2>/dev/null + echolog "passwall重启完成" + fi + + if [ "x${passwall2_started}" == "x1" ] ;then + if [ $proxy_mode == "close" ] ;then + uci set passwall2.@global[0].enabled="${passwall2_server_enabled}" + elif [ $proxy_mode == "gfw" ] ;then + uci set passwall2.@global[0].tcp_proxy_mode="${passwall2_original_run_mode}" + fi + uci commit passwall2 + /etc/init.d/passwall2 restart 2>/dev/null + echolog "passwall2重启完成" + fi + + if [ "x${vssr_started}" == "x1" ] ;then + if [ $proxy_mode == "close" ] ;then + uci set vssr.@global[0].global_server="${vssr_original_server}" + elif [ $proxy_mode == "gfw" ] ;then + uci set vssr.@global[0].run_mode="${vssr_original_run_mode}" + fi + uci commit vssr + /etc/init.d/vssr restart &>/dev/null + echolog "Vssr重启完成" + fi + + if [ "x${bypass_started}" == "x1" ] ;then + if [ $proxy_mode == "close" ] ;then + uci set bypass.@global[0].global_server="${bypass_original_server}" + elif [ $proxy_mode == "gfw" ] ;then + uci set bypass.@global[0].run_mode="${bypass_original_run_mode}" + fi + uci commit bypass + /etc/init.d/bypass restart &>/dev/null + echolog "Bypass重启完成" + fi +} + +function alidns_ip(){ + if [ "x${DNS_enabled}" == "x1" ] ;then + get_servers_config "DNS_type" "app_key" "app_secret" "main_domain" "sub_domain" "line" + if [ $DNS_type == "aliyu" ] ;then + for sub in $sub_domain + do + /usr/bin/cloudflarespeedtest/aliddns.sh $app_key $app_secret $main_domain $sub $line $ipv6_enabled $bestip + echolog "更新域名${sub}阿里云DNS完成" + sleep 1s + done + fi + echo "aliyun done" + fi +} + +read_config + +# 启动参数 +if [ "$1" ] ;then + [ $1 == "start" ] && speed_test && ip_replace + [ $1 == "test" ] && speed_test + [ $1 == "replace" ] && ip_replace + exit +fi diff --git a/luci-app-cloudflarespeedtest/root/usr/share/rpcd/acl.d/luci-app-cloudflarespeedtest.json b/luci-app-cloudflarespeedtest/root/usr/share/rpcd/acl.d/luci-app-cloudflarespeedtest.json new file mode 100644 index 00000000..b4940aba --- /dev/null +++ b/luci-app-cloudflarespeedtest/root/usr/share/rpcd/acl.d/luci-app-cloudflarespeedtest.json @@ -0,0 +1,11 @@ +{ + "luci-app-cloudflarespeedtest": { + "description": "Grant UCI access for luci-app-cloudflarespeedtest", + "read": { + "uci": [ "cloudflarespeedtest" ] + }, + "write": { + "uci": [ "cloudflarespeedtest" ] + } + } +} diff --git a/luci-app-ddns-go b/luci-app-ddns-go deleted file mode 160000 index f213eb96..00000000 --- a/luci-app-ddns-go +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f213eb962024d2df6e3779fe8b431a71bef54a2a diff --git a/luci-app-ddns-go/README.md b/luci-app-ddns-go/README.md new file mode 100644 index 00000000..3e451db4 --- /dev/null +++ b/luci-app-ddns-go/README.md @@ -0,0 +1,137 @@ +## 访问数:![hello](https://views.whatilearened.today/views/github/sirpdboy/deplives.svg)[![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ) +### 访问数:[![](https://visitor-badge.glitch.me/badge?page_id=sirpdboy-visitor-badge)] [![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ) + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明1.jpg) + +# luci-app-ddns-go + +luci-app-ddns-go 自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。支持的域名服务商 Alidns(阿里云) Dnspod(腾讯云) Cloudflare 华为云 Callback 百度云 porkbun GoDaddy + +[![若部分图片无法正常显示,请挂上机场浏览或点这里到末尾看修复教程](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) + +[luci-app-ddns-go ddns-go动态域名插件](https://github.com/sirpdboy/luci-app-ddns-go) +====================== + + +请 **认真阅读完毕** 本页面,本页面包含注意事项和如何使用。 + +## 功能说明: + +### ddns-go动态域名插件 +#### 自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。 + + + +- [ddns-go](#ddns-go) + - [特性](#特性) + - [使用方法](#使用方法) + - [说明](#说明) + - [界面](#界面) + - [捐助](#捐助) + + + +## 特性 + +- 支持Mac、Windows、Linux系统,支持ARM、x86架构 +- 支持的域名服务商 `Alidns(阿里云)` `Dnspod(腾讯云)` `Cloudflare` `华为云` `Callback` `百度云` `porkbun` `GoDaddy` +- 支持接口/网卡获取IP +- 支持以服务的方式运行 +- 默认间隔5分钟同步一次 +- 支持多个域名同时解析,公司必备 +- 支持多级域名 +- 网页中配置,简单又方便,可设置 `登录用户名和密码` / `禁止从公网访问` +- 网页中方便快速查看最近50条日志,不需要跑docker中查看 +- 支持webhook通知 +- 支持TTL +- 支持部分dns服务商传递自定义参数,实现地域解析等功能 + +## 使用方法 + +- 将luci-app-ddns-go添加至 LEDE/OpenWRT 源码的方法。 + +### 下载源码方法: + + ```Brach + + # 下载源码 + + git clone https://github.com/sirpdboy/luci-app-ddns-go.git package/ddns-go + make menuconfig + + ``` +### 配置菜单 + + ```Brach + make menuconfig + # 找到 LuCI -> Applications, 选择 luci-app-ddns-go, 保存后退出。 + ``` + +### 编译 + + ```Brach + # 编译固件 + make package/ddns-go/luci-app-ddns-go/compile V=s + ``` + +## 说明 + +-源码来源:https://github.com/sirpdboy/luci-app-ddns-go +-源码来源:https://github.com/jeessy2/ddns-go.git +-你可以随意使用其中的源码,但请注明出处。 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明2.jpg) + +## 界面 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/ddnsgo1.jpg) + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/ddnsgo2.jpg) + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/ddnsgo3.jpg) + + + + +## 使用与授权相关说明 + +- 本人开源的所有源码,任何引用需注明本处出处,如需修改二次发布必告之本人,未经许可不得做于任何商用用途。 + + +# My other project + +- 网络速度测试 :https://github.com/sirpdboy/NetSpeedTest + +- 定时设置插件 : https://github.com/sirpdboy/luci-app-autotimeset + +- 关机功能插件 : https://github.com/sirpdboy/luci-app-poweroffdevice + +- opentopd主题 : https://github.com/sirpdboy/luci-theme-opentopd + +- kucat 主题: https://github.com/sirpdboy/luci-theme-kucat + +- 家长控制: https://github.com/sirpdboy/luci-theme-parentcontrol + +- 系统高级设置 : https://github.com/sirpdboy/luci-app-advanced + +- ddns-go动态域名: https://github.com/sirpdboy/luci-app-ddns-go + +- 进阶设置(系统高级设置+主题设置kucat/agron/opentopd): https://github.com/sirpdboy/luci-app-advancedplus + +- 设置向导: https://github.com/sirpdboy/luci-app-wizard + +- 分区扩容: https://github.com/sirpdboy/luci-app-partexp + +- lukcy大吉: https://github.com/sirpdboy/luci-app-lukcy + +## 捐助 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明3.jpg) + +| 图飞了😂 | 图飞了😂 | +| :-----------------: | :-------------: | +|![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/支付宝.png) | ![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/微信.png) | + + + 图飞了😂 + diff --git a/luci-app-ddns-go/ddns-go/Makefile b/luci-app-ddns-go/ddns-go/Makefile new file mode 100644 index 00000000..98783e41 --- /dev/null +++ b/luci-app-ddns-go/ddns-go/Makefile @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: GPL-3.0-only +# +# Copyright (C) 2021-2023 sirpdboy +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=ddns-go +PKG_VERSION:=5.6.4 +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://github.com/jeessy2/ddns-go.git +PKG_MIRROR_HASH:=00892c90cdbbd8dd1f8f9add76857924c8e0fa5f87e727249f304d18543a8b45 +PKG_SOURCE_VERSION:=5b77583b498dc2e893cd77533b5a15c0e1620aef + +PKG_LICENSE:=AGPL-3.0-only +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=herboy2008 + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_PARALLEL:=1 +PKG_USE_MIPS16:=0 +PKG_BUILD_FLAGS:=no-mips16 + +GO_PKG:=github.com/jeessy2/ddns-go/v5 +GO_PKG_LDFLAGS_X:=main.version=$(PKG_VERSION) + +include $(INCLUDE_DIR)/package.mk +include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk + +define Package/ddns-go + TITLE:=A Linux web GUI client of ddns-go + SECTION:=net + CATEGORY:=Network + SUBMENU:=Web Servers/Proxies + DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle + URL:=https://github.com/jeessy2/ddns-go + USERID:=ddns-go:ddns-go +endef + +define Package/ddns-go/description + ddns-go is a automatically obtain your public IPv4 or IPv6 address and resolve it to the corresponding domain name service, + support Alidns Dnspod Cloudflare Hicloud Callback Baiducloud porkbun GoDaddy Google Domains. +endef + + +define Package/ddns-go/install + $(call GoPackage/Package/Install/Bin,$(1)) + + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./file/ddns-go.init $(1)/etc/init.d/ddns-go + + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) ./file/luci-ddns-go.uci-default $(1)/etc/uci-defaults/luci-ddns-go +endef + +$(eval $(call GoBinPackage,ddns-go)) +$(eval $(call BuildPackage,ddns-go)) diff --git a/luci-app-ddns-go/ddns-go/file/ddns-go.init b/luci-app-ddns-go/ddns-go/file/ddns-go.init new file mode 100644 index 00000000..d845dc55 --- /dev/null +++ b/luci-app-ddns-go/ddns-go/file/ddns-go.init @@ -0,0 +1,46 @@ +#!/bin/sh /etc/rc.common +# +# Copyright (C) 2021-2023 sirpdboy https://github.com/sirpdboy/luci-app-ddns-go +# +# This file is part of ddns-go . +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + + +START=99 +USE_PROCD=1 + +PROG=/usr/bin/ddns-go +CONFDIR=/etc/ddns-go +CONF=$CONFDIR/ddns-go-config.yaml + +get_config() { + config_get_bool enabled $1 enabled 1 + config_get_bool logger $1 logger 1 + config_get port $1 port 9876 + config_get time $1 time 300 +} + +init_yaml(){ + [ -d $CONFDIR ] || mkdir -p $CONFDIR 2>/dev/null + cat /usr/share/ddns-go/ddns-go-default.yaml > $CONF +} + +start_service() { + config_load ddns-go + config_foreach get_config basic + [ x$enabled == x1 ] || return 1 + [ -s ${CONF} ] || init_yaml + logger -t ddns-go -p warn "ddns-go is start." + echo "ddns-go is start." + procd_open_instance + procd_set_param command $PROG -l :$port -f $time -c "$CONF" + [ "x$logger" == x1 ] && procd_set_param stderr 1 + procd_set_param respawn + procd_close_instance +} + +service_triggers() { + procd_add_reload_trigger "ddns-go" +} diff --git a/luci-app-ddns-go/ddns-go/file/luci-ddns-go.uci-default b/luci-app-ddns-go/ddns-go/file/luci-ddns-go.uci-default new file mode 100644 index 00000000..0c01cacc --- /dev/null +++ b/luci-app-ddns-go/ddns-go/file/luci-ddns-go.uci-default @@ -0,0 +1,7 @@ +#!/bin/sh + +[ -s "/etc/ddns-go/localtime" ] && mv -f /etc/ddns-go/localtime /etc/localtime +/etc/init.d/ddns-go enable +/etc/init.d/ddns-go start +rm -f /tmp/luci* +exit 0 diff --git a/luci-app-ddns-go/luci-app-ddns-go/Makefile b/luci-app-ddns-go/luci-app-ddns-go/Makefile new file mode 100644 index 00000000..daca91ad --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/Makefile @@ -0,0 +1,23 @@ +# SPDX-License-Identifier: GPL-3.0-only +# +# Copyright (C) 2021-2022 sirpdboy https://github.com/sirpdboy/luci-app-ddns-go +# +# This is free software, licensed under the Apache License, Version 2.0 . +# +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-ddns-go +PKG_VERSION:=1.3.2 +PKG_RELEASE:=10 + +LUCI_TITLE:=LuCI Support for Dynamic ddns-go Client +LUCI_DEPENDS:=+ddns-go +LUCI_PKGARCH:=all + +define Package/$(PKG_NAME)/conffiles +/etc/config/ddns-go +/etc/ddns-go/ddns-go-config.yaml +endef + +include $(TOPDIR)/feeds/luci/luci.mk +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-ddns-go/luci-app-ddns-go/README.md b/luci-app-ddns-go/luci-app-ddns-go/README.md new file mode 100644 index 00000000..8665ed6e --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/README.md @@ -0,0 +1,118 @@ +## 访问数:![hello](https://views.whatilearened.today/views/github/sirpdboy/deplives.svg)[![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ) +### 访问数:[![](https://visitor-badge.glitch.me/badge?page_id=sirpdboy-visitor-badge)] [![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ) + +欢迎来到sirpdboy的源码仓库! += +# luci-app-ddns-go + +luci-app-ddns-go 自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。支持的域名服务商 Alidns(阿里云) Dnspod(腾讯云) Cloudflare 华为云 Callback 百度云 porkbun GoDaddy + +[![若部分图片无法正常显示,请挂上机场浏览或点这里到末尾看修复教程](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) + +[luci-app-ddns-go ddns-go动态域名插件](https://github.com/sirpdboy/luci-app-ddns-go) + +====================== + + +请 **认真阅读完毕** 本页面,本页面包含注意事项和如何使用。 + +## 功能说明: + +### ddns-go动态域名插件 +#### 自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。 + + + +- [ddns-go](#ddns-go) + - [特性](#特性) + - [使用方法](#使用方法) + - [说明](#说明) + - [界面](#界面) + - [捐助](#捐助) + + + +## 特性 + +- 支持Mac、Windows、Linux系统,支持ARM、x86架构 +- 支持的域名服务商 `Alidns(阿里云)` `Dnspod(腾讯云)` `Cloudflare` `华为云` `Callback` `百度云` `porkbun` `GoDaddy` +- 支持接口/网卡获取IP +- 支持以服务的方式运行 +- 默认间隔5分钟同步一次 +- 支持多个域名同时解析,公司必备 +- 支持多级域名 +- 网页中配置,简单又方便,可设置 `登录用户名和密码` / `禁止从公网访问` +- 网页中方便快速查看最近50条日志,不需要跑docker中查看 +- 支持webhook通知 +- 支持TTL +- 支持部分dns服务商传递自定义参数,实现地域解析等功能 + +## 使用方法 + +- 将luci-app-ddns-go添加至 LEDE/OpenWRT 源码的方法。 + +### 下载源码方法: + + ```Brach + + # 下载源码 + + git clone https://github.com/sirpdboy/luci-app-ddns-go.git package/ddns-go + make menuconfig + + ``` +### 配置菜单 + + ```Brach + make menuconfig + # 找到 LuCI -> Applications, 选择 luci-app-ddns-go, 保存后退出。 + ``` + +### 编译 + + ```Brach + # 编译固件 + make package/ddns-go/luci-app-ddns-go/compile V=s + ``` + +## 说明 + +-源码来源:https://github.com/sirpdboy/luci-app-ddns-go +-你可以随意使用其中的源码,但请注明出处。 + +============================ + +## 界面 + +![screenshots](https://raw.githubusercontent.com/jeessy2/ddns-go/master/ddns-web.png) + + +# My other project + +网络速度测试 :https://github.com/sirpdboy/NetSpeedTest + +定时设置插件 : https://github.com/sirpdboy/luci-app-autotimeset + +关机功能插件 : 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 + +## 捐助 + +-如果你觉得此项目对你有帮助,请捐助我们,以使项目能持续发展,更加完善。··请作者喝杯咖啡~~~** +-你们的支持就是我的动力!** + +| 图飞了😂 | 图飞了😂 | +| :-----------------: | :-------------: | +|![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/支付宝.png) | ![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/微信.png) | + + + 图飞了😂 + + diff --git a/luci-app-ddns-go/luci-app-ddns-go/luasrc/controller/ddns-go.lua b/luci-app-ddns-go/luci-app-ddns-go/luasrc/controller/ddns-go.lua new file mode 100644 index 00000000..abafbceb --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/luasrc/controller/ddns-go.lua @@ -0,0 +1,23 @@ +-- Copyright (C) 2021-2022 sirpdboy https://github.com/sirpdboy/luci-app-ddns-go +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.ddns-go", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/ddns-go") then + return + end + + entry({"admin", "services", "ddns-go"}, alias("admin", "services", "ddns-go", "setting"),_("DDNS-GO"), 58).dependent = true + entry({"admin", "services", "ddns-go", "setting"}, cbi("ddns-go"), _("Base Setting"), 20).leaf=true + entry({"admin", "services", "ddns-go", "ddns-go"}, template("ddns-go"), _("DDNS-GO"), 30).leaf = true + entry({"admin", "services", "ddnsgo_status"}, call("act_status")) +end + +function act_status() + local sys = require "luci.sys" + local e = { } + e.running = sys.call("pidof ddns-go >/dev/null") == 0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end diff --git a/luci-app-ddns-go/luci-app-ddns-go/luasrc/model/cbi/ddns-go.lua b/luci-app-ddns-go/luci-app-ddns-go/luasrc/model/cbi/ddns-go.lua new file mode 100644 index 00000000..d0cf7e4f --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/luasrc/model/cbi/ddns-go.lua @@ -0,0 +1,30 @@ +-- Copyright (C) 2021-2022 sirpdboy https://github.com/sirpdboy/luci-app-ddns-go + +local m, s ,o + +m = Map("ddns-go") +m.title = translate("DDNS-GO") +m.description = translate("DDNS-GO automatically obtains your public IPv4 or IPv6 address and resolves it to the corresponding domain name service.")..translate("
For specific usage, see:")..translate("GitHub @sirpdboy/luci-app-ddns-go ") + +m:section(SimpleSection).template = "ddns-go_status" + +s = m:section(TypedSection, "basic", translate("Global Settings")) +s.addremove = false +s.anonymous = true + +o = s:option(Flag,"enabled",translate("Enable")) +o.default = 0 + +o = s:option(Value, "port",translate("Set the DDNS-TO access port")) +o.datatype = "uinteger" +o.default=9876 + +o = s:option(Value, "time",translate("update interval")) +o.default=300 + +m.apply_on_parse = true +m.on_after_apply = function(self,map) + luci.sys.exec("/etc/init.d/ddns-go restart") +end + +return m diff --git a/luci-app-ddns-go/luci-app-ddns-go/luasrc/view/ddns-go.htm b/luci-app-ddns-go/luci-app-ddns-go/luasrc/view/ddns-go.htm new file mode 100644 index 00000000..2dd5c707 --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/luasrc/view/ddns-go.htm @@ -0,0 +1,22 @@ +<%# + Copyright 2021-2022 sirpdboy Wich + https://github.com/sirpdboy/luci-app-ddns-go + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +
+ + + +
+ +<%+footer%> diff --git a/luci-app-ddns-go/luci-app-ddns-go/luasrc/view/ddns-go_status.htm b/luci-app-ddns-go/luci-app-ddns-go/luasrc/view/ddns-go_status.htm new file mode 100644 index 00000000..35a0135a --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/luasrc/view/ddns-go_status.htm @@ -0,0 +1,27 @@ + + +
+ <%:DDNS-GO Status%> +

+ <%:Collecting data...%> +

+
diff --git a/luci-app-ddns-go/luci-app-ddns-go/po/zh-cn/ddns-go.po b/luci-app-ddns-go/luci-app-ddns-go/po/zh-cn/ddns-go.po new file mode 100644 index 00000000..047e6e02 --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/po/zh-cn/ddns-go.po @@ -0,0 +1,40 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "DDNS-GO" +msgstr "DDNS-GO" + +msgid "DDNS-GO automatically obtains your public IPv4 or IPv6 address and resolves it to the corresponding domain name service." +msgstr "DDNS-GO自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务." + +msgid "Base Setting" +msgstr "基本设置" + +msgid "Running state" +msgstr "运行状态" + +msgid "The DDNS-GO service is running." +msgstr "DDNS-GO服务已启动" + +msgid "The DDNS-GO service is not running." +msgstr "DDNS-GO服务未启动" + +msgid "DDNS-GO Status" +msgstr "DDNS-GO服务状态" + +msgid "Click the new page to open ddns-go" +msgstr "点击打开ddns-go后台" + +msgid "Set the DDNS-TO access port" +msgstr "设置访问端口" + +msgid "
For specific usage, see:" +msgstr "
具体使用方法参见:" + +msgid "Collecting data..." +msgstr "收集数据..." + +msgid "update interval" +msgstr "更新间隔" + + diff --git a/luci-app-ddns-go/luci-app-ddns-go/po/zh_Hans b/luci-app-ddns-go/luci-app-ddns-go/po/zh_Hans new file mode 100644 index 00000000..41451e4a --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-ddns-go/luci-app-ddns-go/root/etc/config/ddns-go b/luci-app-ddns-go/luci-app-ddns-go/root/etc/config/ddns-go new file mode 100644 index 00000000..12377726 --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/root/etc/config/ddns-go @@ -0,0 +1,5 @@ +config basic + option enabled '0' + option logger '1' + option port 9876 + option time 300 \ No newline at end of file diff --git a/luci-app-ddns-go/luci-app-ddns-go/root/etc/ddns-go/ddns-go-config.yaml b/luci-app-ddns-go/luci-app-ddns-go/root/etc/ddns-go/ddns-go-config.yaml new file mode 100644 index 00000000..74b2fd12 --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/root/etc/ddns-go/ddns-go-config.yaml @@ -0,0 +1,27 @@ +ipv4: + enable: true + gettype: url + url: https://myip4.ipip.net, https://ddns.oray.com/checkip, https://ip.3322.net + netinterface: br-lan + domains: + - "" +ipv6: + enable: false + gettype: url + url: https://myip6.ipip.net, https://speed.neu6.edu.cn/getIP.php, https://v6.ident.me + netinterface: "" + ipv6reg: "" + domains: + - "" +dns: + name: alidns + id: "" + secret: "" +user: + username: "" + password: "" +webhook: + webhookurl: "" + webhookrequestbody: "" +notallowwanaccess: true +ttl: "" diff --git a/luci-app-ddns-go/luci-app-ddns-go/root/etc/ddns-go/localtime b/luci-app-ddns-go/luci-app-ddns-go/root/etc/ddns-go/localtime new file mode 100644 index 0000000000000000000000000000000000000000..91f6f8bc2e234bafd484146986bdb289082c3588 GIT binary patch literal 561 zcmbu*zb^w}9LMo*sb7uZVlR)P+QDKF36WCLNNV90hMH8mol%_2lQ6N|X0Wt&|A0ig zYPz+k{ufWWnRwpMAJ9ZRm*-x?E%$l*C$;LT3_WT4b=2NzZC~|=C*8PAnz!SMZcTj$ zt?sL|$L>r!EJ$Z#%XIIr^!v`U`Pj?IXSr#5n@#x|uLk|}K=-#pGy8I==4y|zif-%k z``2;iyrCBIr}1LxMlH>RUUvCRWd{{6H&If#PQe>V40%K@diI|riW5nZK+9zLz?b5# zy+^+If0*`TPqbFdBNLIC$W&ym(@sWaJMDC2K9T^*fTTcjAW4ucNE)Zj!x|DHnUGXS cE+iR}4M~UOLlQb|MkJ;4e>qdO>B@TQ7g9&Lh5!Hn literal 0 HcmV?d00001 diff --git a/luci-app-ddns-go/luci-app-ddns-go/root/usr/share/ddns-go/ddns-go-default.yaml b/luci-app-ddns-go/luci-app-ddns-go/root/usr/share/ddns-go/ddns-go-default.yaml new file mode 100644 index 00000000..b0777562 --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/root/usr/share/ddns-go/ddns-go-default.yaml @@ -0,0 +1,27 @@ +ipv4: + enable: true + gettype: url + url: https://4.ipw.cn,https://myip4.ipip.net,https://ddns.oray.com/checkip,https://ip.3322.net + netinterface: br-lan + domains: + - "" +ipv6: + enable: false + gettype: url + url: https://6.ipw.cn, https://speed.neu6.edu.cn/getIP.php, https://v6.ident.me + netinterface: "" + ipv6reg: "" + domains: + - "" +dns: + name: alidns + id: "" + secret: "" +user: + username: "" + password: "" +webhook: + webhookurl: "" + webhookrequestbody: "" +notallowwanaccess: true +ttl: "" diff --git a/luci-app-ddns-go/luci-app-ddns-go/root/usr/share/rpcd/acl.d/luci-app-ddns-go.json b/luci-app-ddns-go/luci-app-ddns-go/root/usr/share/rpcd/acl.d/luci-app-ddns-go.json new file mode 100644 index 00000000..7f919d25 --- /dev/null +++ b/luci-app-ddns-go/luci-app-ddns-go/root/usr/share/rpcd/acl.d/luci-app-ddns-go.json @@ -0,0 +1,11 @@ +{ + "luci-app-ddns-go": { + "description": "Grant UCI access for luci-app-ddns-go", + "read": { + "uci": [ "ddns-go" ] + }, + "write": { + "uci": [ "ddns-go" ] + } + } +} diff --git a/luci-app-mosdns/Makefile b/luci-app-mosdns/Makefile new file mode 100644 index 00000000..ea5d677d --- /dev/null +++ b/luci-app-mosdns/Makefile @@ -0,0 +1,20 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-mosdns +PKG_VERSION:=1.5.15 +PKG_RELEASE:=1 + +LUCI_TITLE:=LuCI Support for mosdns +LUCI_PKGARCH:=all +LUCI_DEPENDS:=+mosdns +jsonfilter +luci-compat +curl +v2ray-geoip +v2ray-geosite +v2dat + +define Package/$(PKG_NAME)/conffiles +/etc/config/mosdns +/etc/mosdns/cache.dump +/etc/mosdns/config_custom.yaml +/etc/mosdns/rule +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-mosdns/luasrc/controller/mosdns.lua b/luci-app-mosdns/luasrc/controller/mosdns.lua new file mode 100644 index 00000000..60840fbb --- /dev/null +++ b/luci-app-mosdns/luasrc/controller/mosdns.lua @@ -0,0 +1,53 @@ +local sys = require "luci.sys" +local http = require "luci.http" + +module("luci.controller.mosdns", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/mosdns") then + return + end + + local page = entry({"admin", "services", "mosdns"}, alias("admin", "services", "mosdns", "basic"), _("MosDNS"), 30) + page.dependent = true + page.acl_depends = { "luci-app-mosdns" } + + entry({"admin", "services", "mosdns", "basic"}, cbi("mosdns/basic"), _("Basic Setting"), 1).leaf = true + entry({"admin", "services", "mosdns", "rule_list"}, cbi("mosdns/rule_list"), _("Rule List"), 2).leaf = true + entry({"admin", "services", "mosdns", "update"}, cbi("mosdns/update"), _("Geodata Update"), 3).leaf = true + entry({"admin", "services", "mosdns", "log"}, cbi("mosdns/log"), _("Logs"), 4).leaf = true + entry({"admin", "services", "mosdns", "status"}, call("act_status")).leaf = true + entry({"admin", "services", "mosdns", "get_log"}, call("get_log")).leaf = true + entry({"admin", "services", "mosdns", "clear_log"}, call("clear_log")).leaf = true + entry({"admin", "services", "mosdns", "geo_update"}, call("geo_update")).leaf = true + entry({"admin", "services", "mosdns", "flush_cache"}, call("flush_cache")).leaf = true +end + +function act_status() + local e = {} + e.running = sys.call("pgrep -f mosdns >/dev/null") == 0 + http.prepare_content("application/json") + http.write_json(e) +end + +function get_log() + http.write(sys.exec("cat $(/usr/share/mosdns/mosdns.sh logfile)")) +end + +function clear_log() + sys.call("cat /dev/null > $(/usr/share/mosdns/mosdns.sh logfile)") +end + +function geo_update() + local e = {} + e.updating = sys.call("/usr/share/mosdns/mosdns.sh geodata >/dev/null") == 0 + http.prepare_content("application/json") + http.write_json(e) +end + +function flush_cache() + local e = {} + e.flushing = sys.call("/usr/share/mosdns/mosdns.sh flush >/dev/null") == 0 + http.prepare_content("application/json") + http.write_json(e) +end diff --git a/luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua b/luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua new file mode 100644 index 00000000..7793889f --- /dev/null +++ b/luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua @@ -0,0 +1,240 @@ +local fs = require "nixio.fs" +local sys = require "luci.sys" + +if fs.access("/usr/bin/mosdns") then + mosdns_version = sys.exec("/usr/share/mosdns/mosdns.sh version") +else + mosdns_version = "Unknown Version" +end +m = Map("mosdns") +m.title = translate("MosDNS") .. " " .. mosdns_version +m.description = translate("MosDNS is a plugin-based DNS forwarder/traffic splitter.") + +m:section(SimpleSection).template = "mosdns/mosdns_status" + +s = m:section(TypedSection, "mosdns") +s.addremove = false +s.anonymous = true + +s:tab("basic", translate("Basic Options")) + +o = s:taboption("basic", Flag, "enabled", translate("Enabled")) +o.rmempty = false + +o = s:taboption("basic", ListValue, "configfile", translate("Config File")) +o:value("/etc/mosdns/config.yaml", translate("Default Config")) +o:value("/etc/mosdns/config_custom.yaml", translate("Custom Config")) +o.default = "/etc/mosdns/config.yaml" + +o = s:taboption("basic", Value, "listen_port", translate("Listen port")) +o.datatype = "and(port,min(1))" +o.default = 5335 +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("basic", ListValue, "log_level", translate("Log Level")) +o:value("debug", translate("Debug")) +o:value("info", translate("Info")) +o:value("warn", translate("Warning")) +o:value("error", translate("Error")) +o.default = "info" +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("basic", Value, "logfile", translate("Log File")) +o.placeholder = "/var/log/mosdns.log" +o.default = "/var/log/mosdns.log" +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("basic", Flag, "redirect", translate("DNS Forward"), translate("Forward Dnsmasq Domain Name resolution requests to MosDNS")) +o.default = true + +o = s:taboption("basic", Flag, "custom_local_dns", translate("Custom China DNS"), translate("Follow WAN interface DNS if not enabled")) +o:depends( "configfile", "/etc/mosdns/config.yaml") +o.default = false + +o = s:taboption("basic", Flag, "apple_optimization", translate("Apple domains optimization"), translate("For Apple domains equipped with Chinese mainland CDN, always responsive to Chinese CDN IP addresses")) +o:depends("custom_local_dns", "1") +o.default = false + +o = s:taboption("basic", DynamicList, "local_dns", translate("China DNS server")) +o:value("119.29.29.29", translate("Tencent Public DNS (119.29.29.29)")) +o:value("119.28.28.28", translate("Tencent Public DNS (119.28.28.28)")) +o:value("223.5.5.5", translate("Aliyun Public DNS (223.5.5.5)")) +o:value("223.6.6.6", translate("Aliyun Public DNS (223.6.6.6)")) +o:value("114.114.114.114", translate("Xinfeng Public DNS (114.114.114.114)")) +o:value("114.114.115.115", translate("Xinfeng Public DNS (114.114.115.115)")) +o:value("180.76.76.76", translate("Baidu Public DNS (180.76.76.76)")) +o:value("https://doh.pub/dns-query", translate("Tencent Public DNS (DNS over HTTPS)")) +o:value("quic://dns.alidns.com", translate("Aliyun Public DNS (DNS over QUIC)")) +o:value("https://dns.alidns.com/dns-query", translate("Aliyun Public DNS (DNS over HTTPS)")) +o:value("h3://dns.alidns.com/dns-query", translate("Aliyun Public DNS (DNS over HTTPS/3)")) +o:value("https://doh.360.cn/dns-query", translate("360 Public DNS (DNS over HTTPS)")) +o:depends("custom_local_dns", "1") + +o = s:taboption("basic", DynamicList, "remote_dns", translate("Remote DNS server")) +o:value("tls://1.1.1.1", translate("CloudFlare Public DNS (1.1.1.1)")) +o:value("tls://1.0.0.1", translate("CloudFlare Public DNS (1.0.0.1)")) +o:value("tls://8.8.8.8", translate("Google Public DNS (8.8.8.8)")) +o:value("tls://8.8.4.4", translate("Google Public DNS (8.8.4.4)")) +o:value("tls://9.9.9.9", translate("Quad9 Public DNS (9.9.9.9)")) +o:value("tls://149.112.112.112", translate("Quad9 Public DNS (149.112.112.112)")) +o:value("tls://208.67.222.222", translate("Cisco Public DNS (208.67.222.222)")) +o:value("tls://208.67.220.220", translate("Cisco Public DNS (208.67.220.220)")) +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("basic", ListValue, "bootstrap_dns", translate("Bootstrap DNS servers"), translate("Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT resolvers you specify as upstreams")) +o:value("119.29.29.29", translate("Tencent Public DNS (119.29.29.29)")) +o:value("119.28.28.28", translate("Tencent Public DNS (119.28.28.28)")) +o:value("223.5.5.5", translate("Aliyun Public DNS (223.5.5.5)")) +o:value("223.6.6.6", translate("Aliyun Public DNS (223.6.6.6)")) +o:value("114.114.114.114", translate("Xinfeng Public DNS (114.114.114.114)")) +o:value("114.114.115.115", translate("Xinfeng Public DNS (114.114.115.115)")) +o:value("180.76.76.76", translate("Baidu Public DNS (180.76.76.76)")) +o:value("8.8.8.8", translate("Google Public DNS (8.8.8.8)")) +o:value("1.1.1.1", translate("CloudFlare Public DNS (1.1.1.1)")) +o.default = "119.29.29.29" +o:depends("configfile", "/etc/mosdns/config.yaml") + +s:tab("advanced", translate("Advanced Options")) + +o = s:taboption("advanced", Value, "concurrent", translate("Concurrent"), translate("DNS query request concurrency, The number of upstream DNS servers that are allowed to initiate requests at the same time")) +o.datatype = "and(uinteger,min(1),max(3))" +o.default = "2" +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("advanced", Value, "idle_timeout", translate("Idle Timeout"), translate("DoH/TCP/DoT Connection Multiplexing idle timeout (default 30 seconds)")) +o.datatype = "and(uinteger,min(1))" +o.default = "30" +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("advanced", Flag, "enable_pipeline", translate("TCP/DoT Connection Multiplexing"), translate("Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode")) +o.rmempty = false +o.default = false +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("advanced", Flag, "insecure_skip_verify", translate("Disable TLS Certificate"), translate("Disable TLS Servers certificate validation, Can be useful if system CA certificate expires or the system time is out of order")) +o.rmempty = false +o.default = false +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("advanced", Flag, "enable_ecs_remote", translate("Enable EDNS client subnet")) +o.rmempty = false +o.default = false +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("advanced", Value, "remote_ecs_ip", translate("IP Address"), translate("Please provide the IP address you use when accessing foreign websites. This IP subnet (0/24) will be used as the ECS address for Remote DNS requests") .. '
' .. translate("This feature is typically used when using a self-built DNS server as an Remote DNS upstream (requires support from the upstream server)")) +o.datatype = "ipaddr" +o:depends("enable_ecs_remote", "1") + +o = s:taboption("advanced", Flag, "dns_leak", translate("Prevent DNS Leaks"), translate("Enable this option fallback policy forces forwarding to remote DNS")) +o.rmempty = false +o.default = false +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("advanced", Value, "cache_size", translate("DNS Cache Size"), translate("DNS cache size (in piece). To disable caching, please set to 0.")) +o.datatype = "and(uinteger,min(0))" +o.default = "8000" +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("advanced", Value, "cache_survival_time", translate("Lazy Cache TTL"), translate("Lazy cache survival time (in second). To disable Lazy Cache, please set to 0.")) +o.datatype = "and(uinteger,min(0))" +o.default = "86400" +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("advanced", Flag, "dump_file", translate("Cache Dump"), translate("Save the cache locally and reload the cache dump on the next startup")) +o.rmempty = false +o.default = false +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("advanced", Value, "dump_interval", translate("Auto Save Cache Interval")) +o.datatype = "and(uinteger,min(0))" +o.default = "3600" +o:depends("dump_file", "1") + +o = s:taboption("advanced", Value, "minimal_ttl", translate("Minimum TTL"), translate("Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating no modification")) +o.datatype = "and(uinteger,min(0),max(604800))" +o.default = "0" +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("advanced", Value, "maximum_ttl", translate("Maximum TTL"), translate("Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating no modification")) +o.datatype = "and(uinteger,min(0),max(604800))" +o.default = "0" +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("advanced", Flag, "adblock", translate("Enable DNS ADblock")) +o:depends("configfile", "/etc/mosdns/config.yaml") +o.default = false + +o = s:taboption("advanced", DynamicList, "ad_source", translate("ADblock Source"), translate("When using custom rule sources, please use rule types supported by MosDNS (domain lists).") .. '
' .. translate("Support for local files, such as: file:///var/mosdns/example.txt")) +o:depends("adblock", "1") +o.default = "geosite.dat" +o:value("geosite.dat", "v2ray-geosite") +o:value("https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt", "anti-AD") +o:value("https://raw.githubusercontent.com/Cats-Team/AdRules/main/mosdns_adrules.txt", "Cats-Team/AdRules") +o:value("https://raw.githubusercontent.com/ookangzheng/dbl-oisd-nl/master/dbl_light.txt", "oisd (small)") +o:value("https://raw.githubusercontent.com/ookangzheng/dbl-oisd-nl/master/dbl.txt", "oisd (big)") + +o = s:taboption("basic", Button, "_reload", translate("Restart-Service"), translate("Restart the MosDNS process to take effect of new configuration")) +o.write = function() + sys.exec("/etc/init.d/mosdns reload") +end +o:depends("configfile", "/etc/mosdns/config_custom.yaml") + +o = s:taboption("basic", TextValue, "config_custom", translate("Configuration Editor")) +o.template = "cbi/tvalue" +o.rows = 25 +o:depends("configfile", "/etc/mosdns/config_custom.yaml") +function o.cfgvalue(self, section) + return fs.readfile("/etc/mosdns/config_custom.yaml") +end +function o.write(self, section, value) + value = value:gsub("\r\n?", "\n") + fs.writefile("/etc/mosdns/config_custom.yaml", value) +end +-- codemirror +o = s:taboption("basic", DummyValue, "") +o.template = "mosdns/mosdns_editor" + +s:tab("cloudflare", translate("Cloudflare Options")) +o = s:taboption("cloudflare", Flag, "cloudflare", translate("Enabled"), translate("Match the parsing result with the Cloudflare IP ranges, and when there is a successful match, use the 'Custom IP' as the parsing result (experimental feature)")) +o.rmempty = false +o.default = false +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("cloudflare", DynamicList, "cloudflare_ip", translate("Custom IP")) +o.datatype = "ipaddr" +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("cloudflare", TextValue, "cloudflare_cidr", translate("Cloudflare IP Ranges")) +o.description = translate("IPv4 CIDR:") .. [[https://www.cloudflare.com/ips-v4]] .. '
' .. translate("IPv6 CIDR:") .. [[https://www.cloudflare.com/ips-v6]] +o.template = "cbi/tvalue" +o.rows = 15 +o:depends("configfile", "/etc/mosdns/config.yaml") +function o.cfgvalue(self, section) + return fs.readfile("/etc/mosdns/rule/cloudflare-cidr.txt") +end +function o.write(self, section, value) + value = value:gsub("\r\n?", "\n") + fs.writefile("/etc/mosdns/rule/cloudflare-cidr.txt", value) +end + +s:tab("api", translate("API Options")) + +o = s:taboption("api", Value, "listen_port_api", translate("API Listen port")) +o.datatype = "and(port,min(1))" +o.default = 9091 +o:depends("configfile", "/etc/mosdns/config.yaml") + +o = s:taboption("api", Button, "flush_cache", translate("Flush Cache"), translate("Flushing Cache will clear any IP addresses or DNS records from MosDNS cache")) +o.rawhtml = true +o.template = "mosdns/mosdns_flush_cache" +o:depends("configfile", "/etc/mosdns/config.yaml") + +s:tab("geodata", translate("GeoData Export")) + +o = s:taboption("geodata", DynamicList, "geosite_tags", translate("GeoSite Tags"), translate("Enter the GeoSite.dat category to be exported, Allow add multiple tags") .. '
' .. translate("Export directory: /var/mosdns")) +o:depends("configfile", "/etc/mosdns/config_custom.yaml") + +o = s:taboption("geodata", DynamicList, "geoip_tags", translate("GeoIP Tags"), translate("Enter the GeoIP.dat category to be exported, Allow add multiple tags") .. '
' .. translate("Export directory: /var/mosdns")) +o:depends("configfile", "/etc/mosdns/config_custom.yaml") + +return m diff --git a/luci-app-mosdns/luasrc/model/cbi/mosdns/log.lua b/luci-app-mosdns/luasrc/model/cbi/mosdns/log.lua new file mode 100644 index 00000000..79fc1a95 --- /dev/null +++ b/luci-app-mosdns/luasrc/model/cbi/mosdns/log.lua @@ -0,0 +1,5 @@ +m = Map("mosdns") + +m:append(Template("mosdns/mosdns_log")) + +return m diff --git a/luci-app-mosdns/luasrc/model/cbi/mosdns/rule_list.lua b/luci-app-mosdns/luasrc/model/cbi/mosdns/rule_list.lua new file mode 100644 index 00000000..1d6554e2 --- /dev/null +++ b/luci-app-mosdns/luasrc/model/cbi/mosdns/rule_list.lua @@ -0,0 +1,99 @@ +local datatypes = require "luci.cbi.datatypes" + +local white_list_file = "/etc/mosdns/rule/whitelist.txt" +local block_list_file = "/etc/mosdns/rule/blocklist.txt" +local grey_list_file = "/etc/mosdns/rule/greylist.txt" +local hosts_list_file = "/etc/mosdns/rule/hosts.txt" +local redirect_list_file = "/etc/mosdns/rule/redirect.txt" +local local_ptr_file = "/etc/mosdns/rule/local-ptr.txt" +local ddns_list_file = "/etc/mosdns/rule/ddnslist.txt" + +m = Map("mosdns") + +s = m:section(TypedSection, "mosdns", translate("Rule Settings")) +s.anonymous = true + +s:tab("white_list", translate("White Lists")) +s:tab("block_list", translate("Block Lists")) +s:tab("grey_list", translate("Grey Lists")) +s:tab("ddns_list", translate("DDNS Lists")) +s:tab("hosts_list", translate("Hosts")) +s:tab("redirect_list", translate("Redirect")) +s:tab("local_ptr_list", translate("Block PTR")) + +o = s:taboption("white_list", TextValue, "whitelist", "", "" .. translate("These domain names allow DNS resolution with the highest priority. Please input the domain names of websites, every line can input only one website domain. For example: hm.baidu.com.") .. "" .. "" .. translate("
The list of rules only apply to 'Default Config' profiles.") .. "
") +o.rows = 15 +o.wrap = "off" +o.cfgvalue = function(self, section) return nixio.fs.readfile(white_list_file) or "" end +o.write = function(self, section, value) nixio.fs.writefile(white_list_file , value:gsub("\r\n", "\n")) end +o.remove = function(self, section, value) nixio.fs.writefile(white_list_file , "") end +o.validate = function(self, value) + return value +end + +o = s:taboption("block_list", TextValue, "blocklist", "", "" .. translate("These domains are blocked from DNS resolution. Please input the domain names of websites, every line can input only one website domain. For example: baidu.com.") .. "" .. "" .. translate("
The list of rules only apply to 'Default Config' profiles.") .. "
") +o.rows = 15 +o.wrap = "off" +o.cfgvalue = function(self, section) return nixio.fs.readfile(block_list_file) or "" end +o.write = function(self, section, value) nixio.fs.writefile(block_list_file, value:gsub("\r\n", "\n")) end +o.remove = function(self, section, value) nixio.fs.writefile(block_list_file, "") end +o.validate = function(self, value) + return value +end + +o = s:taboption("grey_list", TextValue, "greylist", "", "" .. translate("These domains are always resolved using remote DNS. Please input the domain names of websites, every line can input only one website domain. For example: google.com.") .. "" .. "" .. translate("
The list of rules only apply to 'Default Config' profiles.") .. "
") +o.rows = 15 +o.wrap = "off" +o.cfgvalue = function(self, section) return nixio.fs.readfile(grey_list_file) or "" end +o.write = function(self, section, value) nixio.fs.writefile(grey_list_file, value:gsub("\r\n", "\n")) end +o.remove = function(self, section, value) nixio.fs.writefile(grey_list_file, "") end +o.validate = function(self, value) + return value +end + +o = s:taboption("ddns_list", TextValue, "ddns", "", "" .. translate("These domains are always resolved using local DNS. And force TTL 5 seconds, DNS resolution results will not enter the cache. For example: myddns.example.com.") .. "" .. "" .. translate("
The list of rules only apply to 'Default Config' profiles.") .. "
") +o.rows = 15 +o.wrap = "off" +o.cfgvalue = function(self, section) return nixio.fs.readfile(ddns_list_file) or "" end +o.write = function(self, section, value) nixio.fs.writefile(ddns_list_file, value:gsub("\r\n", "\n")) end +o.remove = function(self, section, value) nixio.fs.writefile(ddns_list_file, "") end +o.validate = function(self, value) + return value +end + +o = s:taboption("hosts_list", TextValue, "hosts", "", "" .. translate("Hosts For example: baidu.com 10.0.0.1") .. "" .. "" .. translate("
The list of rules only apply to 'Default Config' profiles.") .. "
") +o.rows = 15 +o.wrap = "off" +o.cfgvalue = function(self, section) return nixio.fs.readfile(hosts_list_file) or "" end +o.write = function(self, section, value) nixio.fs.writefile(hosts_list_file, value:gsub("\r\n", "\n")) end +o.remove = function(self, section, value) nixio.fs.writefile(hosts_list_file, "") end +o.validate = function(self, value) + return value +end + +o = s:taboption("redirect_list", TextValue, "redirect", "", "" .. translate("The domain name to redirect the request to. Requests domain A, but returns records for domain B. example: a.com b.com") .. "" .. "" .. translate("
The list of rules only apply to 'Default Config' profiles.") .. "
") +o.rows = 15 +o.wrap = "off" +o.cfgvalue = function(self, section) return nixio.fs.readfile(redirect_list_file) or "" end +o.write = function(self, section, value) nixio.fs.writefile(redirect_list_file, value:gsub("\r\n", "\n")) end +o.remove = function(self, section, value) nixio.fs.writefile(redirect_list_file, "") end +o.validate = function(self, value) + return value +end + +o = s:taboption("local_ptr_list", TextValue, "local_ptr", "", "" .. translate("These domains are blocked from PTR requests") .. "" .. "" .. translate("
The list of rules only apply to 'Default Config' profiles.") .. "
") +o.rows = 15 +o.wrap = "off" +o.cfgvalue = function(self, section) return nixio.fs.readfile(local_ptr_file) or "" end +o.write = function(self, section, value) nixio.fs.writefile(local_ptr_file, value:gsub("\r\n", "\n")) end +o.remove = function(self, section, value) nixio.fs.writefile(local_ptr_file, "") end +o.validate = function(self, value) + return value +end + +local apply = luci.http.formvalue("cbi.apply") +if apply then + luci.sys.exec("/etc/init.d/mosdns reload") +end + +return m diff --git a/luci-app-mosdns/luasrc/model/cbi/mosdns/update.lua b/luci-app-mosdns/luasrc/model/cbi/mosdns/update.lua new file mode 100644 index 00000000..c8e26c5a --- /dev/null +++ b/luci-app-mosdns/luasrc/model/cbi/mosdns/update.lua @@ -0,0 +1,31 @@ +m = Map("mosdns") + +s = m:section(TypedSection, "mosdns", translate("Update GeoIP & GeoSite dat")) +s.addremove = false +s.anonymous = true + +enable = s:option(Flag, "geo_auto_update", translate("Enable Auto Database Update")) +enable.rmempty = false + +o = s:option(ListValue, "geo_update_week_time", translate("Update Cycle")) +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("7", translate("Every Sunday")) +o.default = "*" + +update_time = s:option(ListValue, "geo_update_day_time", translate("Update Time")) +for t = 0, 23 do + update_time:value(t, t..":00") +end +update_time.default = 0 + +data_update = s:option(Button, "geo_update_database", translate("Database Update")) +data_update.rawhtml = true +data_update.template = "mosdns/mosdns_geo_update" + +return m diff --git a/luci-app-mosdns/luasrc/view/mosdns/mosdns_editor.htm b/luci-app-mosdns/luasrc/view/mosdns/mosdns_editor.htm new file mode 100644 index 00000000..2ac907c7 --- /dev/null +++ b/luci-app-mosdns/luasrc/view/mosdns/mosdns_editor.htm @@ -0,0 +1,21 @@ +<%+cbi/valueheader%> + + + + + + + + + +<%+cbi/valuefooter%> diff --git a/luci-app-mosdns/luasrc/view/mosdns/mosdns_flush_cache.htm b/luci-app-mosdns/luasrc/view/mosdns/mosdns_flush_cache.htm new file mode 100644 index 00000000..6734fbf0 --- /dev/null +++ b/luci-app-mosdns/luasrc/view/mosdns/mosdns_flush_cache.htm @@ -0,0 +1,34 @@ +<%+cbi/valueheader%> + + +<%=self.value%> +<%+cbi/valuefooter%> diff --git a/luci-app-mosdns/luasrc/view/mosdns/mosdns_geo_update.htm b/luci-app-mosdns/luasrc/view/mosdns/mosdns_geo_update.htm new file mode 100644 index 00000000..813b3b53 --- /dev/null +++ b/luci-app-mosdns/luasrc/view/mosdns/mosdns_geo_update.htm @@ -0,0 +1,34 @@ +<%+cbi/valueheader%> + + +<%=self.value%> +<%+cbi/valuefooter%> diff --git a/luci-app-mosdns/luasrc/view/mosdns/mosdns_log.htm b/luci-app-mosdns/luasrc/view/mosdns/mosdns_log.htm new file mode 100644 index 00000000..9698f691 --- /dev/null +++ b/luci-app-mosdns/luasrc/view/mosdns/mosdns_log.htm @@ -0,0 +1,33 @@ + +
+ + +
diff --git a/luci-app-mosdns/luasrc/view/mosdns/mosdns_status.htm b/luci-app-mosdns/luasrc/view/mosdns/mosdns_status.htm new file mode 100644 index 00000000..26832795 --- /dev/null +++ b/luci-app-mosdns/luasrc/view/mosdns/mosdns_status.htm @@ -0,0 +1,28 @@ + + +
+

+ <%:Collecting data...%> +

+
diff --git a/luci-app-mosdns/po/zh-cn/mosdns.po b/luci-app-mosdns/po/zh-cn/mosdns.po new file mode 100644 index 00000000..ca064012 --- /dev/null +++ b/luci-app-mosdns/po/zh-cn/mosdns.po @@ -0,0 +1,386 @@ +msgid "Basic Setting" +msgstr "基本设置" + +msgid "Basic Options" +msgstr "基本选项" + +msgid "Advanced Options" +msgstr "高级选项" + +msgid "Cloudflare Options" +msgstr "Cloudflare 选项" + +msgid "API Options" +msgstr "API 选项" + +msgid "MosDNS is a plugin-based DNS forwarder/traffic splitter." +msgstr "MosDNS 是一个插件化的 DNS 转发/分流器。" + +msgid "RUNNING" +msgstr "运行中" + +msgid "NOT RUNNING" +msgstr "未运行" + +msgid "Collecting data..." +msgstr "获取数据中..." + +msgid "Enabled" +msgstr "启用" + +msgid "Listen port" +msgstr "监听端口" + +msgid "API Listen port" +msgstr "API 监听端口" + +msgid "Flush Cache" +msgstr "刷新缓存" + +msgid "Flushing Cache will clear any IP addresses or DNS records from MosDNS cache" +msgstr "刷新缓存会清空 MosDNS 所有 IP 地址和 DNS 解析缓存" + +msgid "Flushing..." +msgstr "正在刷新..." + +msgid "Flushing Success" +msgstr "刷新成功" + +msgid "Flushing Failed, Please check if MosDNS is enabled" +msgstr "刷新失败,请检查 MosDNS 是否已启用" + +msgid "Match the parsing result with the Cloudflare IP ranges, and when there is a successful match, use the 'Custom IP' as the parsing result (experimental feature)" +msgstr "将解析结果与 Cloudflare IP 范围进行匹配,当匹配成功时,使用 “自选 IP” 作为解析结果(实验性功能)" + +msgid "Custom IP" +msgstr "自选 IP" + +msgid "Cloudflare IP Ranges" +msgstr "Cloudflare IP 范围" + +msgid "Log Level" +msgstr "日志等级" + +msgid "DNS Forward" +msgstr "DNS 转发" + +msgid "Forward Dnsmasq Domain Name resolution requests to MosDNS" +msgstr "将 Dnsmasq 域名解析请求转发到 MosDNS 服务器" + +msgid "Enable DNS ADblock" +msgstr "启用 DNS 广告过滤" + +msgid "ADblock Source" +msgstr "广告过滤规则来源" + +msgid "When using custom rule sources, please use rule types supported by MosDNS (domain lists)." +msgstr "使用自定义规则来源时,请使用 MosDNS 支持的规则类型(域名列表)" + +msgid "Support for local files, such as: file:///var/mosdns/example.txt" +msgstr "支持本地文件,例如:file:///var/mosdns/example.txt" + +msgid "Restart-Service" +msgstr "重启服务" + +msgid "Restart the MosDNS process to take effect of new configuration" +msgstr "重启 MosDNS 进程使新配置文件生效" + +msgid "Configuration Editor" +msgstr "配置编辑器" + +msgid "Geodata Update" +msgstr "更新数据库" + +msgid "Update GeoIP & GeoSite dat" +msgstr "更新广告规则、GeoIP & GeoSite 数据库" + +msgid "Update Time" +msgstr "更新时间" + +msgid "Update Cycle" +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 "Database Update" +msgstr "数据库更新" + +msgid "Check And Update" +msgstr "检查并更新" + +msgid "Enable Auto Database Update" +msgstr "启用自动更新" + +msgid "Updating..." +msgstr "正在更新..." + +msgid "Update success" +msgstr "更新成功" + +msgid "Update failed, Please check the network status" +msgstr "更新失败,请检查网络状态" + +msgid "Config File" +msgstr "配置文件" + +msgid "Default Config" +msgstr "内置预设" + +msgid "Custom Config" +msgstr "自定义" + +msgid "Log File" +msgstr "日志文件" + +msgid "Custom China DNS" +msgstr "自定义国内 DNS" + +msgid "Follow WAN interface DNS if not enabled" +msgstr "不启用则使用 WAN 接口 DNS" + +msgid "Apple domains optimization" +msgstr "Apple 域名解析优化" + +msgid "For Apple domains equipped with Chinese mainland CDN, always responsive to Chinese CDN IP addresses" +msgstr "配备中国大陆 CDN 的 Apple 域名,始终应答中国大陆 CDN 地址" + +msgid "China DNS server" +msgstr "国内 DNS 服务器" + +msgid "Remote DNS server" +msgstr "远程 DNS 服务器" + +msgid "Bootstrap DNS servers" +msgstr "Bootstrap DNS 服务器" + +msgid "Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT resolvers you specify as upstreams" +msgstr "Bootstrap DNS 服务器用于解析您指定为上游的 DoH / DoT 解析器的 IP 地址" + +msgid "Tencent Public DNS (119.29.29.29)" +msgstr "腾讯公共 DNS(119.29.29.29)" + +msgid "Tencent Public DNS (119.28.28.28)" +msgstr "腾讯公共 DNS(119.28.28.28)" + +msgid "Aliyun Public DNS (223.5.5.5)" +msgstr "阿里云公共 DNS(223.5.5.5)" + +msgid "Aliyun Public DNS (223.6.6.6)" +msgstr "阿里云公共 DNS(223.6.6.6)" + +msgid "Xinfeng Public DNS (114.114.114.114)" +msgstr "信风公共 DNS(114.114.114.114)" + +msgid "Xinfeng Public DNS (114.114.115.115)" +msgstr "信风公共 DNS(114.114.115.115)" + +msgid "Baidu Public DNS (180.76.76.76)" +msgstr "百度公共 DNS(180.76.76.76)" + +msgid "Tencent Public DNS (DNS over HTTPS)" +msgstr "腾讯公共 DNS(DNS over HTTPS)" + +msgid "Aliyun Public DNS (DNS over QUIC)" +msgstr "阿里云公共 DNS(DNS over QUIC)" + +msgid "Aliyun Public DNS (DNS over HTTPS)" +msgstr "阿里云公共 DNS(DNS over HTTPS)" + +msgid "Aliyun Public DNS (DNS over HTTPS/3)" +msgstr "阿里云公共 DNS(DNS over HTTPS/3)" + +msgid "360 Public DNS (DNS over HTTPS)" +msgstr "360 安全 DNS(DNS over HTTPS)" + +msgid "CloudFlare Public DNS (1.1.1.1)" +msgstr "CloudFlare 公共 DNS(1.1.1.1)" + +msgid "CloudFlare Public DNS (1.0.0.1)" +msgstr "CloudFlare 公共 DNS(1.0.0.1)" + +msgid "Google Public DNS (8.8.8.8)" +msgstr "谷歌公共 DNS(8.8.8.8)" + +msgid "Google Public DNS (8.8.4.4)" +msgstr "谷歌公共 DNS(8.8.4.4)" + +msgid "Quad9 Public DNS (9.9.9.9)" +msgstr "Quad9 公共 DNS(9.9.9.9)" + +msgid "Quad9 Public DNS (149.112.112.112)" +msgstr "Quad9 公共 DNS(149.112.112.112)" + +msgid "Cisco Public DNS (208.67.222.222)" +msgstr "思科公共 DNS(208.67.222.222)" + +msgid "Cisco Public DNS (208.67.220.220)" +msgstr "思科公共 DNS(208.67.220.220)" + +msgid "Concurrent" +msgstr "DNS 服务器并发数(默认 2)" + +msgid "DNS query request concurrency, The number of upstream DNS servers that are allowed to initiate requests at the same time" +msgstr "DNS 查询请求并发数,允许同时发起请求的上游 DNS 服务器数量" + +msgid "Idle Timeout" +msgstr "空闲超时" + +msgid "DoH/TCP/DoT Connection Multiplexing idle timeout (default 30 seconds)" +msgstr "DoH/TCP/DoT 连接复用空闲保持时间(默认 30 秒)" + +msgid "TCP/DoT Connection Multiplexing" +msgstr "TCP/DoT 连接复用" + +msgid "Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode" +msgstr "启用 TCP/DoT RFC 7766 新型 Query Pipelining 连接复用模式" + +msgid "Disable TLS Certificate" +msgstr "禁用 TLS 证书" + +msgid "Disable TLS Servers certificate validation, Can be useful if system CA certificate expires or the system time is out of order" +msgstr "禁用 TLS 服务器证书验证,当系统 CA 证书过期或系统时间错乱时,本选项可能会有用" + +msgid "Enable EDNS client subnet" +msgstr "启用 EDNS 客户端子网" + +msgid "IP Address" +msgstr "IP 地址" + +msgid "Please provide the IP address you use when accessing foreign websites. This IP subnet (0/24) will be used as the ECS address for Remote DNS requests" +msgstr "请提供您在访问国外网站时使用的 IP 地址,这个 IP 子网(0/24)将用作远程 DNS 请求的 ECS 地址" + +msgid "This feature is typically used when using a self-built DNS server as an Remote DNS upstream (requires support from the upstream server)" +msgstr "此功能通常在使用自建 DNS 服务器作为 远程 DNS 上游时使用(需要上游服务器的支持)" + +msgid "Prevent DNS Leaks" +msgstr "防止 DNS 泄漏" + +msgid "Enable this option fallback policy forces forwarding to remote DNS" +msgstr "启用此选项 fallback 策略会强制转发到远程 DNS" + +msgid "DNS Cache Size" +msgstr "DNS 缓存大小" + +msgid "DNS cache size (in piece). To disable caching, please set to 0." +msgstr "DNS 缓存大小(单位:条),要禁用缓存,请设置为 0" + +msgid "Lazy Cache TTL" +msgstr "乐观缓存 TTL" + +msgid "Lazy cache survival time (in second). To disable Lazy Cache, please set to 0." +msgstr "乐观缓存生存时间(单位:秒),要禁用乐观缓存,请设置为 0" + +msgid "Cache Dump" +msgstr "自动保存缓存" + +msgid "Save the cache locally and reload the cache dump on the next startup" +msgstr "保存缓存到本地文件,以供下次启动时重新载入使用" + +msgid "Auto Save Cache Interval" +msgstr "自动保存缓存间隔(秒)" + +msgid "Minimum TTL" +msgstr "覆盖最小 TTL 值(默认 0)" + +msgid "Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating no modification" +msgstr "修改 DNS 应答结果的最小 TTL 值 (秒),0 表示不修改" + +msgid "Maximum TTL" +msgstr "覆盖最大 TTL 值(默认 0)" + +msgid "Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating no modification" +msgstr "修改 DNS 应答结果的最大 TTL 值(秒),0 表示不修改" + +msgid "Logs" +msgstr "日志" + +msgid "Clear logs" +msgstr "清空日志" + +msgid "Rule List" +msgstr "规则列表" + +msgid "Rule Settings" +msgstr "自定义规则列表" + +msgid "
The list of rules only apply to 'Default Config' profiles." +msgstr "
规则列表仅适用于 “内置预设” 配置文件" + +msgid "White Lists" +msgstr "白名单" + +msgid "These domain names allow DNS resolution with the highest priority. Please input the domain names of websites, every line can input only one website domain. For example: hm.baidu.com." +msgstr "加入的域名始终允许使用 “本地 DNS” 进行解析,且优先级最高(每个域名一行,支持域名匹配规则)" + +msgid "Block Lists" +msgstr "黑名单" + +msgid "These domains are blocked from DNS resolution. Please input the domain names of websites, every line can input only one website domain. For example: baidu.com." +msgstr "加入的域名将屏蔽 DNS 解析(每个域名一行,支持域名匹配规则)" + +msgid "Grey Lists" +msgstr "灰名单" + +msgid "These domains are always resolved using remote DNS. Please input the domain names of websites, every line can input only one website domain. For example: google.com." +msgstr "加入的域名始终使用 “远程 DNS” 进行解析(每个域名一行,支持域名匹配规则)" + +msgid "DDNS Lists" +msgstr "DDNS 域名" + +msgid "These domains are always resolved using local DNS. And force TTL 5 seconds, DNS resolution results will not enter the cache. For example: myddns.example.com." +msgstr "加入的域名始终使用 “本地 DNS” 进行解析,并且强制 TTL 5 秒,解析结果不会进入缓存(每个域名一行,支持域名匹配规则)" + +msgid "Hosts For example: baidu.com 10.0.0.1" +msgstr "自定义 Hosts 重写,如:baidu.com 10.0.0.1(每个规则一行,支持域名匹配规则)" + +msgid "Redirect" +msgstr "重定向" + +msgid "The domain name to redirect the request to. Requests domain A, but returns records for domain B. example: a.com b.com" +msgstr "重定向请求的域名。请求域名 A,但返回域名 B 的记录,如:baidu.com qq.com(每个规则一行)" + +msgid "Block PTR" +msgstr "PTR 黑名单" + +msgid "These domains are blocked from PTR requests" +msgstr "加入的域名将阻止 PTR 请求(每个域名一行,支持域名匹配规则)" + +msgid "GeoData Export" +msgstr "GeoData 导出" + +msgid "GeoSite Tags" +msgstr "GeoSite 标签" + +msgid "Enter the GeoSite.dat category to be exported, Allow add multiple tags" +msgstr "填写需要导出的 GeoSite.dat 类别条目,允许添加多个标签" + +msgid "GeoIP Tags" +msgstr "GeoIP 标签" + +msgid "Enter the GeoIP.dat category to be exported, Allow add multiple tags" +msgstr "输入需要导出的 GeoIP.dat 类别条目,允许添加多个标签" + +msgid "Export directory: /var/mosdns" +msgstr "导出目录:/var/mosdns" diff --git a/luci-app-mosdns/po/zh_Hans b/luci-app-mosdns/po/zh_Hans new file mode 120000 index 00000000..41451e4a --- /dev/null +++ b/luci-app-mosdns/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-mosdns/root/etc/config/mosdns b/luci-app-mosdns/root/etc/config/mosdns new file mode 100644 index 00000000..d6b3f468 --- /dev/null +++ b/luci-app-mosdns/root/etc/config/mosdns @@ -0,0 +1,29 @@ + +config mosdns 'config' + option enabled '0' + option listen_port '5335' + option geo_auto_update '0' + option geo_update_week_time '*' + option geo_update_day_time '2' + option redirect '1' + option adblock '0' + option configfile '/etc/mosdns/config.yaml' + option log_level 'info' + option logfile '/var/log/mosdns.log' + option cache_size '8000' + option cache_survival_time '86400' + option dump_file '0' + option concurrent '1' + option idle_timeout '30' + option minimal_ttl '0' + option maximum_ttl '0' + option custom_local_dns '0' + option enable_pipeline '0' + option insecure_skip_verify '0' + option dns_leak '0' + option cloudflare '0' + option listen_port_api '9091' + option bootstrap_dns '119.29.29.29' + list remote_dns 'tls://8.8.8.8' + list remote_dns 'tls://1.1.1.1' + diff --git a/luci-app-mosdns/root/etc/hotplug.d/iface/99-mosdns b/luci-app-mosdns/root/etc/hotplug.d/iface/99-mosdns new file mode 100755 index 00000000..1fb646fb --- /dev/null +++ b/luci-app-mosdns/root/etc/hotplug.d/iface/99-mosdns @@ -0,0 +1,2 @@ +#!/bin/sh +[ "$ACTION" = ifup ] && /etc/init.d/mosdns restart diff --git a/luci-app-mosdns/root/etc/init.d/mosdns b/luci-app-mosdns/root/etc/init.d/mosdns new file mode 100755 index 00000000..f8dafd01 --- /dev/null +++ b/luci-app-mosdns/root/etc/init.d/mosdns @@ -0,0 +1,247 @@ +#!/bin/sh /etc/rc.common +# +# Copyright (C) 2020-2022, IrineSistiana +# +# Copyright (C) 2023, sbwml +# +# This file is part of mosdns. +# +# mosdns 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. +# +# mosdns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +START=99 +USE_PROCD=1 + +PROG=/usr/bin/mosdns +CONF=$(uci -q get mosdns.config.configfile) +CRON_FILE=/etc/crontabs/root +DUMP_FILE=/etc/mosdns/cache.dump +DUMP_FILE_DEFAULT=/usr/share/mosdns/cache.dump +DEFAULT_CONF=/usr/share/mosdns/default.yaml +MOSDNS_SCRIPT=/usr/share/mosdns/mosdns.sh + +get_config() { + config_get enabled $1 enabled 0 + config_get adblock $1 adblock 0 + config_get ad_source $1 ad_source "" + config_get cache_size $1 cache_size 8000 + config_get cache_survival_time $1 cache_survival_time 86400 + config_get dump_file $1 dump_file 0 + config_get dump_interval $1 dump_interval 3600 + config_get enable_pipeline $1 enable_pipeline 0 + config_get geo_auto_update $1 geo_auto_update 0 + config_get geo_update_day_time $1 geo_update_day_time 2 + config_get geo_update_week_time $1 geo_update_week_time "*" + config_get listen_port $1 listen_port 5335 + config_get log_file $1 logfile "/var/log/mosdns.log" + config_get log_level $1 log_level "info" + config_get maximum_ttl_custom $1 maximum_ttl 0 + config_get minimal_ttl_custom $1 minimal_ttl 0 + config_get redirect $1 redirect 0 + config_get remote_dns $1 remote_dns "tls://8.8.8.8 tls://1.1.1.1" + config_get custom_local_dns $1 custom_local_dns 0 + config_get apple_optimization $1 apple_optimization 0 + config_get bootstrap_dns $1 bootstrap_dns "119.29.29.29" + config_get listen_port_api $1 listen_port_api 9091 + config_get concurrent $1 concurrent 1 + config_get insecure_skip_verify $1 insecure_skip_verify 0 + config_get idle_timeout $1 idle_timeout 30 + config_get enable_ecs_remote $1 enable_ecs_remote 0 + config_get remote_ecs_ip $1 remote_ecs_ip "110.34.181.1" + config_get dns_leak $1 dns_leak 0 + config_get cloudflare $1 cloudflare 0 +} + +init_yaml() { + TMPDIR=$(mktemp -d) || exit 1 + [ $enable_pipeline -eq 1 ] && enable_pipeline=true || enable_pipeline=false + [ $insecure_skip_verify -eq 1 ] && insecure_skip_verify=true || insecure_skip_verify=false + # China DNS + if [ "$custom_local_dns" -eq 1 ]; then + local_dns=$($MOSDNS_SCRIPT dns | awk -v s=' ' '{ + for(i=1; i<=NF; i++) { + if ($i ~ /^h3:\/\//) { + printf "%s- addr: \"%s\"\n%s bootstrap: '${bootstrap_dns}'\n%s enable_pipeline: '${enable_pipeline}'\n%s insecure_skip_verify: '${insecure_skip_verify}'\n%s idle_timeout: '${idle_timeout}'\n%s enable_http3: true\n",s,$i,s,s,s,s,s + } else { + printf "%s- addr: \"%s\"\n%s bootstrap: '${bootstrap_dns}'\n%s enable_pipeline: '${enable_pipeline}'\n%s insecure_skip_verify: '${insecure_skip_verify}'\n%s idle_timeout: '${idle_timeout}'\n",s,$i,s,s,s,s + } + } + }') + else + local_dns=$($MOSDNS_SCRIPT dns | awk '{for(i=1;i<=NF;i++)printf "%s- addr: \"%s\"\n",s,$i,s}' s=' ') + fi + # Remote DNS + remote_dns=$(echo $remote_dns | awk -v s=' ' '{ + for(i=1; i<=NF; i++) { + if ($i ~ /^h3:\/\//) { + printf "%s- addr: \"%s\"\n%s bootstrap: '${bootstrap_dns}'\n%s enable_pipeline: '${enable_pipeline}'\n%s insecure_skip_verify: '${insecure_skip_verify}'\n%s idle_timeout: '${idle_timeout}'\n%s enable_http3: true\n",s,$i,s,s,s,s,s + } else { + printf "%s- addr: \"%s\"\n%s bootstrap: '${bootstrap_dns}'\n%s enable_pipeline: '${enable_pipeline}'\n%s insecure_skip_verify: '${insecure_skip_verify}'\n%s idle_timeout: '${idle_timeout}'\n",s,$i,s,s,s,s + } + } + }') + # Write parameters + sed "s,log_level,$log_level,g;s,log_file,$log_file,g; \ + s,listen_port,$listen_port,g;s,cache_size,$cache_size,g; \ + s,cache_survival_time,$cache_survival_time,g; \ + s,minimal_ttl_custom,$minimal_ttl_custom,g; \ + s,maximum_ttl_custom,$maximum_ttl_custom,g; \ + s,concurrent_num,$concurrent,g;s,api_port,$listen_port_api,g; \ + s,remote_dns_pipeline,$enable_pipeline,g" $DEFAULT_CONF > $CONF + # Apple optimization + [ "$apple_optimization" != 1 ] && sed -i '/- exec: \$query_is_apple_domain/,+1d' $CONF + # Adlist + adlist=$($MOSDNS_SCRIPT adlist) + echo "${adlist}" > $TMPDIR/adlist_files.txt + sed -i -e '/ADBLOCK_LIST/{r '$TMPDIR/adlist_files.txt -e';d}' $CONF + # DNS + echo "${local_dns}" > $TMPDIR/local_dns.txt + echo "${remote_dns}" > $TMPDIR/remote_dns.txt + sed -i -e '/- addr: local_dns/{r '$TMPDIR/local_dns.txt -e';d};/- addr: remote_dns/{r '$TMPDIR/remote_dns.txt -e';d}' $CONF + # Convert HTTP/3 prefix format + sed -i 's/h3:\/\//https:\/\//g' $CONF + # Cache dump + [ "$dump_file" -eq 1 ] && sed -i "/lazy_cache_ttl/a\ dump_file: $DUMP_FILE\n dump_interval: $dump_interval" $CONF + [ "$dump_file" -eq 1 ] && [ ! -f $DUMP_FILE ] && cp -a $DUMP_FILE_DEFAULT $DUMP_FILE + [ "$dump_file" -eq 0 ] && \cp -a $DUMP_FILE_DEFAULT $DUMP_FILE + # ECS + if [ "$enable_ecs_remote" -eq 1 ]; then + ecs_remote=$(echo "ecs ${remote_ecs_ip%.*}.0/24") + sed -i "s,ecs_remote,$ecs_remote,g" $CONF + else + sed -i "/ecs_remote/d;" $CONF + fi + # DNS Leak + if [ $dns_leak -eq 1 ]; then + sed -i "s/primary: UNDEFINED/primary: forward_remote_upstream/g" $CONF + else + sed -i "s/primary: UNDEFINED/primary: query_is_non_local_ip/g" $CONF + fi + # Cloudflare IP + if [ $cloudflare -eq 1 ]; then + cloudflare_ip=$(sh $MOSDNS_SCRIPT cloudflare) + sed -i "s/CLOUDFLARE_IP/$cloudflare_ip/g" $CONF + else + sed -i '/\$cloudflare_cidr\|CLOUDFLARE_IP/d' $CONF + fi + # disable lazy_cache plugin when cache_size is 0 + [ $cache_size -eq 0 ] && sed -i -E ':l;N;/exec: \$lazy_cache/s/(\n[^\n]*){6}$//;bl' $CONF + rm -rf $TMPDIR +} + +service_triggers() { + procd_add_reload_trigger "mosdns" +} + +restore_setting() { + rm -f /etc/mosdns/redirect.lock + sed -i "/list server/d" /etc/config/dhcp + uci set dhcp.@dnsmasq[0].noresolv='0' + uci del dhcp.@dnsmasq[0].cachesize + uci commit dhcp +} + +redirect_setting() { + if [ "${CONF}" = "/etc/mosdns/config.yaml" ]; then + sed -i "/list server/d" /etc/config/dhcp + uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#$listen_port" + uci set dhcp.@dnsmasq[0].rebind_protection='0' + uci set dhcp.@dnsmasq[0].noresolv="1" + uci set dhcp.@dnsmasq[0].cachesize='0' + uci commit dhcp + else + sed -i "/list server/d" /etc/config/dhcp + uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#$(awk -F'[:" ]+' '/^\s+listen:/{for(i=1;i<=NF;i++){if($i~/^[0-9]+$/){print $i;exit}}}' $CONF)" + uci set dhcp.@dnsmasq[0].rebind_protection='0' + uci set dhcp.@dnsmasq[0].noresolv="1" + uci set dhcp.@dnsmasq[0].cachesize='0' + uci commit dhcp + fi + touch /etc/mosdns/redirect.lock +} + +reload_dnsmasq() { + /etc/init.d/dnsmasq reload +} + +reload_service() { + stop + sleep 1 + start +} + +setcron() { + sed -i '/mosdns.sh/d' $CRON_FILE 2>/dev/null + [ "$geo_auto_update" -eq 1 ] && echo "0 $geo_update_day_time * * $geo_update_week_time $MOSDNS_SCRIPT geodata" >> $CRON_FILE + crontab $CRON_FILE +} + +delcron() { + sed -i '/mosdns.sh/d' $CRON_FILE 2>/dev/null + crontab $CRON_FILE +} + +v2dat_dump() { + $MOSDNS_SCRIPT v2dat_dump +} + +start_service() { + config_load "mosdns" + config_foreach get_config "mosdns" + [ $enabled -ne 1 ] && return 1 + delcron ; setcron + [ "${CONF}" = "/etc/mosdns/config.yaml" ] && init_yaml + :> $($MOSDNS_SCRIPT logfile) + if [ "${log_level}" = "error" ] || [ "${log_level}" = "warn" ]; then + v2dat_dump > /dev/null 2>&1 + else + v2dat_dump >> $($MOSDNS_SCRIPT logfile) 2>&1 + fi + procd_open_instance mosdns + procd_set_param env QUIC_GO_DISABLE_RECEIVE_BUFFER_WARNING=true + procd_set_param command $PROG start -c "$CONF" + procd_set_param user root + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}" + procd_close_instance mosdns + [ "$redirect" -ne 1 ] && [ -f "/etc/mosdns/redirect.lock" ] && restore_setting + [ "$redirect" -eq 1 ] && redirect_setting + reload_dnsmasq + # Update Adlist + update_list=0 + if [ "$adblock" -eq 1 ]; then + if [ -f "/etc/mosdns/rule/.ad_source" ]; then + for url in $ad_source; + do + [ "$url" = "geosite.dat" ] && continue + if [ $(grep -c "$url" "/etc/mosdns/rule/.ad_source") -eq 0 ]; then + update_list=1 + break + fi + done + else + update_list=1 + fi + fi + [ "$update_list" -eq 1 ] && $MOSDNS_SCRIPT adlist_update &> /dev/null & +} + +stop_service() { + config_load "mosdns" + config_foreach get_config "mosdns" + [ "$enabled" -eq "0" ] && [ -f "/etc/mosdns/redirect.lock" ] && restore_setting + reload_dnsmasq + delcron +} diff --git a/luci-app-mosdns/root/etc/mosdns/config_custom.yaml b/luci-app-mosdns/root/etc/mosdns/config_custom.yaml new file mode 100644 index 00000000..15347bce --- /dev/null +++ b/luci-app-mosdns/root/etc/mosdns/config_custom.yaml @@ -0,0 +1,142 @@ +log: + level: info + file: "/var/log/mosdns.log" + +# API 入口设置 +api: + http: "0.0.0.0:9091" + +include: [] + +plugins: + # 国内域名 + - tag: geosite_cn + type: domain_set + args: + files: + - "/var/mosdns/geosite_cn.txt" + + # 国内 IP + - tag: geoip_cn + type: ip_set + args: + files: + - "/var/mosdns/geoip_cn.txt" + + # 国外域名 + - tag: geosite_no_cn + type: domain_set + args: + files: + - "/var/mosdns/geosite_geolocation-!cn.txt" + + # 缓存 + - tag: lazy_cache + type: cache + args: + size: 20000 + lazy_cache_ttl: 86400 + dump_file: "/etc/mosdns/cache.dump" + dump_interval: 600 + + # 转发至本地服务器 + - tag: forward_local + type: forward + args: + upstreams: + - addr: "https://doh.pub/dns-query" + bootstrap: 180.76.76.76 + - addr: 119.29.29.29 + + # 转发至远程服务器 + - tag: forward_remote + type: forward + args: + upstreams: + - addr: tls://8.8.8.8 + enable_pipeline: false + + # 国内解析 + - tag: local_sequence + type: sequence + args: + - exec: $forward_local + + # 国外解析 + - tag: remote_sequence + type: sequence + args: + - exec: prefer_ipv4 + - exec: $forward_remote + + # 有响应终止返回 + - tag: has_resp_sequence + type: sequence + args: + - matches: has_resp + exec: accept + + # fallback 用本地服务器 sequence + # 返回非国内 ip 则 drop_resp + - tag: query_is_local_ip + type: sequence + args: + - exec: $local_sequence + - matches: "!resp_ip $geoip_cn" + exec: drop_resp + + # fallback 用远程服务器 sequence + - tag: query_is_remote + type: sequence + args: + - exec: $remote_sequence + + # fallback 用远程服务器 sequence + - tag: fallback + type: fallback + args: + primary: query_is_local_ip + secondary: query_is_remote + threshold: 500 + always_standby: true + + # 查询国内域名 + - tag: query_is_local_domain + type: sequence + args: + - matches: qname $geosite_cn + exec: $local_sequence + + # 查询国外域名 + - tag: query_is_no_local_domain + type: sequence + args: + - matches: qname $geosite_no_cn + exec: $remote_sequence + + # 主要的运行逻辑插件 + # sequence 插件中调用的插件 tag 必须在 sequence 前定义, + # 否则 sequence 找不到对应插件。 + - tag: main_sequence + type: sequence + args: + - exec: $lazy_cache + - exec: $query_is_local_domain + - exec: jump has_resp_sequence + - exec: $query_is_no_local_domain + - exec: jump has_resp_sequence + - exec: $fallback + + # 启动 udp 服务器。 + - tag: udp_server + type: udp_server + args: + entry: main_sequence + listen: ":5335" + + # 启动 tcp 服务器。 + - tag: tcp_server + type: tcp_server + args: + entry: main_sequence + listen: ":5335" diff --git a/luci-app-mosdns/root/etc/mosdns/rule/blocklist.txt b/luci-app-mosdns/root/etc/mosdns/rule/blocklist.txt new file mode 100644 index 00000000..e69de29b diff --git a/luci-app-mosdns/root/etc/mosdns/rule/cloudflare-cidr.txt b/luci-app-mosdns/root/etc/mosdns/rule/cloudflare-cidr.txt new file mode 100644 index 00000000..ca50c345 --- /dev/null +++ b/luci-app-mosdns/root/etc/mosdns/rule/cloudflare-cidr.txt @@ -0,0 +1,22 @@ +173.245.48.0/20 +103.21.244.0/22 +103.22.200.0/22 +103.31.4.0/22 +141.101.64.0/18 +108.162.192.0/18 +190.93.240.0/20 +188.114.96.0/20 +197.234.240.0/22 +198.41.128.0/17 +162.158.0.0/15 +104.16.0.0/13 +104.24.0.0/14 +172.64.0.0/13 +131.0.72.0/22 +2400:cb00::/32 +2606:4700::/32 +2803:f800::/32 +2405:b500::/32 +2405:8100::/32 +2a06:98c0::/29 +2c0f:f248::/32 diff --git a/luci-app-mosdns/root/etc/mosdns/rule/ddnslist.txt b/luci-app-mosdns/root/etc/mosdns/rule/ddnslist.txt new file mode 100644 index 00000000..e69de29b diff --git a/luci-app-mosdns/root/etc/mosdns/rule/greylist.txt b/luci-app-mosdns/root/etc/mosdns/rule/greylist.txt new file mode 100644 index 00000000..e69de29b diff --git a/luci-app-mosdns/root/etc/mosdns/rule/hosts.txt b/luci-app-mosdns/root/etc/mosdns/rule/hosts.txt new file mode 100644 index 00000000..e69de29b diff --git a/luci-app-mosdns/root/etc/mosdns/rule/local-ptr.txt b/luci-app-mosdns/root/etc/mosdns/rule/local-ptr.txt new file mode 100644 index 00000000..0a66cae4 --- /dev/null +++ b/luci-app-mosdns/root/etc/mosdns/rule/local-ptr.txt @@ -0,0 +1,87 @@ +0.in-addr.arpa +10.in-addr.arpa +127.in-addr.arpa +16.172.in-addr.arpa +17.172.in-addr.arpa +18.172.in-addr.arpa +19.172.in-addr.arpa +20.172.in-addr.arpa +21.172.in-addr.arpa +22.172.in-addr.arpa +23.172.in-addr.arpa +24.172.in-addr.arpa +25.172.in-addr.arpa +26.172.in-addr.arpa +27.172.in-addr.arpa +28.172.in-addr.arpa +29.172.in-addr.arpa +30.172.in-addr.arpa +31.172.in-addr.arpa +64.100.in-addr.arpa +65.100.in-addr.arpa +66.100.in-addr.arpa +67.100.in-addr.arpa +68.100.in-addr.arpa +69.100.in-addr.arpa +70.100.in-addr.arpa +71.100.in-addr.arpa +72.100.in-addr.arpa +73.100.in-addr.arpa +74.100.in-addr.arpa +75.100.in-addr.arpa +76.100.in-addr.arpa +77.100.in-addr.arpa +78.100.in-addr.arpa +79.100.in-addr.arpa +80.100.in-addr.arpa +81.100.in-addr.arpa +82.100.in-addr.arpa +83.100.in-addr.arpa +84.100.in-addr.arpa +85.100.in-addr.arpa +86.100.in-addr.arpa +87.100.in-addr.arpa +88.100.in-addr.arpa +89.100.in-addr.arpa +90.100.in-addr.arpa +91.100.in-addr.arpa +92.100.in-addr.arpa +93.100.in-addr.arpa +94.100.in-addr.arpa +95.100.in-addr.arpa +96.100.in-addr.arpa +97.100.in-addr.arpa +98.100.in-addr.arpa +99.100.in-addr.arpa +100.100.in-addr.arpa +101.100.in-addr.arpa +102.100.in-addr.arpa +103.100.in-addr.arpa +104.100.in-addr.arpa +105.100.in-addr.arpa +106.100.in-addr.arpa +107.100.in-addr.arpa +108.100.in-addr.arpa +109.100.in-addr.arpa +110.100.in-addr.arpa +111.100.in-addr.arpa +112.100.in-addr.arpa +113.100.in-addr.arpa +114.100.in-addr.arpa +115.100.in-addr.arpa +116.100.in-addr.arpa +117.100.in-addr.arpa +118.100.in-addr.arpa +119.100.in-addr.arpa +120.100.in-addr.arpa +121.100.in-addr.arpa +122.100.in-addr.arpa +123.100.in-addr.arpa +124.100.in-addr.arpa +125.100.in-addr.arpa +126.100.in-addr.arpa +127.100.in-addr.arpa +2.0.192.in-addr.arpa +168.192.in-addr.arpa +255.255.255.255.in-addr.arpa +domain:ip6.arpa diff --git a/luci-app-mosdns/root/etc/mosdns/rule/redirect.txt b/luci-app-mosdns/root/etc/mosdns/rule/redirect.txt new file mode 100644 index 00000000..e69de29b diff --git a/luci-app-mosdns/root/etc/mosdns/rule/whitelist.txt b/luci-app-mosdns/root/etc/mosdns/rule/whitelist.txt new file mode 100644 index 00000000..98470876 --- /dev/null +++ b/luci-app-mosdns/root/etc/mosdns/rule/whitelist.txt @@ -0,0 +1,11 @@ +domain:bing.com +domain:live.com +domain:msn.com +domain:ntp.org +domain:office.com +domain:qlogo.cn +domain:qq.com +domain:redhat.com +keyword:douyin +keyword:microsoft +keyword:windows diff --git a/luci-app-mosdns/root/etc/uci-defaults/luci-mosdns b/luci-app-mosdns/root/etc/uci-defaults/luci-mosdns new file mode 100755 index 00000000..09c39fa0 --- /dev/null +++ b/luci-app-mosdns/root/etc/uci-defaults/luci-mosdns @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@mosdns[-1] + add ucitrack mosdns + set ucitrack.@mosdns[-1].init=mosdns + commit ucitrack +EOF + +rm -rf /tmp/luci-* +exit 0 diff --git a/luci-app-mosdns/root/usr/share/mosdns/cache.dump b/luci-app-mosdns/root/usr/share/mosdns/cache.dump new file mode 100644 index 0000000000000000000000000000000000000000..7d574188288d38de3d18fd8d315d7529083719fe GIT binary patch literal 36 kcmb2|=HOu9% /etc/mosdns/rule/.ad_source + has_update=0 + for url in $ad_source; + do + if [ "$url" != "geosite.dat" ] && [ $(echo "$url" | grep -c -E "^file://") -eq 0 ]; then + echo "$url" >> /etc/mosdns/rule/.ad_source + filename=$(basename $url) + if echo "$url" | grep -Eq "^https://raw.githubusercontent.com" ; then + [ "$google_status" -ne "204" ] && mirror="https://ghproxy.com/" + fi + echo -e "\e[1;32mDownloading $mirror$url\e[0m" + curl --connect-timeout 5 -m 90 --ipv4 -kfSLo "$AD_TMPDIR/$filename" "$mirror$url" + has_update=1 + fi + done + if [ $? -ne 0 ]; then + echo -e "\e[1;31mRules download failed.\e[0m" + rm -rf "$AD_TMPDIR" + exit 1 + else + [ $has_update -eq 1 ] && { + mkdir -p /etc/mosdns/rule/adlist + rm -rf /etc/mosdns/rule/adlist/* + \cp $AD_TMPDIR/* /etc/mosdns/rule/adlist + rm -rf "$AD_TMPDIR" + } + fi +} + +geodat_update() ( + TMPDIR=$(mktemp -d) || exit 1 + google_status=$(curl -I -4 -m 3 -o /dev/null -s -w %{http_code} http://www.google.com/generate_204) + [ "$google_status" -ne "204" ] && mirror="https://ghproxy.com/" + # geoip.dat - cn-private + echo -e "\e[1;32mDownloading "$mirror"https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip-only-cn-private.dat\e[0m" + curl --connect-timeout 5 -m 60 --ipv4 -kfSLo "$TMPDIR/geoip.dat" ""$mirror"https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip-only-cn-private.dat" + [ $? -ne 0 ] && rm -rf "$TMPDIR" && exit 1 + # checksum - geoip.dat + echo -e "\e[1;32mDownloading "$mirror"https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip-only-cn-private.dat.sha256sum\e[0m" + curl --connect-timeout 5 -m 10 --ipv4 -kfSLo "$TMPDIR/geoip.dat.sha256sum" ""$mirror"https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip-only-cn-private.dat.sha256sum" + [ $? -ne 0 ] && rm -rf "$TMPDIR" && exit 1 + if [ "$(sha256sum "$TMPDIR/geoip.dat" | awk '{print $1}')" != "$(cat "$TMPDIR/geoip.dat.sha256sum" | awk '{print $1}')" ]; then + echo -e "\e[1;31mgeoip.dat checksum error\e[0m" + rm -rf "$TMPDIR" + exit 1 + fi + + # geosite.dat + echo -e "\e[1;32mDownloading "$mirror"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat\e[0m" + curl --connect-timeout 5 -m 120 --ipv4 -kfSLo "$TMPDIR/geosite.dat" ""$mirror"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat" + [ $? -ne 0 ] && rm -rf "$TMPDIR" && exit 1 + # checksum - geosite.dat + echo -e "\e[1;32mDownloading "$mirror"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat.sha256sum\e[0m" + curl --connect-timeout 5 -m 10 --ipv4 -kfSLo "$TMPDIR/geosite.dat.sha256sum" ""$mirror"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat.sha256sum" + [ $? -ne 0 ] && rm -rf "$TMPDIR" && exit 1 + if [ "$(sha256sum "$TMPDIR/geosite.dat" | awk '{print $1}')" != "$(cat "$TMPDIR/geosite.dat.sha256sum" | awk '{print $1}')" ]; then + echo -e "\e[1;31mgeosite.dat checksum error\e[0m" + rm -rf "$TMPDIR" + exit 1 + fi + rm -rf "$TMPDIR"/*.sha256sum + \cp -a "$TMPDIR"/* /usr/share/v2ray + rm -rf "$TMPDIR" +) + +restart_service() { + /etc/init.d/mosdns restart +} + +flush_cache() { + curl -s 127.0.0.1:$(uci -q get mosdns.config.listen_port_api)/plugins/lazy_cache/flush || exit 1 +} + +v2dat_dump() { + # env + v2dat_dir=/usr/share/v2ray + adblock=$(uci -q get mosdns.config.adblock) + ad_source=$(uci -q get mosdns.config.ad_source) + configfile=$(uci -q get mosdns.config.configfile) + mkdir -p /var/mosdns + rm -f /var/mosdns/geo*.txt + if [ "$configfile" = "/etc/mosdns/config.yaml" ]; then + # default config + v2dat unpack geoip -o /var/mosdns -f cn $v2dat_dir/geoip.dat + v2dat unpack geosite -o /var/mosdns -f cn -f apple -f 'geolocation-!cn' $v2dat_dir/geosite.dat + [ "$adblock" -eq 1 ] && [ $(echo $ad_source | grep -c geosite.dat) -ge '1' ] && v2dat unpack geosite -o /var/mosdns -f category-ads-all $v2dat_dir/geosite.dat + else + # custom config + v2dat unpack geoip -o /var/mosdns -f cn $v2dat_dir/geoip.dat + v2dat unpack geosite -o /var/mosdns -f cn -f 'geolocation-!cn' $v2dat_dir/geosite.dat + geoip_tags=$(uci -q get mosdns.config.geoip_tags) + geosite_tags=$(uci -q get mosdns.config.geosite_tags) + [ -n "$geoip_tags" ] && v2dat unpack geoip -o /var/mosdns $(echo $geoip_tags | sed -r 's/\S+/-f &/g') $v2dat_dir/geoip.dat + [ -n "$geosite_tags" ] && v2dat unpack geosite -o /var/mosdns $(echo $geosite_tags | sed -r 's/\S+/-f &/g') $v2dat_dir/geosite.dat + fi +} + +cloudflare_ip() { + uci -q get mosdns.config.cloudflare_ip +} + +case $script_action in + "dns") + interface_dns + ;; + "adlist") + get_adlist + ;; + "geodata") + geodat_update && adlist_update && restart_service + ;; + "logfile") + logfile_path + ;; + "adlist_update") + adlist_update && [ "$has_update" -eq 1 ] && restart_service + ;; + "flush") + flush_cache + ;; + "v2dat_dump") + v2dat_dump + ;; + "cloudflare") + cloudflare_ip + ;; + "version") + mosdns version + ;; + *) + exit 0 + ;; +esac diff --git a/luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json b/luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json new file mode 100644 index 00000000..6c79e330 --- /dev/null +++ b/luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json @@ -0,0 +1,11 @@ +{ + "luci-app-mosdns": { + "description": "Grant UCI access for luci-app-mosdns", + "read": { + "uci": [ "mosdns" ] + }, + "write": { + "uci": [ "mosdns" ] + } + } +} diff --git a/luci-app-mosdns/root/www/luci-static/resources/mosdns/addon/fold/foldcode.js b/luci-app-mosdns/root/www/luci-static/resources/mosdns/addon/fold/foldcode.js new file mode 100644 index 00000000..f93d42b7 --- /dev/null +++ b/luci-app-mosdns/root/www/luci-static/resources/mosdns/addon/fold/foldcode.js @@ -0,0 +1 @@ +!function(n){"object"==typeof exports&&"object"==typeof module?n(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],n):n(CodeMirror)}(function(n){"use strict";function e(e,o,i,t){if(i&&i.call){var l=i;i=null}else l=r(e,i,"rangeFinder");"number"==typeof o&&(o=n.Pos(o,0));var f=r(e,i,"minFoldSize");function d(n){var r=l(e,o);if(!r||r.to.line-r.from.linee.firstLine();)o=n.Pos(o.line-1,0),u=d(!1);if(u&&!u.cleared&&"unfold"!==t){var a=function(n,e){var o=r(n,e,"widget");if("string"==typeof o){var i=document.createTextNode(o);(o=document.createElement("span")).appendChild(i),o.className="CodeMirror-foldmarker"}else o&&(o=o.cloneNode(!0));return o}(e,i);n.on(a,"mousedown",function(e){c.clear(),n.e_preventDefault(e)});var c=e.markText(u.from,u.to,{replacedWith:a,clearOnEnter:r(e,i,"clearOnEnter"),__isFold:!0});c.on("clear",function(o,r){n.signal(e,"unfold",e,o,r)}),n.signal(e,"fold",e,u.from,u.to)}}n.newFoldFunction=function(n,o){return function(r,i){e(r,i,{rangeFinder:n,widget:o})}},n.defineExtension("foldCode",function(n,o,r){e(this,n,o,r)}),n.defineExtension("isFolded",function(n){for(var e=this.findMarksAt(n),o=0;o=u){if(s&&f&&s.test(f.className))return;i=r(a.indicatorOpen)}}(i||f)&&t.setGutterMarker(n,a.gutter,i)})}function i(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}function f(t){var o=t.getViewport(),e=t.state.foldGutter;e&&(t.operation(function(){n(t,o.from,o.to)}),e.from=o.from,e.to=o.to)}function a(t,r,n){var i=t.state.foldGutter;if(i){var f=i.options;if(n==f.gutter){var a=e(t,r);a?a.clear():t.foldCode(o(r,0),f)}}}function d(t){var o=t.state.foldGutter;if(o){var e=o.options;o.from=o.to=0,clearTimeout(o.changeUpdate),o.changeUpdate=setTimeout(function(){f(t)},e.foldOnChangeTimeSpan||600)}}function u(t){var o=t.state.foldGutter;if(o){var e=o.options;clearTimeout(o.changeUpdate),o.changeUpdate=setTimeout(function(){var e=t.getViewport();o.from==o.to||e.from-o.to>20||o.from-e.to>20?f(t):t.operation(function(){e.fromo.to&&(n(t,o.to,e.to),o.to=e.to)})},e.updateViewportTimeSpan||400)}}function l(t,o){var e=t.state.foldGutter;if(e){var r=o.line;r>=e.from&&ro))break;r=l}}return r?{from:e.Pos(i.line,t.getLine(i.line).length),to:e.Pos(r,t.getLine(r).length)}:void 0}})}); \ No newline at end of file diff --git a/luci-app-mosdns/root/www/luci-static/resources/mosdns/lib/codemirror.css b/luci-app-mosdns/root/www/luci-static/resources/mosdns/lib/codemirror.css new file mode 100644 index 00000000..504079b4 --- /dev/null +++ b/luci-app-mosdns/root/www/luci-static/resources/mosdns/lib/codemirror.css @@ -0,0 +1 @@ +.CodeMirror{/* Set height, width, borders, and global font properties here */ font-family: monospace; height: 500px; color: black; direction: ltr;}@media screen and (max-width: 768px){.CodeMirror{/* Set height, width, borders, and global font properties here */ font-size: small; font-family: monospace; height: 560px; width: 100%; color: black; direction: ltr;}}@media (min-width: 769px){.CodeMirror{/* Set height, width, borders, and global font properties here */ font-size: small; font-family: monospace; height: 560px; width: 750px; color: black; direction: ltr;}}.CodeMirror-lines{padding: 4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding: 0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color: white}.CodeMirror-gutters{border-right: 1px solid #ddd; background-color: #f7f7f7; white-space: nowrap}.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}.CodeMirror-cursor{border-left: 1px solid black; border-right: 0; width: 0}.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; border: 0; -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{50%{background-color: transparent}}@-webkit-keyframes blink{50%{background-color: transparent}}@keyframes blink{50%{background-color: transparent}}.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}.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-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: red}.cm-invalidchar{color: red}.CodeMirror-composing{border-bottom: 2px solid}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}.CodeMirror{position: relative; overflow: hidden; background: white}.CodeMirror-scroll{overflow: scroll !important; margin-bottom: -30px; margin-right: -30px; padding-bottom: 30px; height: 100%; outline: 0; position: relative}.CodeMirror-sizer{position: relative; border-right: 30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position: absolute; z-index: 6; display: 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: -30px}.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}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-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: .1px}.CodeMirror-rtl pre{direction: rtl}.CodeMirror-code{outline: 0}.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)}.cm-force-border{padding-right: .1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility: hidden}}.cm-tab-wrap-hack:after{content: ''}span.CodeMirror-selectedtext{background: 0} \ No newline at end of file diff --git a/luci-app-mosdns/root/www/luci-static/resources/mosdns/lib/codemirror.js b/luci-app-mosdns/root/www/luci-static/resources/mosdns/lib/codemirror.js new file mode 100644 index 00000000..d01f072e --- /dev/null +++ b/luci-app-mosdns/root/www/luci-static/resources/mosdns/lib/codemirror.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CodeMirror=t()}(this,function(){"use strict";var e=navigator.userAgent,t=navigator.platform,r=/gecko\/\d/i.test(e),n=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),o=/Edge\/(\d+)/.exec(e),l=n||i||o,s=l&&(n?document.documentMode||6:+(o||i)[1]),a=!o&&/WebKit\//.test(e),u=a&&/Qt\/\d+\.\d+/.test(e),c=!o&&/Chrome\//.test(e),h=/Opera\//.test(e),f=/Apple Computer/.test(navigator.vendor),d=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),p=/PhantomJS/.test(e),g=!o&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),v=/Android/.test(e),m=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=g||/Mac/.test(t),b=/\bCrOS\b/.test(e),w=/win/i.test(t),x=h&&e.match(/Version\/(\d*\.\d*)/);x&&(x=Number(x[1])),x&&x>=15&&(h=!1,a=!0);var C=y&&(u||h&&(null==x||x<12.11)),S=r||l&&s>=9;function L(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var k,T=function(e,t){var r=e.className,n=L(t).exec(r);if(n){var i=r.slice(n.index+n[0].length);e.className=r.slice(0,n.index)+(i?n[1]+i:"")}};function M(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function N(e,t){return M(e).appendChild(t)}function O(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o=t)return l+(t-o);l+=s-o,l+=r-l%r,o=s+1}}g?P=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:l&&(P=function(e){try{e.select()}catch(e){}});var R=function(){this.id=null,this.f=null,this.time=0,this.handler=E(this.onTimeout,this)};function B(e,t){for(var r=0;r=t)return n+Math.min(l,t-i);if(i+=o-n,n=o+1,(i+=r-i%r)>=t)return n}}var Y=[""];function _(e){for(;Y.length<=e;)Y.push($(Y)+" ");return Y[e]}function $(e){return e[e.length-1]}function q(e,t){for(var r=[],n=0;n"€"&&(e.toUpperCase()!=e.toLowerCase()||J.test(e))}function te(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ee(e))||t.test(e):ee(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\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 ie(e){return e.charCodeAt(0)>=768&&ne.test(e)}function oe(e,t,r){for(;(r<0?t>0:tr?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}var se=null;function ae(e,t,r){var n;se=null;for(var i=0;it)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:se=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:se=i)}return null!=n?n:se}var ue=function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",t="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";var r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,n=/[stwN]/,i=/[LRr]/,o=/[Lb1n]/,l=/[1n]/;function s(e,t,r){this.level=e,this.from=t,this.to=r}return function(a,u){var c="ltr"==u?"L":"R";if(0==a.length||"ltr"==u&&!r.test(a))return!1;for(var h,f=a.length,d=[],p=0;p-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function ge(e,t){var r=de(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i0}function be(e){e.prototype.on=function(e,t){fe(this,e,t)},e.prototype.off=function(e,t){pe(this,e,t)}}function we(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function xe(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Ce(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Se(e){we(e),xe(e)}function Le(e){return e.target||e.srcElement}function ke(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var Te,Me,Ne=function(){if(l&&s<9)return!1;var e=O("div");return"draggable"in e||"dragDrop"in e}();function Oe(e){if(null==Te){var t=O("span","​");N(e,O("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Te=t.offsetWidth<=1&&t.offsetHeight>2&&!(l&&s<8))}var r=Te?O("span","​"):O("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function Ae(e){if(null!=Me)return Me;var t=N(e,document.createTextNode("AخA")),r=k(t,0,1).getBoundingClientRect(),n=k(t,1,2).getBoundingClientRect();return M(e),!(!r||r.left==r.right)&&(Me=n.right-r.right<3)}var De,We=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),l=o.indexOf("\r");-1!=l?(r.push(o.slice(0,l)),t+=l+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},He=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Fe="oncopy"in(De=O("div"))||(De.setAttribute("oncopy","return;"),"function"==typeof De.oncopy),Pe=null;var Ee={},Ie={};function ze(e){if("string"==typeof e&&Ie.hasOwnProperty(e))e=Ie[e];else if(e&&"string"==typeof e.name&&Ie.hasOwnProperty(e.name)){var t=Ie[e.name];"string"==typeof t&&(t={name:t}),(e=Q(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return ze("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return ze("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Re(e,t){t=ze(t);var r=Ee[t.name];if(!r)return Re(e,"text/plain");var n=r(e,t);if(Be.hasOwnProperty(t.name)){var i=Be[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)n[l]=t.modeProps[l];return n}var Be={};function Ge(e,t){I(t,Be.hasOwnProperty(e)?Be[e]:Be[e]={})}function Ue(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Ve(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Ke(e,t,r){return!e.startState||e.startState(t,r)}var je=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};function Xe(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t=e.first&&tr?et(r,Xe(e,r).text.length):function(e,t){var r=e.ch;return null==r||r>t?et(e.line,t):r<0?et(e.line,0):e}(t,Xe(e,t.line).text.length)}function at(e,t){for(var r=[],n=0;n=this.string.length},je.prototype.sol=function(){return this.pos==this.lineStart},je.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},je.prototype.next=function(){if(this.post},je.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},je.prototype.skipToEnd=function(){this.pos=this.string.length},je.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},je.prototype.backUp=function(e){this.pos-=e},je.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},je.prototype.current=function(){return this.string.slice(this.start,this.pos)},je.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},je.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},je.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ut=function(e,t){this.state=e,this.lookAhead=t},ct=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function ht(e,t,r,n){var i=[e.state.modeGen],o={};wt(e,t.text,e.doc.mode,r,function(e,t){return i.push(e,t)},o,n);for(var l=r.state,s=function(n){r.baseTokens=i;var s=e.state.overlays[n],a=1,u=0;r.state=!0,wt(e,t.text,s.mode,r,function(e,t){for(var r=a;ue&&i.splice(a,1,e,i[a+1],n),a+=2,u=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,a-r,e,"overlay "+t),a=r+2;else for(;re.options.maxHighlightLength&&Ue(e.doc.mode,n.state),o=ht(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function dt(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new ct(n,!0,t);var o=function(e,t,r){for(var n,i,o=e.doc,l=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=o.first)return o.first;var a=Xe(o,s-1),u=a.stateAfter;if(u&&(!r||s+(u instanceof ut?u.lookAhead:0)<=o.modeFrontier))return s;var c=z(a.text,null,e.options.tabSize);(null==i||n>c)&&(i=s-1,n=c)}return i}(e,t,r),l=o>n.first&&Xe(n,o-1).stateAfter,s=l?ct.fromSaved(n,l,o):new ct(n,Ke(n.mode),o);return n.iter(o,t,function(r){pt(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&nt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}ct.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},ct.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},ct.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},ct.fromSaved=function(e,t,r){return t instanceof ut?new ct(e,Ue(e.mode,t.state),r,t.lookAhead):new ct(e,Ue(e.mode,t),r)},ct.prototype.save=function(e){var t=!1!==e?Ue(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ut(t,this.maxLookAhead):t};var mt=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r};function yt(e,t,r,n){var i,o,l=e.doc,s=l.mode,a=Xe(l,(t=st(l,t)).line),u=dt(e,t.line,r),c=new je(a.text,e.options.tabSize,u);for(n&&(o=[]);(n||c.pose.options.maxHighlightLength?(s=!1,l&&pt(e,t,n,h.pos),h.pos=t.length,a=null):a=bt(vt(r,h,n.state,f),o),f){var d=f[0].name;d&&(a="m-"+(a?d+" "+a:d))}if(!s||c!=a){for(;u=t:o.to>t);(n||(n=[])).push(new St(l,o.from,s?null:o.to))}}return n}(r,i,l),a=function(e,t,r){var n;if(e)for(var i=0;i=t:o.to>t)||o.from==t&&"bookmark"==l.type&&(!r||o.marker.insertLeft)){var s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from0&&s)for(var b=0;bt)&&(!r||Wt(r,o.marker)<0)&&(r=o.marker)}return r}function It(e,t,r,n,i){var o=Xe(e,t),l=Ct&&o.markedSpans;if(l)for(var s=0;s=0&&h<=0||c<=0&&h>=0)&&(c<=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?tt(u.to,r)>=0:tt(u.to,r)>0)||c>=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?tt(u.from,n)<=0:tt(u.from,n)<0)))return!0}}}function zt(e){for(var t;t=Ft(e);)e=t.find(-1,!0).line;return e}function Rt(e,t){var r=Xe(e,t),n=zt(r);return r==n?t:qe(n)}function Bt(e,t){if(t>e.lastLine())return t;var r,n=Xe(e,t);if(!Gt(e,n))return t;for(;r=Pt(n);)n=r.find(1,!0).line;return qe(n)+1}function Gt(e,t){var r=Ct&&t.markedSpans;if(r)for(var n=void 0,i=0;it.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)})}var Xt=function(e,t,r){this.text=e,Ot(this,t),this.height=r?r(this):1};function Yt(e){e.parent=null,Nt(e)}Xt.prototype.lineNo=function(){return qe(this)},be(Xt);var _t={},$t={};function qt(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?$t:_t;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function Zt(e,t){var r=A("span",null,null,a?"padding-right: .1px":null),n={pre:A("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,l=void 0;n.pos=0,n.addToken=Jt,Ae(e.display.measure)&&(l=ce(o,e.doc.direction))&&(n.addToken=er(n.addToken,l)),n.map=[],rr(o,n,ft(e,o,t!=e.display.externalMeasured&&qe(o))),o.styleClasses&&(o.styleClasses.bgClass&&(n.bgClass=F(o.styleClasses.bgClass,n.bgClass||"")),o.styleClasses.textClass&&(n.textClass=F(o.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Oe(e.display.measure))),0==i?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(a){var s=n.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return ge(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function Qt(e){var t=O("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Jt(e,t,r,n,i,o,a){if(t){var u,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var r=t,n="",i=0;iu&&h.from<=u);f++);if(h.to>=c)return e(r,n,i,o,l,s,a);e(r,n.slice(0,h.to-u),i,o,null,s,a),o=null,n=n.slice(h.to-u),u=h.to}}}function tr(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function rr(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var l,s,a,u,c,h,f,d=i.length,p=0,g=1,v="",m=0;;){if(m==p){a=u=c=s="",f=null,h=null,m=1/0;for(var y=[],b=void 0,w=0;wp||C.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&m>x.to&&(m=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==m&&(b||(b=[])).push(C.endStyle,x.to),C.title&&((f||(f={})).title=C.title),C.attributes)for(var S in C.attributes)(f||(f={}))[S]=C.attributes[S];C.collapsed&&(!h||Wt(h.marker,C)<0)&&(h=x)}else x.from>p&&m>x.from&&(m=x.from)}if(b)for(var L=0;L=d)break;for(var T=Math.min(d,m);;){if(v){var M=p+v.length;if(!h){var N=M>T?v.slice(0,T-p):v;t.addToken(t,N,l?l+a:a,c,p+N.length==m?u:"",s,f)}if(M>=T){v=v.slice(T-p),p=T;break}p=M,c=""}v=i.slice(o,o=r[g++]),l=qt(r[g++],t.cm.options)}}else for(var O=1;Or)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Or(e,t,r,n){return Wr(e,Dr(e,t),r,n)}function Ar(e,t){if(t>=e.display.viewFrom&&t=r.lineN&&t2&&o.push((a.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,r,n){var i,o=Pr(t.map,r,n),a=o.node,u=o.start,c=o.end,h=o.collapse;if(3==a.nodeType){for(var f=0;f<4;f++){for(;u&&ie(t.line.text.charAt(o.coverStart+u));)--u;for(;o.coverStart+c1}(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var d;u>0&&(h=n="right"),i=e.options.lineWrapping&&(d=a.getClientRects()).length>1?d["right"==n?d.length-1:0]:a.getBoundingClientRect()}if(l&&s<9&&!u&&(!i||!i.left&&!i.right)){var p=a.parentNode.getClientRects()[0];i=p?{left:p.left,right:p.left+tn(e.display),top:p.top,bottom:p.bottom}:Fr}for(var g=i.top-t.rect.top,v=i.bottom-t.rect.top,m=(g+v)/2,y=t.view.measure.heights,b=0;bt)&&(i=(o=a-s)-1,t>=a&&(l="right")),null!=i){if(n=e[u+2],s==a&&r==(n.insertLeft?"left":"right")&&(l=r),"left"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],l="left";if("right"==r&&i==a-s)for(;u=0&&(r=e[i]).left==r.right;i--);return r}function Ir(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=n.text.length?(a=n.text.length,u="before"):a<=0&&(a=0,u="after"),!s)return l("before"==u?a-1:a,"before"==u);function c(e,t,r){return l(r?e-1:e,1==s[t].level!=r)}var h=ae(s,a,u),f=se,d=c(a,h,"before"==u);return null!=f&&(d.other=c(a,f,"before"!=u)),d}function Yr(e,t){var r=0;t=st(e.doc,t),e.options.lineWrapping||(r=tn(e.display)*t.ch);var n=Xe(e.doc,t.line),i=Vt(n)+Cr(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function _r(e,t,r,n,i){var o=et(e,t,r);return o.xRel=i,n&&(o.outside=n),o}function $r(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return _r(n.first,0,null,-1,-1);var i=Ze(n,r),o=n.first+n.size-1;if(i>o)return _r(n.first+n.size-1,Xe(n,o).text.length,null,1,1);t<0&&(t=0);for(var l=Xe(n,i);;){var s=Jr(e,l,i,t,r),a=Et(l,s.ch+(s.xRel>0||s.outside>0?1:0));if(!a)return s;var u=a.find(1);if(u.line==i)return u;l=Xe(n,i=u.line)}}function qr(e,t,r,n){n-=Ur(t);var i=t.text.length,o=le(function(t){return Wr(e,r,t-1).bottom<=n},i,0);return{begin:o,end:i=le(function(t){return Wr(e,r,t).top>n},o,i)}}function Zr(e,t,r,n){return r||(r=Dr(e,t)),qr(e,t,r,Vr(e,t,Wr(e,r,n),"line").top)}function Qr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function Jr(e,t,r,n,i){i-=Vt(t);var o=Dr(e,t),l=Ur(t),s=0,a=t.text.length,u=!0,c=ce(t,e.doc.direction);if(c){var h=(e.options.lineWrapping?function(e,t,r,n,i,o,l){var s=qr(e,t,n,l),a=s.begin,u=s.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,h=null,f=0;f=u||d.to<=a)){var p=1!=d.level,g=Wr(e,n,p?Math.min(u,d.to)-1:Math.max(a,d.from)).right,v=gv)&&(c=d,h=v)}}c||(c=i[i.length-1]);c.fromu&&(c={from:c.from,to:u,level:c.level});return c}:function(e,t,r,n,i,o,l){var s=le(function(s){var a=i[s],u=1!=a.level;return Qr(Xr(e,et(r,u?a.to:a.from,u?"before":"after"),"line",t,n),o,l,!0)},0,i.length-1),a=i[s];if(s>0){var u=1!=a.level,c=Xr(e,et(r,u?a.from:a.to,u?"after":"before"),"line",t,n);Qr(c,o,l,!0)&&c.top>l&&(a=i[s-1])}return a})(e,t,r,o,c,n,i);s=(u=1!=h.level)?h.from:h.to-1,a=u?h.to:h.from-1}var f,d,p=null,g=null,v=le(function(t){var r=Wr(e,o,t);return r.top+=l,r.bottom+=l,!!Qr(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,g=r),!0)},s,a),m=!1;if(g){var y=n-g.left=w.bottom?1:0}return _r(r,v=oe(t.text,v,1),d,m,n-f)}function en(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Hr){Hr=O("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Hr.appendChild(document.createTextNode("x")),Hr.appendChild(O("br"));Hr.appendChild(document.createTextNode("x"))}N(e.measure,Hr);var r=Hr.offsetHeight/50;return r>3&&(e.cachedTextHeight=r),M(e.measure),r||1}function tn(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=O("span","xxxxxxxxxx"),r=O("pre",[t],"CodeMirror-line-like");N(e.measure,r);var n=t.getBoundingClientRect(),i=(n.right-n.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function rn(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l){var s=e.display.gutterSpecs[l].className;r[s]=o.offsetLeft+o.clientLeft+i,n[s]=o.clientWidth}return{fixedPos:nn(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function nn(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function on(e){var t=en(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/tn(e.display)-3);return function(i){if(Gt(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;nt)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Ct&&Rt(e.doc,t)i.viewFrom?hn(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)hn(e);else if(t<=i.viewFrom){var o=fn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):hn(e)}else if(r>=i.viewTo){var l=fn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):hn(e)}else{var s=fn(e,t,t,-1),a=fn(e,r,r+n,1);s&&a?(i.view=i.view.slice(0,s.index).concat(ir(e,s.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=n):hn(e)}var u=i.externalMeasured;u&&(r=i.lineN&&t=n.viewTo)){var o=n.view[an(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==B(l,r)&&l.push(r)}}}function hn(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function fn(e,t,r,n){var i,o=an(e,t),l=e.display.view;if(!Ct||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,a=0;a0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;Rt(e.doc,r)!=r;){if(o==(n<0?0:l.length-1))return null;r+=n*l[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function dn(e){for(var t=e.display.view,r=0,n=0;n=e.display.viewTo||s.to().linet||t==r&&l.to==t)&&(n(Math.max(l.from,t),Math.min(l.to,r),1==l.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}(g,r||0,null==n?f:n,function(e,t,i,h){var v="ltr"==i,m=d(e,v?"left":"right"),y=d(t-1,v?"right":"left"),b=null==r&&0==e,w=null==n&&t==f,x=0==h,C=!g||h==g.length-1;if(y.top-m.top<=3){var S=(u?w:b)&&C,L=(u?b:w)&&x?s:(v?m:y).left,k=S?a:(v?y:m).right;c(L,m.top,k-L,m.bottom)}else{var T,M,N,O;v?(T=u&&b&&x?s:m.left,M=u?a:p(e,i,"before"),N=u?s:p(t,i,"after"),O=u&&w&&C?a:y.right):(T=u?p(e,i,"before"):s,M=!u&&b&&x?a:m.right,N=!u&&w&&C?s:y.left,O=u?p(t,i,"after"):a),c(T,m.top,M-T,m.bottom),m.bottom0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function wn(e){e.state.focused||(e.display.input.focus(),Cn(e))}function xn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Sn(e))},100)}function Cn(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(ge(e,"focus",e,t),e.state.focused=!0,H(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),a&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),bn(e))}function Sn(e,t){e.state.delayingBlurEvent||(e.state.focused&&(ge(e,"blur",e,t),e.state.focused=!1,T(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Ln(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n.005||f<-.005)&&($e(i.line,a),kn(i.line),i.rest))for(var d=0;de.display.sizerWidth){var p=Math.ceil(u/tn(e.display));p>e.display.maxLineLength&&(e.display.maxLineLength=p,e.display.maxLine=i.line,e.display.maxLineChanged=!0)}}}}function kn(e){if(e.widgets)for(var t=0;t=l&&(o=Ze(t,Vt(Xe(t,a))-e.wrapper.clientHeight),l=a)}return{from:o,to:Math.max(l,o+1)}}function Mn(e,t){var r=e.display,n=en(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Mr(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+Sr(r),a=t.tops-n;if(t.topi+o){var c=Math.min(t.top,(u?s:t.bottom)-o);c!=i&&(l.scrollTop=c)}var h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,f=Tr(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),d=t.right-t.left>f;return d&&(t.right=t.left+f),t.left<10?l.scrollLeft=0:t.leftf+h-3&&(l.scrollLeft=t.right+(d?0:10)-f),l}function Nn(e,t){null!=t&&(Dn(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function On(e){Dn(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function An(e,t,r){null==t&&null==r||Dn(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function Dn(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Wn(e,Yr(e,t.from),Yr(e,t.to),t.margin))}function Wn(e,t,r,n){var i=Mn(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});An(e,i.scrollLeft,i.scrollTop)}function Hn(e,t){Math.abs(e.doc.scrollTop-t)<2||(r||oi(e,{top:t}),Fn(e,t,!0),r&&oi(e),ei(e,100))}function Fn(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Pn(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,ai(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function En(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+Sr(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+kr(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}var In=function(e,t,r){this.cm=r;var n=this.vert=O("div",[O("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=O("div",[O("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=i.tabIndex=-1,e(n),e(i),fe(n,"scroll",function(){n.clientHeight&&t(n.scrollTop,"vertical")}),fe(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,l&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};In.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},In.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},In.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},In.prototype.zeroWidthHack=function(){var e=y&&!d?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new R,this.disableVert=new R},In.prototype.enableZeroWidthBar=function(e,t,r){e.style.pointerEvents="auto",t.set(1e3,function n(){var i=e.getBoundingClientRect();("vert"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,n)})},In.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var zn=function(){};function Rn(e,t){t||(t=En(e));var r=e.display.barWidth,n=e.display.barHeight;Bn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&Ln(e),Bn(e,En(e)),r=e.display.barWidth,n=e.display.barHeight}function Bn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}zn.prototype.update=function(){return{bottom:0,right:0}},zn.prototype.setScrollLeft=function(){},zn.prototype.setScrollTop=function(){},zn.prototype.clear=function(){};var Gn={native:In,null:zn};function Un(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&T(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Gn[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),fe(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,r){"horizontal"==r?Pn(e,t):Hn(e,t)},e),e.display.scrollbars.addClass&&H(e.display.wrapper,e.display.scrollbars.addClass)}var Vn=0;function Kn(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Vn},t=e.curOp,or?or.ops.push(t):t.ownsGroup=or={ops:[t],delayedCallbacks:[]}}function jn(e){var t=e.curOp;t&&function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r=r.viewTo)||r.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new ri(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Yn(e){var t=e.cm,r=t.display;e.updatedDisplay&&Ln(t),e.barMeasure=En(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Or(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+kr(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Tr(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function _n(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!p){var o=O("div","​",null,"position: absolute;\n top: "+(t.top-r.viewOffset-Cr(e.display))+"px;\n height: "+(t.bottom-t.top+kr(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,r,n){var i;null==n&&(n=0),e.options.lineWrapping||t!=r||(r="before"==(t=t.ch?et(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?et(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var l=!1,s=Xr(e,t),a=r&&r!=t?Xr(e,r):s,u=Mn(e,i={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-n,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+n}),c=e.doc.scrollTop,h=e.doc.scrollLeft;if(null!=u.scrollTop&&(Hn(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(Pn(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-h)>1&&(l=!0)),!l)break}return i}(t,st(n,e.scrollToPos.from),st(n,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var l=0;l=e.display.viewTo)){var r=+new Date+e.options.workTime,n=dt(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(n.line>=e.display.viewFrom){var l=o.styles,s=o.text.length>e.options.maxHighlightLength?Ue(t.mode,n.state):null,a=ht(e,o,n,!0);s&&(n.state=s),o.styles=a.styles;var u=o.styleClasses,c=a.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var h=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),f=0;!h&&fr)return ei(e,e.options.workDelay),!0}),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&qn(e,function(){for(var t=0;t=r.viewFrom&&t.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==dn(e))return!1;ui(e)&&(hn(e),t.dims=rn(e));var i=n.first+n.size,o=Math.max(t.visible.from-e.options.viewportMargin,n.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);r.viewFroml&&r.viewTo-l<20&&(l=Math.min(i,r.viewTo)),Ct&&(o=Rt(e.doc,o),l=Bt(e.doc,l));var s=o!=r.viewFrom||l!=r.viewTo||r.lastWrapHeight!=t.wrapperHeight||r.lastWrapWidth!=t.wrapperWidth;!function(e,t,r){var n=e.display;0==n.view.length||t>=n.viewTo||r<=n.viewFrom?(n.view=ir(e,t,r),n.viewFrom=t):(n.viewFrom>t?n.view=ir(e,t,n.viewFrom).concat(n.view):n.viewFromr&&(n.view=n.view.slice(0,an(e,r)))),n.viewTo=r}(e,o,l),r.viewOffset=Vt(Xe(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+"px";var u=dn(e);if(!s&&0==u&&!t.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var c=function(e){if(e.hasFocus())return null;var t=W();if(!t||!D(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&D(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}(e);return u>4&&(r.lineDiv.style.display="none"),function(e,t,r){var n=e.display,i=e.options.lineNumbers,o=n.lineDiv,l=o.firstChild;function s(t){var r=t.nextSibling;return a&&y&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),r}for(var u=n.view,c=n.viewFrom,h=0;h-1&&(d=!1),ur(e,f,c,r)),d&&(M(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(Je(e.options,c)))),l=f.node.nextSibling}else{var p=vr(e,f,c,r);o.insertBefore(p,l)}c+=f.size}for(;l;)l=s(l)}(e,r.updateLineNumbers,t.dims),u>4&&(r.lineDiv.style.display=""),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=W()&&(e.activeElt.focus(),e.anchorNode&&D(document.body,e.anchorNode)&&D(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}(c),M(r.cursorDiv),M(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,s&&(r.lastWrapHeight=t.wrapperHeight,r.lastWrapWidth=t.wrapperWidth,ei(e,400)),r.updateLineNumbers=null,!0}function ii(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Tr(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+Sr(e.display)-Mr(e),r.top)}),t.visible=Tn(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&ni(e,t);n=!1){Ln(e);var i=En(e);pn(e),Rn(e,i),si(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function oi(e,t){var r=new ri(e,t);if(ni(e,r)){Ln(e),ii(e,r);var n=En(e);pn(e),Rn(e,n),si(e,n),r.finish()}}function li(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}function si(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+kr(e)+"px"}function ai(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=nn(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",l=0;ls.clientWidth,c=s.scrollHeight>s.clientHeight;if(i&&u||o&&c){if(o&&y&&a)e:for(var f=t.target,d=l.view;f!=s;f=f.parentNode)for(var p=0;p=0&&tt(e,n.to())<=0)return r}return-1};var bi=function(e,t){this.anchor=e,this.head=t};function wi(e,t,r){var n=e&&e.options.selectionsMayTouch,i=t[r];t.sort(function(e,t){return tt(e.from(),t.from())}),r=B(t,i);for(var o=1;o0:a>=0){var u=ot(s.from(),l.from()),c=it(s.to(),l.to()),h=s.empty()?l.from()==l.head:s.from()==s.head;o<=r&&--r,t.splice(--o,2,new bi(h?c:u,h?u:c))}}return new yi(t,r)}function xi(e,t){return new yi([new bi(e,t||e)],0)}function Ci(e){return e.text?et(e.from.line+e.text.length-1,$(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Si(e,t){if(tt(e,t.from)<0)return e;if(tt(e,t.to)<=0)return Ci(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=Ci(t).ch-t.to.ch),et(r,n)}function Li(e,t){for(var r=[],n=0;n1&&e.remove(s.line+1,p-1),e.insert(s.line+1,m)}sr(e,"change",e,t)}function Ai(e,t,r){!function e(n,i,o){if(n.linked)for(var l=0;ls-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(Pi(e.done),$(e.done)):e.done.length&&!$(e.done).ranges?$(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),$(e.done)):void 0}(i,i.lastOp==n)))l=$(o.changes),0==tt(t.from,t.to)&&0==tt(t.from,l.to)?l.to=Ci(t):o.changes.push(Fi(e,t));else{var a=$(i.done);for(a&&a.ranges||zi(e.sel,i.done),o={changes:[Fi(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,l||ge(e,"historyAdded")}function Ii(e,t,r,n){var i=e.history,o=n&&n.origin;r==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||function(e,t,r,n){var i=t.charAt(0);return"*"==i||"+"==i&&r.ranges.length==n.ranges.length&&r.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,$(i.done),t))?i.done[i.done.length-1]=t:zi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=r,n&&!1!==n.clearRedo&&Pi(i.undone)}function zi(e,t){var r=$(t);r&&r.ranges&&r.equals(e)||t.push(e)}function Ri(e,t,r,n){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),function(r){r.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=r.markedSpans),++o})}function Bi(e){if(!e)return null;for(var t,r=0;r-1&&($(s)[h]=u[h],delete u[h])}}}return n}function Vi(e,t,r,n){if(n){var i=e.anchor;if(r){var o=tt(t,i)<0;o!=tt(r,i)<0?(i=t,t=r):o!=tt(t,r)<0&&(t=r)}return new bi(i,t)}return new bi(r||t,t)}function Ki(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),$i(e,new yi([Vi(e.sel.primary(),t,r,i)],0),n)}function ji(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o=t.ch:s.to>t.ch))){if(i&&(ge(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!a.atomic)continue;if(r){var h=a.find(n<0?1:-1),f=void 0;if((n<0?c:u)&&(h=ro(e,h,-n,h&&h.line==t.line?o:null)),h&&h.line==t.line&&(f=tt(h,r))&&(n<0?f<0:f>0))return eo(e,h,t,n,i)}var d=a.find(n<0?-1:1);return(n<0?u:c)&&(d=ro(e,d,n,d.line==t.line?o:null)),d?eo(e,d,t,n,i):null}}return t}function to(e,t,r,n,i){var o=n||1,l=eo(e,t,r,o,i)||!i&&eo(e,t,r,o,!0)||eo(e,t,r,-o,i)||!i&&eo(e,t,r,-o,!0);return l||(e.cantEdit=!0,et(e.first,0))}function ro(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?st(e,et(t.line-1)):null:r>0&&t.ch==(n||Xe(e,t.line)).text.length?t.line0)){var c=[a,1],h=tt(u.from,s.from),f=tt(u.to,s.to);(h<0||!l.inclusiveLeft&&!h)&&c.push({from:u.from,to:s.from}),(f>0||!l.inclusiveRight&&!f)&&c.push({from:s.to,to:u.to}),i.splice.apply(i,c),a+=c.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)lo(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else lo(e,t)}}function lo(e,t){if(1!=t.text.length||""!=t.text[0]||0!=tt(t.from,t.to)){var r=Li(e,t);Ei(e,t,r,e.cm?e.cm.curOp.id:NaN),uo(e,t,r,Tt(e,t));var n=[];Ai(e,function(e,r){r||-1!=B(n,e.history)||(po(e.history,t),n.push(e.history)),uo(e,t,null,Tt(e,t))})}}function so(e,t,r){var n=e.cm&&e.cm.state.suppressEdits;if(!n||r){for(var i,o=e.history,l=e.sel,s="undo"==t?o.done:o.undone,a="undo"==t?o.undone:o.done,u=0;u=0;--d){var p=f(d);if(p)return p.v}}}}function ao(e,t){if(0!=t&&(e.first+=t,e.sel=new yi(q(e.sel.ranges,function(e){return new bi(et(e.anchor.line+t,e.anchor.ch),et(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){un(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;ne.lastLine())){if(t.from.lineo&&(t={from:t.from,to:et(o,Xe(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Ye(e,t.from,t.to),r||(r=Li(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=qe(zt(Xe(n,o.line))),n.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0,!0}));n.sel.contains(t.from,t.to)>-1&&me(e);Oi(n,t,r,on(e)),e.options.lineWrapping||(n.iter(a,o.line+t.text.length,function(e){var t=Kt(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontierr;n--){var i=Xe(e,n).stateAfter;if(i&&(!(i instanceof ut)||n+i.lookAhead1||!(this.children[0]instanceof vo))){var s=[];this.collapse(s),this.children=[new vo(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var l=i.lines.length%25+25,s=l;s10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n0||0==l&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=A("span",[o.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(It(e,t.line,t,r,o)||t.line!=r.line&&It(e,r.line,t,r,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Ct=!0}o.addToHistory&&Ei(e,{from:t,to:r,origin:"markText"},e.sel,NaN);var s,a=t.line,u=e.cm;if(e.iter(a,r.line+1,function(e){u&&o.collapsed&&!u.options.lineWrapping&&zt(e)==u.display.maxLine&&(s=!0),o.collapsed&&a!=t.line&&$e(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new St(o,a==t.line?t.ch:null,a==r.line?r.ch:null)),++a}),o.collapsed&&e.iter(t.line,r.line+1,function(t){Gt(e,t)&&$e(t,0)}),o.clearOnEnter&&fe(o,"beforeCursorEnter",function(){return o.clear()}),o.readOnly&&(xt=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++wo,o.atomic=!0),u){if(s&&(u.curOp.updateMaxLine=!0),o.collapsed)un(u,t.line,r.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var c=t.line;c<=r.line;c++)cn(u,c,"text");o.atomic&&Qi(u.doc),sr(u,"markerAdded",u,o)}return o}xo.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Kn(e),ye(this,"clear")){var r=this.find();r&&sr(this,"clear",r.from,r.to)}for(var n=null,i=null,o=0;oe.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=n&&e&&this.collapsed&&un(e,n,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Qi(e.doc)),e&&sr(e,"markerCleared",e,this,n,i),t&&jn(e),this.parent&&this.parent.clear()}},xo.prototype.find=function(e,t){var r,n;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=0;a--)oo(this,n[a]);s?_i(this,s):this.cm&&On(this.cm)}),undo:Jn(function(){so(this,"undo")}),redo:Jn(function(){so(this,"redo")}),undoSelection:Jn(function(){so(this,"undo",!0)}),redoSelection:Jn(function(){so(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=st(this,e),t=st(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var s=0;s=a.to||null==a.from&&i!=e.line||null!=a.from&&i==t.line&&a.from>=t.ch||r&&!r(a.marker)||n.push(a.marker.parent||a.marker)}++i}),n},getAllMarks:function(){var e=[];return this.iter(function(t){var r=t.markedSpans;if(r)for(var n=0;ne)return t=e,!0;e-=o,++r}),st(this,et(r,t))},indexFromPos:function(e){var t=(e=st(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var c=e.dataTransfer.getData("Text");if(c){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),qi(t.doc,xi(r,r)),h)for(var f=0;f=0;t--)co(e.doc,"",n[t].from,n[t].to,"+delete");On(e)})}function _o(e,t,r){var n=oe(e.text,t+r,r);return n<0||n>e.text.length?null:n}function $o(e,t,r){var n=_o(e,t.ch,r);return null==n?null:new et(t.line,n,r<0?"after":"before")}function qo(e,t,r,n,i){if(e){var o=ce(r,t.doc.direction);if(o){var l,s=i<0?$(o):o[0],a=i<0==(1==s.level)?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var u=Dr(t,r);l=i<0?r.text.length-1:0;var c=Wr(t,u,l).top;l=le(function(e){return Wr(t,u,e).top==c},i<0==(1==s.level)?s.from:s.to-1,l),"before"==a&&(l=_o(r,l,1))}else l=i<0?s.to:s.from;return new et(n,l,a)}}return new et(n,i<0?r.text.length:0,i<0?"before":"after")}Ro.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"},Ro.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"},Ro.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Ro.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"]},Ro.default=y?Ro.macDefault:Ro.pcDefault;var Zo={selectAll:no,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),V)},killLine:function(e){return Yo(e,function(t){if(t.empty()){var r=Xe(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line0)i=new et(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),et(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=Xe(e.doc,i.line-1).text;l&&(i=new et(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),et(i.line-1,l.length-1),i,"+transpose"))}r.push(new bi(i,i))}e.setSelections(r)})},newlineAndIndent:function(e){return qn(e,function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,"+input");t=e.listSelections();for(var n=0;n-1&&(tt((i=u.ranges[i]).from(),t)<0||t.xRel>0)&&(tt(i.to(),t)>0||t.xRel<0)?function(e,t,r,n){var i=e.display,o=!1,u=Zn(e,function(t){a&&(i.scroller.draggable=!1),e.state.draggingText=!1,pe(i.wrapper.ownerDocument,"mouseup",u),pe(i.wrapper.ownerDocument,"mousemove",c),pe(i.scroller,"dragstart",h),pe(i.scroller,"drop",u),o||(we(t),n.addNew||Ki(e.doc,r,null,null,n.extend),a||l&&9==s?setTimeout(function(){i.wrapper.ownerDocument.body.focus(),i.input.focus()},20):i.input.focus())}),c=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},h=function(){return o=!0};a&&(i.scroller.draggable=!0);e.state.draggingText=u,u.copy=!n.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop();fe(i.wrapper.ownerDocument,"mouseup",u),fe(i.wrapper.ownerDocument,"mousemove",c),fe(i.scroller,"dragstart",h),fe(i.scroller,"drop",u),xn(e),setTimeout(function(){return i.input.focus()},20)}(e,n,t,o):function(e,t,r,n){var i=e.display,o=e.doc;we(t);var l,s,a=o.sel,u=a.ranges;n.addNew&&!n.extend?(s=o.sel.contains(r),l=s>-1?u[s]:new bi(r,r)):(l=o.sel.primary(),s=o.sel.primIndex);if("rectangle"==n.unit)n.addNew||(l=new bi(r,r)),r=sn(e,t,!0,!0),s=-1;else{var c=dl(e,r,n.unit);l=n.extend?Vi(l,c.anchor,c.head,n.extend):c}n.addNew?-1==s?(s=u.length,$i(o,wi(e,u.concat([l]),s),{scroll:!1,origin:"*mouse"})):u.length>1&&u[s].empty()&&"char"==n.unit&&!n.extend?($i(o,wi(e,u.slice(0,s).concat(u.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),a=o.sel):Xi(o,s,l,K):(s=0,$i(o,new yi([l],0),K),a=o.sel);var h=r;function f(t){if(0!=tt(h,t))if(h=t,"rectangle"==n.unit){for(var i=[],u=e.options.tabSize,c=z(Xe(o,r.line).text,r.ch,u),f=z(Xe(o,t.line).text,t.ch,u),d=Math.min(c,f),p=Math.max(c,f),g=Math.min(r.line,t.line),v=Math.min(e.lastLine(),Math.max(r.line,t.line));g<=v;g++){var m=Xe(o,g).text,y=X(m,d,u);d==p?i.push(new bi(et(g,y),et(g,y))):m.length>y&&i.push(new bi(et(g,y),et(g,X(m,p,u))))}i.length||i.push(new bi(r,r)),$i(o,wi(e,a.ranges.slice(0,s).concat(i),s),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var b,w=l,x=dl(e,t,n.unit),C=w.anchor;tt(x.anchor,C)>0?(b=x.head,C=ot(w.from(),x.anchor)):(b=x.anchor,C=it(w.to(),x.head));var S=a.ranges.slice(0);S[s]=function(e,t){var r=t.anchor,n=t.head,i=Xe(e.doc,r.line);if(0==tt(r,n)&&r.sticky==n.sticky)return t;var o=ce(i);if(!o)return t;var l=ae(o,r.ch,r.sticky),s=o[l];if(s.from!=r.ch&&s.to!=r.ch)return t;var a,u=l+(s.from==r.ch==(1!=s.level)?0:1);if(0==u||u==o.length)return t;if(n.line!=r.line)a=(n.line-r.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=ae(o,n.ch,n.sticky),h=c-l||(n.ch-r.ch)*(1==s.level?-1:1);a=c==u-1||c==u?h<0:h>0}var f=o[u+(a?-1:0)],d=a==(1==f.level),p=d?f.from:f.to,g=d?"after":"before";return r.ch==p&&r.sticky==g?t:new bi(new et(r.line,p,g),n)}(e,new bi(st(o,C),b)),$i(o,wi(e,S,s),K)}}var d=i.wrapper.getBoundingClientRect(),p=0;function g(t){e.state.selectingText=!1,p=1/0,t&&(we(t),i.input.focus()),pe(i.wrapper.ownerDocument,"mousemove",v),pe(i.wrapper.ownerDocument,"mouseup",m),o.history.lastSelOrigin=null}var v=Zn(e,function(t){0!==t.buttons&&ke(t)?function t(r){var l=++p;var s=sn(e,r,!0,"rectangle"==n.unit);if(!s)return;if(0!=tt(s,h)){e.curOp.focus=W(),f(s);var a=Tn(i,o);(s.line>=a.to||s.lined.bottom?20:0;u&&setTimeout(Zn(e,function(){p==l&&(i.scroller.scrollTop+=u,t(r))}),50)}}(t):g(t)}),m=Zn(e,g);e.state.selectingText=m,fe(i.wrapper.ownerDocument,"mousemove",v),fe(i.wrapper.ownerDocument,"mouseup",m)}(e,n,t,o)}(t,n,o,e):Le(e)==r.scroller&&we(e):2==i?(n&&Ki(t.doc,n),setTimeout(function(){return r.input.focus()},20)):3==i&&(S?t.display.input.onContextMenu(e):xn(t)))}}function dl(e,t,r){if("char"==r)return new bi(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new bi(et(t.line,0),st(e.doc,et(t.line+1,0)));var n=r(e,t);return new bi(n.from,n.to)}function pl(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&we(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(o>s.bottom||!ye(e,r))return Ce(t);o-=s.top-l.viewOffset;for(var a=0;a=i)return ge(e,r,e,Ze(e.doc,o),e.display.gutterSpecs[a].className,t),Ce(t)}}function gl(e,t){return pl(e,t,"gutterClick",!0)}function vl(e,t){xr(e.display,t)||function(e,t){if(!ye(e,"gutterContextMenu"))return!1;return pl(e,t,"gutterContextMenu",!1)}(e,t)||ve(e,t,"contextmenu")||S||e.display.input.onContextMenu(t)}function ml(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Rr(e)}hl.prototype.compare=function(e,t,r){return this.time+400>e&&0==tt(t,this.pos)&&r==this.button};var yl={toString:function(){return"CodeMirror.Init"}},bl={},wl={};function xl(e,t,r){if(!t!=!(r&&r!=yl)){var n=e.display.dragFunctions,i=t?fe:pe;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function Cl(e){e.options.lineWrapping?(H(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(T(e.display.wrapper,"CodeMirror-wrap"),jt(e)),ln(e),un(e),Rr(e),setTimeout(function(){return Rn(e)},100)}function Sl(e,t){var n=this;if(!(this instanceof Sl))return new Sl(e,t);this.options=t=t?I(t):{},I(bl,t,!1);var i=t.value;"string"==typeof i?i=new Mo(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i;var o=new Sl.inputStyles[t.inputStyle](this),u=this.display=new function(e,t,n,i){var o=this;this.input=n,o.scrollbarFiller=O("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=O("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=A("div",null,"CodeMirror-code"),o.selectionDiv=O("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=O("div",null,"CodeMirror-cursors"),o.measure=O("div",null,"CodeMirror-measure"),o.lineMeasure=O("div",null,"CodeMirror-measure"),o.lineSpace=A("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var u=A("div",[o.lineSpace],"CodeMirror-lines");o.mover=O("div",[u],null,"position: relative"),o.sizer=O("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=O("div",null,null,"position: absolute; height: "+G+"px; width: 1px;"),o.gutters=O("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=O("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=O("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),l&&s<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),a||r&&m||(o.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(o.wrapper):e(o.wrapper)),o.viewFrom=o.viewTo=t.first,o.reportedViewFrom=o.reportedViewTo=t.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,o.gutterSpecs=ci(i.gutters,i.lineNumbers),hi(o),n.init(o)}(e,i,o,t);for(var c in u.wrapper.CodeMirror=this,ml(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Un(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new R,keySeq:null,specialChars:null},t.autofocus&&!m&&u.input.focus(),l&&s<11&&setTimeout(function(){return n.display.input.reset(!0)},20),function(e){var t=e.display;fe(t.scroller,"mousedown",Zn(e,fl)),fe(t.scroller,"dblclick",l&&s<11?Zn(e,function(t){if(!ve(e,t)){var r=sn(e,t);if(r&&!gl(e,t)&&!xr(e.display,t)){we(t);var n=e.findWordAt(r);Ki(e.doc,n.anchor,n.head)}}}):function(t){return ve(e,t)||we(t)});fe(t.scroller,"contextmenu",function(t){return vl(e,t)});var r,n={end:0};function i(){t.activeTouch&&(r=setTimeout(function(){return t.activeTouch=null},1e3),(n=t.activeTouch).end=+new Date)}function o(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}fe(t.scroller,"touchstart",function(i){if(!ve(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!gl(e,i)){t.input.ensurePolled(),clearTimeout(r);var o=+new Date;t.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}}),fe(t.scroller,"touchmove",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),fe(t.scroller,"touchend",function(r){var n=t.activeTouch;if(n&&!xr(t,r)&&null!=n.left&&!n.moved&&new Date-n.start<300){var l,s=e.coordsChar(t.activeTouch,"page");l=!n.prev||o(n,n.prev)?new bi(s,s):!n.prev.prev||o(n,n.prev.prev)?e.findWordAt(s):new bi(et(s.line,0),st(e.doc,et(s.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),we(r)}i()}),fe(t.scroller,"touchcancel",i),fe(t.scroller,"scroll",function(){t.scroller.clientHeight&&(Hn(e,t.scroller.scrollTop),Pn(e,t.scroller.scrollLeft,!0),ge(e,"scroll",e))}),fe(t.scroller,"mousewheel",function(t){return mi(e,t)}),fe(t.scroller,"DOMMouseScroll",function(t){return mi(e,t)}),fe(t.wrapper,"scroll",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(t){ve(e,t)||Se(t)},over:function(t){ve(e,t)||(!function(e,t){var r=sn(e,t);if(r){var n=document.createDocumentFragment();vn(e,r,n),e.display.dragCursor||(e.display.dragCursor=O("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),N(e.display.dragCursor,n)}}(e,t),Se(t))},start:function(t){return function(e,t){if(l&&(!e.state.draggingText||+new Date-No<100))Se(t);else if(!ve(e,t)&&!xr(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!f)){var r=O("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",h&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),h&&r.parentNode.removeChild(r)}}(e,t)},drop:Zn(e,Oo),leave:function(t){ve(e,t)||Ao(e)}};var a=t.input.getField();fe(a,"keyup",function(t){return sl.call(e,t)}),fe(a,"keydown",Zn(e,ll)),fe(a,"keypress",Zn(e,al)),fe(a,"focus",function(t){return Cn(e,t)}),fe(a,"blur",function(t){return Sn(e,t)})}(this),Ho(),Kn(this),this.curOp.forceUpdate=!0,Di(this,i),t.autofocus&&!m||this.hasFocus()?setTimeout(E(Cn,this),20):Sn(this),wl)wl.hasOwnProperty(c)&&wl[c](n,t[c],yl);ui(this),t.finishInit&&t.finishInit(this);for(var d=0;d150)){if(!n)return;r="prev"}}else u=0,r="not";"prev"==r?u=t>o.first?z(Xe(o,t-1).text,null,l):0:"add"==r?u=a+e.options.indentUnit:"subtract"==r?u=a-e.options.indentUnit:"number"==typeof r&&(u=a+r),u=Math.max(0,u);var h="",f=0;if(e.options.indentWithTabs)for(var d=Math.floor(u/l);d;--d)f+=l,h+="\t";if(fl,a=We(t),u=null;if(s&&n.ranges.length>1)if(Tl&&Tl.text.join("\n")==t){if(n.ranges.length%Tl.text.length==0){u=[];for(var c=0;c=0;f--){var d=n.ranges[f],p=d.from(),g=d.to();d.empty()&&(r&&r>0?p=et(p.line,p.ch-r):e.state.overwrite&&!s?g=et(g.line,Math.min(Xe(o,g.line).text.length,g.ch+$(a).length)):s&&Tl&&Tl.lineWise&&Tl.text.join("\n")==t&&(p=g=et(p.line,0)));var v={from:p,to:g,text:u?u[f%u.length]:a,origin:i||(s?"paste":e.state.cutIncoming>l?"cut":"+input")};oo(e.doc,v),sr(e,"inputRead",e,v)}t&&!s&&Al(e,t),On(e),e.curOp.updateInput<2&&(e.curOp.updateInput=h),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Ol(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||qn(t,function(){return Nl(t,r,0,null,"paste")}),!0}function Al(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s-1){l=kl(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Xe(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=kl(e,i.head.line,"smart"));l&&sr(e,"electricInput",e,i.head.line)}}}function Dl(e){for(var t=[],r=[],n=0;n=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after");var o=ae(i,r.ch,r.sticky),l=i[o];if("ltr"==e.doc.direction&&l.level%2==0&&(n>0?l.to>r.ch:l.from=l.from&&f>=c.begin)){var d=h?"before":"after";return new et(r.line,f,d)}}var p=function(e,t,n){for(var o=function(e,t){return t?new et(r.line,a(e,1),"before"):new et(r.line,e,"after")};e>=0&&e0==(1!=l.level),u=s?n.begin:a(n.end,-1);if(l.from<=u&&u0?c.end:a(c.begin,-1);return null==v||n>0&&v==t.text.length||!(g=p(n>0?0:i.length-1,n,u(v)))?null:g}(e.cm,s,t,r):$o(s,t,r))){if(n||(l=t.line+r)=e.first+e.size||(t=new et(l,t.ch,t.sticky),!(s=Xe(e,l))))return!1;t=qo(i,e.cm,s,t.line,r)}else t=o;return!0}if("char"==n)a();else if("column"==n)a(!0);else if("word"==n||"group"==n)for(var u=null,c="group"==n,h=e.cm&&e.cm.getHelper(t,"wordChars"),f=!0;!(r<0)||a(!f);f=!1){var d=s.text.charAt(t.ch)||"\n",p=te(d,h)?"w":c&&"\n"==d?"n":!c||/\s/.test(d)?null:"p";if(!c||f||p||(p="s"),u&&u!=p){r<0&&(r=1,a(),t.sticky="after");break}if(p&&(u=p),r>0&&!a(!f))break}var g=to(e,t,o,l,!0);return rt(o,g)&&(g.hitSide=!0),g}function Pl(e,t,r,n){var i,o,l=e.doc,s=t.left;if("page"==n){var a=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),u=Math.max(a-.5*en(e.display),3);i=(r>0?t.bottom:t.top)+r*u}else"line"==n&&(i=r>0?t.bottom+3:t.top-3);for(;(o=$r(e,s,i)).outside;){if(r<0?i<=0:i>=l.height){o.hitSide=!0;break}i+=5*r}return o}var El=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new R,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Il(e,t){var r=Ar(e,t.line);if(!r||r.hidden)return null;var n=Xe(e.doc,t.line),i=Nr(r,n,t.line),o=ce(n,e.doc.direction),l="left";o&&(l=ae(o,t.ch)%2?"right":"left");var s=Pr(i.map,t.ch,l);return s.offset="right"==s.collapse?s.end:s.start,s}function zl(e,t){return t&&(e.bad=!0),e}function Rl(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return zl(e.clipPos(et(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||o.line=t.display.viewFrom&&Il(t,i)||{node:a[0].measure.map[2],offset:0},c=o.linen.firstLine()&&(l=et(l.line-1,Xe(n.doc,l.line-1).length)),s.ch==Xe(n.doc,s.line).text.length&&s.linei.viewTo-1)return!1;l.line==i.viewFrom||0==(e=an(n,l.line))?(t=qe(i.view[0].line),r=i.view[0].node):(t=qe(i.view[e].line),r=i.view[e-1].node.nextSibling);var a,u,c=an(n,s.line);if(c==i.view.length-1?(a=i.viewTo-1,u=i.lineDiv.lastChild):(a=qe(i.view[c+1].line)-1,u=i.view[c+1].node.previousSibling),!r)return!1;for(var h=n.doc.splitLines(function(e,t,r,n,i){var o="",l=!1,s=e.doc.lineSeparator(),a=!1;function u(){l&&(o+=s,a&&(o+=s),l=a=!1)}function c(e){e&&(u(),o+=e)}function h(t){if(1==t.nodeType){var r=t.getAttribute("cm-text");if(r)return void c(r);var o,f=t.getAttribute("cm-marker");if(f){var d=e.findMarks(et(n,0),et(i+1,0),(v=+f,function(e){return e.id==v}));return void(d.length&&(o=d[0].find(0))&&c(Ye(e.doc,o.from,o.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var p=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;p&&u();for(var g=0;g1&&f.length>1;)if($(h)==$(f))h.pop(),f.pop(),a--;else{if(h[0]!=f[0])break;h.shift(),f.shift(),t++}for(var d=0,p=0,g=h[0],v=f[0],m=Math.min(g.length,v.length);dl.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)d--,p++;h[h.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(d).replace(/\u200b+$/,"");var x=et(t,d),C=et(a,f.length?$(f).length-p:0);return h.length>1||h[0]||tt(x,C)?(co(n.doc,h,x,C,"+input"),!0):void 0},El.prototype.ensurePolled=function(){this.forceCompositionEnd()},El.prototype.reset=function(){this.forceCompositionEnd()},El.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},El.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},El.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||qn(this.cm,function(){return un(e.cm)})},El.prototype.setUneditable=function(e){e.contentEditable="false"},El.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||Zn(this.cm,Nl)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},El.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},El.prototype.onContextMenu=function(){},El.prototype.resetPosition=function(){},El.prototype.needsContentAttribute=!0;var Gl=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new R,this.hasSelection=!1,this.composing=null};Gl.prototype.init=function(e){var t=this,r=this,n=this.cm;this.createField(e);var i=this.textarea;function o(e){if(!ve(n,e)){if(n.somethingSelected())Ml({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var t=Dl(n);Ml({lineWise:!0,text:t.text}),"cut"==e.type?n.setSelections(t.ranges,null,V):(r.prevInput="",i.value=t.text.join("\n"),P(i))}"cut"==e.type&&(n.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(i.style.width="0px"),fe(i,"input",function(){l&&s>=9&&t.hasSelection&&(t.hasSelection=null),r.poll()}),fe(i,"paste",function(e){ve(n,e)||Ol(e,n)||(n.state.pasteIncoming=+new Date,r.fastPoll())}),fe(i,"cut",o),fe(i,"copy",o),fe(e.scroller,"paste",function(t){if(!xr(e,t)&&!ve(n,t)){if(!i.dispatchEvent)return n.state.pasteIncoming=+new Date,void r.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,i.dispatchEvent(o)}}),fe(e.lineSpace,"selectstart",function(t){xr(e,t)||we(t)}),fe(i,"compositionstart",function(){var e=n.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:n.markText(e,n.getCursor("to"),{className:"CodeMirror-composing"})}}),fe(i,"compositionend",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},Gl.prototype.createField=function(e){this.wrapper=Hl(),this.textarea=this.wrapper.firstChild},Gl.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=gn(e);if(e.options.moveInputWithCursor){var i=Xr(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return n},Gl.prototype.showSelection=function(e){var t=this.cm.display;N(t.cursorDiv,e.cursors),N(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Gl.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&P(this.textarea),l&&s>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",l&&s>=9&&(this.hasSelection=null))}},Gl.prototype.getField=function(){return this.textarea},Gl.prototype.supportsTouch=function(){return!1},Gl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!m||W()!=this.textarea))try{this.textarea.focus()}catch(e){}},Gl.prototype.blur=function(){this.textarea.blur()},Gl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Gl.prototype.receivedFocus=function(){this.slowPoll()},Gl.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},Gl.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,function r(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,r))})},Gl.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||He(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(l&&s>=9&&this.hasSelection===i||y&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var a=0,u=Math.min(n.length,i.length);a1e3||i.indexOf("\n")>-1?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Gl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Gl.prototype.onKeyPress=function(){l&&s>=9&&(this.hasSelection=null),this.fastPoll()},Gl.prototype.onContextMenu=function(e){var t=this,r=t.cm,n=r.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=sn(r,e),u=n.scroller.scrollTop;if(o&&!h){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(o)&&Zn(r,$i)(r.doc,xi(o),V);var c,f=i.style.cssText,d=t.wrapper.style.cssText,p=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-p.top-5)+"px; left: "+(e.clientX-p.left-5)+"px;\n z-index: 1000; background: "+(l?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",a&&(c=window.scrollY),n.input.focus(),a&&window.scrollTo(null,c),n.input.reset(),r.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=m,n.selForContextMenu=r.doc.sel,clearTimeout(n.detectingSelectAll),l&&s>=9&&v(),S){Se(e);var g=function(){pe(window,"mouseup",g),setTimeout(m,20)};fe(window,"mouseup",g)}else setTimeout(m,50)}function v(){if(null!=i.selectionStart){var e=r.somethingSelected(),o="​"+(e?i.value:"");i.value="⇚",i.value=o,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=o.length,n.selForContextMenu=r.doc.sel}}function m(){if(t.contextMenuPending==m&&(t.contextMenuPending=!1,t.wrapper.style.cssText=d,i.style.cssText=f,l&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=u),null!=i.selectionStart)){(!l||l&&s<9)&&v();var e=0,o=function(){n.selForContextMenu==r.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?Zn(r,no)(r):e++<10?n.detectingSelectAll=setTimeout(o,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(o,200)}}},Gl.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},Gl.prototype.setUneditable=function(){},Gl.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function r(r,n,i,o){e.defaults[r]=n,i&&(t[r]=o?function(e,t,r){r!=yl&&i(e,t,r)}:i)}e.defineOption=r,e.Init=yl,r("value","",function(e,t){return e.setValue(t)},!0),r("mode",null,function(e,t){e.doc.modeOption=t,Ti(e)},!0),r("indentUnit",2,Ti,!0),r("indentWithTabs",!1),r("smartIndent",!0),r("tabSize",4,function(e){Mi(e),Rr(e),un(e)},!0),r("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(et(n,o))}n++});for(var i=r.length-1;i>=0;i--)co(e.doc,t,r[i],et(r[i].line,r[i].ch+t.length))}}),r("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=yl&&e.refresh()}),r("specialCharPlaceholder",Qt,function(e){return e.refresh()},!0),r("electricChars",!0),r("inputStyle",m?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),r("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),r("autocorrect",!1,function(e,t){return e.getInputField().autocorrect=t},!0),r("autocapitalize",!1,function(e,t){return e.getInputField().autocapitalize=t},!0),r("rtlMoveVisually",!w),r("wholeLineUpdateBefore",!0),r("theme","default",function(e){ml(e),fi(e)},!0),r("keyMap","default",function(e,t,r){var n=Xo(t),i=r!=yl&&Xo(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),r("extraKeys",null),r("configureMouse",null),r("lineWrapping",!1,Cl,!0),r("gutters",[],function(e,t){e.display.gutterSpecs=ci(t,e.options.lineNumbers),fi(e)},!0),r("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?nn(e.display)+"px":"0",e.refresh()},!0),r("coverGutterNextToScrollbar",!1,function(e){return Rn(e)},!0),r("scrollbarStyle","native",function(e){Un(e),Rn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),r("lineNumbers",!1,function(e,t){e.display.gutterSpecs=ci(e.options.gutters,t),fi(e)},!0),r("firstLineNumber",1,fi,!0),r("lineNumberFormatter",function(e){return e},fi,!0),r("showCursorWhenSelecting",!1,pn,!0),r("resetSelectionOnContextMenu",!0),r("lineWiseCopyCut",!0),r("pasteLinesPerSelection",!0),r("selectionsMayTouch",!1),r("readOnly",!1,function(e,t){"nocursor"==t&&(Sn(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),r("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),r("dragDrop",!0,xl),r("allowDropFileTypes",null),r("cursorBlinkRate",530),r("cursorScrollMargin",0),r("cursorHeight",1,pn,!0),r("singleCursorHeightPerLine",!0,pn,!0),r("workTime",100),r("workDelay",100),r("flattenSpans",!0,Mi,!0),r("addModeClass",!1,Mi,!0),r("pollInterval",100),r("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),r("historyEventDelay",1250),r("viewportMargin",10,function(e){return e.refresh()},!0),r("maxHighlightLength",1e4,Mi,!0),r("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),r("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),r("autofocus",null),r("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0),r("phrases",null)}(Sl),function(e){var t=e.optionHandlers,r=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,r){var n=this.options,i=n[e];n[e]==r&&"mode"!=e||(n[e]=r,t.hasOwnProperty(e)&&Zn(this,t[e])(this,r,i),ge(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Xo(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;rr&&(kl(this,i.head.line,e,!0),r=i.head.line,n==this.doc.sel.primIndex&&On(this));else{var o=i.from(),l=i.to(),s=Math.max(r,o.line);r=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1;for(var a=s;a0&&Xi(this.doc,n,new bi(o,u[n].to()),V)}}}),getTokenAt:function(e,t){return yt(this,e,t)},getLineTokens:function(e,t){return yt(this,et(e),t,!0)},getTokenTypeAt:function(e){e=st(this.doc,e);var t,r=ft(this,Xe(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var l=n+i>>1;if((l?r[2*l-1]:0)>=o)i=l;else{if(!(r[2*l+1]o&&(e=o,i=!0),n=Xe(this.doc,e)}else n=e;return Vr(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-Vt(n):0)},defaultTextHeight:function(){return en(this.display)},defaultCharWidth:function(){return tn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o,l,s,a=this.display,u=(e=Xr(this,st(this.doc,e))).bottom,c=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),a.sizer.appendChild(t),"over"==n)u=e.top;else if("above"==n||"near"==n){var h=Math.max(a.wrapper.clientHeight,this.doc.height),f=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>h)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=h&&(u=e.bottom),c+t.offsetWidth>f&&(c=f-t.offsetWidth)}t.style.top=u+"px",t.style.left=t.style.right="","right"==i?(c=a.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?c=0:"middle"==i&&(c=(a.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+"px"),r&&(o=this,l={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(s=Mn(o,l)).scrollTop&&Hn(o,s.scrollTop),null!=s.scrollLeft&&Pn(o,s.scrollLeft))},triggerOnKeyDown:Qn(ll),triggerOnKeyPress:Qn(al),triggerOnKeyUp:sl,triggerOnMouseDown:Qn(fl),execCommand:function(e){if(Zo.hasOwnProperty(e))return Zo[e].call(null,this)},triggerElectric:Qn(function(e){Al(this,e)}),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=st(this.doc,e),l=0;l0&&l(t.charAt(r-1));)--r;for(;n.5)&&ln(this),ge(this,"refresh",this)}),swapDoc:Qn(function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Di(this,e),Rr(this),this.display.input.reset(),An(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,sr(this,"swapDoc",this,t),t}),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},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}},be(e),e.registerHelper=function(t,n,i){r.hasOwnProperty(t)||(r[t]=e[t]={_global:[]}),r[t][n]=i},e.registerGlobalHelper=function(t,n,i,o){e.registerHelper(t,n,o),r[t]._global.push({pred:i,val:o})}}(Sl);var Ul="iter insert remove copy getEditor constructor".split(" ");for(var Vl in Mo.prototype)Mo.prototype.hasOwnProperty(Vl)&&B(Ul,Vl)<0&&(Sl.prototype[Vl]=function(e){return function(){return e.apply(this.doc,arguments)}}(Mo.prototype[Vl]));return be(Mo),Sl.inputStyles={textarea:Gl,contenteditable:El},Sl.defineMode=function(e){Sl.defaults.mode||"null"==e||(Sl.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Ee[e]=t}.apply(this,arguments)},Sl.defineMIME=function(e,t){Ie[e]=t},Sl.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),Sl.defineMIME("text/plain","null"),Sl.defineExtension=function(e,t){Sl.prototype[e]=t},Sl.defineDocExtension=function(e,t){Mo.prototype[e]=t},Sl.fromTextArea=function(e,t){if((t=t?I(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var r=W();t.autofocus=r==e||null!=e.getAttribute("autofocus")&&r==document.body}function n(){e.value=s.getValue()}var i;if(e.form&&(fe(e.form,"submit",n),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var l=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=l}}catch(e){}}t.finishInit=function(r){r.save=n,r.getTextArea=function(){return e},r.toTextArea=function(){r.toTextArea=isNaN,n(),e.parentNode.removeChild(r.getWrapperElement()),e.style.display="",e.form&&(pe(e.form,"submit",n),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=i))}},e.style.display="none";var s=Sl(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},function(e){e.off=pe,e.on=fe,e.wheelEventPixels=vi,e.Doc=Mo,e.splitLines=We,e.countColumn=z,e.findColumn=X,e.isWordChar=ee,e.Pass=U,e.signal=ge,e.Line=Xt,e.changeEnd=Ci,e.scrollbarModel=Gn,e.Pos=et,e.cmpPos=tt,e.modes=Ee,e.mimeModes=Ie,e.resolveMode=ze,e.getMode=Re,e.modeExtensions=Be,e.extendMode=Ge,e.copyState=Ue,e.startState=Ke,e.innerMode=Ve,e.commands=Zo,e.keyMap=Ro,e.keyName=jo,e.isModifierKey=Vo,e.lookupKey=Uo,e.normalizeKeyMap=Go,e.StringStream=je,e.SharedTextMarker=So,e.TextMarker=xo,e.LineWidget=yo,e.e_preventDefault=we,e.e_stopPropagation=xe,e.e_stop=Se,e.addClass=H,e.contains=D,e.rmClass=T,e.keyNames=Po}(Sl),Sl.version="5.49.2",Sl}); \ No newline at end of file diff --git a/luci-app-mosdns/root/www/luci-static/resources/mosdns/mode/yaml/yaml.js b/luci-app-mosdns/root/www/luci-static/resources/mosdns/mode/yaml/yaml.js new file mode 100644 index 00000000..4a5e499b --- /dev/null +++ b/luci-app-mosdns/root/www/luci-static/resources/mosdns/mode/yaml/yaml.js @@ -0,0 +1 @@ +!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";e.defineMode("yaml",function(){var e=new RegExp("\\b(("+["true","false","on","off","yes","no"].join(")|(")+"))$","i");return{token:function(i,t){var r=i.peek(),n=t.escaped;if(t.escaped=!1,"#"==r&&(0==i.pos||/\s/.test(i.string.charAt(i.pos-1))))return i.skipToEnd(),"comment";if(i.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/))return"string";if(t.literal&&i.indentation()>t.keyCol)return i.skipToEnd(),"string";if(t.literal&&(t.literal=!1),i.sol()){if(t.keyCol=0,t.pair=!1,t.pairStart=!1,i.match(/---/))return"def";if(i.match(/\.\.\./))return"def";if(i.match(/\s*-\s+/))return"meta"}if(i.match(/^(\{|\}|\[|\])/))return"{"==r?t.inlinePairs++:"}"==r?t.inlinePairs--:"["==r?t.inlineList++:t.inlineList--,"meta";if(t.inlineList>0&&!n&&","==r)return i.next(),"meta";if(t.inlinePairs>0&&!n&&","==r)return t.keyCol=0,t.pair=!1,t.pairStart=!1,i.next(),"meta";if(t.pairStart){if(i.match(/^\s*(\||\>)\s*/))return t.literal=!0,"meta";if(i.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(0==t.inlinePairs&&i.match(/^\s*-?[0-9\.\,]+\s?$/))return"number";if(t.inlinePairs>0&&i.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number";if(i.match(e))return"keyword"}return!t.pair&&i.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)?(t.pair=!0,t.keyCol=i.indentation(),"atom"):t.pair&&i.match(/^:\s*/)?(t.pairStart=!0,"meta"):(t.pairStart=!1,t.escaped="\\"==r,i.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}},lineComment:"#",fold:"indent"}}),e.defineMIME("text/x-yaml","yaml"),e.defineMIME("text/yaml","yaml")}); \ No newline at end of file diff --git a/luci-app-mosdns/root/www/luci-static/resources/mosdns/theme/dracula.css b/luci-app-mosdns/root/www/luci-static/resources/mosdns/theme/dracula.css new file mode 100644 index 00000000..6c708c01 --- /dev/null +++ b/luci-app-mosdns/root/www/luci-static/resources/mosdns/theme/dracula.css @@ -0,0 +1 @@ +.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:0}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,0.10)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,0.10)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,0.10)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:white}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-keyword{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute{color:#50fa7b}.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-variable-3,.cm-s-dracula span.cm-type{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,0.1)}.cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:white !important} diff --git a/luci-app-netdata b/luci-app-netdata deleted file mode 160000 index bbb54331..00000000 --- a/luci-app-netdata +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bbb54331405ab70084a95d50eaebf58ddd9d9202 diff --git a/luci-app-netdata/Makefile b/luci-app-netdata/Makefile new file mode 100644 index 00000000..3b81668f --- /dev/null +++ b/luci-app-netdata/Makefile @@ -0,0 +1,24 @@ +# Copyright (C) 2016 Openwrt.org +# Copyright (C) 2020-2021 sirpdboy +# https://github.com/sirpdboy/luci-app-netdata for v 1.33.1 cn +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for Netdata +LUCI_DEPENDS:=+netdata +LUCI_PKGARCH:=all + +PKG_NAME:=luci-app-netdata +PKG_VERSION:=1.1 +PKG_RELEASE:=20221124 + +define Build/Compile +endef + + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/luci-app-netdata/README.md b/luci-app-netdata/README.md new file mode 100644 index 00000000..550bb08e --- /dev/null +++ b/luci-app-netdata/README.md @@ -0,0 +1,83 @@ +### 访问数:[![](https://visitor-badge.glitch.me/badge?page_id=sirpdboy-visitor-badge)] [![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ) + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明1.jpg) + +[luci-app-netdata可控制的实时监控 ](https://github.com/sirpdboy/luci-app-netdata) +====================== + +### 下载源码方法: + + ```Brach + + # 下载源码 + + git clone https://github.com/sirpdboy/luci-app-netdata package/luci-app-netdata + make menuconfig + + ``` +### 配置菜单 + + ```Brach + make menuconfig + # 找到 LuCI -> Applications, 选择 luci-app-netdata, 保存后退出。 + ``` + +### 编译 + + ```Brach + # 编译固件 + make package/luci-app-netdata/compile V=s + ``` + + +## 界面 +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/netdata1.jpg) + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/netdata2.jpg) + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明2.jpg) + + + +## 使用与授权相关说明 + +- 本人开源的所有源码,任何引用需注明本处出处,如需修改二次发布必告之本人,未经许可不得做于任何商用用途。 + + +# My other project + +- 网络速度测试 :https://github.com/sirpdboy/NetSpeedTest + +- 定时设置插件 : https://github.com/sirpdboy/luci-app-autotimeset + +- 关机功能插件 : https://github.com/sirpdboy/luci-app-poweroffdevice + +- opentopd主题 : https://github.com/sirpdboy/luci-theme-opentopd + +- kucat 主题: https://github.com/sirpdboy/luci-theme-kucat + +- 家长控制: https://github.com/sirpdboy/luci-theme-parentcontrol + +- 系统高级设置 : https://github.com/sirpdboy/luci-app-advanced + +- ddns-go动态域名: https://github.com/sirpdboy/luci-app-ddns-go + +- 进阶设置(系统高级设置+主题设置kucat/agron/opentopd): https://github.com/sirpdboy/luci-app-advancedplus + +- 设置向导: https://github.com/sirpdboy/luci-app-wizard + +- 分区扩容: https://github.com/sirpdboy/luci-app-partexp + +- lukcy大吉: https://github.com/sirpdboy/luci-app-lukcy + +## 捐助 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明3.jpg) + +| 图飞了😂 | 图飞了😂 | +| :-----------------: | :-------------: | +|![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/支付宝.png) | ![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/微信.png) | + + + 图飞了😂 + diff --git a/luci-app-netdata/luasrc/controller/netdata.lua b/luci-app-netdata/luasrc/controller/netdata.lua new file mode 100644 index 00000000..95b71ad1 --- /dev/null +++ b/luci-app-netdata/luasrc/controller/netdata.lua @@ -0,0 +1,24 @@ +-- Copyright (C) 2018-2022 sirpdboy https://github.com/sirpdboy/luci-app-netdata +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.netdata", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/netdata") then + return + end + local page + entry({"admin", "status", "netdata"}, alias("admin", "status", "netdata", "setting"),_("NetData"), 10).dependent = true + + entry({"admin", "status", "netdata", "setting"}, cbi("netdata/netdata"), _("Base Setting"), 20).leaf=true + entry({"admin", "status", "netdata", "netdata"}, template("netdata"), _("NetData"), 30).leaf = true + entry({"admin", "status", "netdata_status"}, call("act_status")) +end + +function act_status() + local sys = require "luci.sys" + local e = { } + e.running = sys.call("pidof netdata >/dev/null") == 0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end diff --git a/luci-app-netdata/luasrc/model/cbi/netdata/netdata.lua b/luci-app-netdata/luasrc/model/cbi/netdata/netdata.lua new file mode 100644 index 00000000..12469e9a --- /dev/null +++ b/luci-app-netdata/luasrc/model/cbi/netdata/netdata.lua @@ -0,0 +1,25 @@ +-- Copyright 2018-2022 sirpdboy (herboy2008@gmail.com) +-- https://github.com/sirpdboy/luci-app-netdata +require("luci.util") + +local m, s ,o + +m = Map("netdata", translate("NetData"), translate("Netdata is high-fidelity infrastructure monitoring and troubleshooting.Open-source, free, preconfigured, opinionated, and always real-time.")..translate("
For specific usage, see:")..translate("GitHub @sirpdboy/luci-app-netdata ") ) +m:section(SimpleSection).template = "netdata_status" +s = m:section(TypedSection, "netdata", translate("Global Settings")) +s.addremove=false +s.anonymous=true + +o=s:option(Flag,"enabled",translate("Enable")) +o.default=0 + +o=s:option(Value, "port",translate("Set the netdata access port")) +o.datatype="uinteger" +o.default=19999 + +m.apply_on_parse = true +m.on_after_apply = function(self,map) + luci.sys.exec("/etc/init.d/netdata start") +end + +return m diff --git a/luci-app-netdata/luasrc/view/netdata.htm b/luci-app-netdata/luasrc/view/netdata.htm new file mode 100644 index 00000000..eea0c50d --- /dev/null +++ b/luci-app-netdata/luasrc/view/netdata.htm @@ -0,0 +1,20 @@ +<%# + Copyright 2008-2022 by sirpdboy + https://github.com/sirpdboy/luci-app-netdata + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +
+ + + +
+ +<%+footer%> diff --git a/luci-app-netdata/luasrc/view/netdata_status.htm b/luci-app-netdata/luasrc/view/netdata_status.htm new file mode 100644 index 00000000..318a0282 --- /dev/null +++ b/luci-app-netdata/luasrc/view/netdata_status.htm @@ -0,0 +1,25 @@ + + +
+ <%:NetData Status%> +

+ <%:Collecting data...%> +

+
\ No newline at end of file diff --git a/luci-app-netdata/po/zh-cn/netdata.po b/luci-app-netdata/po/zh-cn/netdata.po new file mode 100644 index 00000000..3e52538d --- /dev/null +++ b/luci-app-netdata/po/zh-cn/netdata.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Running state" +msgstr "运行状态" + +msgid "The Netdata service is running." +msgstr "NetData服务已启动" + +msgid "The Netdata service is not running." +msgstr "NetData服务未启动" + +msgid "NetData Status" +msgstr "NetData服务状态" + +msgid "NetData" +msgstr "实时监控" + +msgid "Set the netdata access port" +msgstr "设置访问端口" + +msgid "Base Setting" +msgstr "基本设置" + +msgid "Netdata is high-fidelity infrastructure monitoring and troubleshooting.Open-source, free, preconfigured, opinionated, and always real-time." +msgstr "Netdata是高保真的基础设施监控和故障排除。开源、免费、预配置、始终实时." + +msgid "
For specific usage, see:" +msgstr "
具体使用方法参见:" \ No newline at end of file diff --git a/luci-app-netdata/po/zh_Hans b/luci-app-netdata/po/zh_Hans new file mode 120000 index 00000000..41451e4a --- /dev/null +++ b/luci-app-netdata/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-netdata/root/etc/config/netdata b/luci-app-netdata/root/etc/config/netdata new file mode 100644 index 00000000..83f9eda9 --- /dev/null +++ b/luci-app-netdata/root/etc/config/netdata @@ -0,0 +1,6 @@ + +config netdata 'netdata' + option logger '1' + option enabled '0' + option port '19990' + diff --git a/luci-app-netdata/root/etc/uci-defaults/40_luci-app-netdata b/luci-app-netdata/root/etc/uci-defaults/40_luci-app-netdata new file mode 100644 index 00000000..c091f6e0 --- /dev/null +++ b/luci-app-netdata/root/etc/uci-defaults/40_luci-app-netdata @@ -0,0 +1,10 @@ +#!/bin/sh +[ -f /usr/share/netdata/webcn/netdata.conf ] && mv -f /usr/share/netdata/webcn/netdata.conf /etc/netdata/netdata.conf +[ -f /usr/share/netdata/webcn/netdata ] && mv -f /usr/share/netdata/webcn/netdata /etc/config/netdata +[ -f /usr/share/netdata/webcn/dashboard.js ] && mv -f /usr/share/netdata/webcn/dashboard.js /usr/share/netdata/web/dashboard.js +[ -f /usr/share/netdata/webcn/dashboard_info.js ] && mv -f /usr/share/netdata/webcn/dashboard_info.js /usr/share/netdata/web/dashboard_info.js +[ -f /usr/share/netdata/webcn/main.js ] && mv -f /usr/share/netdata/webcn/main.js /usr/share/netdata/web/main.js +[ -f /usr/share/netdata/webcn/index.html ] && mv -f /usr/share/netdata/webcn/index.html /usr/share/netdata/web/index.html +[ -f /usr/share/netdata/webcn/netdata.init ] && mv -f /usr/share/netdata/webcn/netdata.init /etc/init.d/netdata +rm -rf /tmp/luci-modulecache /tmp/luci-indexcache* +exit 0 diff --git a/luci-app-netdata/root/usr/share/netdata/webcn/dashboard.js b/luci-app-netdata/root/usr/share/netdata/webcn/dashboard.js new file mode 100644 index 00000000..1065e771 --- /dev/null +++ b/luci-app-netdata/root/usr/share/netdata/webcn/dashboard.js @@ -0,0 +1,10377 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +// DO NOT EDIT: This file is automatically generated from the source files in src/ + +// ---------------------------------------------------------------------------- +// You can set the following variables before loading this script: + +// 'use strict'; + +/*global netdataNoDygraphs *//* boolean, disable dygraph charts + * (default: false) */ +/*global netdataNoSparklines *//* boolean, disable sparkline charts + * (default: false) */ +/*global netdataNoPeitys *//* boolean, disable peity charts + * (default: false) */ +/*global netdataNoGoogleCharts *//* boolean, disable google charts + * (default: false) */ +/*global netdataNoMorris *//* boolean, disable morris charts + * (default: false) */ +/*global netdataNoEasyPieChart *//* boolean, disable easypiechart charts + * (default: false) */ +/*global netdataNoGauge *//* boolean, disable gauge.js charts + * (default: false) */ +/*global netdataNoD3 *//* boolean, disable d3 charts + * (default: false) */ +/*global netdataNoC3 *//* boolean, disable c3 charts + * (default: false) */ +/*global netdataNoD3pie *//* boolean, disable d3pie charts + * (default: false) */ +/*global netdataNoBootstrap *//* boolean, disable bootstrap - disables help too + * (default: false) */ +/*global netdataNoFontAwesome *//* boolean, disable fontawesome (do not load it) + * (default: false) */ +/*global netdataIcons *//* object, overwrite netdata fontawesome icons + * (default: null) */ +/*global netdataDontStart *//* boolean, do not start the thread to process the charts + * (default: false) */ +/*global netdataErrorCallback *//* function, callback to be called when the dashboard encounters an error + * (default: null) */ +/*global netdataRegistry:true *//* boolean, use the netdata registry + * (default: false) */ +/*global netdataNoRegistry *//* boolean, included only for compatibility with existing custom dashboard + * (obsolete - do not use this any more) */ +/*global netdataRegistryCallback *//* function, callback that will be invoked with one param: the URLs from the registry + * (default: null) */ +/*global netdataShowHelp:true *//* boolean, disable charts help + * (default: true) */ +/*global netdataShowAlarms:true *//* boolean, enable alarms checks and notifications + * (default: false) */ +/*global netdataRegistryAfterMs:true *//* ms, delay registry use at started + * (default: 1500) */ +/*global netdataCallback *//* function, callback to be called when netdata is ready to start + * (default: null) + * netdata will be running while this is called + * (call NETDATA.pause to stop it) */ +/*global netdataPrepCallback *//* function, callback to be called before netdata does anything else + * (default: null) */ +/*global netdataServer *//* string, the URL of the netdata server to use + * (default: the URL the page is hosted at) */ +/*global netdataServerStatic *//* string, the URL of the netdata server to use for static files + * (default: netdataServer) */ +/*global netdataSnapshotData *//* object, a netdata snapshot loaded + * (default: null) */ +/*global netdataAlarmsRecipients *//* array, an array of alarm recipients to show notifications for + * (default: null) */ +/*global netdataAlarmsRemember *//* boolean, keep our position in the alarm log at browser local storage + * (default: true) */ +/*global netdataAlarmsActiveCallback *//* function, a hook for the alarm logs + * (default: undefined) */ +/*global netdataAlarmsNotifCallback *//* function, a hook for alarm notifications + * (default: undefined) */ +/*global netdataIntersectionObserver *//* boolean, enable or disable the use of intersection observer + * (default: true) */ +/*global netdataCheckXSS *//* boolean, enable or disable checking for XSS issues + * (default: false) */ + +// ---------------------------------------------------------------------------- +// global namespace + +// Should stay var! +var NETDATA = window.NETDATA || {}; + +(function(window, document, $, undefined) { + +// *** src/dashboard.js/utils.js + +NETDATA.name2id = function (s) { + return s + .replace(/ /g, '_') + .replace(/:/g, '_') + .replace(/\(/g, '_') + .replace(/\)/g, '_') + .replace(/\./g, '_') + .replace(/\//g, '_'); +}; + +NETDATA.encodeURIComponent = function (s) { + if (typeof(s) === 'string') { + return encodeURIComponent(s); + } + + return s; +}; + +/// A heuristic for detecting slow devices. +let isSlowDeviceResult = undefined; +const isSlowDevice = function () { + if (!isSlowDeviceResult) { + return isSlowDeviceResult; + } + + try { + let ua = navigator.userAgent.toLowerCase(); + + let iOS = /ipad|iphone|ipod/.test(ua) && !window.MSStream; + let android = /android/.test(ua) && !window.MSStream; + isSlowDeviceResult = (iOS || android); + } catch (e) { + isSlowDeviceResult = false; + } + + return isSlowDeviceResult; +}; + +NETDATA.guid = function () { + function s4() { + return Math.floor((1 + Math.random()) * 0x10000) + .toString(16) + .substring(1); + } + + return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); +}; + +NETDATA.zeropad = function (x) { + if (x > -10 && x < 10) { + return '0' + x.toString(); + } else { + return x.toString(); + } +}; + +NETDATA.seconds4human = function (seconds, options) { + let defaultOptions = { + now: 'now', + space: ' ', + negative_suffix: 'ago', + day: 'day', + days: 'days', + hour: 'hour', + hours: 'hours', + minute: 'min', + minutes: 'mins', + second: 'sec', + seconds: 'secs', + and: 'and' + }; + + if (typeof options !== 'object') { + options = defaultOptions; + } else { + for (var x in defaultOptions) { + if (typeof options[x] !== 'string') { + options[x] = defaultOptions[x]; + } + } + } + + if (typeof seconds === 'string') { + seconds = parseInt(seconds, 10); + } + + if (seconds === 0) { + return options.now; + } + + let suffix = ''; + if (seconds < 0) { + seconds = -seconds; + if (options.negative_suffix !== '') { + suffix = options.space + options.negative_suffix; + } + } + + let days = Math.floor(seconds / 86400); + seconds -= (days * 86400); + + let hours = Math.floor(seconds / 3600); + seconds -= (hours * 3600); + + let minutes = Math.floor(seconds / 60); + seconds -= (minutes * 60); + + let strings = []; + + if (days > 1) { + strings.push(days.toString() + options.space + options.days); + } else if (days === 1) { + strings.push(days.toString() + options.space + options.day); + } + + if (hours > 1) { + strings.push(hours.toString() + options.space + options.hours); + } else if (hours === 1) { + strings.push(hours.toString() + options.space + options.hour); + } + + if (minutes > 1) { + strings.push(minutes.toString() + options.space + options.minutes); + } else if (minutes === 1) { + strings.push(minutes.toString() + options.space + options.minute); + } + + if (seconds > 1) { + strings.push(Math.floor(seconds).toString() + options.space + options.seconds); + } else if (seconds === 1) { + strings.push(Math.floor(seconds).toString() + options.space + options.second); + } + + if (strings.length === 1) { + return strings.pop() + suffix; + } + + let last = strings.pop(); + return strings.join(", ") + " " + options.and + " " + last + suffix; +}; + +// ---------------------------------------------------------------------------------------------------------------- +// element data attributes + +NETDATA.dataAttribute = function (element, attribute, def) { + let key = 'data-' + attribute.toString(); + if (element.hasAttribute(key)) { + let data = element.getAttribute(key); + + if (data === 'true') { + return true; + } + if (data === 'false') { + return false; + } + if (data === 'null') { + return null; + } + + // Only convert to a number if it doesn't change the string + if (data === +data + '') { + return +data; + } + + if (/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/.test(data)) { + return JSON.parse(data); + } + + return data; + } else { + return def; + } +}; + +NETDATA.dataAttributeBoolean = function (element, attribute, def) { + let value = NETDATA.dataAttribute(element, attribute, def); + + if (value === true || value === false) // gmosx: Love this :) + { + return value; + } + + if (typeof(value) === 'string') { + if (value === 'yes' || value === 'on') { + return true; + } + + if (value === '' || value === 'no' || value === 'off' || value === 'null') { + return false; + } + + return def; + } + + if (typeof(value) === 'number') { + return value !== 0; + } + + return def; +}; + +// ---------------------------------------------------------------------------------------------------------------- +// fast numbers formatting + +NETDATA.fastNumberFormat = { + formattersFixed: [], + formattersZeroBased: [], + + // this is the fastest and the preferred + getIntlNumberFormat: function (min, max) { + let key = max; + if (min === max) { + if (typeof this.formattersFixed[key] === 'undefined') { + this.formattersFixed[key] = new Intl.NumberFormat(undefined, { + // style: 'decimal', + // minimumIntegerDigits: 1, + // minimumSignificantDigits: 1, + // maximumSignificantDigits: 1, + useGrouping: true, + minimumFractionDigits: min, + maximumFractionDigits: max + }); + } + + return this.formattersFixed[key]; + } else if (min === 0) { + if (typeof this.formattersZeroBased[key] === 'undefined') { + this.formattersZeroBased[key] = new Intl.NumberFormat(undefined, { + // style: 'decimal', + // minimumIntegerDigits: 1, + // minimumSignificantDigits: 1, + // maximumSignificantDigits: 1, + useGrouping: true, + minimumFractionDigits: min, + maximumFractionDigits: max + }); + } + + return this.formattersZeroBased[key]; + } else { + // this is never used + // it is added just for completeness + return new Intl.NumberFormat(undefined, { + // style: 'decimal', + // minimumIntegerDigits: 1, + // minimumSignificantDigits: 1, + // maximumSignificantDigits: 1, + useGrouping: true, + minimumFractionDigits: min, + maximumFractionDigits: max + }); + } + }, + + // this respects locale + getLocaleString: function (min, max) { + let key = max; + if (min === max) { + if (typeof this.formattersFixed[key] === 'undefined') { + this.formattersFixed[key] = { + format: function (value) { + return value.toLocaleString(undefined, { + // style: 'decimal', + // minimumIntegerDigits: 1, + // minimumSignificantDigits: 1, + // maximumSignificantDigits: 1, + useGrouping: true, + minimumFractionDigits: min, + maximumFractionDigits: max + }); + } + }; + } + + return this.formattersFixed[key]; + } else if (min === 0) { + if (typeof this.formattersZeroBased[key] === 'undefined') { + this.formattersZeroBased[key] = { + format: function (value) { + return value.toLocaleString(undefined, { + // style: 'decimal', + // minimumIntegerDigits: 1, + // minimumSignificantDigits: 1, + // maximumSignificantDigits: 1, + useGrouping: true, + minimumFractionDigits: min, + maximumFractionDigits: max + }); + } + }; + } + + return this.formattersZeroBased[key]; + } else { + return { + format: function (value) { + return value.toLocaleString(undefined, { + // style: 'decimal', + // minimumIntegerDigits: 1, + // minimumSignificantDigits: 1, + // maximumSignificantDigits: 1, + useGrouping: true, + minimumFractionDigits: min, + maximumFractionDigits: max + }); + } + }; + } + }, + + // the fallback + getFixed: function (min, max) { + let key = max; + if (min === max) { + if (typeof this.formattersFixed[key] === 'undefined') { + this.formattersFixed[key] = { + format: function (value) { + if (value === 0) { + return "0"; + } + return value.toFixed(max); + } + }; + } + + return this.formattersFixed[key]; + } else if (min === 0) { + if (typeof this.formattersZeroBased[key] === 'undefined') { + this.formattersZeroBased[key] = { + format: function (value) { + if (value === 0) { + return "0"; + } + return value.toFixed(max); + } + }; + } + + return this.formattersZeroBased[key]; + } else { + return { + format: function (value) { + if (value === 0) { + return "0"; + } + return value.toFixed(max); + } + }; + } + }, + + testIntlNumberFormat: function () { + let value = 1.12345; + let e1 = "1.12", e2 = "1,12"; + let s = ""; + + try { + let x = new Intl.NumberFormat(undefined, { + useGrouping: true, + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }); + + s = x.format(value); + } catch (e) { + s = ""; + } + + // console.log('NumberFormat: ', s); + return (s === e1 || s === e2); + }, + + testLocaleString: function () { + let value = 1.12345; + let e1 = "1.12", e2 = "1,12"; + let s = ""; + + try { + s = value.toLocaleString(undefined, { + useGrouping: true, + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }); + } catch (e) { + s = ""; + } + + // console.log('localeString: ', s); + return (s === e1 || s === e2); + }, + + // on first run we decide which formatter to use + get: function (min, max) { + if (this.testIntlNumberFormat()) { + // console.log('numberformat'); + this.get = this.getIntlNumberFormat; + } else if (this.testLocaleString()) { + // console.log('localestring'); + this.get = this.getLocaleString; + } else { + // console.log('fixed'); + this.get = this.getFixed; + } + return this.get(min, max); + } +}; + +// ---------------------------------------------------------------------------------------------------------------- +// Detect the netdata server + +// http://stackoverflow.com/questions/984510/what-is-my-script-src-url +// http://stackoverflow.com/questions/6941533/get-protocol-domain-and-port-from-url +NETDATA._scriptSource = function () { + let script = null; + + if (typeof document.currentScript !== 'undefined') { + script = document.currentScript; + } else { + const all_scripts = document.getElementsByTagName('script'); + script = all_scripts[all_scripts.length - 1]; + } + + if (typeof script.getAttribute.length !== 'undefined') { + script = script.src; + } else { + script = script.getAttribute('src', -1); + } + + return script; +}; + +// *** src/dashboard.js/server-detection.js + +if (typeof netdataServer !== 'undefined') { + NETDATA.serverDefault = netdataServer; +} else { + let s = NETDATA._scriptSource(); + if (s) { + NETDATA.serverDefault = s.replace(/\/dashboard.js(\?.*)?$/g, ""); + } else { + console.log('WARNING: Cannot detect the URL of the netdata server.'); + NETDATA.serverDefault = null; + } +} + +if (NETDATA.serverDefault === null) { + NETDATA.serverDefault = ''; +} else if (NETDATA.serverDefault.slice(-1) !== '/') { + NETDATA.serverDefault += '/'; +} + +if (typeof netdataServerStatic !== 'undefined' && netdataServerStatic !== null && netdataServerStatic !== '') { + NETDATA.serverStatic = netdataServerStatic; + if (NETDATA.serverStatic.slice(-1) !== '/') { + NETDATA.serverStatic += '/'; + } +} else { + NETDATA.serverStatic = NETDATA.serverDefault; +} + +// *** src/dashboard.js/dependencies.js + +// default URLs for all the external files we need +// make them RELATIVE so that the whole thing can also be +// installed under a web server +NETDATA.jQuery = NETDATA.serverStatic + 'lib/jquery-3.6.0.min.js'; +NETDATA.peity_js = NETDATA.serverStatic + 'lib/jquery.peity-3.2.0.min.js'; +NETDATA.sparkline_js = NETDATA.serverStatic + 'lib/jquery.sparkline-2.1.2.min.js'; +NETDATA.easypiechart_js = NETDATA.serverStatic + 'lib/jquery.easypiechart-97b5824.min.js'; +NETDATA.gauge_js = NETDATA.serverStatic + 'lib/gauge-1.3.2.min.js'; +NETDATA.dygraph_js = NETDATA.serverStatic + 'lib/dygraph-c91c859.min.js'; +NETDATA.dygraph_smooth_js = NETDATA.serverStatic + 'lib/dygraph-smooth-plotter-c91c859.js'; +// NETDATA.raphael_js = NETDATA.serverStatic + 'lib/raphael-2.2.4-min.js'; +// NETDATA.c3_js = NETDATA.serverStatic + 'lib/c3-0.4.18.min.js'; +// NETDATA.c3_css = NETDATA.serverStatic + 'css/c3-0.4.18.min.css'; +NETDATA.d3pie_js = NETDATA.serverStatic + 'lib/d3pie-0.2.1-netdata-3.js'; +NETDATA.d3_js = NETDATA.serverStatic + 'lib/d3-4.12.2.min.js'; +// NETDATA.morris_js = NETDATA.serverStatic + 'lib/morris-0.5.1.min.js'; +// NETDATA.morris_css = NETDATA.serverStatic + 'css/morris-0.5.1.css'; +NETDATA.google_js = 'https://www.google.com/jsapi'; +// Error Handling + +NETDATA.errorCodes = { + 100: {message: "Cannot load chart library", alert: true}, + 101: {message: "Cannot load jQuery", alert: true}, + 402: {message: "Chart library not found", alert: false}, + 403: {message: "Chart library not enabled/is failed", alert: false}, + 404: {message: "Chart not found", alert: false}, + 405: {message: "Cannot download charts index from server", alert: true}, + 406: {message: "Invalid charts index downloaded from server", alert: true}, + 407: {message: "Cannot HELLO netdata server", alert: false}, + 408: {message: "Netdata servers sent invalid response to HELLO", alert: false}, + 409: {message: "Cannot ACCESS netdata registry", alert: false}, + 410: {message: "Netdata registry ACCESS failed", alert: false}, + 411: {message: "Netdata registry server send invalid response to DELETE ", alert: false}, + 412: {message: "Netdata registry DELETE failed", alert: false}, + 413: {message: "Netdata registry server send invalid response to SWITCH ", alert: false}, + 414: {message: "Netdata registry SWITCH failed", alert: false}, + 415: {message: "Netdata alarms download failed", alert: false}, + 416: {message: "Netdata alarms log download failed", alert: false}, + 417: {message: "Netdata registry server send invalid response to SEARCH ", alert: false}, + 418: {message: "Netdata registry SEARCH failed", alert: false} +}; + +NETDATA.errorLast = { + code: 0, + message: "", + datetime: 0 +}; + +NETDATA.error = function (code, msg) { + NETDATA.errorLast.code = code; + NETDATA.errorLast.message = msg; + NETDATA.errorLast.datetime = Date.now(); + + console.log("ERROR " + code + ": " + NETDATA.errorCodes[code].message + ": " + msg); + + let ret = true; + if (typeof netdataErrorCallback === 'function') { + ret = netdataErrorCallback('system', code, msg); + } + + if (ret && NETDATA.errorCodes[code].alert) { + alert("ERROR " + code + ": " + NETDATA.errorCodes[code].message + ": " + msg); + } +}; + +NETDATA.errorReset = function () { + NETDATA.errorLast.code = 0; + NETDATA.errorLast.message = "You are doing fine!"; + NETDATA.errorLast.datetime = 0; +}; +// *** src/dashboard.js/compatibility.js + +// Compatibility fixes. + +// fix IE issue with console +if (!window.console) { + window.console = { + log: function () { + } + }; +} + +// if string.endsWith is not defined, define it +if (typeof String.prototype.endsWith !== 'function') { + String.prototype.endsWith = function (s) { + if (s.length > this.length) { + return false; + } + return this.slice(-s.length) === s; + }; +} + +// if string.startsWith is not defined, define it +if (typeof String.prototype.startsWith !== 'function') { + String.prototype.startsWith = function (s) { + if (s.length > this.length) { + return false; + } + return this.slice(s.length) === s; + }; +} +// ---------------------------------------------------------------------------------------------------------------- +// XSS checks + +NETDATA.xss = { + enabled: (typeof netdataCheckXSS === 'undefined') ? false : netdataCheckXSS, + enabled_for_data: (typeof netdataCheckXSS === 'undefined') ? false : netdataCheckXSS, + + string: function (s) { + return s.toString() + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + }, + + object: function (name, obj, ignore_regex) { + if (typeof ignore_regex !== 'undefined' && ignore_regex.test(name)) { + // console.log('XSS: ignoring "' + name + '"'); + return obj; + } + + switch (typeof(obj)) { + case 'string': + const ret = this.string(obj); + if (ret !== obj) { + console.log('XSS protection changed string ' + name + ' from "' + obj + '" to "' + ret + '"'); + } + return ret; + + case 'object': + if (obj === null) { + return obj; + } + + if (Array.isArray(obj)) { + // console.log('checking array "' + name + '"'); + + let len = obj.length; + while (len--) { + obj[len] = this.object(name + '[' + len + ']', obj[len], ignore_regex); + } + } else { + // console.log('checking object "' + name + '"'); + + for (var i in obj) { + if (obj.hasOwnProperty(i) === false) { + continue; + } + if (this.string(i) !== i) { + console.log('XSS protection removed invalid object member "' + name + '.' + i + '"'); + delete obj[i]; + } else { + obj[i] = this.object(name + '.' + i, obj[i], ignore_regex); + } + } + } + return obj; + + default: + return obj; + } + }, + + checkOptional: function (name, obj, ignore_regex) { + if (this.enabled) { + //console.log('XSS: checking optional "' + name + '"...'); + return this.object(name, obj, ignore_regex); + } + return obj; + }, + + checkAlways: function (name, obj, ignore_regex) { + //console.log('XSS: checking always "' + name + '"...'); + return this.object(name, obj, ignore_regex); + }, + + checkData: function (name, obj, ignore_regex) { + if (this.enabled_for_data) { + //console.log('XSS: checking data "' + name + '"...'); + return this.object(name, obj, ignore_regex); + } + return obj; + } +}; +NETDATA.colorHex2Rgb = function (hex) { + // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") + let shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; + hex = hex.replace(shorthandRegex, function (m, r, g, b) { + return r + r + g + g + b + b; + }); + + let result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result ? { + r: parseInt(result[1], 16), + g: parseInt(result[2], 16), + b: parseInt(result[3], 16) + } : null; +}; + +NETDATA.colorLuminance = function (hex, lum) { + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; + } + + lum = lum || 0; + + // convert to decimal and change luminosity + let rgb = "#"; + for (let i = 0; i < 3; i++) { + let c = parseInt(hex.substr(i * 2, 2), 16); + c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16); + rgb += ("00" + c).substr(c.length); + } + + return rgb; +}; +NETDATA.unitsConversion = { + keys: {}, // keys for data-common-units + latest: {}, // latest selected units for data-common-units + + globalReset: function () { + this.keys = {}; + this.latest = {}; + }, + + scalableUnits: { + 'packets/s': { + 'pps': 1, + 'Kpps': 1000, + 'Mpps': 1000000 + }, + 'pps': { + 'pps': 1, + 'Kpps': 1000, + 'Mpps': 1000000 + }, + 'kilobits/s': { + 'bits/s': 1 / 1000, + 'kilobits/s': 1, + 'megabits/s': 1000, + 'gigabits/s': 1000000, + 'terabits/s': 1000000000 + }, + 'bytes/s': { + 'bytes/s': 1, + 'kilobytes/s': 1024, + 'megabytes/s': 1024 * 1024, + 'gigabytes/s': 1024 * 1024 * 1024, + 'terabytes/s': 1024 * 1024 * 1024 * 1024 + }, + 'kilobytes/s': { + 'bytes/s': 1 / 1024, + 'kilobytes/s': 1, + 'megabytes/s': 1024, + 'gigabytes/s': 1024 * 1024, + 'terabytes/s': 1024 * 1024 * 1024 + }, + 'B/s': { + 'B/s': 1, + 'KiB/s': 1024, + 'MiB/s': 1024 * 1024, + 'GiB/s': 1024 * 1024 * 1024, + 'TiB/s': 1024 * 1024 * 1024 * 1024 + }, + 'KB/s': { + 'B/s': 1 / 1024, + 'KB/s': 1, + 'MB/s': 1024, + 'GB/s': 1024 * 1024, + 'TB/s': 1024 * 1024 * 1024 + }, + 'KiB/s': { + 'B/s': 1 / 1024, + 'KiB/s': 1, + 'MiB/s': 1024, + 'GiB/s': 1024 * 1024, + 'TiB/s': 1024 * 1024 * 1024 + }, + 'B': { + 'B': 1, + 'KiB': 1024, + 'MiB': 1024 * 1024, + 'GiB': 1024 * 1024 * 1024, + 'TiB': 1024 * 1024 * 1024 * 1024, + 'PiB': 1024 * 1024 * 1024 * 1024 * 1024 + }, + 'KB': { + 'B': 1 / 1024, + 'KB': 1, + 'MB': 1024, + 'GB': 1024 * 1024, + 'TB': 1024 * 1024 * 1024 + }, + 'KiB': { + 'B': 1 / 1024, + 'KiB': 1, + 'MiB': 1024, + 'GiB': 1024 * 1024, + 'TiB': 1024 * 1024 * 1024 + }, + 'MB': { + 'B': 1 / (1024 * 1024), + 'KB': 1 / 1024, + 'MB': 1, + 'GB': 1024, + 'TB': 1024 * 1024, + 'PB': 1024 * 1024 * 1024 + }, + 'MiB': { + 'B': 1 / (1024 * 1024), + 'KiB': 1 / 1024, + 'MiB': 1, + 'GiB': 1024, + 'TiB': 1024 * 1024, + 'PiB': 1024 * 1024 * 1024 + }, + 'GB': { + 'B': 1 / (1024 * 1024 * 1024), + 'KB': 1 / (1024 * 1024), + 'MB': 1 / 1024, + 'GB': 1, + 'TB': 1024, + 'PB': 1024 * 1024, + 'EB': 1024 * 1024 * 1024 + }, + 'GiB': { + 'B': 1 / (1024 * 1024 * 1024), + 'KiB': 1 / (1024 * 1024), + 'MiB': 1 / 1024, + 'GiB': 1, + 'TiB': 1024, + 'PiB': 1024 * 1024, + 'EiB': 1024 * 1024 * 1024 + }, + 'num': { + 'num': 1, + 'num (K)': 1000, + 'num (M)': 1000000, + 'num (G)': 1000000000, + 'num (T)': 1000000000000 + } + /* + 'milliseconds': { + 'seconds': 1000 + }, + 'seconds': { + 'milliseconds': 0.001, + 'seconds': 1, + 'minutes': 60, + 'hours': 3600, + 'days': 86400 + } + */ + }, + + convertibleUnits: { + 'Celsius': { + 'Fahrenheit': { + check: function (max) { + void(max); + return NETDATA.options.current.temperature === 'fahrenheit'; + }, + convert: function (value) { + return value * 9 / 5 + 32; + } + } + }, + 'celsius': { + 'fahrenheit': { + check: function (max) { + void(max); + return NETDATA.options.current.temperature === 'fahrenheit'; + }, + convert: function (value) { + return value * 9 / 5 + 32; + } + } + }, + 'seconds': { + 'time': { + check: function (max) { + void(max); + return NETDATA.options.current.seconds_as_time; + }, + convert: function (seconds) { + return NETDATA.unitsConversion.seconds2time(seconds); + } + } + }, + 'milliseconds': { + 'milliseconds': { + check: function (max) { + return NETDATA.options.current.seconds_as_time && max < 1000; + }, + convert: function (milliseconds) { + let tms = Math.round(milliseconds * 10); + milliseconds = Math.floor(tms / 10); + + tms -= milliseconds * 10; + + return (milliseconds).toString() + '.' + tms.toString(); + } + }, + 'seconds': { + check: function (max) { + return NETDATA.options.current.seconds_as_time && max >= 1000 && max < 60000; + }, + convert: function (milliseconds) { + milliseconds = Math.round(milliseconds); + + let seconds = Math.floor(milliseconds / 1000); + milliseconds -= seconds * 1000; + + milliseconds = Math.round(milliseconds / 10); + + return seconds.toString() + '.' + + NETDATA.zeropad(milliseconds); + } + }, + 'M:SS.ms': { + check: function (max) { + return NETDATA.options.current.seconds_as_time && max >= 60000; + }, + convert: function (milliseconds) { + milliseconds = Math.round(milliseconds); + + let minutes = Math.floor(milliseconds / 60000); + milliseconds -= minutes * 60000; + + let seconds = Math.floor(milliseconds / 1000); + milliseconds -= seconds * 1000; + + milliseconds = Math.round(milliseconds / 10); + + return minutes.toString() + ':' + + NETDATA.zeropad(seconds) + '.' + + NETDATA.zeropad(milliseconds); + } + } + }, + 'nanoseconds': { + 'nanoseconds': { + check: function (max) { + return NETDATA.options.current.seconds_as_time && max < 1000; + }, + convert: function (nanoseconds) { + let tms = Math.round(nanoseconds * 10); + nanoseconds = Math.floor(tms / 10); + + tms -= nanoseconds * 10; + + return (nanoseconds).toString() + '.' + tms.toString(); + } + }, + 'microseconds': { + check: function (max) { + return NETDATA.options.current.seconds_as_time + && max >= 1000 && max < 1000 * 1000; + }, + convert: function (nanoseconds) { + nanoseconds = Math.round(nanoseconds); + + let microseconds = Math.floor(nanoseconds / 1000); + nanoseconds -= microseconds * 1000; + + nanoseconds = Math.round(nanoseconds / 10 ); + + return microseconds.toString() + '.' + + NETDATA.zeropad(nanoseconds); + } + }, + 'milliseconds': { + check: function (max) { + return NETDATA.options.current.seconds_as_time + && max >= 1000 * 1000 && max < 1000 * 1000 * 1000; + }, + convert: function (nanoseconds) { + nanoseconds = Math.round(nanoseconds); + + let milliseconds = Math.floor(nanoseconds / 1000 / 1000); + nanoseconds -= milliseconds * 1000 * 1000; + + nanoseconds = Math.round(nanoseconds / 1000 / 10); + + return milliseconds.toString() + '.' + + NETDATA.zeropad(nanoseconds); + } + }, + 'seconds': { + check: function (max) { + return NETDATA.options.current.seconds_as_time + && max >= 1000 * 1000 * 1000; + }, + convert: function (nanoseconds) { + nanoseconds = Math.round(nanoseconds); + + let seconds = Math.floor(nanoseconds / 1000 / 1000 / 1000); + nanoseconds -= seconds * 1000 * 1000 * 1000; + + nanoseconds = Math.round(nanoseconds / 1000 / 1000 / 10); + + return seconds.toString() + '.' + + NETDATA.zeropad(nanoseconds); + } + }, + } + }, + + seconds2time: function (seconds) { + seconds = Math.abs(seconds); + + let days = Math.floor(seconds / 86400); + seconds -= days * 86400; + + let hours = Math.floor(seconds / 3600); + seconds -= hours * 3600; + + let minutes = Math.floor(seconds / 60); + seconds -= minutes * 60; + + seconds = Math.round(seconds); + + let ms_txt = ''; + /* + let ms = seconds - Math.floor(seconds); + seconds -= ms; + ms = Math.round(ms * 1000); + + if (ms > 1) { + if (ms < 10) + ms_txt = '.00' + ms.toString(); + else if (ms < 100) + ms_txt = '.0' + ms.toString(); + else + ms_txt = '.' + ms.toString(); + } + */ + + return ((days > 0) ? days.toString() + 'd:' : '').toString() + + NETDATA.zeropad(hours) + ':' + + NETDATA.zeropad(minutes) + ':' + + NETDATA.zeropad(seconds) + + ms_txt; + }, + + // get a function that converts the units + // + every time units are switched call the callback + get: function (uuid, min, max, units, desired_units, common_units_name, switch_units_callback) { + // validate the parameters + if (typeof units === 'undefined') { + units = 'undefined'; + } + + // check if we support units conversion + if (typeof this.scalableUnits[units] === 'undefined' && typeof this.convertibleUnits[units] === 'undefined') { + // we can't convert these units + //console.log('DEBUG: ' + uuid.toString() + ' can\'t convert units: ' + units.toString()); + return function (value) { + return value; + }; + } + + // check if the caller wants the original units + if (typeof desired_units === 'undefined' || desired_units === null || desired_units === 'original' || desired_units === units) { + //console.log('DEBUG: ' + uuid.toString() + ' original units wanted'); + switch_units_callback(units); + return function (value) { + return value; + }; + } + + // now we know we can convert the units + // and the caller wants some kind of conversion + + let tunits = null; + let tdivider = 0; + + if (typeof this.scalableUnits[units] !== 'undefined') { + // units that can be scaled + // we decide a divider + + // console.log('NETDATA.unitsConversion.get(' + units.toString() + ', ' + desired_units.toString() + ', function()) decide divider with min = ' + min.toString() + ', max = ' + max.toString()); + + if (desired_units === 'auto') { + // the caller wants to auto-scale the units + + // find the absolute maximum value that is rendered on the chart + // based on this we decide the scale + min = Math.abs(min); + max = Math.abs(max); + if (min > max) { + max = min; + } + + // find the smallest scale that provides integers + // for (x in this.scalableUnits[units]) { + // if (this.scalableUnits[units].hasOwnProperty(x)) { + // let m = this.scalableUnits[units][x]; + // if (m <= max && m > tdivider) { + // tunits = x; + // tdivider = m; + // } + // } + // } + const sunit = this.scalableUnits[units]; + for (var x of Object.keys(sunit)) { + let m = sunit[x]; + if (m <= max && m > tdivider) { + tunits = x; + tdivider = m; + } + } + + if (tunits === null || tdivider <= 0) { + // we couldn't find one + //console.log('DEBUG: ' + uuid.toString() + ' cannot find an auto-scaling candidate for units: ' + units.toString() + ' (max: ' + max.toString() + ')'); + switch_units_callback(units); + return function (value) { + return value; + }; + } + + if (typeof common_units_name === 'string' && typeof uuid === 'string') { + // the caller wants several charts to have the same units + // data-common-units + + let common_units_key = common_units_name + '-' + units; + + // add our divider into the list of keys + let t = this.keys[common_units_key]; + if (typeof t === 'undefined') { + this.keys[common_units_key] = {}; + t = this.keys[common_units_key]; + } + t[uuid] = { + units: tunits, + divider: tdivider + }; + + // find the max divider of all charts + let common_units = t[uuid]; + for (var x in t) { + if (t.hasOwnProperty(x) && t[x].divider > common_units.divider) { + common_units = t[x]; + } + } + + // save our common_max to the latest keys + let latest = this.latest[common_units_key]; + if (typeof latest === 'undefined') { + this.latest[common_units_key] = {}; + latest = this.latest[common_units_key]; + } + latest.units = common_units.units; + latest.divider = common_units.divider; + + tunits = latest.units; + tdivider = latest.divider; + + //console.log('DEBUG: ' + uuid.toString() + ' converted units: ' + units.toString() + ' to units: ' + tunits.toString() + ' with divider ' + tdivider.toString() + ', common-units=' + common_units_name.toString() + ((t[uuid].divider !== tdivider)?' USED COMMON, mine was ' + t[uuid].units:' set common').toString()); + + // apply it to this chart + switch_units_callback(tunits); + return function (value) { + if (tdivider !== latest.divider) { + // another chart switched our common units + // we should switch them too + //console.log('DEBUG: ' + uuid + ' switching units due to a common-units change, from ' + tunits.toString() + ' to ' + latest.units.toString()); + tunits = latest.units; + tdivider = latest.divider; + switch_units_callback(tunits); + } + + return value / tdivider; + }; + } else { + // the caller did not give data-common-units + // this chart auto-scales independently of all others + //console.log('DEBUG: ' + uuid.toString() + ' converted units: ' + units.toString() + ' to units: ' + tunits.toString() + ' with divider ' + tdivider.toString() + ', autonomously'); + + switch_units_callback(tunits); + return function (value) { + return value / tdivider; + }; + } + } else { + // the caller wants specific units + + if (typeof this.scalableUnits[units][desired_units] !== 'undefined') { + // all good, set the new units + tdivider = this.scalableUnits[units][desired_units]; + // console.log('DEBUG: ' + uuid.toString() + ' converted units: ' + units.toString() + ' to units: ' + desired_units.toString() + ' with divider ' + tdivider.toString() + ', by reference'); + switch_units_callback(desired_units); + return function (value) { + return value / tdivider; + }; + } else { + // oops! switch back to original units + console.log('Units conversion from ' + units.toString() + ' to ' + desired_units.toString() + ' is not supported.'); + switch_units_callback(units); + return function (value) { + return value; + }; + } + } + } else if (typeof this.convertibleUnits[units] !== 'undefined') { + // units that can be converted + if (desired_units === 'auto') { + for (var x in this.convertibleUnits[units]) { + if (this.convertibleUnits[units].hasOwnProperty(x)) { + if (this.convertibleUnits[units][x].check(max)) { + //console.log('DEBUG: ' + uuid.toString() + ' converting ' + units.toString() + ' to: ' + x.toString()); + switch_units_callback(x); + return this.convertibleUnits[units][x].convert; + } + } + } + + // none checked ok + //console.log('DEBUG: ' + uuid.toString() + ' no conversion available for ' + units.toString() + ' to: ' + desired_units.toString()); + switch_units_callback(units); + return function (value) { + return value; + }; + } else if (typeof this.convertibleUnits[units][desired_units] !== 'undefined') { + switch_units_callback(desired_units); + return this.convertibleUnits[units][desired_units].convert; + } else { + console.log('Units conversion from ' + units.toString() + ' to ' + desired_units.toString() + ' is not supported.'); + switch_units_callback(units); + return function (value) { + return value; + }; + } + } else { + // hm... did we forget to implement the new type? + console.log(`Unmatched unit conversion method for units ${units.toString()}`); + switch_units_callback(units); + return function (value) { + return value; + }; + } + } +}; + +NETDATA.icons = { + left: '', + reset: '', + right: '', + zoomIn: '', + zoomOut: '', + resize: '', + lineChart: '', + areaChart: '', + noChart: '', + loading: '', + noData: '' +}; + +if (typeof netdataIcons === 'object') { + // for (let icon in NETDATA.icons) { + // if (NETDATA.icons.hasOwnProperty(icon) && typeof(netdataIcons[icon]) === 'string') + // NETDATA.icons[icon] = netdataIcons[icon]; + // } + for (var icon of Object.keys(NETDATA.icons)) { + if (typeof(netdataIcons[icon]) === 'string') { + NETDATA.icons[icon] = netdataIcons[icon] + } + } +} + +if (typeof netdataSnapshotData === 'undefined') { + netdataSnapshotData = null; +} + +if (typeof netdataShowHelp === 'undefined') { + netdataShowHelp = true; +} + +if (typeof netdataShowAlarms === 'undefined') { + netdataShowAlarms = false; +} + +if (typeof netdataRegistryAfterMs !== 'number' || netdataRegistryAfterMs < 0) { + netdataRegistryAfterMs = 0; // 1500; +} + +if (typeof netdataRegistry === 'undefined') { + // backward compatibility + netdataRegistry = (typeof netdataNoRegistry !== 'undefined' && netdataNoRegistry === false); +} + +if (netdataRegistry === false && typeof netdataRegistryCallback === 'function') { + netdataRegistry = true; +} + +// ---------------------------------------------------------------------------------------------------------------- +// the defaults for all charts + +// if the user does not specify any of these, the following will be used + +NETDATA.chartDefaults = { + width: '100%', // the chart width - can be null + height: '100%', // the chart height - can be null + min_width: null, // the chart minimum width - can be null + library: 'dygraph', // the graphing library to use + method: 'average', // the grouping method + before: 0, // panning + after: -600, // panning + pixels_per_point: 1, // the detail of the chart + fill_luminance: 0.8 // luminance of colors in solid areas +}; + +// ---------------------------------------------------------------------------------------------------------------- +// global options + +NETDATA.options = { + pauseCallback: null, // a callback when we are really paused + + pause: false, // when enabled we don't auto-refresh the charts + + targets: [], // an array of all the state objects that are + // currently active (independently of their + // viewport visibility) + + updated_dom: true, // when true, the DOM has been updated with + // new elements we have to check. + + auto_refresher_fast_weight: 0, // this is the current time in ms, spent + // rendering charts continuously. + // used with .current.fast_render_timeframe + + page_is_visible: true, // when true, this page is visible + + auto_refresher_stop_until: 0, // timestamp in ms - used internally, to stop the + // auto-refresher for some time (when a chart is + // performing pan or zoom, we need to stop refreshing + // all other charts, to have the maximum speed for + // rendering the chart that is panned or zoomed). + // Used with .current.global_pan_sync_time + + on_scroll_refresher_stop_until: 0, // timestamp in ms - used to stop evaluating + // charts for some time, after a page scroll + + last_page_resize: Date.now(), // the timestamp of the last resize request + + last_page_scroll: 0, // the timestamp the last time the page was scrolled + + browser_timezone: 'unknown', // timezone detected by javascript + server_timezone: 'unknown', // timezone reported by the server + + force_data_points: 0, // force the number of points to be returned for charts + fake_chart_rendering: false, // when set to true, the dashboard will download data but will not render the charts + + passive_events: null, // true if the browser supports passive events + + // the current profile + // we may have many... + current: { + units: 'auto', // can be 'auto' or 'original' + temperature: 'celsius', // can be 'celsius' or 'fahrenheit' + seconds_as_time: true, // show seconds as DDd:HH:MM:SS ? + timezone: 'default', // the timezone to use, or 'default' + user_set_server_timezone: 'default', // as set by the user on the dashboard + + legend_toolbox: true, // show the legend toolbox on charts + resize_charts: true, // show the resize handler on charts + + pixels_per_point: isSlowDevice() ? 5 : 1, // the minimum pixels per point for all charts + // increase this to speed javascript up + // each chart library has its own limit too + // the max of this and the chart library is used + // the final is calculated every time, so a change + // here will have immediate effect on the next chart + // update + + idle_between_charts: 100, // ms - how much time to wait between chart updates + + fast_render_timeframe: 200, // ms - render continuously until this time of continuous + // rendering has been reached + // this setting is used to make it render e.g. 10 + // charts at once, sleep idle_between_charts time + // and continue for another 10 charts. + + idle_between_loops: 500, // ms - if all charts have been updated, wait this + // time before starting again. + + idle_parallel_loops: 100, // ms - the time between parallel refresher updates + + idle_lost_focus: 500, // ms - when the window does not have focus, check + // if focus has been regained, every this time + + global_pan_sync_time: 300, // ms - when you pan or zoom a chart, the background + // auto-refreshing of charts is paused for this amount + // of time + + sync_selection_delay: 400, // ms - when you pan or zoom a chart, wait this amount + // of time before setting up synchronized selections + // on hover. + + sync_selection: true, // enable or disable selection sync + + pan_and_zoom_delay: 50, // when panning or zooming, how ofter to update the chart + + sync_pan_and_zoom: true, // enable or disable pan and zoom sync + + pan_and_zoom_data_padding: true, // fetch more data for the master chart when panning or zooming + + update_only_visible: true, // enable or disable visibility management / used for printing + + parallel_refresher: !isSlowDevice(), // enable parallel refresh of charts + + concurrent_refreshes: true, // when parallel_refresher is enabled, sync also the charts + + destroy_on_hide: isSlowDevice(), // destroy charts when they are not visible + + show_help: netdataShowHelp, // when enabled the charts will show some help + show_help_delay_show_ms: 500, + show_help_delay_hide_ms: 0, + + eliminate_zero_dimensions: true, // do not show dimensions with just zeros + + stop_updates_when_focus_is_lost: true, // boolean - shall we stop auto-refreshes when document does not have user focus + stop_updates_while_resizing: 1000, // ms - time to stop auto-refreshes while resizing the charts + + double_click_speed: 500, // ms - time between clicks / taps to detect double click/tap + + smooth_plot: !isSlowDevice(), // enable smooth plot, where possible + + color_fill_opacity_line: 1.0, + color_fill_opacity_area: 0.2, + color_fill_opacity_stacked: 0.8, + + pan_and_zoom_factor: 0.25, // the increment when panning and zooming with the toolbox + pan_and_zoom_factor_multiplier_control: 2.0, + pan_and_zoom_factor_multiplier_shift: 3.0, + pan_and_zoom_factor_multiplier_alt: 4.0, + + abort_ajax_on_scroll: false, // kill pending ajax page scroll + async_on_scroll: false, // sync/async onscroll handler + onscroll_worker_duration_threshold: 30, // time in ms, for async scroll handler + + retries_on_data_failures: 3, // how many retries to make if we can't fetch chart data from the server + + setOptionCallback: function () { + } + }, + + debug: { + show_boxes: false, + main_loop: false, + focus: false, + visibility: false, + chart_data_url: false, + chart_errors: true, // remember to set it to false before merging + chart_timing: false, + chart_calls: false, + libraries: false, + dygraph: false, + globalSelectionSync: false, + globalPanAndZoom: false + } +}; + +NETDATA.statistics = { + refreshes_total: 0, + refreshes_active: 0, + refreshes_active_max: 0 +}; + +// local storage options + +NETDATA.localStorage = { + default: {}, + current: {}, + callback: {} // only used for resetting back to defaults +}; + +NETDATA.localStorageTested = -1; +NETDATA.localStorageTest = function () { + if (NETDATA.localStorageTested !== -1) { + return NETDATA.localStorageTested; + } + + if (typeof Storage !== "undefined" && typeof localStorage === 'object') { + let test = 'test'; + try { + localStorage.setItem(test, test); + localStorage.removeItem(test); + NETDATA.localStorageTested = true; + } catch (e) { + NETDATA.localStorageTested = false; + } + } else { + NETDATA.localStorageTested = false; + } + + return NETDATA.localStorageTested; +}; + +NETDATA.localStorageGet = function (key, def, callback) { + let ret = def; + + if (typeof NETDATA.localStorage.default[key.toString()] === 'undefined') { + NETDATA.localStorage.default[key.toString()] = def; + NETDATA.localStorage.callback[key.toString()] = callback; + } + + if (NETDATA.localStorageTest()) { + try { + // console.log('localStorage: loading "' + key.toString() + '"'); + ret = localStorage.getItem(key.toString()); + // console.log('netdata loaded: ' + key.toString() + ' = ' + ret.toString()); + if (ret === null || ret === 'undefined') { + // console.log('localStorage: cannot load it, saving "' + key.toString() + '" with value "' + JSON.stringify(def) + '"'); + localStorage.setItem(key.toString(), JSON.stringify(def)); + ret = def; + } else { + // console.log('localStorage: got "' + key.toString() + '" with value "' + ret + '"'); + ret = JSON.parse(ret); + // console.log('localStorage: loaded "' + key.toString() + '" as value ' + ret + ' of type ' + typeof(ret)); + } + } catch (error) { + console.log('localStorage: failed to read "' + key.toString() + '", using default: "' + def.toString() + '"'); + ret = def; + } + } + + if (typeof ret === 'undefined' || ret === 'undefined') { + console.log('localStorage: LOADED UNDEFINED "' + key.toString() + '" as value ' + ret + ' of type ' + typeof(ret)); + ret = def; + } + + NETDATA.localStorage.current[key.toString()] = ret; + return ret; +}; + +NETDATA.localStorageSet = function (key, value, callback) { + if (typeof value === 'undefined' || value === 'undefined') { + console.log('localStorage: ATTEMPT TO SET UNDEFINED "' + key.toString() + '" as value ' + value + ' of type ' + typeof(value)); + } + + if (typeof NETDATA.localStorage.default[key.toString()] === 'undefined') { + NETDATA.localStorage.default[key.toString()] = value; + NETDATA.localStorage.current[key.toString()] = value; + NETDATA.localStorage.callback[key.toString()] = callback; + } + + if (NETDATA.localStorageTest()) { + // console.log('localStorage: saving "' + key.toString() + '" with value "' + JSON.stringify(value) + '"'); + try { + localStorage.setItem(key.toString(), JSON.stringify(value)); + } catch (e) { + console.log('localStorage: failed to save "' + key.toString() + '" with value: "' + value.toString() + '"'); + } + } + + NETDATA.localStorage.current[key.toString()] = value; + return value; +}; + +NETDATA.localStorageGetRecursive = function (obj, prefix, callback) { + let keys = Object.keys(obj); + let len = keys.length; + while (len--) { + let i = keys[len]; + + if (typeof obj[i] === 'object') { + //console.log('object ' + prefix + '.' + i.toString()); + NETDATA.localStorageGetRecursive(obj[i], prefix + '.' + i.toString(), callback); + continue; + } + + obj[i] = NETDATA.localStorageGet(prefix + '.' + i.toString(), obj[i], callback); + } +}; + +NETDATA.setOption = function (key, value) { + if (key.toString() === 'setOptionCallback') { + if (typeof NETDATA.options.current.setOptionCallback === 'function') { + NETDATA.options.current[key.toString()] = value; + NETDATA.options.current.setOptionCallback(); + } + } else if (NETDATA.options.current[key.toString()] !== value) { + let name = 'options.' + key.toString(); + + if (typeof NETDATA.localStorage.default[name.toString()] === 'undefined') { + console.log('localStorage: setOption() on unsaved option: "' + name.toString() + '", value: ' + value); + } + + //console.log(NETDATA.localStorage); + //console.log('setOption: setting "' + key.toString() + '" to "' + value + '" of type ' + typeof(value) + ' original type ' + typeof(NETDATA.options.current[key.toString()])); + //console.log(NETDATA.options); + NETDATA.options.current[key.toString()] = NETDATA.localStorageSet(name.toString(), value, null); + + if (typeof NETDATA.options.current.setOptionCallback === 'function') { + NETDATA.options.current.setOptionCallback(); + } + } + + return true; +}; + +NETDATA.getOption = function (key) { + return NETDATA.options.current[key.toString()]; +}; + +// read settings from local storage +NETDATA.localStorageGetRecursive(NETDATA.options.current, 'options', null); + +// always start with this option enabled. +NETDATA.setOption('stop_updates_when_focus_is_lost', true); + +NETDATA.resetOptions = function () { + let keys = Object.keys(NETDATA.localStorage.default); + let len = keys.length; + + while (len--) { + let i = keys[len]; + let a = i.split('.'); + + if (a[0] === 'options') { + if (a[1] === 'setOptionCallback') { + continue; + } + if (typeof NETDATA.localStorage.default[i] === 'undefined') { + continue; + } + if (NETDATA.options.current[i] === NETDATA.localStorage.default[i]) { + continue; + } + + NETDATA.setOption(a[1], NETDATA.localStorage.default[i]); + } else if (a[0] === 'chart_heights') { + if (typeof NETDATA.localStorage.callback[i] === 'function' && typeof NETDATA.localStorage.default[i] !== 'undefined') { + NETDATA.localStorage.callback[i](NETDATA.localStorage.default[i]); + } + } + } + + NETDATA.dateTime.init(NETDATA.options.current.timezone); +}; + +// *** src/dashboard.js/timeout.js + +// TODO: Better name needed + +NETDATA.timeout = { + // by default, these are just wrappers to setTimeout() / clearTimeout() + + step: function (callback) { + return window.setTimeout(callback, 1000 / 60); + }, + + set: function (callback, delay) { + return window.setTimeout(callback, delay); + }, + + clear: function (id) { + return window.clearTimeout(id); + }, + + init: function () { + let custom = true; + + if (window.requestAnimationFrame) { + this.step = function (callback) { + return window.requestAnimationFrame(callback); + }; + + this.clear = function (handle) { + return window.cancelAnimationFrame(handle.value); + }; + // } else if (window.webkitRequestAnimationFrame) { + // this.step = function (callback) { + // return window.webkitRequestAnimationFrame(callback); + // }; + + // if (window.webkitCancelAnimationFrame) { + // this.clear = function (handle) { + // return window.webkitCancelAnimationFrame(handle.value); + // }; + // } else if (window.webkitCancelRequestAnimationFrame) { + // this.clear = function (handle) { + // return window.webkitCancelRequestAnimationFrame(handle.value); + // }; + // } + // } else if (window.mozRequestAnimationFrame) { + // this.step = function (callback) { + // return window.mozRequestAnimationFrame(callback); + // }; + + // this.clear = function (handle) { + // return window.mozCancelRequestAnimationFrame(handle.value); + // }; + // } else if (window.oRequestAnimationFrame) { + // this.step = function (callback) { + // return window.oRequestAnimationFrame(callback); + // }; + + // this.clear = function (handle) { + // return window.oCancelRequestAnimationFrame(handle.value); + // }; + // } else if (window.msRequestAnimationFrame) { + // this.step = function (callback) { + // return window.msRequestAnimationFrame(callback); + // }; + + // this.clear = function (handle) { + // return window.msCancelRequestAnimationFrame(handle.value); + // }; + } else { + custom = false; + } + + if (custom) { + // we have installed custom .step() / .clear() functions + // overwrite the .set() too + + this.set = function (callback, delay) { + let start = Date.now(), + handle = new Object(); + + const loop = () => { + let current = Date.now(), + delta = current - start; + + if (delta >= delay) { + callback.call(); + } else { + handle.value = this.step(loop); + } + } + + handle.value = this.step(loop); + return handle; + }; + } + } +}; + +NETDATA.timeout.init(); +// Codacy declarations +/* global netdataTheme */ + +NETDATA.themes = { + white: { + bootstrap_css: NETDATA.serverStatic + 'css/bootstrap-3.3.7.css', + dashboard_css: NETDATA.serverStatic + 'dashboard.css?v20190902-0', + background: '#FFFFFF', + foreground: '#000000', + grid: '#F0F0F0', + axis: '#F0F0F0', + highlight: '#F5F5F5', + colors: ['#3366CC', '#DC3912', '#109618', '#FF9900', '#990099', '#DD4477', + '#3B3EAC', '#66AA00', '#0099C6', '#B82E2E', '#AAAA11', '#5574A6', + '#994499', '#22AA99', '#6633CC', '#E67300', '#316395', '#8B0707', + '#329262', '#3B3EAC'], + easypiechart_track: '#f0f0f0', + easypiechart_scale: '#dfe0e0', + gauge_pointer: '#C0C0C0', + gauge_stroke: '#F0F0F0', + gauge_gradient: false, + d3pie: { + title: '#333333', + subtitle: '#666666', + footer: '#888888', + other: '#aaaaaa', + mainlabel: '#333333', + percentage: '#dddddd', + value: '#aaaa22', + tooltip_bg: '#000000', + tooltip_fg: '#efefef', + segment_stroke: "#ffffff", + gradient_color: '#000000' + } + }, + slate: { + bootstrap_css: NETDATA.serverStatic + 'css/bootstrap-slate-flat-3.3.7.css?v20161229-1', + dashboard_css: NETDATA.serverStatic + 'dashboard.slate.css?v20190902-0', + background: '#272b30', + foreground: '#C8C8C8', + grid: '#283236', + axis: '#283236', + highlight: '#383838', + /* colors: [ '#55bb33', '#ff2222', '#0099C6', '#faa11b', '#adbce0', '#DDDD00', + '#4178ba', '#f58122', '#a5cc39', '#f58667', '#f5ef89', '#cf93c0', + '#a5d18a', '#b8539d', '#3954a3', '#c8a9cf', '#c7de8a', '#fad20a', + '#a6a479', '#a66da8' ], + */ + colors: ['#66AA00', '#FE3912', '#3366CC', '#D66300', '#0099C6', '#DDDD00', + '#5054e6', '#EE9911', '#BB44CC', '#e45757', '#ef0aef', '#CC7700', + '#22AA99', '#109618', '#905bfd', '#f54882', '#4381bf', '#ff3737', + '#329262', '#3B3EFF'], + easypiechart_track: '#373b40', + easypiechart_scale: '#373b40', + gauge_pointer: '#474b50', + gauge_stroke: '#373b40', + gauge_gradient: false, + d3pie: { + title: '#C8C8C8', + subtitle: '#283236', + footer: '#283236', + other: '#283236', + mainlabel: '#C8C8C8', + percentage: '#dddddd', + value: '#cccc44', + tooltip_bg: '#272b30', + tooltip_fg: '#C8C8C8', + segment_stroke: "#283236", + gradient_color: '#000000' + } + } +}; + +if (typeof netdataTheme !== 'undefined' && typeof NETDATA.themes[netdataTheme] !== 'undefined') { + NETDATA.themes.current = NETDATA.themes[netdataTheme]; +} else { + NETDATA.themes.current = NETDATA.themes.white; +} + +NETDATA.colors = NETDATA.themes.current.colors; + +// these are the colors Google Charts are using +// we have them here to attempt emulate their look and feel on the other chart libraries +// http://there4.io/2012/05/02/google-chart-color-list/ +//NETDATA.colors = [ '#3366CC', '#DC3912', '#FF9900', '#109618', '#990099', '#3B3EAC', '#0099C6', +// '#DD4477', '#66AA00', '#B82E2E', '#316395', '#994499', '#22AA99', '#AAAA11', +// '#6633CC', '#E67300', '#8B0707', '#329262', '#5574A6', '#3B3EAC' ]; + +// an alternative set +// http://www.mulinblog.com/a-color-palette-optimized-for-data-visualization/ +// (blue) (red) (orange) (green) (pink) (brown) (purple) (yellow) (gray) +//NETDATA.colors = [ '#5DA5DA', '#F15854', '#FAA43A', '#60BD68', '#F17CB0', '#B2912F', '#B276B2', '#DECF3F', '#4D4D4D' ]; +// dygraph + +// Codacy declarations +/* global smoothPlotter */ +/* global Dygraph */ + +NETDATA.dygraph = { + smooth: false +}; + +NETDATA.dygraphToolboxPanAndZoom = function (state, after, before) { + if (after < state.netdata_first) { + after = state.netdata_first; + } + + if (before > state.netdata_last) { + before = state.netdata_last; + } + + state.setMode('zoom'); + NETDATA.globalSelectionSync.stop(); + NETDATA.globalSelectionSync.delay(); + state.tmp.dygraph_user_action = true; + state.tmp.dygraph_force_zoom = true; + // state.log('toolboxPanAndZoom'); + state.updateChartPanOrZoom(after, before); + NETDATA.globalPanAndZoom.setMaster(state, after, before); +}; + +NETDATA.dygraphSetSelection = function (state, t) { + if (typeof state.tmp.dygraph_instance !== 'undefined') { + let r = state.calculateRowForTime(t); + if (r !== -1) { + state.tmp.dygraph_instance.setSelection(r); + return true; + } else { + state.tmp.dygraph_instance.clearSelection(); + state.legendShowUndefined(); + } + } + + return false; +}; + +NETDATA.dygraphClearSelection = function (state) { + if (typeof state.tmp.dygraph_instance !== 'undefined') { + state.tmp.dygraph_instance.clearSelection(); + } + return true; +}; + +NETDATA.dygraphSmoothInitialize = function (callback) { + $.ajax({ + url: NETDATA.dygraph_smooth_js, + cache: true, + dataType: "script", + xhrFields: {withCredentials: true} // required for the cookie + }) + .done(function () { + NETDATA.dygraph.smooth = true; + smoothPlotter.smoothing = 0.3; + }) + .fail(function () { + NETDATA.dygraph.smooth = false; + }) + .always(function () { + if (typeof callback === "function") { + return callback(); + } + }); +}; + +NETDATA.dygraphInitialize = function (callback) { + if (typeof netdataNoDygraphs === 'undefined' || !netdataNoDygraphs) { + $.ajax({ + url: NETDATA.dygraph_js, + cache: true, + dataType: "script", + xhrFields: {withCredentials: true} // required for the cookie + }) + .done(function () { + NETDATA.registerChartLibrary('dygraph', NETDATA.dygraph_js); + }) + .fail(function () { + NETDATA.chartLibraries.dygraph.enabled = false; + NETDATA.error(100, NETDATA.dygraph_js); + }) + .always(function () { + if (NETDATA.chartLibraries.dygraph.enabled && NETDATA.options.current.smooth_plot) { + NETDATA.dygraphSmoothInitialize(callback); + } else if (typeof callback === "function") { + return callback(); + } + }); + } else { + NETDATA.chartLibraries.dygraph.enabled = false; + if (typeof callback === "function") { + return callback(); + } + } +}; + +NETDATA.dygraphChartUpdate = function (state, data) { + let dygraph = state.tmp.dygraph_instance; + + if (typeof dygraph === 'undefined') { + return NETDATA.dygraphChartCreate(state, data); + } + + // when the chart is not visible, and hidden + // if there is a window resize, dygraph detects + // its element size as 0x0. + // this will make it re-appear properly + + if (state.tm.last_unhidden > state.tmp.dygraph_last_rendered) { + dygraph.resize(); + } + + let options = { + file: data.result.data, + colors: state.chartColors(), + labels: data.result.labels, + //labelsDivWidth: state.chartWidth() - 70, + includeZero: state.tmp.dygraph_include_zero, + visibility: state.dimensions_visibility.selected2BooleanArray(state.data.dimension_names) + }; + + if (state.tmp.dygraph_chart_type === 'stacked') { + if (options.includeZero && state.dimensions_visibility.countSelected() < options.visibility.length) { + options.includeZero = 0; + } + } + + if (!NETDATA.chartLibraries.dygraph.isSparkline(state)) { + options.ylabel = state.units_current; // (state.units_desired === 'auto')?"":state.units_current; + } + + if (state.tmp.dygraph_force_zoom) { + if (NETDATA.options.debug.dygraph || state.debug) { + state.log('dygraphChartUpdate() forced zoom update'); + } + + options.dateWindow = (state.requested_padding !== null) ? [state.view_after, state.view_before] : null; + //options.isZoomedIgnoreProgrammaticZoom = true; + state.tmp.dygraph_force_zoom = false; + } else if (state.current.name !== 'auto') { + if (NETDATA.options.debug.dygraph || state.debug) { + state.log('dygraphChartUpdate() loose update'); + } + } else { + if (NETDATA.options.debug.dygraph || state.debug) { + state.log('dygraphChartUpdate() strict update'); + } + + options.dateWindow = (state.requested_padding !== null) ? [state.view_after, state.view_before] : null; + //options.isZoomedIgnoreProgrammaticZoom = true; + } + + options.valueRange = state.tmp.dygraph_options.valueRange; + + let oldMax = null, oldMin = null; + if (state.tmp.__commonMin !== null) { + state.data.min = state.tmp.dygraph_instance.axes_[0].extremeRange[0]; + oldMin = options.valueRange[0] = NETDATA.commonMin.get(state); + } + if (state.tmp.__commonMax !== null) { + state.data.max = state.tmp.dygraph_instance.axes_[0].extremeRange[1]; + oldMax = options.valueRange[1] = NETDATA.commonMax.get(state); + } + + if (state.tmp.dygraph_smooth_eligible) { + if ((NETDATA.options.current.smooth_plot && state.tmp.dygraph_options.plotter !== smoothPlotter) + || (NETDATA.options.current.smooth_plot === false && state.tmp.dygraph_options.plotter === smoothPlotter)) { + NETDATA.dygraphChartCreate(state, data); + return; + } + } + + if (netdataSnapshotData !== null && NETDATA.globalPanAndZoom.isActive() && NETDATA.globalPanAndZoom.isMaster(state) === false) { + // pan and zoom on snapshots + options.dateWindow = [NETDATA.globalPanAndZoom.force_after_ms, NETDATA.globalPanAndZoom.force_before_ms]; + //options.isZoomedIgnoreProgrammaticZoom = true; + } + + if (NETDATA.chartLibraries.dygraph.isLogScale(state)) { + if (Array.isArray(options.valueRange) && options.valueRange[0] <= 0) { + options.valueRange[0] = null; + } + } + + dygraph.updateOptions(options); + + let redraw = false; + if (oldMin !== null && oldMin > state.tmp.dygraph_instance.axes_[0].extremeRange[0]) { + state.data.min = state.tmp.dygraph_instance.axes_[0].extremeRange[0]; + options.valueRange[0] = NETDATA.commonMin.get(state); + redraw = true; + } + if (oldMax !== null && oldMax < state.tmp.dygraph_instance.axes_[0].extremeRange[1]) { + state.data.max = state.tmp.dygraph_instance.axes_[0].extremeRange[1]; + options.valueRange[1] = NETDATA.commonMax.get(state); + redraw = true; + } + + if (redraw) { + // state.log('forcing redraw to adapt to common- min/max'); + dygraph.updateOptions(options); + } + + state.tmp.dygraph_last_rendered = Date.now(); + return true; +}; + +NETDATA.dygraphChartCreate = function (state, data) { + if (NETDATA.options.debug.dygraph || state.debug) { + state.log('dygraphChartCreate()'); + } + + state.tmp.dygraph_chart_type = NETDATA.dataAttribute(state.element, 'dygraph-type', state.chart.chart_type); + if (state.tmp.dygraph_chart_type === 'stacked' && data.dimensions === 1) { + state.tmp.dygraph_chart_type = 'area'; + } + if (state.tmp.dygraph_chart_type === 'stacked' && NETDATA.chartLibraries.dygraph.isLogScale(state)) { + state.tmp.dygraph_chart_type = 'area'; + } + + let highlightCircleSize = NETDATA.chartLibraries.dygraph.isSparkline(state) ? 3 : 4; + + let smooth = NETDATA.dygraph.smooth + ? (NETDATA.dataAttributeBoolean(state.element, 'dygraph-smooth', (state.tmp.dygraph_chart_type === 'line' && NETDATA.chartLibraries.dygraph.isSparkline(state) === false))) + : false; + + state.tmp.dygraph_include_zero = NETDATA.dataAttribute(state.element, 'dygraph-includezero', (state.tmp.dygraph_chart_type === 'stacked')); + let drawAxis = NETDATA.dataAttributeBoolean(state.element, 'dygraph-drawaxis', true); + + state.tmp.dygraph_options = { + colors: NETDATA.dataAttribute(state.element, 'dygraph-colors', state.chartColors()), + + // leave a few pixels empty on the right of the chart + rightGap: NETDATA.dataAttribute(state.element, 'dygraph-rightgap', 5), + showRangeSelector: NETDATA.dataAttributeBoolean(state.element, 'dygraph-showrangeselector', false), + showRoller: NETDATA.dataAttributeBoolean(state.element, 'dygraph-showroller', false), + title: NETDATA.dataAttribute(state.element, 'dygraph-title', state.title), + titleHeight: NETDATA.dataAttribute(state.element, 'dygraph-titleheight', 19), + legend: NETDATA.dataAttribute(state.element, 'dygraph-legend', 'always'), // we need this to get selection events + labels: data.result.labels, + labelsDiv: NETDATA.dataAttribute(state.element, 'dygraph-labelsdiv', state.element_legend_childs.hidden), + //labelsDivStyles: NETDATA.dataAttribute(state.element, 'dygraph-labelsdivstyles', { 'fontSize':'1px' }), + //labelsDivWidth: NETDATA.dataAttribute(state.element, 'dygraph-labelsdivwidth', state.chartWidth() - 70), + labelsSeparateLines: NETDATA.dataAttributeBoolean(state.element, 'dygraph-labelsseparatelines', true), + labelsShowZeroValues: NETDATA.chartLibraries.dygraph.isLogScale(state) ? false : NETDATA.dataAttributeBoolean(state.element, 'dygraph-labelsshowzerovalues', true), + labelsKMB: false, + labelsKMG2: false, + showLabelsOnHighlight: NETDATA.dataAttributeBoolean(state.element, 'dygraph-showlabelsonhighlight', true), + hideOverlayOnMouseOut: NETDATA.dataAttributeBoolean(state.element, 'dygraph-hideoverlayonmouseout', true), + includeZero: state.tmp.dygraph_include_zero, + xRangePad: NETDATA.dataAttribute(state.element, 'dygraph-xrangepad', 0), + yRangePad: NETDATA.dataAttribute(state.element, 'dygraph-yrangepad', 1), + valueRange: NETDATA.dataAttribute(state.element, 'dygraph-valuerange', [null, null]), + ylabel: state.units_current, // (state.units_desired === 'auto')?"":state.units_current, + yLabelWidth: NETDATA.dataAttribute(state.element, 'dygraph-ylabelwidth', 12), + + // the function to plot the chart + plotter: null, + + // The width of the lines connecting data points. + // This can be used to increase the contrast or some graphs. + strokeWidth: NETDATA.dataAttribute(state.element, 'dygraph-strokewidth', ((state.tmp.dygraph_chart_type === 'stacked') ? 0.1 : ((smooth === true) ? 1.5 : 0.7))), + strokePattern: NETDATA.dataAttribute(state.element, 'dygraph-strokepattern', undefined), + + // The size of the dot to draw on each point in pixels (see drawPoints). + // A dot is always drawn when a point is "isolated", + // i.e. there is a missing point on either side of it. + // This also controls the size of those dots. + drawPoints: NETDATA.dataAttributeBoolean(state.element, 'dygraph-drawpoints', false), + + // Draw points at the edges of gaps in the data. + // This improves visibility of small data segments or other data irregularities. + drawGapEdgePoints: NETDATA.dataAttributeBoolean(state.element, 'dygraph-drawgapedgepoints', true), + connectSeparatedPoints: NETDATA.chartLibraries.dygraph.isLogScale(state) ? false : NETDATA.dataAttributeBoolean(state.element, 'dygraph-connectseparatedpoints', false), + pointSize: NETDATA.dataAttribute(state.element, 'dygraph-pointsize', 1), + + // enabling this makes the chart with little square lines + stepPlot: NETDATA.dataAttributeBoolean(state.element, 'dygraph-stepplot', false), + + // Draw a border around graph lines to make crossing lines more easily + // distinguishable. Useful for graphs with many lines. + strokeBorderColor: NETDATA.dataAttribute(state.element, 'dygraph-strokebordercolor', NETDATA.themes.current.background), + strokeBorderWidth: NETDATA.dataAttribute(state.element, 'dygraph-strokeborderwidth', (state.tmp.dygraph_chart_type === 'stacked') ? 0.0 : 0.0), + fillGraph: NETDATA.dataAttribute(state.element, 'dygraph-fillgraph', (state.tmp.dygraph_chart_type === 'area' || state.tmp.dygraph_chart_type === 'stacked')), + fillAlpha: NETDATA.dataAttribute(state.element, 'dygraph-fillalpha', + ((state.tmp.dygraph_chart_type === 'stacked') + ? NETDATA.options.current.color_fill_opacity_stacked + : NETDATA.options.current.color_fill_opacity_area) + ), + stackedGraph: NETDATA.dataAttribute(state.element, 'dygraph-stackedgraph', (state.tmp.dygraph_chart_type === 'stacked')), + stackedGraphNaNFill: NETDATA.dataAttribute(state.element, 'dygraph-stackedgraphnanfill', 'none'), + drawAxis: drawAxis, + axisLabelFontSize: NETDATA.dataAttribute(state.element, 'dygraph-axislabelfontsize', 10), + axisLineColor: NETDATA.dataAttribute(state.element, 'dygraph-axislinecolor', NETDATA.themes.current.axis), + axisLineWidth: NETDATA.dataAttribute(state.element, 'dygraph-axislinewidth', 1.0), + drawGrid: NETDATA.dataAttributeBoolean(state.element, 'dygraph-drawgrid', true), + gridLinePattern: NETDATA.dataAttribute(state.element, 'dygraph-gridlinepattern', null), + gridLineWidth: NETDATA.dataAttribute(state.element, 'dygraph-gridlinewidth', 1.0), + gridLineColor: NETDATA.dataAttribute(state.element, 'dygraph-gridlinecolor', NETDATA.themes.current.grid), + maxNumberWidth: NETDATA.dataAttribute(state.element, 'dygraph-maxnumberwidth', 8), + sigFigs: NETDATA.dataAttribute(state.element, 'dygraph-sigfigs', null), + digitsAfterDecimal: NETDATA.dataAttribute(state.element, 'dygraph-digitsafterdecimal', 2), + valueFormatter: NETDATA.dataAttribute(state.element, 'dygraph-valueformatter', undefined), + highlightCircleSize: NETDATA.dataAttribute(state.element, 'dygraph-highlightcirclesize', highlightCircleSize), + highlightSeriesOpts: NETDATA.dataAttribute(state.element, 'dygraph-highlightseriesopts', null), // TOO SLOW: { strokeWidth: 1.5 }, + highlightSeriesBackgroundAlpha: NETDATA.dataAttribute(state.element, 'dygraph-highlightseriesbackgroundalpha', null), // TOO SLOW: (state.tmp.dygraph_chart_type === 'stacked')?0.7:0.5, + pointClickCallback: NETDATA.dataAttribute(state.element, 'dygraph-pointclickcallback', undefined), + visibility: state.dimensions_visibility.selected2BooleanArray(state.data.dimension_names), + logscale: NETDATA.chartLibraries.dygraph.isLogScale(state) ? 'y' : undefined, + + // Expects a string in the format ":
You must enable JavaScript in order to use Netdata!
You can do this in your browser settings.
\ No newline at end of file diff --git a/luci-app-netdata/root/usr/share/netdata/webcn/main.js b/luci-app-netdata/root/usr/share/netdata/webcn/main.js new file mode 100644 index 00000000..8c00600d --- /dev/null +++ b/luci-app-netdata/root/usr/share/netdata/webcn/main.js @@ -0,0 +1,5146 @@ +// Main JavaScript file for the Netdata GUI. + +// Codacy declarations +/* global NETDATA */ + +// netdata snapshot data +var netdataSnapshotData = null; + +// enable alarms checking and notifications +var netdataShowAlarms = true; + +// enable registry updates +var netdataRegistry = true; + +// forward definition only - not used here +var netdataServer = undefined; +var netdataServerStatic = undefined; +var netdataCheckXSS = undefined; + +// control the welcome modal and analytics +var this_is_demo = null; + +function escapeUserInputHTML(s) { + return s.toString() + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/#/g, '#') + .replace(/'/g, ''') + .replace(/\(/g, '(') + .replace(/\)/g, ')') + .replace(/\//g, '/'); +} + +function verifyURL(s) { + if (typeof (s) === 'string' && (s.startsWith('http://') || s.startsWith('https://'))) { + return s + .replace(/'/g, '%22') + .replace(/"/g, '%27') + .replace(/\)/g, '%28') + .replace(/\(/g, '%29'); + } + + console.log('invalid URL detected:'); + console.log(s); + return 'javascript:alert("invalid url");'; +} + +// -------------------------------------------------------------------- +// urlOptions + +var urlOptions = { + hash: '#', + theme: null, + help: null, + mode: 'live', // 'live', 'print' + update_always: false, + pan_and_zoom: false, + server: null, + after: 0, + before: 0, + highlight: false, + highlight_after: 0, + highlight_before: 0, + nowelcome: false, + show_alarms: false, + chart: null, + family: null, + alarm: null, + alarm_unique_id: 0, + alarm_id: 0, + alarm_event_id: 0, + alarm_when: 0, + + hasProperty: function (property) { + // console.log('checking property ' + property + ' of type ' + typeof(this[property])); + return typeof this[property] !== 'undefined'; + }, + + genHash: function (forReload) { + var hash = urlOptions.hash; + + if (urlOptions.pan_and_zoom === true) { + hash += ';after=' + urlOptions.after.toString() + + ';before=' + urlOptions.before.toString(); + } + + if (urlOptions.highlight === true) { + hash += ';highlight_after=' + urlOptions.highlight_after.toString() + + ';highlight_before=' + urlOptions.highlight_before.toString(); + } + + if (urlOptions.theme !== null) { + hash += ';theme=' + urlOptions.theme.toString(); + } + + if (urlOptions.help !== null) { + hash += ';help=' + urlOptions.help.toString(); + } + + if (urlOptions.update_always === true) { + hash += ';update_always=true'; + } + + if (forReload === true && urlOptions.server !== null) { + hash += ';server=' + urlOptions.server.toString(); + } + + if (urlOptions.mode !== 'live') { + hash += ';mode=' + urlOptions.mode; + } + + return hash; + }, + + parseHash: function () { + var variables = document.location.hash.split(';'); + var len = variables.length; + while (len--) { + if (len !== 0) { + var p = variables[len].split('='); + if (urlOptions.hasProperty(p[0]) && typeof p[1] !== 'undefined') { + urlOptions[p[0]] = decodeURIComponent(p[1]); + } + } else { + if (variables[len].length > 0) { + urlOptions.hash = variables[len]; + } + } + } + + var booleans = ['nowelcome', 'show_alarms', 'update_always']; + len = booleans.length; + while (len--) { + if (urlOptions[booleans[len]] === 'true' || urlOptions[booleans[len]] === true || urlOptions[booleans[len]] === '1' || urlOptions[booleans[len]] === 1) { + urlOptions[booleans[len]] = true; + } else { + urlOptions[booleans[len]] = false; + } + } + + var numeric = ['after', 'before', 'highlight_after', 'highlight_before', 'alarm_when']; + len = numeric.length; + while (len--) { + if (typeof urlOptions[numeric[len]] === 'string') { + try { + urlOptions[numeric[len]] = parseInt(urlOptions[numeric[len]]); + } + catch (e) { + console.log('failed to parse URL hash parameter ' + numeric[len]); + urlOptions[numeric[len]] = 0; + } + } + } + + if (urlOptions.alarm_when) { + // if alarm_when exists, create after/before params + // -/+ 2 minutes from the alarm, and reload the page + const alarmTime = new Date(urlOptions.alarm_when * 1000).valueOf(); + const timeMarginMs = 120000; // 2 mins + + const after = alarmTime - timeMarginMs; + const before = alarmTime + timeMarginMs; + const newHash = document.location.hash.replace( + /;alarm_when=[0-9]*/i, + ";after=" + after + ";before=" + before, + ); + history.replaceState(null, '', newHash); + location.reload(); + } + + if (urlOptions.server !== null && urlOptions.server !== '') { + netdataServerStatic = document.location.origin.toString() + document.location.pathname.toString(); + netdataServer = urlOptions.server; + netdataCheckXSS = true; + } else { + urlOptions.server = null; + } + + if (urlOptions.before > 0 && urlOptions.after > 0) { + urlOptions.pan_and_zoom = true; + urlOptions.nowelcome = true; + } else { + urlOptions.pan_and_zoom = false; + } + + if (urlOptions.highlight_before > 0 && urlOptions.highlight_after > 0) { + urlOptions.highlight = true; + } else { + urlOptions.highlight = false; + } + + switch (urlOptions.mode) { + case 'print': + urlOptions.theme = 'white'; + urlOptions.welcome = false; + urlOptions.help = false; + urlOptions.show_alarms = false; + + if (urlOptions.pan_and_zoom === false) { + urlOptions.pan_and_zoom = true; + urlOptions.before = Date.now(); + urlOptions.after = urlOptions.before - 600000; + } + + netdataShowAlarms = false; + netdataRegistry = false; + this_is_demo = false; + break; + + case 'live': + default: + urlOptions.mode = 'live'; + break; + } + + // console.log(urlOptions); + }, + + hashUpdate: function () { + history.replaceState(null, '', urlOptions.genHash(true)); + }, + + netdataPanAndZoomCallback: function (status, after, before) { + //console.log(1); + //console.log(new Error().stack); + + if (netdataSnapshotData === null) { + urlOptions.pan_and_zoom = status; + urlOptions.after = after; + urlOptions.before = before; + urlOptions.hashUpdate(); + } + }, + + netdataHighlightCallback: function (status, after, before) { + //console.log(2); + //console.log(new Error().stack); + + if (status === true && (after === null || before === null || after <= 0 || before <= 0 || after >= before)) { + status = false; + after = 0; + before = 0; + } + + if (netdataSnapshotData === null) { + urlOptions.highlight = status; + } else { + urlOptions.highlight = false; + } + + urlOptions.highlight_after = Math.round(after); + urlOptions.highlight_before = Math.round(before); + urlOptions.hashUpdate(); + + var show_eye = NETDATA.globalChartUnderlay.hasViewport(); + + if (status === true && after > 0 && before > 0 && after < before) { + var d1 = NETDATA.dateTime.localeDateString(after); + var d2 = NETDATA.dateTime.localeDateString(before); + if (d1 === d2) { + d2 = ''; + } + document.getElementById('navbar-highlight-content').innerHTML = + ((show_eye === true) ? '' : '').toString() + + 'highlighted time-frame' + + ' ' + d1 + ' ' + NETDATA.dateTime.localeTimeString(after) + ' to ' + + ' ' + d2 + ' ' + NETDATA.dateTime.localeTimeString(before) + ', ' + + 'duration ' + NETDATA.seconds4human(Math.round((before - after) / 1000)) + '' + + '' + + ''; + + $('.navbar-highlight').show(); + + $('.highlight-tooltip').tooltip({ + html: true, + delay: { show: 500, hide: 0 }, + container: 'body' + }); + } else { + $('.navbar-highlight').hide(); + } + }, + + clearHighlight: function () { + NETDATA.globalChartUnderlay.clear(); + + if (NETDATA.globalPanAndZoom.isActive() === true) { + NETDATA.globalPanAndZoom.clearMaster(); + } + }, + + showHighlight: function () { + NETDATA.globalChartUnderlay.focus(); + } +}; + +urlOptions.parseHash(); + +// -------------------------------------------------------------------- +// check options that should be processed before loading netdata.js + +var localStorageTested = -1; + +function localStorageTest() { + if (localStorageTested !== -1) { + return localStorageTested; + } + + if (typeof Storage !== "undefined" && typeof localStorage === 'object') { + var test = 'test'; + try { + localStorage.setItem(test, test); + localStorage.removeItem(test); + localStorageTested = true; + } + catch (e) { + console.log(e); + localStorageTested = false; + } + } else { + localStorageTested = false; + } + + return localStorageTested; +} + +function loadLocalStorage(name) { + var ret = null; + + try { + if (localStorageTest() === true) { + ret = localStorage.getItem(name); + } else { + console.log('localStorage is not available'); + } + } + catch (error) { + console.log(error); + return null; + } + + if (typeof ret === 'undefined' || ret === null) { + return null; + } + + // console.log('loaded: ' + name.toString() + ' = ' + ret.toString()); + + return ret; +} + +function saveLocalStorage(name, value) { + // console.log('saving: ' + name.toString() + ' = ' + value.toString()); + try { + if (localStorageTest() === true) { + localStorage.setItem(name, value.toString()); + return true; + } + } + catch (error) { + console.log(error); + } + + return false; +} + +function getTheme(def) { + if (urlOptions.mode === 'print') { + return 'white'; + } + + var ret = loadLocalStorage('netdataTheme'); + if (typeof ret === 'undefined' || ret === null || ret === 'undefined') { + return def; + } else { + return ret; + } +} + +function setTheme(theme) { + if (urlOptions.mode === 'print') { + return false; + } + + if (theme === netdataTheme) { + return false; + } + return saveLocalStorage('netdataTheme', theme); +} + +var netdataTheme = getTheme('slate'); +var netdataShowHelp = true; + +if (urlOptions.theme !== null) { + setTheme(urlOptions.theme); + netdataTheme = urlOptions.theme; +} else { + urlOptions.theme = netdataTheme; +} + +if (urlOptions.help !== null) { + saveLocalStorage('options.show_help', urlOptions.help); + netdataShowHelp = urlOptions.help; +} else { + urlOptions.help = loadLocalStorage('options.show_help'); +} + +// -------------------------------------------------------------------- +// natural sorting +// http://www.davekoelle.com/files/alphanum.js - LGPL + +function naturalSortChunkify(t) { + var tz = []; + var x = 0, y = -1, n = 0, i, j; + + while (i = (j = t.charAt(x++)).charCodeAt(0)) { + var m = (i >= 48 && i <= 57); + if (m !== n) { + tz[++y] = ""; + n = m; + } + tz[y] += j; + } + + return tz; +} + +function naturalSortCompare(a, b) { + var aa = naturalSortChunkify(a.toLowerCase()); + var bb = naturalSortChunkify(b.toLowerCase()); + + for (var x = 0; aa[x] && bb[x]; x++) { + if (aa[x] !== bb[x]) { + var c = Number(aa[x]), d = Number(bb[x]); + if (c.toString() === aa[x] && d.toString() === bb[x]) { + return c - d; + } else { + return (aa[x] > bb[x]) ? 1 : -1; + } + } + } + + return aa.length - bb.length; +} + +// -------------------------------------------------------------------- +// saving files to client + +function saveTextToClient(data, filename) { + var blob = new Blob([data], { + type: 'application/octet-stream' + }); + + var url = URL.createObjectURL(blob); + var link = document.createElement('a'); + link.setAttribute('href', url); + link.setAttribute('download', filename); + + var el = document.getElementById('hiddenDownloadLinks'); + el.innerHTML = ''; + el.appendChild(link); + + setTimeout(function () { + el.removeChild(link); + URL.revokeObjectURL(url); + }, 60); + + link.click(); +} + +function saveObjectToClient(data, filename) { + saveTextToClient(JSON.stringify(data), filename); +} + +// ----------------------------------------------------------------------------- +// registry call back to render my-netdata menu + +function toggleExpandIcon(svgEl) { + if (svgEl.getAttribute('data-icon') === 'caret-down') { + svgEl.setAttribute('data-icon', 'caret-up'); + } else { + svgEl.setAttribute('data-icon', 'caret-down'); + } +} + +function toggleAgentItem(e, guid) { + e.stopPropagation(); + e.preventDefault(); + + toggleExpandIcon(e.currentTarget.children[0]); + + const el = document.querySelector(`.agent-alternate-urls.agent-${guid}`); + if (el) { + el.classList.toggle('collapsed'); + } +} + +// When you stream metrics from netdata to netdata, the receiving netdata now +// has multiple host databases. It's own, and multiple mirrored. Mirrored databases +// can be accessed with +const OLD_DASHBOARD_SUFFIX = "old" +let isOldSuffix = true +try { + const currentScriptMainJs = document.currentScript; + const mainJsSrc = currentScriptMainJs.getAttribute("src") + isOldSuffix = mainJsSrc.startsWith("../main.js") +} catch { + console.warn("current script not detecting, assuming the dashboard is running with /old suffix") +} + +function transformWithOldSuffix(url) { + return isOldSuffix ? `../${url}` : url +} + +function renderStreamedHosts(options) { + let html = `
Databases streamed to this agent
`; + + var base = document.location.origin.toString() + + document.location.pathname.toString() + .replace(isOldSuffix ? `/${OLD_DASHBOARD_SUFFIX}` : "", ""); + if (base.endsWith("/host/" + options.hostname + "/")) { + base = base.substring(0, base.length - ("/host/" + options.hostname + "/").toString().length); + } + + if (base.endsWith("/")) { + base = base.substring(0, base.length - 1); + } + + var master = options.hosts[0].hostname; + // We sort a clone of options.hosts, to keep the master as the first element + // for future calls. + var sorted = options.hosts.slice(0).sort(function (a, b) { + if (a.hostname === master) { + return -1; + } + return naturalSortCompare(a.hostname, b.hostname); + }); + + let displayedDatabases = false; + + for (var s of sorted) { + let url, icon; + const hostname = s.hostname; + + if (myNetdataMenuFilterValue !== "") { + if (!hostname.includes(myNetdataMenuFilterValue)) { + continue; + } + } + + displayedDatabases = true; + + if (hostname === master) { + url = isOldSuffix ? `${base}/${OLD_DASHBOARD_SUFFIX}/` : `${base}/`; + icon = 'home'; + } else { + url = isOldSuffix ? `${base}/host/${hostname}/${OLD_DASHBOARD_SUFFIX}/` : `${base}/host/${hostname}/`; + icon = 'window-restore'; + } + + html += ( + `
+ + + + + ${hostname} + +
+
` + ) + } + + if (!displayedDatabases) { + html += ( + `
+ + no databases match the filter criteria. +
` + ) + } + + return html; +} + +function renderMachines(machinesArray) { + let html = `
My nodes
`; + + if (machinesArray === null) { + let ret = loadLocalStorage("registryCallback"); + if (ret) { + machinesArray = JSON.parse(ret); + console.log("failed to contact the registry - loaded registry data from browser local storage"); + } + } + + let found = false; + let displayedAgents = false; + + const maskedURL = NETDATA.registry.MASKED_DATA; + + if (machinesArray) { + saveLocalStorage("registryCallback", JSON.stringify(machinesArray)); + + var machines = machinesArray.sort(function (a, b) { + return naturalSortCompare(a.name, b.name); + }); + + for (var machine of machines) { + found = true; + + if (myNetdataMenuFilterValue !== "") { + if (!machine.name.includes(myNetdataMenuFilterValue)) { + continue; + } + } + + displayedAgents = true; + + const alternateUrlItems = ( + `` + ) + + html += ( + ` + ${alternateUrlItems}` + ) + } + + if (found && (!displayedAgents)) { + html += ( + `
+ + zero nodes are matching the filter value. +
` + ) + } + } + + if (!found) { + if (machines) { + html += ( + `` + ) + } else { + html += ( + `` + ) + } + + html += `
`; + html += `
Demo netdata nodes
`; + + const demoServers = [ + { url: "//london.netdata.rocks/default.html", title: "UK - London (DigitalOcean.com)" }, + { url: "//newyork.netdata.rocks/default.html", title: "US - New York (DigitalOcean.com)" }, + { url: "//sanfrancisco.netdata.rocks/default.html", title: "US - San Francisco (DigitalOcean.com)" }, + { url: "//atlanta.netdata.rocks/default.html", title: "US - Atlanta (CDN77.com)" }, + { url: "//frankfurt.netdata.rocks/default.html", title: "Germany - Frankfurt (DigitalOcean.com)" }, + { url: "//toronto.netdata.rocks/default.html", title: "Canada - Toronto (DigitalOcean.com)" }, + { url: "//singapore.netdata.rocks/default.html", title: "Japan - Singapore (DigitalOcean.com)" }, + { url: "//bangalore.netdata.rocks/default.html", title: "India - Bangalore (DigitalOcean.com)" }, + + ] + + for (var server of demoServers) { + html += ( + `
+ + ${server.title} +
+
+ ` + ); + } + } + + return html; +} + +function setMyNetdataMenu(html) { + const el = document.getElementById('my-netdata-dropdown-content') + el.innerHTML = html; +} + +function clearMyNetdataMenu() { + setMyNetdataMenu(`
+ + Loading, please wait... +
+
`); +} + +function errorMyNetdataMenu() { + setMyNetdataMenu(`
+ + Cannot load known Netdata agents from Netdata Cloud! Please make sure you have the latest version of Netdata. +
`); +} + +function restrictMyNetdataMenu() { + setMyNetdataMenu(`
+ Please sign in to netdata.cloud to view your nodes! +
+
`); +} + +function openAuthenticatedUrl(url) { + if (isSignedIn()) { + window.open(url); + } else { + window.open(`${NETDATA.registry.cloudBaseURL}/account/sign-in-agent?id=${NETDATA.registry.machine_guid}&name=${encodeURIComponent(NETDATA.registry.hostname)}&origin=${encodeURIComponent(window.location.origin + "/")}&redirect_uri=${encodeURIComponent(window.location.origin + "/" + url)}`); + } +} + +function renderMyNetdataMenu(machinesArray) { + const el = document.getElementById('my-netdata-dropdown-content'); + el.classList.add(`theme-${netdataTheme}`); + + if (machinesArray == registryAgents) { + console.log("Rendering my-netdata menu from registry"); + } else { + console.log("Rendering my-netdata menu from netdata.cloud", machinesArray); + } + + let html = ''; + + if (!isSignedIn()) { + if (!NETDATA.registry.isRegistryEnabled()) { + html += ( + `` + ); + } + } + + if (isSignedIn()) { + html += ( + `
+ + +
+
` + ); + } + + // options.hosts = [ + // { + // hostname: "streamed1", + // }, + // { + // hostname: "streamed2", + // }, + // ] + + if (options.hosts.length > 1) { + html += `
${renderStreamedHosts(options)}

`; + } + + if (isSignedIn() || NETDATA.registry.isRegistryEnabled()) { + html += `
${renderMachines(machinesArray)}

`; + } + + if (!isSignedIn()) { + html += ( + `
+ + 更换标识 +
+
+
+ + 这是什么? +
+
` + ) + } else { + html += ( + `
+ + Nodes beta +
+
+ +
+ + What is this? +
+
` + ) + } + + el.innerHTML = html; + + gotoServerInit(); +} + +function isdemo() { + if (this_is_demo !== null) { + return this_is_demo; + } + this_is_demo = false; + + try { + if (typeof document.location.hostname === 'string') { + if (document.location.hostname.endsWith('.my-netdata.io') || + document.location.hostname.endsWith('.mynetdata.io') || + document.location.hostname.endsWith('.netdata.rocks') || + document.location.hostname.endsWith('.netdata.ai') || + document.location.hostname.endsWith('.netdata.live') || + document.location.hostname.endsWith('.firehol.org') || + document.location.hostname.endsWith('.netdata.online') || + document.location.hostname.endsWith('.netdata.cloud')) { + this_is_demo = true; + } + } + } + catch (error) { + } + return this_is_demo; +} + +function netdataURL(url, forReload) { + if (typeof url === 'undefined') + // url = document.location.toString(); + { + url = ''; + } + + if (url.indexOf('#') !== -1) { + url = url.substring(0, url.indexOf('#')); + } + + var hash = urlOptions.genHash(forReload); + + // console.log('netdataURL: ' + url + hash); + + return url + hash; +} + +function netdataReload(url) { + document.location = verifyURL(netdataURL(url, true)); + + // since we play with hash + // this is needed to reload the page + location.reload(); +} + +function gotoHostedModalHandler(url) { + document.location = verifyURL(url + urlOptions.genHash()); + return false; +} + +var gotoServerValidateRemaining = 0; +var gotoServerMiddleClick = false; +var gotoServerStop = false; + +function gotoServerValidateUrl(id, guid, url) { + var penalty = 0; + var error = 'failed'; + + if (document.location.toString().startsWith('http://') && url.toString().startsWith('https://')) + // we penalize https only if the current url is http + // to allow the user walk through all its servers. + { + penalty = 500; + } else if (document.location.toString().startsWith('https://') && url.toString().startsWith('http://')) { + error = 'can\'t check'; + } + + var finalURL = netdataURL(url); + + setTimeout(function () { + document.getElementById('gotoServerList').innerHTML += '' + escapeUserInputHTML(url) + 'checking...'; + + NETDATA.registry.hello(url, function (data) { + if (typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid === guid) { + // console.log('OK ' + id + ' URL: ' + url); + document.getElementById(guid + '-' + id + '-status').innerHTML = "OK"; + + if (!gotoServerStop) { + gotoServerStop = true; + + if (gotoServerMiddleClick) { + window.open(verifyURL(finalURL), '_blank'); + gotoServerMiddleClick = false; + document.getElementById('gotoServerResponse').innerHTML = 'Opening new window to ' + NETDATA.registry.machines[guid].name + '
' + escapeUserInputHTML(url) + '

(check your pop-up blocker if it fails)'; + } else { + document.getElementById('gotoServerResponse').innerHTML += 'found it! It is at:
' + escapeUserInputHTML(url) + ''; + document.location = verifyURL(finalURL); + $('#gotoServerModal').modal('hide'); + } + } + } else { + if (typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid !== guid) { + error = 'wrong machine'; + } + + document.getElementById(guid + '-' + id + '-status').innerHTML = error; + gotoServerValidateRemaining--; + if (gotoServerValidateRemaining <= 0) { + gotoServerMiddleClick = false; + document.getElementById('gotoServerResponse').innerHTML = 'Sorry! I cannot find any operational URL for this server'; + } + } + }); + }, (id * 50) + penalty); +} + +function gotoServerModalHandler(guid) { + // console.log('goto server: ' + guid); + + gotoServerStop = false; + var checked = {}; + var len = NETDATA.registry.machines[guid].alternate_urls.length; + var count = 0; + + document.getElementById('gotoServerResponse').innerHTML = ''; + document.getElementById('gotoServerList').innerHTML = ''; + document.getElementById('gotoServerName').innerHTML = NETDATA.registry.machines[guid].name; + $('#gotoServerModal').modal('show'); + + gotoServerValidateRemaining = len; + while (len--) { + var url = NETDATA.registry.machines[guid].alternate_urls[len]; + checked[url] = true; + gotoServerValidateUrl(count++, guid, url); + } + + if (!isSignedIn()) { + // When the registry is enabled, if the user's known URLs are not working + // we consult the registry to get additional URLs. + setTimeout(function () { + if (gotoServerStop === false) { + document.getElementById('gotoServerResponse').innerHTML = 'Added all the known URLs for this machine.'; + NETDATA.registry.search(guid, function (data) { + // console.log(data); + len = data.urls.length; + while (len--) { + var url = data.urls[len][1]; + // console.log(url); + if (typeof checked[url] === 'undefined') { + gotoServerValidateRemaining++; + checked[url] = true; + gotoServerValidateUrl(count++, guid, url); + } + } + }); + } + }, 2000); + } + + return false; +} + +function gotoServerInit() { + $(".registry_link").on('click', function (e) { + if (e.which === 2) { + e.preventDefault(); + gotoServerMiddleClick = true; + } else { + gotoServerMiddleClick = false; + } + + return true; + }); +} + +function switchRegistryModalHandler() { + document.getElementById('switchRegistryPersonGUID').value = NETDATA.registry.person_guid; + document.getElementById('switchRegistryURL').innerHTML = NETDATA.registry.server; + document.getElementById('switchRegistryResponse').innerHTML = ''; + $('#switchRegistryModal').modal('show'); +} + +function notifyForSwitchRegistry() { + var n = document.getElementById('switchRegistryPersonGUID').value; + + if (n !== '' && n.length === 36) { + NETDATA.registry.switch(n, function (result) { + if (result !== null) { + $('#switchRegistryModal').modal('hide'); + NETDATA.registry.init(); + } else { + document.getElementById('switchRegistryResponse').innerHTML = "Sorry! The registry rejected your request."; + } + }); + } else { + document.getElementById('switchRegistryResponse').innerHTML = "The ID you have entered is not a GUID."; + } +} + +var deleteRegistryGuid = null; +var deleteRegistryUrl = null; + +function deleteRegistryModalHandler(guid, name, url) { + // void (guid); + + deleteRegistryGuid = guid; + deleteRegistryUrl = url; + + document.getElementById('deleteRegistryServerName').innerHTML = name; + document.getElementById('deleteRegistryServerName2').innerHTML = name; + document.getElementById('deleteRegistryServerURL').innerHTML = url; + document.getElementById('deleteRegistryResponse').innerHTML = ''; + + $('#deleteRegistryModal').modal('show'); +} + +function notifyForDeleteRegistry() { + const responseEl = document.getElementById('deleteRegistryResponse'); + + if (deleteRegistryUrl) { + if (isSignedIn()) { + deleteCloudAgentURL(deleteRegistryGuid, deleteRegistryUrl) + .then((count) => { + if (!count) { + responseEl.innerHTML = "Sorry, this command was rejected by netdata.cloud!"; + return; + } + NETDATA.registry.delete(deleteRegistryUrl, function (result) { + if (result === null) { + console.log("Received error from registry", result); + } + + deleteRegistryUrl = null; + $('#deleteRegistryModal').modal('hide'); + NETDATA.registry.init(); + }); + }); + } else { + NETDATA.registry.delete(deleteRegistryUrl, function (result) { + if (result !== null) { + deleteRegistryUrl = null; + $('#deleteRegistryModal').modal('hide'); + NETDATA.registry.init(); + } else { + responseEl.innerHTML = "Sorry, this command was rejected by the registry server!"; + } + }); + } + } +} + +var options = { + menus: {}, + submenu_names: {}, + data: null, + hostname: 'netdata_server', // will be overwritten by the netdata server + version: 'unknown', + release_channel: 'unknown', + hosts: [], + + duration: 0, // the default duration of the charts + update_every: 1, + + chartsPerRow: 0, + // chartsMinWidth: 1450, + chartsHeight: 180, +}; + +function chartsPerRow(total) { + void (total); + + if (options.chartsPerRow === 0) { + return 1; + //var width = Math.floor(total / options.chartsMinWidth); + //if(width === 0) width = 1; + //return width; + } else { + return options.chartsPerRow; + } +} + +function prioritySort(a, b) { + if (a.priority < b.priority) { + return -1; + } + if (a.priority > b.priority) { + return 1; + } + return naturalSortCompare(a.name, b.name); +} + +function sortObjectByPriority(object) { + var idx = {}; + var sorted = []; + + for (var i in object) { + if (!object.hasOwnProperty(i)) { + continue; + } + + if (typeof idx[i] === 'undefined') { + idx[i] = object[i]; + sorted.push(i); + } + } + + sorted.sort(function (a, b) { + if (idx[a].priority < idx[b].priority) { + return -1; + } + if (idx[a].priority > idx[b].priority) { + return 1; + } + return naturalSortCompare(a, b); + }); + + return sorted; +} + +// ---------------------------------------------------------------------------- +// scroll to a section, without changing the browser history + +function scrollToId(hash) { + if (hash && hash !== '' && document.getElementById(hash) !== null) { + var offset = $('#' + hash).offset(); + if (typeof offset !== 'undefined') { + //console.log('scrolling to ' + hash + ' at ' + offset.top.toString()); + $('html, body').animate({ scrollTop: offset.top - 30 }, 0); + } + } + + // we must return false to prevent the default action + return false; +} + +// ---------------------------------------------------------------------------- + +// user editable information +var customDashboard = { + menu: {}, + submenu: {}, + context: {} +}; + +// netdata standard information +var netdataDashboard = { + sparklines_registry: {}, + os: 'unknown', + + menu: {}, + submenu: {}, + context: {}, + + // generate a sparkline + // used in the documentation + sparkline: function (prefix, chart, dimension, units, suffix) { + if (options.data === null || typeof options.data.charts === 'undefined') { + return ''; + } + + if (typeof options.data.charts[chart] === 'undefined') { + return ''; + } + + if (typeof options.data.charts[chart].dimensions === 'undefined') { + return ''; + } + + if (typeof options.data.charts[chart].dimensions[dimension] === 'undefined') { + return ''; + } + + var key = chart + '.' + dimension; + + if (typeof units === 'undefined') { + units = ''; + } + + if (typeof this.sparklines_registry[key] === 'undefined') { + this.sparklines_registry[key] = { count: 1 }; + } else { + this.sparklines_registry[key].count++; + } + + key = key + '.' + this.sparklines_registry[key].count; + + return prefix + '
(X' + units + ')' + suffix; + }, + + gaugeChart: function (title, width, dimensions, colors) { + if (typeof colors === 'undefined') { + colors = ''; + } + + if (typeof dimensions === 'undefined') { + dimensions = ''; + } + + return '
'; + }, + + anyAttribute: function (obj, attr, key, def) { + if (typeof (obj[key]) !== 'undefined') { + var x = obj[key][attr]; + + if (typeof (x) === 'undefined') { + return def; + } + + if (typeof (x) === 'function') { + return x(netdataDashboard.os); + } + + return x; + } + + return def; + }, + + menuTitle: function (chart) { + if (typeof chart.menu_pattern !== 'undefined') { + return (this.anyAttribute(this.menu, 'title', chart.menu_pattern, chart.menu_pattern).toString() + + ' ' + chart.type.slice(-(chart.type.length - chart.menu_pattern.length - 1)).toString()).replace(/_/g, ' '); + } + + return (this.anyAttribute(this.menu, 'title', chart.menu, chart.menu)).toString().replace(/_/g, ' '); + }, + + menuIcon: function (chart) { + if (typeof chart.menu_pattern !== 'undefined') { + return this.anyAttribute(this.menu, 'icon', chart.menu_pattern, '').toString(); + } + + return this.anyAttribute(this.menu, 'icon', chart.menu, ''); + }, + + menuInfo: function (chart) { + if (typeof chart.menu_pattern !== 'undefined') { + return this.anyAttribute(this.menu, 'info', chart.menu_pattern, null); + } + + return this.anyAttribute(this.menu, 'info', chart.menu, null); + }, + + menuHeight: function (chart) { + if (typeof chart.menu_pattern !== 'undefined') { + return this.anyAttribute(this.menu, 'height', chart.menu_pattern, 1.0); + } + + return this.anyAttribute(this.menu, 'height', chart.menu, 1.0); + }, + + submenuTitle: function (menu, submenu) { + var key = menu + '.' + submenu; + // console.log(key); + var title = this.anyAttribute(this.submenu, 'title', key, submenu).toString().replace(/_/g, ' '); + if (title.length > 28) { + var a = title.substring(0, 13); + var b = title.substring(title.length - 12, title.length); + return a + '...' + b; + } + return title; + }, + + submenuInfo: function (menu, submenu) { + var key = menu + '.' + submenu; + return this.anyAttribute(this.submenu, 'info', key, null); + }, + + submenuHeight: function (menu, submenu, relative) { + var key = menu + '.' + submenu; + return this.anyAttribute(this.submenu, 'height', key, 1.0) * relative; + }, + + contextInfo: function (id) { + var x = this.anyAttribute(this.context, 'info', id, null); + + if (x !== null) { + return '
' + x + '
'; + } else { + return ''; + } + }, + + contextValueRange: function (id) { + if (typeof this.context[id] !== 'undefined' && typeof this.context[id].valueRange !== 'undefined') { + return this.context[id].valueRange; + } else { + return '[null, null]'; + } + }, + + contextHeight: function (id, def) { + if (typeof this.context[id] !== 'undefined' && typeof this.context[id].height !== 'undefined') { + return def * this.context[id].height; + } else { + return def; + } + }, + + contextDecimalDigits: function (id, def) { + if (typeof this.context[id] !== 'undefined' && typeof this.context[id].decimalDigits !== 'undefined') { + return this.context[id].decimalDigits; + } else { + return def; + } + } +}; + +// ---------------------------------------------------------------------------- + +// enrich the data structure returned by netdata +// to reflect our menu system and content +// TODO: this is a shame - we should fix charts naming (issue #807) +function enrichChartData(chart) { + var parts = chart.type.split('_'); + var tmp = parts[0]; + + switch (tmp) { + case 'ap': + case 'net': + case 'disk': + case 'powersupply': + case 'statsd': + chart.menu = tmp; + break; + + case 'apache': + chart.menu = chart.type; + if (parts.length > 2 && parts[1] === 'cache') { + chart.menu_pattern = tmp + '_' + parts[1]; + } else if (parts.length > 1) { + chart.menu_pattern = tmp; + } + break; + + case 'bind': + chart.menu = chart.type; + if (parts.length > 2 && parts[1] === 'rndc') { + chart.menu_pattern = tmp + '_' + parts[1]; + } else if (parts.length > 1) { + chart.menu_pattern = tmp; + } + break; + + case 'cgroup': + chart.menu = chart.type; + if (chart.id.match(/.*[\._\/-:]qemu[\._\/-:]*/) || chart.id.match(/.*[\._\/-:]kvm[\._\/-:]*/)) { + chart.menu_pattern = 'cgqemu'; + } else { + chart.menu_pattern = 'cgroup'; + } + break; + + case 'go': + chart.menu = chart.type; + if (parts.length > 2 && parts[1] === 'expvar') { + chart.menu_pattern = tmp + '_' + parts[1]; + } else if (parts.length > 1) { + chart.menu_pattern = tmp; + } + break; + + case 'mount': + if (parts.length > 2) { + chart.menu = tmp + '_' + parts[1]; + } else { + chart.menu = tmp; + } + break; + + case 'isc': + chart.menu = chart.type; + if (parts.length > 2 && parts[1] === 'dhcpd') { + chart.menu_pattern = tmp + '_' + parts[1]; + } else if (parts.length > 1) { + chart.menu_pattern = tmp; + } + break; + + case 'ovpn': + chart.menu = chart.type; + if (parts.length > 3 && parts[1] === 'status' && parts[2] === 'log') { + chart.menu_pattern = tmp + '_' + parts[1]; + } else if (parts.length > 1) { + chart.menu_pattern = tmp; + } + break; + + case 'smartd': + case 'web': + chart.menu = chart.type; + if (parts.length > 2 && parts[1] === 'log') { + chart.menu_pattern = tmp + '_' + parts[1]; + } else if (parts.length > 1) { + chart.menu_pattern = tmp; + } + break; + + case 'tc': + chart.menu = tmp; + + // find a name for this device from fireqos info + // we strip '_(in|out)' or '(in|out)_' + if (chart.context === 'tc.qos' && (typeof options.submenu_names[chart.family] === 'undefined' || options.submenu_names[chart.family] === chart.family)) { + var n = chart.name.split('.')[1]; + if (n.endsWith('_in')) { + options.submenu_names[chart.family] = n.slice(0, n.lastIndexOf('_in')); + } else if (n.endsWith('_out')) { + options.submenu_names[chart.family] = n.slice(0, n.lastIndexOf('_out')); + } else if (n.startsWith('in_')) { + options.submenu_names[chart.family] = n.slice(3, n.length); + } else if (n.startsWith('out_')) { + options.submenu_names[chart.family] = n.slice(4, n.length); + } else { + options.submenu_names[chart.family] = n; + } + } + + // increase the priority of IFB devices + // to have inbound appear before outbound + if (chart.id.match(/.*-ifb$/)) { + chart.priority--; + } + + break; + + default: + chart.menu = chart.type; + if (parts.length > 1) { + chart.menu_pattern = tmp; + } + break; + } + + chart.submenu = chart.family; +} + +// ---------------------------------------------------------------------------- + +function headMain(os, charts, duration) { + void (os); + + if (urlOptions.mode === 'print') { + return ''; + } + + var head = ''; + + if (typeof charts['system.swap'] !== 'undefined') { + head += '
'; + } + + if (typeof charts['system.io'] !== 'undefined') { + head += '
'; + + head += '
'; + } + else if (typeof charts['system.pgpgio'] !== 'undefined') { + head += '
'; + + head += '
'; + } + + if (typeof charts['system.cpu'] !== 'undefined') { + head += '
'; + } + + if (typeof charts['system.net'] !== 'undefined') { + head += '
'; + + head += '
'; + } + else if (typeof charts['system.ip'] !== 'undefined') { + head += '
'; + + head += '
'; + } + else if (typeof charts['system.ipv4'] !== 'undefined') { + head += '
'; + + head += '
'; + } + else if (typeof charts['system.ipv6'] !== 'undefined') { + head += '
'; + + head += '
'; + } + + if (typeof charts['system.ram'] !== 'undefined') { + head += '
'; + } + + return head; +} + +function generateHeadCharts(type, chart, duration) { + if (urlOptions.mode === 'print') { + return ''; + } + + var head = ''; + var hcharts = netdataDashboard.anyAttribute(netdataDashboard.context, type, chart.context, []); + if (hcharts.length > 0) { + var hi = 0, hlen = hcharts.length; + while (hi < hlen) { + if (typeof hcharts[hi] === 'function') { + head += hcharts[hi](netdataDashboard.os, chart.id).replace(/CHART_DURATION/g, duration.toString()).replace(/CHART_UNIQUE_ID/g, chart.id); + } else { + head += hcharts[hi].replace(/CHART_DURATION/g, duration.toString()).replace(/CHART_UNIQUE_ID/g, chart.id); + } + hi++; + } + } + return head; +} + +function renderPage(menus, data) { + var div = document.getElementById('charts_div'); + var pcent_width = Math.floor(100 / chartsPerRow($(div).width())); + + // find the proper duration for per-second updates + var duration = Math.round(($(div).width() * pcent_width / 100 * data.update_every / 3) / 60) * 60; + options.duration = duration; + options.update_every = data.update_every; + + var html = ''; + var sidebar = ''; + div.innerHTML = html; + document.getElementById('sidebar').innerHTML = sidebar; + + if (urlOptions.highlight === true) { + NETDATA.globalChartUnderlay.init(null + , urlOptions.highlight_after + , urlOptions.highlight_before + , (urlOptions.after > 0) ? urlOptions.after : null + , (urlOptions.before > 0) ? urlOptions.before : null + ); + } else { + NETDATA.globalChartUnderlay.clear(); + } + + if (urlOptions.mode === 'print') { + printPage(); + } else { + finalizePage(); + } +} + +function renderChartsAndMenu(data) { + options.menus = {}; + options.submenu_names = {}; + + var menus = options.menus; + var charts = data.charts; + var m, menu_key; + + for (var c in charts) { + if (!charts.hasOwnProperty(c)) { + continue; + } + + var chart = charts[c]; + enrichChartData(chart); + m = chart.menu; + + // create the menu + if (typeof menus[m] === 'undefined') { + menus[m] = { + menu_pattern: chart.menu_pattern, + priority: chart.priority, + submenus: {}, + title: netdataDashboard.menuTitle(chart), + icon: netdataDashboard.menuIcon(chart), + info: netdataDashboard.menuInfo(chart), + height: netdataDashboard.menuHeight(chart) * options.chartsHeight + }; + } else { + if (typeof (menus[m].menu_pattern) === 'undefined') { + menus[m].menu_pattern = chart.menu_pattern; + } + + if (chart.priority < menus[m].priority) { + menus[m].priority = chart.priority; + } + } + + menu_key = (typeof (menus[m].menu_pattern) !== 'undefined') ? menus[m].menu_pattern : m; + + // create the submenu + if (typeof menus[m].submenus[chart.submenu] === 'undefined') { + menus[m].submenus[chart.submenu] = { + priority: chart.priority, + charts: [], + title: null, + info: netdataDashboard.submenuInfo(menu_key, chart.submenu), + height: netdataDashboard.submenuHeight(menu_key, chart.submenu, menus[m].height) + }; + } else { + if (chart.priority < menus[m].submenus[chart.submenu].priority) { + menus[m].submenus[chart.submenu].priority = chart.priority; + } + } + + // index the chart in the menu/submenu + menus[m].submenus[chart.submenu].charts.push(chart); + } + + // propagate the descriptive subname given to QoS + // to all the other submenus with the same name + for (var m in menus) { + if (!menus.hasOwnProperty(m)) { + continue; + } + + for (var s in menus[m].submenus) { + if (!menus[m].submenus.hasOwnProperty(s)) { + continue; + } + + // set the family using a name + if (typeof options.submenu_names[s] !== 'undefined') { + menus[m].submenus[s].title = s + ' (' + options.submenu_names[s] + ')'; + } else { + menu_key = (typeof (menus[m].menu_pattern) !== 'undefined') ? menus[m].menu_pattern : m; + menus[m].submenus[s].title = netdataDashboard.submenuTitle(menu_key, s); + } + } + } + + renderPage(menus, data); +} + +// ---------------------------------------------------------------------------- + +function loadJs(url, callback) { + $.ajax({ + url: url.startsWith("http") ? url : transformWithOldSuffix(url), + cache: true, + dataType: "script", + xhrFields: { withCredentials: true } // required for the cookie + }) + .fail(function () { + alert('Cannot load required JS library: ' + url); + }) + .always(function () { + if (typeof callback === 'function') { + callback(); + } + }) +} + +var clipboardLoaded = false; + +function loadClipboard(callback) { + if (clipboardLoaded === false) { + clipboardLoaded = true; + loadJs('lib/clipboard-polyfill-be05dad.js', callback); + } else { + callback(); + } +} + +var bootstrapTableLoaded = false; + +function loadBootstrapTable(callback) { + if (bootstrapTableLoaded === false) { + bootstrapTableLoaded = true; + loadJs('lib/bootstrap-table-1.11.0.min.js', function () { + loadJs('lib/bootstrap-table-export-1.11.0.min.js', function () { + loadJs('lib/tableExport-1.6.0.min.js', callback); + }) + }); + } else { + callback(); + } +} + +var bootstrapSliderLoaded = false; + +function loadBootstrapSlider(callback) { + if (bootstrapSliderLoaded === false) { + bootstrapSliderLoaded = true; + loadJs('lib/bootstrap-slider-10.0.0.min.js', function () { + NETDATA._loadCSS(transformWithOldSuffix("css/bootstrap-slider-10.0.0.min.css")); + callback(); + }); + } else { + callback(); + } +} + +var lzStringLoaded = false; + +function loadLzString(callback) { + if (lzStringLoaded === false) { + lzStringLoaded = true; + loadJs('lib/lz-string-1.4.4.min.js', callback); + } else { + callback(); + } +} + +var pakoLoaded = false; + +function loadPako(callback) { + if (pakoLoaded === false) { + pakoLoaded = true; + loadJs('lib/pako-1.0.6.min.js', callback); + } else { + callback(); + } +} + +// ---------------------------------------------------------------------------- + +function clipboardCopy(text) { + clipboard.writeText(text); +} + +function clipboardCopyBadgeEmbed(url) { + clipboard.writeText(''); +} + +// ---------------------------------------------------------------------------- + +function alarmsUpdateModal() { + var active = '

触发警报

'; + var all = '

所有作用中的警报

'; + var footer = '
netdata badges 会自动重新整理。不同颜色分表代表的警报状态: 红色  表示重大, 橘色  表示警告, 绿色  表示良好, 灰色  表示未定义 (例如无资料或无状态), 黑色  表示尚未初始化。您可以复制这里的网址并将它们嵌入到任一个网页。
netdata 能够发送这些警报通知。请参阅 这个设定档 了解更多资讯。'; + + loadClipboard(function () { + }); + + NETDATA.alarms.get('all', function (data) { + options.alarm_families = []; + + alarmsCallback(data); + + if (data === null) { + document.getElementById('alarms_active').innerHTML = + document.getElementById('alarms_all').innerHTML = + document.getElementById('alarms_log').innerHTML = + 'failed to load alarm data!'; + return; + } + + function alarmid4human(id) { + if (id === 0) { + return '-'; + } + + return id.toString(); + } + + function timestamp4human(timestamp, space) { + if (timestamp === 0) { + return '-'; + } + + if (typeof space === 'undefined') { + space = ' '; + } + + var t = new Date(timestamp * 1000); + var now = new Date(); + + if (t.toDateString() === now.toDateString()) { + return t.toLocaleTimeString(); + } + + return t.toLocaleDateString() + space + t.toLocaleTimeString(); + } + + function alarm_lookup_explain(alarm, chart) { + var dimensions = ' of all values '; + + if (chart.dimensions.length > 1) { + dimensions = ' of the sum of all dimensions '; + } + + if (typeof alarm.lookup_dimensions !== 'undefined') { + var d = alarm.lookup_dimensions.replace(/|/g, ','); + var x = d.split(','); + if (x.length > 1) { + dimensions = 'of the sum of dimensions ' + alarm.lookup_dimensions + ' '; + } else { + dimensions = 'of all values of dimension ' + alarm.lookup_dimensions + ' '; + } + } + + return '' + alarm.lookup_method + ' ' + + dimensions + ', of chart ' + alarm.chart + '' + + ', starting ' + NETDATA.seconds4human(alarm.lookup_after + alarm.lookup_before, { space: ' ' }) + ' and up to ' + NETDATA.seconds4human(alarm.lookup_before, { space: ' ' }) + '' + + ((alarm.lookup_options) ? (', with options ' + alarm.lookup_options.replace(/ /g, ', ') + '') : '') + + '.'; + } + + function alarm_to_html(alarm, full) { + var chart = options.data.charts[alarm.chart]; + if (typeof (chart) === 'undefined') { + chart = options.data.charts_by_name[alarm.chart]; + if (typeof (chart) === 'undefined') { + // this means the charts loaded are incomplete + // probably netdata was restarted and more alarms + // are now available. + console.log('Cannot find chart ' + alarm.chart + ', you probably need to refresh the page.'); + return ''; + } + } + + var has_alarm = (typeof alarm.warn !== 'undefined' || typeof alarm.crit !== 'undefined'); + var badge_url = NETDATA.alarms.server + '/api/v1/badge.svg?chart=' + alarm.chart + '&alarm=' + alarm.name + '&refresh=auto'; + + var action_buttons = '
 
role: ' + alarm.recipient + '
 
' + + '
' + + '
' + + '
'; + + var html = '
' + + ''; + + return html; + } + + function alarm_family_show(id) { + var html = '
' + alarm.chart + '
 

 
' + alarm.info + '' + action_buttons + '
' + + ((typeof alarm.warn !== 'undefined') ? ('') : '') + + ((typeof alarm.crit !== 'undefined') ? ('') : ''); + + if (full === true) { + var units = chart.units; + if (units === '%') { + units = '%'; + } + + html += ((typeof alarm.lookup_after !== 'undefined') ? ('') : '') + + ((typeof alarm.calc !== 'undefined') ? ('') : '') + + ((chart.green !== null) ? ('') : '') + + ((chart.red !== null) ? ('') : ''); + } + + if (alarm.warn_repeat_every > 0) { + html += ''; + } + + if (alarm.crit_repeat_every > 0) { + html += ''; + } + + var delay = ''; + if ((alarm.delay_up_duration > 0 || alarm.delay_down_duration > 0) && alarm.delay_multiplier !== 0 && alarm.delay_max_duration > 0) { + if (alarm.delay_up_duration === alarm.delay_down_duration) { + delay += '
hysteresis ' + NETDATA.seconds4human(alarm.delay_up_duration, { + space: ' ', + negative_suffix: '' + }); + } else { + delay = '
hysteresis '; + if (alarm.delay_up_duration > 0) { + delay += 'on escalation ' + NETDATA.seconds4human(alarm.delay_up_duration, { + space: ' ', + negative_suffix: '' + }) + ', '; + } + if (alarm.delay_down_duration > 0) { + delay += 'on recovery ' + NETDATA.seconds4human(alarm.delay_down_duration, { + space: ' ', + negative_suffix: '' + }) + ', '; + } + } + if (alarm.delay_multiplier !== 1.0) { + delay += 'multiplied by ' + alarm.delay_multiplier.toString() + ''; + delay += ', up to ' + NETDATA.seconds4human(alarm.delay_max_duration, { + space: ' ', + negative_suffix: '' + }) + ''; + } + delay += '
'; + } + + html += '
' + + ((has_alarm === true) ? ('') : '') + + '' + + '
warning when' + alarm.warn + '
critical when' + alarm.crit + '
db lookup' + alarm_lookup_explain(alarm, chart) + '
calculation' + alarm.calc + '
green threshold' + chart.green + ' ' + units + '
red threshold' + chart.red + ' ' + units + '
repeat warning' + NETDATA.seconds4human(alarm.warn_repeat_every) + '
repeat critical' + NETDATA.seconds4human(alarm.crit_repeat_every) + '
check every' + NETDATA.seconds4human(alarm.update_every, { + space: ' ', + negative_suffix: '' + }) + '
execute' + alarm.exec + '' + delay + '
source' + alarm.source + '
'; + var family = options.alarm_families[id]; + var len = family.arr.length; + while (len--) { + var alarm = family.arr[len]; + html += alarm_to_html(alarm, true); + } + html += '
'; + + $('#alarm_all_' + id.toString()).html(html); + enableTooltipsAndPopovers(); + } + + // find the proper family of each alarm + var x, family, alarm; + var count_active = 0; + var count_all = 0; + var families = {}; + var families_sort = []; + for (x in data.alarms) { + if (!data.alarms.hasOwnProperty(x)) { + continue; + } + + alarm = data.alarms[x]; + family = alarm.family; + + // find the chart + var chart = options.data.charts[alarm.chart]; + if (typeof chart === 'undefined') { + chart = options.data.charts_by_name[alarm.chart]; + } + + // not found - this should never happen! + if (typeof chart === 'undefined') { + console.log('WARNING: alarm ' + x + ' is linked to chart ' + alarm.chart + ', which is not found in the list of chart got from the server.'); + chart = { priority: 9999999 }; + } + else if (typeof chart.menu !== 'undefined' && typeof chart.submenu !== 'undefined') + // the family based on the chart + { + family = chart.menu + ' - ' + chart.submenu; + } + + if (typeof families[family] === 'undefined') { + families[family] = { + name: family, + arr: [], + priority: chart.priority + }; + + families_sort.push(families[family]); + } + + if (chart.priority < families[family].priority) { + families[family].priority = chart.priority; + } + + families[family].arr.unshift(alarm); + } + + // sort the families, like the dashboard menu does + var families_sorted = families_sort.sort(function (a, b) { + if (a.priority < b.priority) { + return -1; + } + if (a.priority > b.priority) { + return 1; + } + return naturalSortCompare(a.name, b.name); + }); + + var i = 0; + var fc = 0; + var len = families_sorted.length; + while (len--) { + family = families_sorted[i++].name; + var active_family_added = false; + var expanded = 'true'; + var collapsed = ''; + var cin = 'in'; + + if (fc !== 0) { + all += ""; + expanded = 'false'; + collapsed = 'class="collapsed"'; + cin = ''; + } + + all += '
'; + + options.alarm_families[fc] = families[family]; + + fc++; + + var arr = families[family].arr; + var c = arr.length; + while (c--) { + alarm = arr[c]; + if (alarm.status === 'WARNING' || alarm.status === 'CRITICAL') { + if (!active_family_added) { + active_family_added = true; + active += '

' + family + '

'; + } + count_active++; + active += alarm_to_html(alarm, true); + } + + count_all++; + } + } + active += ""; + if (families_sorted.length > 0) { + all += "
"; + } + all += ""; + + if (!count_active) { + active += '

Everything is normal. No raised alarms.
'; + } else { + active += footer; + } + + if (!count_all) { + all += "

此系统中没有运行警报。

"; + } else { + all += footer; + } + + document.getElementById('alarms_active').innerHTML = active; + document.getElementById('alarms_all').innerHTML = all; + enableTooltipsAndPopovers(); + + if (families_sorted.length > 0) { + alarm_family_show(0); + } + + // register bootstrap events + var $accordion = $('#alarms_all_accordion'); + $accordion.on('show.bs.collapse', function (d) { + var target = $(d.target); + var id = $(target).data('alarm-id'); + alarm_family_show(id); + }); + $accordion.on('hidden.bs.collapse', function (d) { + var target = $(d.target); + var id = $(target).data('alarm-id'); + $('#alarm_all_' + id.toString()).html(''); + }); + + document.getElementById('alarms_log').innerHTML = '

警报记录

'; + + loadBootstrapTable(function () { + $('#alarms_log_table').bootstrapTable({ + url: NETDATA.alarms.server + '/api/v1/alarm_log?all', + cache: false, + pagination: true, + pageSize: 10, + showPaginationSwitch: false, + search: true, + searchTimeOut: 300, + searchAlign: 'left', + showColumns: true, + showExport: true, + exportDataType: 'basic', + exportOptions: { + fileName: 'netdata_alarm_log' + }, + onClickRow: function (row, $element,field) { + void (field); + void ($element); + let main_url; + let common_url = "&host=" + encodeURIComponent(row['hostname']) + "&chart=" + encodeURIComponent(row['chart']) + "&family=" + encodeURIComponent(row['family']) + "&alarm=" + encodeURIComponent(row['name']) + "&alarm_unique_id=" + row['unique_id'] + "&alarm_id=" + row['alarm_id'] + "&alarm_event_id=" + row['alarm_event_id'] + "&alarm_when=" + row['when']; + if (NETDATA.registry.isUsingGlobalRegistry() && NETDATA.registry.machine_guid != null) { + main_url = "https://netdata.cloud/alarms/redirect?agentID=" + NETDATA.registry.machine_guid + common_url; + } else { + main_url = NETDATA.registry.server + "/goto-host-from-alarm.html?" + common_url ; + } + window.open(main_url,"_blank"); + }, + rowStyle: function (row, index) { + void (index); + + switch (row.status) { + case 'CRITICAL': + return { classes: 'danger' }; + break; + case 'WARNING': + return { classes: 'warning' }; + break; + case 'UNDEFINED': + return { classes: 'info' }; + break; + case 'CLEAR': + return { classes: 'success' }; + break; + } + return {}; + }, + showFooter: false, + showHeader: true, + showRefresh: true, + showToggle: false, + sortable: true, + silentSort: false, + columns: [ + { + field: 'when', + title: '事件日期', + valign: 'middle', + titleTooltip: 'The date and time the even took place', + formatter: function (value, row, index) { + void (row); + void (index); + return timestamp4human(value, ' '); + }, + align: 'center', + switchable: false, + sortable: true + }, + { + field: 'hostname', + title: '主机', + valign: 'middle', + titleTooltip: 'The host that generated this event', + align: 'center', + visible: false, + sortable: true + }, + { + field: 'unique_id', + title: '唯一 ID', + titleTooltip: 'The host unique ID for this event', + formatter: function (value, row, index) { + void (row); + void (index); + return alarmid4human(value); + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'alarm_id', + title: '警报 ID', + titleTooltip: 'The ID of the alarm that generated this event', + formatter: function (value, row, index) { + void (row); + void (index); + return alarmid4human(value); + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'alarm_event_id', + title: '警报事件 ID', + titleTooltip: 'The incremental ID of this event for the given alarm', + formatter: function (value, row, index) { + void (row); + void (index); + return alarmid4human(value); + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'chart', + title: '图表', + titleTooltip: 'The chart the alarm is attached to', + align: 'center', + valign: 'middle', + switchable: false, + sortable: true + }, + { + field: 'family', + title: 'Family', + titleTooltip: 'The family of the chart the alarm is attached to', + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'name', + title: '警报', + titleTooltip: 'The alarm name that generated this event', + formatter: function (value, row, index) { + void (row); + void (index); + return value.toString().replace(/_/g, ' '); + }, + align: 'center', + valign: 'middle', + switchable: false, + sortable: true + }, + { + field: 'value_string', + title: 'Friendly Value', + titleTooltip: 'The value of the alarm, that triggered this event', + align: 'right', + valign: 'middle', + sortable: true + }, + { + field: 'old_value_string', + title: 'Friendly Old Value', + titleTooltip: 'The value of the alarm, just before this event', + align: 'right', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'old_value', + title: 'Old Value', + titleTooltip: 'The value of the alarm, just before this event', + formatter: function (value, row, index) { + void (row); + void (index); + return ((value !== null) ? Math.round(value * 100) / 100 : 'NaN').toString(); + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'value', + title: 'Value', + titleTooltip: 'The value of the alarm, that triggered this event', + formatter: function (value, row, index) { + void (row); + void (index); + return ((value !== null) ? Math.round(value * 100) / 100 : 'NaN').toString(); + }, + align: 'right', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'units', + title: '单位', + titleTooltip: 'The units of the value of the alarm', + align: 'left', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'old_status', + title: '先前状态', + titleTooltip: 'The status of the alarm, just before this event', + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'status', + title: '状态', + titleTooltip: 'The status of the alarm, that was set due to this event', + align: 'center', + valign: 'middle', + switchable: false, + sortable: true + }, + { + field: 'duration', + title: '上次持续时间', + titleTooltip: 'The duration the alarm was at its previous state, just before this event', + formatter: function (value, row, index) { + void (row); + void (index); + return NETDATA.seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' }); + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'non_clear_duration', + title: '提升的持续时间', + titleTooltip: 'The duration the alarm was raised, just before this event', + formatter: function (value, row, index) { + void (row); + void (index); + return NETDATA.seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' }); + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'recipient', + title: '收件人', + titleTooltip: 'The recipient of this event', + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'processed', + title: '已处理状态', + titleTooltip: 'True when this event is processed', + formatter: function (value, row, index) { + void (row); + void (index); + + if (value === true) { + return 'DONE'; + } else { + return 'PENDING'; + } + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'updated', + title: '更新的状态', + titleTooltip: 'True when this event has been updated by another event', + formatter: function (value, row, index) { + void (row); + void (index); + + if (value === true) { + return 'UPDATED'; + } else { + return 'CURRENT'; + } + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'updated_by_id', + title: '由ID更新', + titleTooltip: 'The unique ID of the event that obsoleted this one', + formatter: function (value, row, index) { + void (row); + void (index); + return alarmid4human(value); + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'updates_id', + title: '更新ID', + titleTooltip: 'The unique ID of the event obsoleted because of this event', + formatter: function (value, row, index) { + void (row); + void (index); + return alarmid4human(value); + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'exec', + title: '脚本', + titleTooltip: 'The script to handle the event notification', + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'exec_run', + title: '脚本运行时间', + titleTooltip: 'The date and time the script has been ran', + formatter: function (value, row, index) { + void (row); + void (index); + return timestamp4human(value, ' '); + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'exec_code', + title: '脚本返回值', + titleTooltip: 'The return code of the script', + formatter: function (value, row, index) { + void (row); + void (index); + + if (value === 0) { + return 'OK (returned 0)'; + } else { + return 'FAILED (with code ' + value.toString() + ')'; + } + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'delay', + title: '脚本延迟', + titleTooltip: 'The hysteresis of the notification', + formatter: function (value, row, index) { + void (row); + void (index); + + return NETDATA.seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' }); + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'delay_up_to_timestamp', + title: '脚本延迟运行时间', + titleTooltip: 'The date and time the script should be run, after hysteresis', + formatter: function (value, row, index) { + void (row); + void (index); + return timestamp4human(value, ' '); + }, + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'info', + title: '描述', + titleTooltip: 'A short description of the alarm', + align: 'center', + valign: 'middle', + visible: false, + sortable: true + }, + { + field: 'source', + title: '报警源', + titleTooltip: 'The source of configuration of the alarm', + align: 'center', + valign: 'middle', + visible: false, + sortable: true + } + ] + }); + // console.log($('#alarms_log_table').bootstrapTable('getOptions')); + }); + }); +} + +function alarmsCallback(data) { + var count = 0, x; + for (x in data.alarms) { + if (!data.alarms.hasOwnProperty(x)) { + continue; + } + + var alarm = data.alarms[x]; + if (alarm.status === 'WARNING' || alarm.status === 'CRITICAL') { + count++; + } + } + + if (count > 0) { + document.getElementById('alarms_count_badge').innerHTML = count.toString(); + } else { + document.getElementById('alarms_count_badge').innerHTML = ''; + } +} + +function initializeDynamicDashboardWithData(data) { + if (data !== null) { + options.hostname = data.hostname; + options.data = data; + options.version = data.version; + options.release_channel = data.release_channel; + netdataDashboard.os = data.os; + + if (typeof data.hosts !== 'undefined') { + options.hosts = data.hosts; + } + + // update the dashboard hostname + document.getElementById('hostname').innerHTML = '' + options.hostname + ((netdataSnapshotData !== null) ? ' (snap)' : '').toString() + '  '; + document.getElementById('hostname').href = NETDATA.serverDefault; + document.getElementById('netdataVersion').innerHTML = options.version; + + if (netdataSnapshotData !== null) { + $('#alarmsButton').hide(); + $('#updateButton').hide(); + // $('#loadButton').hide(); + $('#saveButton').hide(); + $('#printButton').hide(); + } + + // update the dashboard title + document.title = options.hostname + ' netdata 仪表板'; + + // close the splash screen + $("#loadOverlay").css("display", "none"); + + // create a chart_by_name index + data.charts_by_name = {}; + var charts = data.charts; + var x; + for (x in charts) { + if (!charts.hasOwnProperty(x)) { + continue; + } + + var chart = charts[x]; + data.charts_by_name[chart.name] = chart; + } + + // render all charts + renderChartsAndMenu(data); + + // Ensure MyNetdata menu is rendered with latest host info #5370 + renderMyNetdataMenu(isSignedIn() ? cloudAgents : registryAgents); + } +} + +// an object to keep initialization configuration +// needed due to the async nature of the XSS modal +var initializeConfig = { + url: null, + custom_info: true, +}; + +function loadCustomDashboardInfo(url, callback) { + loadJs(url, function () { + $.extend(true, netdataDashboard, customDashboard); + callback(); + }); +} + +function initializeChartsAndCustomInfo() { + NETDATA.alarms.callback = alarmsCallback; + + // download all the charts the server knows + NETDATA.chartRegistry.downloadAll(initializeConfig.url, function (data) { + if (data !== null) { + if (initializeConfig.custom_info === true && typeof data.custom_info !== 'undefined' && data.custom_info !== "" && netdataSnapshotData === null) { + //console.log('loading custom dashboard decorations from server ' + initializeConfig.url); + loadCustomDashboardInfo(NETDATA.serverDefault + data.custom_info, function () { + initializeDynamicDashboardWithData(data); + }); + } else { + //console.log('not loading custom dashboard decorations from server ' + initializeConfig.url); + initializeDynamicDashboardWithData(data); + } + } + }); +} + +function xssModalDisableXss() { + //console.log('disabling xss checks'); + NETDATA.xss.enabled = false; + NETDATA.xss.enabled_for_data = false; + initializeConfig.custom_info = true; + initializeChartsAndCustomInfo(); + return false; +} + +function xssModalKeepXss() { + //console.log('keeping xss checks'); + NETDATA.xss.enabled = true; + NETDATA.xss.enabled_for_data = true; + initializeConfig.custom_info = false; + initializeChartsAndCustomInfo(); + return false; +} + +function initializeDynamicDashboard(netdata_url) { + if (typeof netdata_url === 'undefined' || netdata_url === null) { + netdata_url = NETDATA.serverDefault; + } + + initializeConfig.url = netdata_url; + + // initialize clickable alarms + NETDATA.alarms.chart_div_offset = -50; + NETDATA.alarms.chart_div_id_prefix = 'chart_'; + NETDATA.alarms.chart_div_animation_duration = 0; + + NETDATA.pause(function () { + if (typeof netdataCheckXSS !== 'undefined' && netdataCheckXSS === true) { + //$("#loadOverlay").css("display","none"); + document.getElementById('netdataXssModalServer').innerText = initializeConfig.url; + $('#xssModal').modal('show'); + } else { + initializeChartsAndCustomInfo(); + } + }); +} + +// ---------------------------------------------------------------------------- + +function versionLog(msg) { + document.getElementById('versionCheckLog').innerHTML = msg; +} + +// New way of checking for updates, based only on versions + +function versionsMatch(v1, v2) { + if (v1 == v2) { + return true; + } else { + let s1 = v1.split('.'); + let s2 = v2.split('.'); + // Check major version + let n1 = parseInt(s1[0].substring(1, 2), 10); + let n2 = parseInt(s2[0].substring(1, 2), 10); + if (n1 < n2) return false; + else if (n1 > n2) return true; + + // Check minor version + n1 = parseInt(s1[1], 10); + n2 = parseInt(s2[1], 10); + if (n1 < n2) return false; + else if (n1 > n2) return true; + + // Split patch: format could be e.g. 0-22-nightly + s1 = s1[2].split('-'); + s2 = s2[2].split('-'); + + n1 = parseInt(s1[0], 10); + n2 = parseInt(s2[0], 10); + if (n1 < n2) return false; + else if (n1 > n2) return true; + + n1 = (s1.length > 1) ? parseInt(s1[1], 10) : 0; + n2 = (s2.length > 1) ? parseInt(s2[1], 10) : 0; + if (n1 < n2) return false; + else return true; + } +} + +function getGithubLatestVersion(callback) { + versionLog('正在从 github 下载最新版本 ID...'); + + $.ajax({ + url: 'https://api.github.com/repos/netdata/netdata/releases/latest', + async: true, + cache: false + }) + .done(function (data) { + data = data.tag_name.replace(/(\r\n|\n|\r| |\t)/gm, ""); + versionLog('从 github 取得最新版本是 ' + data); + callback(data); + }) + .fail(function () { + versionLog('从 github 下载最新版本 ID 失败。'); + callback(null); + }); +} + +function getGCSLatestVersion(callback) { + versionLog('Downloading latest version id from GCS...'); + $.ajax({ + url: "https://www.googleapis.com/storage/v1/b/netdata-nightlies/o/latest-version.txt", + async: true, + cache: false + }) + .done(function (response) { + $.ajax({ + url: response.mediaLink, + async: true, + cache: false + }) + .done(function (data) { + data = data.replace(/(\r\n|\n|\r| |\t)/gm, ""); + versionLog('Latest nightly version from GCS is ' + data); + callback(data); + }) + .fail(function (xhr, textStatus, errorThrown) { + versionLog('Failed to download the latest nightly version id from GCS!'); + callback(null); + }); + }) + .fail(function (xhr, textStatus, errorThrown) { + versionLog('Failed to download the latest nightly version from GCS!'); + callback(null); + }); +} + + +function checkForUpdateByVersion(force, callback) { + if (options.release_channel === 'stable') { + getGithubLatestVersion(function (sha2) { + callback(options.version, sha2); + }); + } else { + getGCSLatestVersion(function (sha2) { + callback(options.version, sha2); + }); + } + return null; +} + +function notifyForUpdate(force) { + versionLog('

正在检查更新...

'); + + var now = Date.now(); + + if (typeof force === 'undefined' || force !== true) { + var last = loadLocalStorage('last_update_check'); + + if (typeof last === 'string') { + last = parseInt(last); + } else { + last = 0; + } + + if (now - last < 3600000 * 8) { + // no need to check it - too soon + return; + } + } + + checkForUpdateByVersion(force, function (sha1, sha2) { + var save = false; + + if (sha1 === null) { + save = false; + versionLog('

取得您的 netdata 版本失败!

'); + else { + save = true; + versionLog('

您已经是最新版本的 netdata!

'); + } + + if (save) { + saveLocalStorage('last_update_check', now.toString()); + } + }); +} + +// ---------------------------------------------------------------------------- +// printing dashboards + +function showPageFooter() { + document.getElementById('footer').style.display = 'block'; +} + +function printPreflight() { + var url = document.location.origin.toString() + document.location.pathname.toString() + document.location.search.toString() + urlOptions.genHash() + ';mode=print'; + var width = 990; + var height = screen.height * 90 / 100; + //console.log(url); + //console.log(document.location); + window.open(url, '', 'width=' + width.toString() + ',height=' + height.toString() + ',menubar=no,toolbar=no,personalbar=no,location=no,resizable=no,scrollbars=yes,status=no,chrome=yes,centerscreen=yes,attention=yes,dialog=yes'); + $('#printPreflightModal').modal('hide'); +} + +function printPage() { + var print_is_rendering = true; + + $('#printModal').on('hide.bs.modal', function (e) { + if (print_is_rendering === true) { + e.preventDefault(); + return false; + } + + return true; + }); + + $('#printModal').on('show.bs.modal', function () { + var print_options = { + stop_updates_when_focus_is_lost: false, + update_only_visible: false, + sync_selection: false, + eliminate_zero_dimensions: false, + pan_and_zoom_data_padding: false, + show_help: false, + legend_toolbox: false, + resize_charts: false, + pixels_per_point: 1 + }; + + var x; + for (x in print_options) { + if (print_options.hasOwnProperty(x)) { + NETDATA.options.current[x] = print_options[x]; + } + } + + NETDATA.parseDom(); + showPageFooter(); + + NETDATA.globalSelectionSync.stop(); + NETDATA.globalPanAndZoom.setMaster(NETDATA.options.targets[0], urlOptions.after, urlOptions.before); + // NETDATA.onresize(); + + var el = document.getElementById('printModalProgressBar'); + var eltxt = document.getElementById('printModalProgressBarText'); + + function update_chart(idx) { + var state = NETDATA.options.targets[--idx]; + + var pcent = (NETDATA.options.targets.length - idx) * 100 / NETDATA.options.targets.length; + $(el).css('width', pcent + '%').attr('aria-valuenow', pcent); + eltxt.innerText = Math.round(pcent).toString() + '%, ' + state.id; + + setTimeout(function () { + state.updateChart(function () { + NETDATA.options.targets[idx].resizeForPrint(); + + if (idx > 0) { + update_chart(idx); + } else { + print_is_rendering = false; + $('#printModal').modal('hide'); + window.print(); + window.close(); + } + }) + }, 0); + } + + print_is_rendering = true; + update_chart(NETDATA.options.targets.length); + }); + + $('#printModal').modal('show'); +} + +// -------------------------------------------------------------------- + +function jsonStringifyFn(obj) { + return JSON.stringify(obj, function (key, value) { + return (typeof value === 'function') ? value.toString() : value; + }); +} + +function jsonParseFn(str) { + return JSON.parse(str, function (key, value) { + if (typeof value != 'string') { + return value; + } + return (value.substring(0, 8) == 'function') ? eval('(' + value + ')') : value; + }); +} + +// -------------------------------------------------------------------- + +var snapshotOptions = { + bytes_per_chart: 2048, + compressionDefault: 'pako.deflate.base64', + + compressions: { + 'none': { + bytes_per_point_memory: 5.2, + bytes_per_point_disk: 5.6, + + compress: function (s) { + return s; + }, + + compressed_length: function (s) { + return s.length; + }, + + uncompress: function (s) { + return s; + } + }, + + 'pako.deflate.base64': { + bytes_per_point_memory: 1.8, + bytes_per_point_disk: 1.9, + + compress: function (s) { + return btoa(pako.deflate(s, { to: 'string' })); + }, + + compressed_length: function (s) { + return s.length; + }, + + uncompress: function (s) { + return pako.inflate(atob(s), { to: 'string' }); + } + }, + + 'pako.deflate': { + bytes_per_point_memory: 1.4, + bytes_per_point_disk: 3.2, + + compress: function (s) { + return pako.deflate(s, { to: 'string' }); + }, + + compressed_length: function (s) { + return s.length; + }, + + uncompress: function (s) { + return pako.inflate(s, { to: 'string' }); + } + }, + + 'lzstring.utf16': { + bytes_per_point_memory: 1.7, + bytes_per_point_disk: 2.6, + + compress: function (s) { + return LZString.compressToUTF16(s); + }, + + compressed_length: function (s) { + return s.length * 2; + }, + + uncompress: function (s) { + return LZString.decompressFromUTF16(s); + } + }, + + 'lzstring.base64': { + bytes_per_point_memory: 2.1, + bytes_per_point_disk: 2.3, + + compress: function (s) { + return LZString.compressToBase64(s); + }, + + compressed_length: function (s) { + return s.length; + }, + + uncompress: function (s) { + return LZString.decompressFromBase64(s); + } + }, + + 'lzstring.uri': { + bytes_per_point_memory: 2.1, + bytes_per_point_disk: 2.3, + + compress: function (s) { + return LZString.compressToEncodedURIComponent(s); + }, + + compressed_length: function (s) { + return s.length; + }, + + uncompress: function (s) { + return LZString.decompressFromEncodedURIComponent(s); + } + } + } +}; + +// -------------------------------------------------------------------- +// loading snapshots + +function loadSnapshotModalLog(priority, msg) { + document.getElementById('loadSnapshotStatus').className = "alert alert-" + priority; + document.getElementById('loadSnapshotStatus').innerHTML = msg; +} + +var tmpSnapshotData = null; + +function loadSnapshot() { + $('#loadSnapshotImport').addClass('disabled'); + + if (tmpSnapshotData === null) { + loadSnapshotPreflightEmpty(); + loadSnapshotModalLog('danger', 'no data have been loaded'); + return; + } + + loadPako(function () { + loadLzString(function () { + loadSnapshotModalLog('info', 'Please wait, activating snapshot...'); + $('#loadSnapshotModal').modal('hide'); + + netdataShowAlarms = false; + netdataRegistry = false; + netdataServer = tmpSnapshotData.server; + NETDATA.serverDefault = netdataServer; + + document.getElementById('charts_div').innerHTML = ''; + document.getElementById('sidebar').innerHTML = ''; + NETDATA.globalReset(); + + if (typeof tmpSnapshotData.hash !== 'undefined') { + urlOptions.hash = tmpSnapshotData.hash; + } else { + urlOptions.hash = '#'; + } + + if (typeof tmpSnapshotData.info !== 'undefined') { + var info = jsonParseFn(tmpSnapshotData.info); + if (typeof info.menu !== 'undefined') { + netdataDashboard.menu = info.menu; + } + + if (typeof info.submenu !== 'undefined') { + netdataDashboard.submenu = info.submenu; + } + + if (typeof info.context !== 'undefined') { + netdataDashboard.context = info.context; + } + } + + if (typeof tmpSnapshotData.compression !== 'string') { + tmpSnapshotData.compression = 'none'; + } + + if (typeof snapshotOptions.compressions[tmpSnapshotData.compression] === 'undefined') { + alert('unknown compression method: ' + tmpSnapshotData.compression); + tmpSnapshotData.compression = 'none'; + } + + tmpSnapshotData.uncompress = snapshotOptions.compressions[tmpSnapshotData.compression].uncompress; + netdataSnapshotData = tmpSnapshotData; + + urlOptions.after = tmpSnapshotData.after_ms; + urlOptions.before = tmpSnapshotData.before_ms; + + if (typeof tmpSnapshotData.highlight_after_ms !== 'undefined' + && tmpSnapshotData.highlight_after_ms !== null + && tmpSnapshotData.highlight_after_ms > 0 + && typeof tmpSnapshotData.highlight_before_ms !== 'undefined' + && tmpSnapshotData.highlight_before_ms !== null + && tmpSnapshotData.highlight_before_ms > 0 + ) { + urlOptions.highlight_after = tmpSnapshotData.highlight_after_ms; + urlOptions.highlight_before = tmpSnapshotData.highlight_before_ms; + urlOptions.highlight = true; + } else { + urlOptions.highlight_after = 0; + urlOptions.highlight_before = 0; + urlOptions.highlight = false; + } + + netdataCheckXSS = false; // disable the modal - this does not affect XSS checks, since dashboard.js is already loaded + NETDATA.xss.enabled = true; // we should not do any remote requests, but if we do, check them + NETDATA.xss.enabled_for_data = true; // check also snapshot data - that have been excluded from the initial check, due to compression + loadSnapshotPreflightEmpty(); + initializeDynamicDashboard(); + }); + }); +}; + +function loadSnapshotPreflightFile(file) { + var filename = NETDATA.xss.string(file.name); + var fr = new FileReader(); + fr.onload = function (e) { + document.getElementById('loadSnapshotFilename').innerHTML = filename; + var result = null; + try { + result = NETDATA.xss.checkAlways('snapshot', JSON.parse(e.target.result), /^(snapshot\.info|snapshot\.data)$/); + + //console.log(result); + var date_after = new Date(result.after_ms); + var date_before = new Date(result.before_ms); + + if (typeof result.charts_ok === 'undefined') { + result.charts_ok = 'unknown'; + } + + if (typeof result.charts_failed === 'undefined') { + result.charts_failed = 0; + } + + if (typeof result.compression === 'undefined') { + result.compression = 'none'; + } + + if (typeof result.data_size === 'undefined') { + result.data_size = 0; + } + + document.getElementById('loadSnapshotFilename').innerHTML = '' + filename + ''; + document.getElementById('loadSnapshotHostname').innerHTML = '' + result.hostname + ', netdata version: ' + result.netdata_version.toString() + ''; + document.getElementById('loadSnapshotURL').innerHTML = result.url; + document.getElementById('loadSnapshotCharts').innerHTML = result.charts.charts_count.toString() + ' charts, ' + result.charts.dimensions_count.toString() + ' dimensions, ' + result.data_points.toString() + ' points per dimension, ' + Math.round(result.duration_ms / result.data_points).toString() + ' ms per point'; + document.getElementById('loadSnapshotInfo').innerHTML = 'version: ' + result.snapshot_version.toString() + ', includes ' + result.charts_ok.toString() + ' unique chart data queries ' + ((result.charts_failed > 0) ? ('' + result.charts_failed.toString() + ' failed') : '').toString() + ', compressed with ' + result.compression.toString() + ', data size ' + (Math.round(result.data_size * 100 / 1024 / 1024) / 100).toString() + ' MB'; + document.getElementById('loadSnapshotTimeRange').innerHTML = '' + NETDATA.dateTime.localeDateString(date_after) + ' ' + NETDATA.dateTime.localeTimeString(date_after) + ' to ' + NETDATA.dateTime.localeDateString(date_before) + ' ' + NETDATA.dateTime.localeTimeString(date_before) + ''; + document.getElementById('loadSnapshotComments').innerHTML = ((result.comments) ? result.comments : '').toString(); + loadSnapshotModalLog('success', 'File loaded, click Import to render it!'); + $('#loadSnapshotImport').removeClass('disabled'); + + tmpSnapshotData = result; + } + catch (e) { + console.log(e); + document.getElementById('loadSnapshotStatus').className = "alert alert-danger"; + document.getElementById('loadSnapshotStatus').innerHTML = "Failed to parse this file!"; + $('#loadSnapshotImport').addClass('disabled'); + } + } + + //console.log(file); + fr.readAsText(file); +}; + +function loadSnapshotPreflightEmpty() { + document.getElementById('loadSnapshotFilename').innerHTML = ''; + document.getElementById('loadSnapshotHostname').innerHTML = ''; + document.getElementById('loadSnapshotURL').innerHTML = ''; + document.getElementById('loadSnapshotCharts').innerHTML = ''; + document.getElementById('loadSnapshotInfo').innerHTML = ''; + document.getElementById('loadSnapshotTimeRange').innerHTML = ''; + document.getElementById('loadSnapshotComments').innerHTML = ''; + loadSnapshotModalLog('success', 'Browse for a snapshot file (or drag it and drop it here), then click Import to render it.'); + $('#loadSnapshotImport').addClass('disabled'); +}; + +var loadSnapshotDragAndDropInitialized = false; + +function loadSnapshotDragAndDropSetup() { + if (loadSnapshotDragAndDropInitialized === false) { + loadSnapshotDragAndDropInitialized = true; + $('#loadSnapshotDragAndDrop') + .on('drag dragstart dragend dragover dragenter dragleave drop', function (e) { + e.preventDefault(); + e.stopPropagation(); + }) + .on('drop', function (e) { + if (e.originalEvent.dataTransfer.files.length) { + loadSnapshotPreflightFile(e.originalEvent.dataTransfer.files.item(0)); + } else { + loadSnapshotPreflightEmpty(); + loadSnapshotModalLog('danger', 'No file selected'); + } + }); + } +}; + +function loadSnapshotPreflight() { + var files = document.getElementById('loadSnapshotSelectFiles').files; + if (files.length <= 0) { + loadSnapshotPreflightEmpty(); + loadSnapshotModalLog('danger', 'No file selected'); + return; + } + + loadSnapshotModalLog('info', 'Loading file...'); + + loadSnapshotPreflightFile(files.item(0)); +} + +// -------------------------------------------------------------------- +// saving snapshots + +var saveSnapshotStop = false; + +function saveSnapshotCancel() { + saveSnapshotStop = true; +} + +var saveSnapshotModalInitialized = false; + +function saveSnapshotModalSetup() { + if (saveSnapshotModalInitialized === false) { + saveSnapshotModalInitialized = true; + $('#saveSnapshotModal') + .on('hide.bs.modal', saveSnapshotCancel) + .on('show.bs.modal', saveSnapshotModalInit) + .on('shown.bs.modal', function () { + $('#saveSnapshotResolutionSlider').find(".slider-handle:first").attr("tabindex", 1); + document.getElementById('saveSnapshotComments').focus(); + }); + } +}; + +function saveSnapshotModalLog(priority, msg) { + document.getElementById('saveSnapshotStatus').className = "alert alert-" + priority; + document.getElementById('saveSnapshotStatus').innerHTML = msg; +} + +function saveSnapshotModalShowExpectedSize() { + var points = Math.round(saveSnapshotViewDuration / saveSnapshotSelectedSecondsPerPoint); + var priority = 'info'; + var msg = 'A moderate snapshot.'; + + var sizemb = Math.round( + (options.data.charts_count * snapshotOptions.bytes_per_chart + + options.data.dimensions_count * points * snapshotOptions.compressions[saveSnapshotCompression].bytes_per_point_disk) + * 10 / 1024 / 1024) / 10; + + var memmb = Math.round( + (options.data.charts_count * snapshotOptions.bytes_per_chart + + options.data.dimensions_count * points * snapshotOptions.compressions[saveSnapshotCompression].bytes_per_point_memory) + * 10 / 1024 / 1024) / 10; + + if (sizemb < 10) { + priority = 'success'; + msg = 'A nice small snapshot!'; + } + if (sizemb > 50) { + priority = 'warning'; + msg = 'Will stress your browser...'; + } + if (sizemb > 100) { + priority = 'danger'; + msg = 'Hm... good luck...'; + } + + saveSnapshotModalLog(priority, 'The snapshot will have ' + points.toString() + ' points per dimension. Expected size on disk ' + sizemb + ' MB, at browser memory ' + memmb + ' MB.
' + msg); +} + +var saveSnapshotCompression = snapshotOptions.compressionDefault; + +function saveSnapshotSetCompression(name) { + saveSnapshotCompression = name; + document.getElementById('saveSnapshotCompressionName').innerHTML = saveSnapshotCompression; + saveSnapshotModalShowExpectedSize(); +} + +var saveSnapshotSlider = null; +var saveSnapshotSelectedSecondsPerPoint = 1; +var saveSnapshotViewDuration = 1; + +function saveSnapshotModalInit() { + $('#saveSnapshotModalProgressSection').hide(); + $('#saveSnapshotResolutionRadio').show(); + saveSnapshotModalLog('info', 'Select resolution and click Save'); + $('#saveSnapshotExport').removeClass('disabled'); + + loadBootstrapSlider(function () { + saveSnapshotViewDuration = options.duration; + var start_ms = Math.round(Date.now() - saveSnapshotViewDuration * 1000); + + if (NETDATA.globalPanAndZoom.isActive() === true) { + saveSnapshotViewDuration = Math.round((NETDATA.globalPanAndZoom.force_before_ms - NETDATA.globalPanAndZoom.force_after_ms) / 1000); + start_ms = NETDATA.globalPanAndZoom.force_after_ms; + } + + var start_date = new Date(start_ms); + var yyyymmddhhssmm = start_date.getFullYear() + NETDATA.zeropad(start_date.getMonth() + 1) + NETDATA.zeropad(start_date.getDate()) + '-' + NETDATA.zeropad(start_date.getHours()) + NETDATA.zeropad(start_date.getMinutes()) + NETDATA.zeropad(start_date.getSeconds()); + + document.getElementById('saveSnapshotFilename').value = 'netdata-' + options.hostname.toString() + '-' + yyyymmddhhssmm.toString() + '-' + saveSnapshotViewDuration.toString() + '.snapshot'; + saveSnapshotSetCompression(saveSnapshotCompression); + + var min = options.update_every; + var max = Math.round(saveSnapshotViewDuration / 100); + + if (NETDATA.globalPanAndZoom.isActive() === false) { + max = Math.round(saveSnapshotViewDuration / 50); + } + + var view = Math.round(saveSnapshotViewDuration / Math.round($(document.getElementById('charts_div')).width() / 2)); + + // console.log('view duration: ' + saveSnapshotViewDuration + ', min: ' + min + ', max: ' + max + ', view: ' + view); + + if (max < 10) { + max = 10; + } + if (max < min) { + max = min; + } + if (view < min) { + view = min; + } + if (view > max) { + view = max; + } + + if (saveSnapshotSlider !== null) { + saveSnapshotSlider.destroy(); + } + + saveSnapshotSlider = new Slider('#saveSnapshotResolutionSlider', { + ticks: [min, view, max], + min: min, + max: max, + step: options.update_every, + value: view, + scale: (max > 100) ? 'logarithmic' : 'linear', + tooltip: 'always', + formatter: function (value) { + if (value < 1) { + value = 1; + } + + if (value < options.data.update_every) { + value = options.data.update_every; + } + + saveSnapshotSelectedSecondsPerPoint = value; + saveSnapshotModalShowExpectedSize(); + + var seconds = ' seconds '; + if (value === 1) { + seconds = ' second '; + } + + return value + seconds + 'per point' + ((value === options.data.update_every) ? ', server default' : '').toString(); + } + }); + }); +} + +function saveSnapshot() { + loadPako(function () { + loadLzString(function () { + saveSnapshotStop = false; + $('#saveSnapshotModalProgressSection').show(); + $('#saveSnapshotResolutionRadio').hide(); + $('#saveSnapshotExport').addClass('disabled'); + + var filename = document.getElementById('saveSnapshotFilename').value; + // console.log(filename); + saveSnapshotModalLog('info', 'Generating snapshot as ' + filename.toString() + ''); + + var save_options = { + stop_updates_when_focus_is_lost: false, + update_only_visible: false, + sync_selection: false, + eliminate_zero_dimensions: true, + pan_and_zoom_data_padding: false, + show_help: false, + legend_toolbox: false, + resize_charts: false, + pixels_per_point: 1 + }; + var backedup_options = {}; + + var x; + for (x in save_options) { + if (save_options.hasOwnProperty(x)) { + backedup_options[x] = NETDATA.options.current[x]; + NETDATA.options.current[x] = save_options[x]; + } + } + + var el = document.getElementById('saveSnapshotModalProgressBar'); + var eltxt = document.getElementById('saveSnapshotModalProgressBarText'); + + options.data.charts_by_name = null; + + var saveData = { + hostname: options.hostname, + server: NETDATA.serverDefault, + netdata_version: options.data.version, + snapshot_version: 1, + after_ms: Date.now() - options.duration * 1000, + before_ms: Date.now(), + highlight_after_ms: urlOptions.highlight_after, + highlight_before_ms: urlOptions.highlight_before, + duration_ms: options.duration * 1000, + update_every_ms: options.update_every * 1000, + data_points: 0, + url: ((urlOptions.server !== null) ? urlOptions.server : document.location.origin.toString() + document.location.pathname.toString() + document.location.search.toString()).toString(), + comments: document.getElementById('saveSnapshotComments').value.toString(), + hash: urlOptions.hash, + charts: options.data, + info: jsonStringifyFn({ + menu: netdataDashboard.menu, + submenu: netdataDashboard.submenu, + context: netdataDashboard.context + }), + charts_ok: 0, + charts_failed: 0, + compression: saveSnapshotCompression, + data_size: 0, + data: {} + }; + + if (typeof snapshotOptions.compressions[saveData.compression] === 'undefined') { + alert('unknown compression method: ' + saveData.compression); + saveData.compression = 'none'; + } + + var compress = snapshotOptions.compressions[saveData.compression].compress; + var compressed_length = snapshotOptions.compressions[saveData.compression].compressed_length; + + function pack_api1_v1_chart_data(state) { + if (state.library_name === null || state.data === null) { + return; + } + + var data = state.data; + state.data = null; + data.state = null; + var str = JSON.stringify(data); + + if (typeof str === 'string') { + var cstr = compress(str); + saveData.data[state.chartDataUniqueID()] = cstr; + return compressed_length(cstr); + } else { + return 0; + } + } + + var clearPanAndZoom = false; + if (NETDATA.globalPanAndZoom.isActive() === false) { + NETDATA.globalPanAndZoom.setMaster(NETDATA.options.targets[0], saveData.after_ms, saveData.before_ms); + clearPanAndZoom = true; + } + + saveData.after_ms = NETDATA.globalPanAndZoom.force_after_ms; + saveData.before_ms = NETDATA.globalPanAndZoom.force_before_ms; + saveData.duration_ms = saveData.before_ms - saveData.after_ms; + saveData.data_points = Math.round((saveData.before_ms - saveData.after_ms) / (saveSnapshotSelectedSecondsPerPoint * 1000)); + saveSnapshotModalLog('info', 'Generating snapshot with ' + saveData.data_points.toString() + ' data points per dimension...'); + + var charts_count = 0; + var charts_ok = 0; + var charts_failed = 0; + + function saveSnapshotRestore() { + $('#saveSnapshotModal').modal('hide'); + + // restore the options + var x; + for (x in backedup_options) { + if (backedup_options.hasOwnProperty(x)) { + NETDATA.options.current[x] = backedup_options[x]; + } + } + + $(el).css('width', '0%').attr('aria-valuenow', 0); + eltxt.innerText = '0%'; + + if (clearPanAndZoom) { + NETDATA.globalPanAndZoom.clearMaster(); + } + + NETDATA.options.force_data_points = 0; + NETDATA.options.fake_chart_rendering = false; + NETDATA.onscroll_updater_enabled = true; + NETDATA.onresize(); + NETDATA.unpause(); + + $('#saveSnapshotExport').removeClass('disabled'); + } + + NETDATA.globalSelectionSync.stop(); + NETDATA.options.force_data_points = saveData.data_points; + NETDATA.options.fake_chart_rendering = true; + NETDATA.onscroll_updater_enabled = false; + NETDATA.abortAllRefreshes(); + + var size = 0; + var info = ' Resolution: ' + saveSnapshotSelectedSecondsPerPoint.toString() + ((saveSnapshotSelectedSecondsPerPoint === 1) ? ' second ' : ' seconds ').toString() + 'per point.'; + + function update_chart(idx) { + if (saveSnapshotStop === true) { + saveSnapshotModalLog('info', 'Cancelled!'); + saveSnapshotRestore(); + return; + } + + var state = NETDATA.options.targets[--idx]; + + var pcent = (NETDATA.options.targets.length - idx) * 100 / NETDATA.options.targets.length; + $(el).css('width', pcent + '%').attr('aria-valuenow', pcent); + eltxt.innerText = Math.round(pcent).toString() + '%, ' + state.id; + + setTimeout(function () { + charts_count++; + state.isVisible(true); + state.current.force_after_ms = saveData.after_ms; + state.current.force_before_ms = saveData.before_ms; + + state.updateChart(function (status, reason) { + state.current.force_after_ms = null; + state.current.force_before_ms = null; + + if (status === true) { + charts_ok++; + // state.log('ok'); + size += pack_api1_v1_chart_data(state); + } else { + charts_failed++; + state.log('failed to be updated: ' + reason); + } + + saveSnapshotModalLog((charts_failed) ? 'danger' : 'info', 'Generated snapshot data size ' + (Math.round(size * 100 / 1024 / 1024) / 100).toString() + ' MB. ' + ((charts_failed) ? (charts_failed.toString() + ' charts have failed to be downloaded') : '').toString() + info); + + if (idx > 0) { + update_chart(idx); + } else { + saveData.charts_ok = charts_ok; + saveData.charts_failed = charts_failed; + saveData.data_size = size; + // console.log(saveData.compression + ': ' + (size / (options.data.dimensions_count * Math.round(saveSnapshotViewDuration / saveSnapshotSelectedSecondsPerPoint))).toString()); + + // save it + // console.log(saveData); + saveObjectToClient(saveData, filename); + + if (charts_failed > 0) { + alert(charts_failed.toString() + ' failed to be downloaded'); + } + + saveSnapshotRestore(); + saveData = null; + } + }) + }, 0); + } + + update_chart(NETDATA.options.targets.length); + }); + }); +} + +// -------------------------------------------------------------------- +// activate netdata on the page + +function dashboardSettingsSetup() { + var update_options_modal = function () { + // console.log('update_options_modal'); + + var sync_option = function (option) { + var self = $('#' + option); + + if (self.prop('checked') !== NETDATA.getOption(option)) { + // console.log('switching ' + option.toString()); + self.bootstrapToggle(NETDATA.getOption(option) ? 'on' : 'off'); + } + }; + + var theme_sync_option = function (option) { + var self = $('#' + option); + + self.bootstrapToggle(netdataTheme === 'slate' ? 'on' : 'off'); + }; + var units_sync_option = function (option) { + var self = $('#' + option); + + if (self.prop('checked') !== (NETDATA.getOption('units') === 'auto')) { + self.bootstrapToggle(NETDATA.getOption('units') === 'auto' ? 'on' : 'off'); + } + + if (self.prop('checked') === true) { + $('#settingsLocaleTempRow').show(); + $('#settingsLocaleTimeRow').show(); + } else { + $('#settingsLocaleTempRow').hide(); + $('#settingsLocaleTimeRow').hide(); + } + }; + var temp_sync_option = function (option) { + var self = $('#' + option); + + if (self.prop('checked') !== (NETDATA.getOption('temperature') === 'celsius')) { + self.bootstrapToggle(NETDATA.getOption('temperature') === 'celsius' ? 'on' : 'off'); + } + }; + var timezone_sync_option = function (option) { + var self = $('#' + option); + + document.getElementById('browser_timezone').innerText = NETDATA.options.browser_timezone; + document.getElementById('server_timezone').innerText = NETDATA.options.server_timezone; + document.getElementById('current_timezone').innerText = (NETDATA.options.current.timezone === 'default') ? 'unset, using browser default' : NETDATA.options.current.timezone; + + if (self.prop('checked') === NETDATA.dateTime.using_timezone) { + self.bootstrapToggle(NETDATA.dateTime.using_timezone ? 'off' : 'on'); + } + }; + + sync_option('eliminate_zero_dimensions'); + sync_option('destroy_on_hide'); + sync_option('async_on_scroll'); + sync_option('parallel_refresher'); + sync_option('concurrent_refreshes'); + sync_option('sync_selection'); + sync_option('sync_pan_and_zoom'); + sync_option('stop_updates_when_focus_is_lost'); + sync_option('smooth_plot'); + sync_option('pan_and_zoom_data_padding'); + sync_option('show_help'); + sync_option('seconds_as_time'); + theme_sync_option('netdata_theme_control'); + units_sync_option('units_conversion'); + temp_sync_option('units_temp'); + timezone_sync_option('local_timezone'); + + if (NETDATA.getOption('parallel_refresher') === false) { + $('#concurrent_refreshes_row').hide(); + } else { + $('#concurrent_refreshes_row').show(); + } + }; + NETDATA.setOption('setOptionCallback', update_options_modal); + + // handle options changes + $('#eliminate_zero_dimensions').change(function () { + NETDATA.setOption('eliminate_zero_dimensions', $(this).prop('checked')); + }); + $('#destroy_on_hide').change(function () { + NETDATA.setOption('destroy_on_hide', $(this).prop('checked')); + }); + $('#async_on_scroll').change(function () { + NETDATA.setOption('async_on_scroll', $(this).prop('checked')); + }); + $('#parallel_refresher').change(function () { + NETDATA.setOption('parallel_refresher', $(this).prop('checked')); + }); + $('#concurrent_refreshes').change(function () { + NETDATA.setOption('concurrent_refreshes', $(this).prop('checked')); + }); + $('#sync_selection').change(function () { + NETDATA.setOption('sync_selection', $(this).prop('checked')); + }); + $('#sync_pan_and_zoom').change(function () { + NETDATA.setOption('sync_pan_and_zoom', $(this).prop('checked')); + }); + $('#stop_updates_when_focus_is_lost').change(function () { + urlOptions.update_always = !$(this).prop('checked'); + urlOptions.hashUpdate(); + + NETDATA.setOption('stop_updates_when_focus_is_lost', !urlOptions.update_always); + }); + $('#smooth_plot').change(function () { + NETDATA.setOption('smooth_plot', $(this).prop('checked')); + }); + $('#pan_and_zoom_data_padding').change(function () { + NETDATA.setOption('pan_and_zoom_data_padding', $(this).prop('checked')); + }); + $('#seconds_as_time').change(function () { + NETDATA.setOption('seconds_as_time', $(this).prop('checked')); + }); + $('#local_timezone').change(function () { + if ($(this).prop('checked')) { + selected_server_timezone('default', true); + } else { + selected_server_timezone('default', false); + } + }); + + $('#units_conversion').change(function () { + NETDATA.setOption('units', $(this).prop('checked') ? 'auto' : 'original'); + }); + $('#units_temp').change(function () { + NETDATA.setOption('temperature', $(this).prop('checked') ? 'celsius' : 'fahrenheit'); + }); + + $('#show_help').change(function () { + urlOptions.help = $(this).prop('checked'); + urlOptions.hashUpdate(); + + NETDATA.setOption('show_help', urlOptions.help); + netdataReload(); + }); + + // this has to be the last + // it reloads the page + $('#netdata_theme_control').change(function () { + urlOptions.theme = $(this).prop('checked') ? 'slate' : 'white'; + urlOptions.hashUpdate(); + + if (setTheme(urlOptions.theme)) { + netdataReload(); + } + }); +} + +function scrollDashboardTo() { + if (netdataSnapshotData !== null && typeof netdataSnapshotData.hash !== 'undefined') { + //console.log(netdataSnapshotData.hash); + scrollToId(netdataSnapshotData.hash.replace('#', '')); + } else { + // check if we have to jump to a specific section + scrollToId(urlOptions.hash.replace('#', '')); + + if (urlOptions.chart !== null) { + NETDATA.alarms.scrollToChart(urlOptions.chart); + //urlOptions.hash = '#' + NETDATA.name2id('menu_' + charts[c].menu + '_submenu_' + charts[c].submenu); + //urlOptions.hash = '#chart_' + NETDATA.name2id(urlOptions.chart); + //console.log('hash = ' + urlOptions.hash); + } + } +} + +var modalHiddenCallback = null; + +function scrollToChartAfterHidingModal(chart, alarmDate, alarmStatus) { + modalHiddenCallback = function () { + NETDATA.alarms.scrollToChart(chart, alarmDate); + + if (['WARNING', 'CRITICAL'].includes(alarmStatus)) { + const currentChartState = NETDATA.options.targets.find( + (chartState) => chartState.id === chart, + ) + const twoMinutes = 2 * 60 * 1000 + NETDATA.globalPanAndZoom.setMaster( + currentChartState, + alarmDate - twoMinutes, + alarmDate + twoMinutes, + ) + } + }; +} + +// ---------------------------------------------------------------------------- + +function enableTooltipsAndPopovers() { + $('[data-toggle="tooltip"]').tooltip({ + animated: 'fade', + trigger: 'hover', + html: true, + delay: { show: 500, hide: 0 }, + container: 'body' + }); + $('[data-toggle="popover"]').popover(); +} + +// ---------------------------------------------------------------------------- + +var runOnceOnDashboardLastRun = 0; + +function runOnceOnDashboardWithjQuery() { + if (runOnceOnDashboardLastRun !== 0) { + scrollDashboardTo(); + + // restore the scrollspy at the proper position + $(document.body).scrollspy('refresh'); + $(document.body).scrollspy('process'); + + return; + } + + runOnceOnDashboardLastRun = Date.now(); + + // ------------------------------------------------------------------------ + // bootstrap modals + + // prevent bootstrap modals from scrolling the page + // maintains the current scroll position + // https://stackoverflow.com/a/34754029/4525767 + + var scrollPos = 0; + var modal_depth = 0; // how many modals are currently open + var modal_shown = false; // set to true, if a modal is shown + var netdata_paused_on_modal = false; // set to true, if the modal paused netdata + var scrollspyOffset = $(window).height() / 3; // will be updated below - the offset of scrollspy to select an item + + $('.modal') + .on('show.bs.modal', function () { + if (modal_depth === 0) { + scrollPos = window.scrollY; + + $('body').css({ + overflow: 'hidden', + position: 'fixed', + top: -scrollPos + }); + + modal_shown = true; + + if (NETDATA.options.pauseCallback === null) { + NETDATA.pause(function () { + }); + netdata_paused_on_modal = true; + } else { + netdata_paused_on_modal = false; + } + } + + modal_depth++; + //console.log(urlOptions.after); + + }) + .on('hide.bs.modal', function () { + + modal_depth--; + + if (modal_depth <= 0) { + modal_depth = 0; + + $('body') + .css({ + overflow: '', + position: '', + top: '' + }); + + // scroll to the position we had open before the modal + $('html, body') + .animate({ scrollTop: scrollPos }, 0); + + // unpause netdata, if we paused it + if (netdata_paused_on_modal === true) { + NETDATA.unpause(); + netdata_paused_on_modal = false; + } + + // restore the scrollspy at the proper position + $(document.body).scrollspy('process'); + } + //console.log(urlOptions.after); + }) + .on('hidden.bs.modal', function () { + if (modal_depth === 0) { + modal_shown = false; + } + + if (typeof modalHiddenCallback === 'function') { + modalHiddenCallback(); + } + + modalHiddenCallback = null; + //console.log(urlOptions.after); + }); + + // ------------------------------------------------------------------------ + // sidebar / affix + + if (shouldShowSignInBanner()) { + const el = document.getElementById("sign-in-banner"); + if (el) { + el.style.display = "initial"; + el.classList.add(`theme-${netdataTheme}`); + } + } + + $('#sidebar') + .affix({ + offset: { + top: (isdemo()) ? 150 : 0, + bottom: 0 + } + }) + .on('affixed.bs.affix', function () { + // fix scrolling of very long affix lists + // http://stackoverflow.com/questions/21691585/bootstrap-3-1-0-affix-too-long + + $(this).removeAttr('style'); + }) + .on('affix-top.bs.affix', function () { + // fix bootstrap affix click bug + // https://stackoverflow.com/a/37847981/4525767 + + if (modal_shown) { + return false; + } + }) + .on('activate.bs.scrollspy', function (e) { + // change the URL based on the current position of the screen + + if (modal_shown === false) { + var el = $(e.target); + var hash = el.find('a').attr('href'); + if (typeof hash === 'string' && hash.substring(0, 1) === '#' && urlOptions.hash.startsWith(hash + '_submenu_') === false) { + urlOptions.hash = hash; + urlOptions.hashUpdate(); + } + } + }); + + Ps.initialize(document.getElementById('sidebar'), { + wheelSpeed: 0.5, + wheelPropagation: true, + swipePropagation: true, + minScrollbarLength: null, + maxScrollbarLength: null, + useBothWheelAxes: false, + suppressScrollX: true, + suppressScrollY: false, + scrollXMarginOffset: 0, + scrollYMarginOffset: 0, + theme: 'default' + }); + + // ------------------------------------------------------------------------ + // scrollspy + + if (scrollspyOffset > 250) { + scrollspyOffset = 250; + } + if (scrollspyOffset < 75) { + scrollspyOffset = 75; + } + document.body.setAttribute('data-offset', scrollspyOffset); + + // scroll the dashboard, before activating the scrollspy, so that our + // hash will not be updated before we got the chance to scroll to it + scrollDashboardTo(); + + $(document.body).scrollspy({ + target: '#sidebar', + offset: scrollspyOffset // controls the diff of the element to the top, to select it + }); + + // ------------------------------------------------------------------------ + // my-netdata menu + + Ps.initialize(document.getElementById('my-netdata-dropdown-content'), { + wheelSpeed: 1, + wheelPropagation: false, + swipePropagation: false, + minScrollbarLength: null, + maxScrollbarLength: null, + useBothWheelAxes: false, + suppressScrollX: true, + suppressScrollY: false, + scrollXMarginOffset: 0, + scrollYMarginOffset: 0, + theme: 'default' + }); + + $('#myNetdataDropdownParent') + .on('show.bs.dropdown', function () { + var hash = urlOptions.genHash(); + $('.registry_link').each(function (idx) { + this.setAttribute('href', this.getAttribute("href").replace(/#.*$/, hash)); + }); + + NETDATA.pause(function () { + }); + }) + .on('shown.bs.dropdown', function () { + Ps.update(document.getElementById('my-netdata-dropdown-content')); + myNetdataMenuDidShow(); + }) + .on('hidden.bs.dropdown', function () { + NETDATA.unpause(); + }); + + $('#deleteRegistryModal') + .on('hidden.bs.modal', function () { + deleteRegistryGuid = null; + }); + + // ------------------------------------------------------------------------ + // update modal + + $('#updateModal') + .on('show.bs.modal', function () { + versionLog('checking, please wait...'); + }) + .on('shown.bs.modal', function () { + }); + + // ------------------------------------------------------------------------ + // alarms modal + + $('#alarmsModal') + .on('shown.bs.modal', function () { + alarmsUpdateModal(); + }) + .on('hidden.bs.modal', function () { + document.getElementById('alarms_active').innerHTML = + document.getElementById('alarms_all').innerHTML = + document.getElementById('alarms_log').innerHTML = + 'loading...'; + }); + + // ------------------------------------------------------------------------ + + dashboardSettingsSetup(); + loadSnapshotDragAndDropSetup(); + saveSnapshotModalSetup(); + showPageFooter(); + + // ------------------------------------------------------------------------ + // https://github.com/viralpatel/jquery.shorten/blob/master/src/jquery.shorten.js + + $.fn.shorten = function (settings) { + "use strict"; + + var config = { + showChars: 750, + minHideChars: 10, + ellipsesText: "...", + moreText: ' show more information', + lessText: ' show less information', + onLess: function () { + NETDATA.onscroll(); + }, + onMore: function () { + NETDATA.onscroll(); + }, + errMsg: null, + force: false + }; + + if (settings) { + $.extend(config, settings); + } + + if ($(this).data('jquery.shorten') && !config.force) { + return false; + } + $(this).data('jquery.shorten', true); + + $(document).off("click", '.morelink'); + + $(document).on({ + click: function () { + + var $this = $(this); + if ($this.hasClass('less')) { + $this.removeClass('less'); + $this.html(config.moreText); + $this.parent().prev().animate({ 'height': '0' + '%' }, 0, function () { + $this.parent().prev().prev().show(); + }).hide(0, function () { + config.onLess(); + }); + } else { + $this.addClass('less'); + $this.html(config.lessText); + $this.parent().prev().animate({ 'height': '100' + '%' }, 0, function () { + $this.parent().prev().prev().hide(); + }).show(0, function () { + config.onMore(); + }); + } + return false; + } + }, '.morelink'); + + return this.each(function () { + var $this = $(this); + + var content = $this.html(); + var contentlen = $this.text().length; + if (contentlen > config.showChars + config.minHideChars) { + var c = content.substr(0, config.showChars); + if (c.indexOf('<') >= 0) // If there's HTML don't want to cut it + { + var inTag = false; // I'm in a tag? + var bag = ''; // Put the characters to be shown here + var countChars = 0; // Current bag size + var openTags = []; // Stack for opened tags, so I can close them later + var tagName = null; + + for (var i = 0, r = 0; r <= config.showChars; i++) { + if (content[i] === '<' && !inTag) { + inTag = true; + + // This could be "tag" or "/tag" + tagName = content.substring(i + 1, content.indexOf('>', i)); + + // If its a closing tag + if (tagName[0] === '/') { + + if (tagName !== ('/' + openTags[0])) { + config.errMsg = 'ERROR en HTML: the top of the stack should be the tag that closes'; + } else { + openTags.shift(); // Pops the last tag from the open tag stack (the tag is closed in the retult HTML!) + } + + } else { + // There are some nasty tags that don't have a close tag like
+ if (tagName.toLowerCase() !== 'br') { + openTags.unshift(tagName); // Add to start the name of the tag that opens + } + } + } + + if (inTag && content[i] === '>') { + inTag = false; + } + + if (inTag) { + bag += content.charAt(i); + } else { + // Add tag name chars to the result + r++; + if (countChars <= config.showChars) { + bag += content.charAt(i); // Fix to ie 7 not allowing you to reference string characters using the [] + countChars++; + } else { + // Now I have the characters needed + if (openTags.length > 0) { + // I have unclosed tags + + //console.log('They were open tags'); + //console.log(openTags); + for (var j = 0; j < openTags.length; j++) { + //console.log('Cierro tag ' + openTags[j]); + bag += ''; // Close all tags that were opened + + // You could shift the tag from the stack to check if you end with an empty stack, that means you have closed all open tags + } + break; + } + } + } + } + c = $('
').html(bag + '' + config.ellipsesText + '').html(); + } else { + c += config.ellipsesText; + } + + var html = '
' + c + + '
' + content + + '
' + config.moreText + ''; + + $this.html(html); + $this.find(".allcontent").hide(); // Hide all text + $('.shortcontent p:last', $this).css('margin-bottom', 0); //Remove bottom margin on last paragraph as it's likely shortened + } + }); + }; +} + +function finalizePage() { + // resize all charts - without starting the background thread + // this has to be done while NETDATA is paused + // if we omit this, the affix menu will be wrong, since all + // the Dom elements are initially zero-sized + NETDATA.parseDom(); + + // ------------------------------------------------------------------------ + + NETDATA.globalPanAndZoom.callback = null; + NETDATA.globalChartUnderlay.callback = null; + + if (urlOptions.pan_and_zoom === true && NETDATA.options.targets.length > 0) { + NETDATA.globalPanAndZoom.setMaster(NETDATA.options.targets[0], urlOptions.after, urlOptions.before); + } + + // callback for us to track PanAndZoom operations + NETDATA.globalPanAndZoom.callback = urlOptions.netdataPanAndZoomCallback; + NETDATA.globalChartUnderlay.callback = urlOptions.netdataHighlightCallback; + + // ------------------------------------------------------------------------ + + // let it run (update the charts) + NETDATA.unpause(); + + runOnceOnDashboardWithjQuery(); + $(".shorten").shorten(); + enableTooltipsAndPopovers(); + + if (isdemo()) { + // do not to give errors on netdata demo servers for 60 seconds + NETDATA.options.current.retries_on_data_failures = 60; + + // google analytics when this is used for the home page of the demo sites + // this does not run on user's installations + setTimeout(function () { + (function (i, s, o, g, r, a, m) { + i['GoogleAnalyticsObject'] = r; + i[r] = i[r] || function () { + (i[r].q = i[r].q || []).push(arguments) + }, i[r].l = 1 * new Date(); + a = s.createElement(o), + m = s.getElementsByTagName(o)[0]; + a.async = 1; + a.src = g; + m.parentNode.insertBefore(a, m) + })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); + + ga('create', 'UA-64295674-3', 'auto'); + ga('send', 'pageview', '/demosite/' + window.location.host); + }, 2000); + } else { + } + + if (urlOptions.show_alarms === true) { + setTimeout(function () { + $('#alarmsModal').modal('show'); + }, 1000); + } + + NETDATA.onresizeCallback = function () { + Ps.update(document.getElementById('sidebar')); + Ps.update(document.getElementById('my-netdata-dropdown-content')); + }; + NETDATA.onresizeCallback(); + + if (netdataSnapshotData !== null) { + NETDATA.globalPanAndZoom.setMaster(NETDATA.options.targets[0], netdataSnapshotData.after_ms, netdataSnapshotData.before_ms); + } + + //if (urlOptions.nowelcome !== true) { + // setTimeout(function () { + // $('#welcomeModal').modal(); + // }, 2000); + //} + + // var netdataEnded = performance.now(); + // console.log('start up time: ' + (netdataEnded - netdataStarted).toString() + ' ms'); +} + +function resetDashboardOptions() { + var help = NETDATA.options.current.show_help; + + NETDATA.resetOptions(); + if (setTheme('slate')) { + netdataReload(); + } + + if (help !== NETDATA.options.current.show_help) { + netdataReload(); + } +} + +// callback to add the dashboard info to the +// parallel javascript downloader in netdata +var netdataPrepCallback = function () { + NETDATA.requiredCSS.push({ + url: NETDATA.serverStatic + 'css/bootstrap-toggle-2.2.2.min.css', + isAlreadyLoaded: function () { + return false; + } + }); + + NETDATA.requiredJs.push({ + url: NETDATA.serverStatic + 'lib/bootstrap-toggle-2.2.2.min.js', + isAlreadyLoaded: function () { + return false; + } + }); + + NETDATA.requiredJs.push({ + url: NETDATA.serverStatic + 'dashboard_info.js?v20181019-1', + async: false, + isAlreadyLoaded: function () { + return false; + } + }); + + if (isdemo()) { + document.getElementById('masthead').style.display = 'block'; + } else { + if (urlOptions.update_always === true) { + NETDATA.setOption('stop_updates_when_focus_is_lost', !urlOptions.update_always); + } + } +}; + +var selected_server_timezone = function (timezone, status) { + //console.log('called with timezone: ' + timezone + ", status: " + ((typeof status === 'undefined')?'undefined':status).toString()); + + // clear the error + document.getElementById('timezone_error_message').innerHTML = ''; + + if (typeof status === 'undefined') { + // the user selected a timezone from the menu + + NETDATA.setOption('user_set_server_timezone', timezone); + + if (NETDATA.dateTime.init(timezone) === false) { + NETDATA.dateTime.init(); + + if (!$('#local_timezone').prop('checked')) { + $('#local_timezone').bootstrapToggle('on'); + } + + document.getElementById('timezone_error_message').innerHTML = 'Ooops! That timezone was not accepted by your browser. Please open a github issue to help us fix it.'; + NETDATA.setOption('user_set_server_timezone', NETDATA.options.server_timezone); + } else { + if ($('#local_timezone').prop('checked')) { + $('#local_timezone').bootstrapToggle('off'); + } + } + } else if (status === true) { + // the user wants the browser default timezone to be activated + + NETDATA.dateTime.init(); + } else { + // the user wants the server default timezone to be activated + //console.log('found ' + NETDATA.options.current.user_set_server_timezone); + + if (NETDATA.options.current.user_set_server_timezone === 'default') { + NETDATA.options.current.user_set_server_timezone = NETDATA.options.server_timezone; + } + + timezone = NETDATA.options.current.user_set_server_timezone; + + if (NETDATA.dateTime.init(timezone) === false) { + NETDATA.dateTime.init(); + + if (!$('#local_timezone').prop('checked')) { + $('#local_timezone').bootstrapToggle('on'); + } + + document.getElementById('timezone_error_message').innerHTML = 'Sorry. The timezone "' + timezone.toString() + '" is not accepted by your browser. Please select one from the list.'; + NETDATA.setOption('user_set_server_timezone', NETDATA.options.server_timezone); + } + } + + document.getElementById('current_timezone').innerText = (NETDATA.options.current.timezone === 'default') ? 'unset, using browser default' : NETDATA.options.current.timezone; + return false; +}; + +// our entry point +// var netdataStarted = performance.now(); + +var netdataCallback = initializeDynamicDashboard; + +// ================================================================================================= +// netdata.cloud + +let registryAgents = []; + +let cloudAgents = []; + +let myNetdataMenuFilterValue = ""; + +let cloudAccountID = null; + +let cloudAccountName = null; + +let cloudToken = null; + +/// Enforces a maximum string length while retaining the prefix and the postfix of +/// the string. +function truncateString(str, maxLength) { + if (str.length <= maxLength) { + return str; + } + + const spanLength = Math.floor((maxLength - 3) / 2); + return `${str.substring(0, spanLength)}...${str.substring(str.length - spanLength)}`; +} + +// ------------------------------------------------------------------------------------------------- +// netdata.cloud API Client +// ------------------------------------------------------------------------------------------------- + +function isValidAgent(a) { + return a.urls != null && a.urls.length > 0; +} + +// https://github.com/netdata/hub/issues/146 +function getCloudAccountAgents() { + if (!isSignedIn()) { + return []; + } + + return fetch( + `${NETDATA.registry.cloudBaseURL}/api/v1/accounts/${cloudAccountID}/agents`, + { + method: "GET", + mode: "cors", + headers: { + "Authorization": `Bearer ${cloudToken}` + } + } + ).then((response) => { + if (!response.ok) { + throw Error("Cannot fetch known accounts"); + } + return response.json(); + }).then((payload) => { + const agents = payload.result ? payload.result.agents : null; + + if (!agents) { + return []; + } + + return agents.filter((a) => isValidAgent(a)).map((a) => { + return { + "guid": a.id, + "name": a.name, + "url": a.urls[0], + "alternate_urls": a.urls + } + }) + }).catch(function (error) { + console.log(error); + return null; + }); +} + +/** Updates the lastAccessTime and accessCount properties of the agent for the account. */ +function touchAgent() { + if (!isSignedIn()) { + return []; + } + + const touchUrl = `${NETDATA.registry.cloudBaseURL}/api/v1/agents/${NETDATA.registry.machine_guid}/touch?account_id=${cloudAccountID}`; + return fetch( + touchUrl, + { + method: "post", + body: "", + mode: "cors", + headers: { + "Authorization": `Bearer ${cloudToken}` + } + } + ).then((response) => { + if (!response.ok) { + throw Error("Cannot touch agent" + JSON.stringify(response)); + } + return response.json(); + }).then((payload) => { + + }).catch(function (error) { + console.log(error); + return null; + }); +} + +// https://github.com/netdata/hub/issues/128 +function postCloudAccountAgents(agentsToSync) { + if (!isSignedIn()) { + return []; + } + + const maskedURL = NETDATA.registry.MASKED_DATA; + + const agents = agentsToSync.map((a) => { + const urls = a.alternate_urls.filter((url) => url != maskedURL); + + return { + "id": a.guid, + "name": a.name, + "urls": urls + } + }).filter((a) => isValidAgent(a)) + + const payload = { + "accountID": cloudAccountID, + "agents": agents, + "merge": false, + }; + + return fetch( + `${NETDATA.registry.cloudBaseURL}/api/v1/accounts/${cloudAccountID}/agents`, + { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json; charset=utf-8", + "Authorization": `Bearer ${cloudToken}` + }, + body: JSON.stringify(payload) + } + ).then((response) => { + return response.json(); + }).then((payload) => { + const agents = payload.result ? payload.result.agents : null; + + if (!agents) { + return []; + } + + return agents.filter((a) => isValidAgent(a)).map((a) => { + return { + "guid": a.id, + "name": a.name, + "url": a.urls[0], + "alternate_urls": a.urls + } + }) + }); +} + +function deleteCloudAgentURL(agentID, url) { + if (!isSignedIn()) { + return []; + } + + return fetch( + `${NETDATA.registry.cloudBaseURL}/api/v1/accounts/${cloudAccountID}/agents/${agentID}/url?value=${encodeURIComponent(url)}`, + { + method: "DELETE", + mode: "cors", + headers: { + "Content-Type": "application/json; charset=utf-8", + "Authorization": `Bearer ${cloudToken}` + }, + } + ).then((response) => { + return response.json(); + }).then((payload) => { + const count = payload.result ? payload.result.count : 0; + return count; + }); +} + +// ------------------------------------------------------------------------------------------------- + +function signInDidClick(e) { + e.preventDefault(); + e.stopPropagation(); + + if (!NETDATA.registry.isUsingGlobalRegistry()) { + // If user is using a private registry, request his consent for + // synchronizing with cloud. + showSignInModal(); + return; + } + + signIn(); +} + +function shouldShowSignInBanner() { + return false; +} + +function closeSignInBanner() { + localStorage.setItem("signInBannerClosed", "true"); + const el = document.getElementById("sign-in-banner"); + if (el) { + el.style.display = "none"; + } +} + +function closeSignInBannerDidClick(e) { + closeSignInBanner(); +} + +function signOutDidClick(e) { + e.preventDefault(); + e.stopPropagation(); + signOut(); +} + +// ------------------------------------------------------------------------------------------------- + +function updateMyNetdataAfterFilterChange() { + const machinesEl = document.getElementById("my-netdata-menu-machines") + machinesEl.innerHTML = renderMachines(cloudAgents); + + if (options.hosts.length > 1) { + const streamedEl = document.getElementById("my-netdata-menu-streamed") + streamedEl.innerHTML = renderStreamedHosts(options); + } +} + +function myNetdataMenuDidShow() { + const filterEl = document.getElementById("my-netdata-menu-filter-input"); + if (filterEl) { + filterEl.focus(); + } +} + +function myNetdataFilterDidChange(e) { + const inputEl = e.target; + setTimeout(() => { + myNetdataMenuFilterValue = inputEl.value; + updateMyNetdataAfterFilterChange(); + }, 1); +} + +function myNetdataFilterClearDidClick(e) { + e.preventDefault(); + e.stopPropagation(); + + const inputEl = document.getElementById("my-netdata-menu-filter-input"); + inputEl.value = ""; + myNetdataMenuFilterValue = ""; + + updateMyNetdataAfterFilterChange(); + + inputEl.focus(); +} + +// ------------------------------------------------------------------------------------------------- + +function clearCloudVariables() { + cloudAccountID = null; + cloudAccountName = null; + cloudToken = null; +} + +function clearCloudLocalStorageItems() { + localStorage.removeItem("cloud.baseURL"); + localStorage.removeItem("cloud.agentID"); + localStorage.removeItem("cloud.sync"); +} + +function signIn() { + const url = `${NETDATA.registry.cloudBaseURL}/account/sign-in-agent?id=${NETDATA.registry.machine_guid}&name=${encodeURIComponent(NETDATA.registry.hostname)}&origin=${encodeURIComponent(window.location.origin + "/")}`; + window.open(url); +} + +function signOut() { + cloudSSOSignOut(); +} + +function handleMessage(e) { + switch (e.data.type) { + case "sign-in": + handleSignInMessage(e); + break; + + case "sign-out": + handleSignOutMessage(e); + break; + + default: + return; + } +} + +function handleSignInMessage(e) { + closeSignInBanner(); + localStorage.setItem("cloud.baseURL", NETDATA.registry.cloudBaseURL); + + cloudAccountID = e.data.accountID; + cloudAccountName = e.data.accountName; + cloudToken = e.data.token; + + netdataRegistryCallback(registryAgents); + if (e.data.redirectURI && !window.location.href.includes(e.data.redirectURI)) { + // lgtm false-positive - redirectURI does not come from user input, but from iframe callback + window.location.replace(e.data.redirectURI); // lgtm[js/client-side-unvalidated-url-redirection] + } +} + +function handleSignOutMessage(e) { + clearCloudVariables(); + renderMyNetdataMenu(registryAgents); +} + +function isSignedIn() { + return cloudToken != null && cloudAccountID != null; +} + +function sortedArraysEqual(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; +} + +// If merging is needed returns the merged agents set, otherwise returns null. +function mergeAgents(cloud, local) { + let dirty = false; + + const union = new Map(); + + for (const cagent of cloud) { + union.set(cagent.guid, cagent); + } + + for (const lagent of local) { + const cagent = union.get(lagent.guid); + if (cagent) { + for (const u of lagent.alternate_urls) { + if (u === NETDATA.registry.MASKED_DATA) { // TODO: temp until registry is updated. + continue; + } + + if (!cagent.alternate_urls.includes(u)) { + dirty = true; + cagent.alternate_urls.push(u); + } + } + } else { + dirty = true; + union.set(lagent.guid, lagent); + } + } + + if (dirty) { + return Array.from(union.values()); + } + + return null; +} + +function showSignInModal() { + document.getElementById("sim-registry").innerHTML = NETDATA.registry.server; + $("#signInModal").modal("show"); +} + +function explicitlySignIn() { + $("#signInModal").modal("hide"); + signIn(); +} + +function showSyncModal() { + document.getElementById("sync-registry-modal-registry").innerHTML = NETDATA.registry.server; + $("#syncRegistryModal").modal("show"); +} + +function explicitlySyncAgents() { + $("#syncRegistryModal").modal("hide"); + + const json = localStorage.getItem("cloud.sync"); + const sync = json ? JSON.parse(json) : {}; + delete sync[cloudAccountID]; + localStorage.setItem("cloud.sync", JSON.stringify(sync)); + + NETDATA.registry.init(); +} + +function syncAgents(callback) { + const json = localStorage.getItem("cloud.sync"); + const sync = json ? JSON.parse(json) : {}; + + const currentAgent = { + guid: NETDATA.registry.machine_guid, + name: NETDATA.registry.hostname, + url: NETDATA.serverDefault, + alternate_urls: [NETDATA.serverDefault], + } + + const localAgents = sync[cloudAccountID] + ? [currentAgent] + : registryAgents.concat([currentAgent]); + + console.log("Checking if sync is needed.", localAgents); + + const agentsToSync = mergeAgents(cloudAgents, localAgents); + + if ((!sync[cloudAccountID]) || agentsToSync) { + sync[cloudAccountID] = new Date().getTime(); + localStorage.setItem("cloud.sync", JSON.stringify(sync)); + } + + if (agentsToSync) { + console.log("Synchronizing with netdata.cloud."); + + postCloudAccountAgents(agentsToSync).then((agents) => { + // TODO: clear syncTime on error! + cloudAgents = agents; + callback(cloudAgents); + }); + + return + } + + callback(cloudAgents); +} + +let isCloudSSOInitialized = false; + +function cloudSSOInit() { + const iframeEl = document.getElementById("ssoifrm"); + const url = `${NETDATA.registry.cloudBaseURL}/account/sso-agent?id=${NETDATA.registry.machine_guid}`; + iframeEl.src = url; + isCloudSSOInitialized = true; +} + +function cloudSSOSignOut() { + const iframe = document.getElementById("ssoifrm"); + const url = `${NETDATA.registry.cloudBaseURL}/account/sign-out-agent`; + iframe.src = url; +} + +function initCloud() { + if (!NETDATA.registry.isCloudEnabled) { + clearCloudVariables(); + clearCloudLocalStorageItems(); + return; + } + + if (NETDATA.registry.cloudBaseURL != localStorage.getItem("cloud.baseURL")) { + clearCloudVariables(); + clearCloudLocalStorageItems(); + if (NETDATA.registry.cloudBaseURL) { + localStorage.setItem("cloud.baseURL", NETDATA.registry.cloudBaseURL); + } + } + + if (!isCloudSSOInitialized) { + cloudSSOInit(); + } + + touchAgent(); +} + +// This callback is called after NETDATA.registry is initialized. +function netdataRegistryCallback(machinesArray) { + localStorage.setItem("cloud.agentID", NETDATA.registry.machine_guid); + + initCloud(); + + registryAgents = machinesArray; + + if (isSignedIn()) { + // We call getCloudAccountAgents() here because it requires that + // NETDATA.registry is initialized. + clearMyNetdataMenu(); + getCloudAccountAgents().then((agents) => { + if (!agents) { + errorMyNetdataMenu(); + return; + } + cloudAgents = agents; + syncAgents((agents) => { + const agentsMap = {} + for (const agent of agents) { + agentsMap[agent.guid] = agent; + } + + NETDATA.registry.machines = agentsMap; + NETDATA.registry.machines_array = agents; + + renderMyNetdataMenu(agents); + }); + }); + } else { + renderMyNetdataMenu(machinesArray) + } +}; + +// If we know the cloudBaseURL and agentID from local storage render (eagerly) +// the account ui before receiving the definitive response from the web server. +// This improves the perceived performance. +function tryFastInitCloud() { + const baseURL = localStorage.getItem("cloud.baseURL"); + const agentID = localStorage.getItem("cloud.agentID"); + + if (baseURL && agentID) { + NETDATA.registry.cloudBaseURL = baseURL; + NETDATA.registry.machine_guid = agentID; + NETDATA.registry.isCloudEnabled = true; + + initCloud(); + } +} + +function initializeApp() { + window.addEventListener("message", handleMessage, false); + + // tryFastInitCloud(); +} + +if (document.readyState === "complete") { + initializeApp(); +} else { + document.addEventListener("readystatechange", () => { + if (document.readyState === "complete") { + initializeApp(); + } + }); +} diff --git a/luci-app-netdata/root/usr/share/netdata/webcn/netdata b/luci-app-netdata/root/usr/share/netdata/webcn/netdata new file mode 100644 index 00000000..83f9eda9 --- /dev/null +++ b/luci-app-netdata/root/usr/share/netdata/webcn/netdata @@ -0,0 +1,6 @@ + +config netdata 'netdata' + option logger '1' + option enabled '0' + option port '19990' + diff --git a/luci-app-netdata/root/usr/share/netdata/webcn/netdata.conf b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.conf new file mode 100644 index 00000000..9b2c9d24 --- /dev/null +++ b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.conf @@ -0,0 +1,52 @@ +# Full configuration can be retrieved from the running +# server at http://localhost:19999/netdata.conf +# +# Example: +# curl -o /etc/netdata/netdata.conf http://localhost:19999/netdata.conf +# + +[global] + update every = 2 + memory deduplication (ksm) = no + debug log = syslog + error log = syslog + access log = none + run as user = root + +[web] + allow connections from = * + allow dashboard from = * + +[plugins] + cgroups = no + apps = no + charts.d = no + fping = no + node.d = no + python.d = no + +[plugin:proc] + ipc =no + /proc/sysvipc/shm = no + /sys/devices/system/edac/mc = no + /sys/devices/system/node = no + /proc/net/sockstat = no + /proc/net/netstat = no + /proc/net/snmp = no + /proc/net/softnet_stat = no + /proc/net/sctp/snmp = no + /proc/net/ip_vs/stats = no + /proc/net/stat/synproxy = no + /sys/kernel/mm/ksm = no + /dev/mapper = no + semaphore totals = no + +[plugin:proc:/proc/diskstats] + path to /dev/vx/dsk = + path to /dev/disk/by-label = + +[health] + enabled = no + +[plugin:proc:ipc] + shared memory totals = no diff --git a/luci-app-netdata/root/usr/share/netdata/webcn/netdata.init b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.init new file mode 100755 index 00000000..9e088294 --- /dev/null +++ b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.init @@ -0,0 +1,46 @@ +#!/bin/sh /etc/rc.common + +START=99 +USE_PROCD=1 + +APPBINARY=/usr/sbin/netdata +CONFIGFILE=/etc/netdata/netdata.conf + +get_config() { + config_get_bool enabled $1 enabled 1 + config_get_bool logger $1 logger 1 + config_get port $1 port 19999 +} + +netdata_prepare() { + pgrep -f /usr/sbin/netdata | xargs kill -9 >/dev/null 2>&1 + logger -t netdata -p warn "netdata is stop." +} + +stop_service() { + netdata_prepare +} + +start_service() { + netdata_prepare + config_load netdata + config_foreach get_config netdata + [ x$enabled == x1 ] || return 1 + mkdir -m 0755 -p /var/cache/netdata + logger -t netdata -p warn "netdata is start." + chown nobody /var/cache/netdata + mkdir -m 0755 -p /var/lib/netdata + chown nobody /var/lib/netdata + mkdir -m 0755 -p /var/log/netdata + chown nobody /var/log/netdata + procd_open_instance + procd_set_param command $APPBINARY -D -c $CONFIGFILE -p $port:$port + [ "x$logger" == x1 ] && procd_set_param stderr 1 + procd_set_param file $CONFIGFILE + procd_set_param respawn + procd_close_instance +} + +service_triggers() { + procd_add_reload_trigger "netdata" +} diff --git a/luci-app-netdata/root/usr/share/rpcd/acl.d/luci-app-netdata.json b/luci-app-netdata/root/usr/share/rpcd/acl.d/luci-app-netdata.json new file mode 100644 index 00000000..6f19d2ff --- /dev/null +++ b/luci-app-netdata/root/usr/share/rpcd/acl.d/luci-app-netdata.json @@ -0,0 +1,11 @@ +{ + "luci-app-nedata": { + "description": "Grant UCI access for luci-app-netdata", + "read": { + "uci": [ "netdata" ] + }, + "write": { + "uci": [ "netdata" ] + } + } +} diff --git a/luci-app-nginx-manager/Makefile b/luci-app-nginx-manager/Makefile new file mode 100644 index 00000000..08c66e41 --- /dev/null +++ b/luci-app-nginx-manager/Makefile @@ -0,0 +1,15 @@ +# 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 +LUCI_DEPENDS:=+luci-nginx +luci-ssl-nginx +luci-ssl-openssl +LUCI_PKGARCH:=all +PKG_VERSION:=1.0 +PKG_RELEASE:=20220222 +PKG_MAINTAINER:=Nginx + +include $(TOPDIR)/feeds/luci/luci.mk diff --git a/luci-app-nginx-manager/luasrc/controller/nginx-manager.lua b/luci-app-nginx-manager/luasrc/controller/nginx-manager.lua new file mode 100644 index 00000000..e03c6fbf --- /dev/null +++ b/luci-app-nginx-manager/luasrc/controller/nginx-manager.lua @@ -0,0 +1,39 @@ +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", "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 new file mode 100644 index 00000000..af9bd1f4 --- /dev/null +++ b/luci-app-nginx-manager/luasrc/model/cbi/nginx-manager.lua @@ -0,0 +1,43 @@ +local fs = require "nixio.fs" +local m = Map("nginx-manager",translate("Nginx Manager"), translate("A simple Nginx manager")) +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 new file mode 100644 index 00000000..66b14114 --- /dev/null +++ b/luci-app-nginx-manager/luasrc/view/nginx-manager/index.htm @@ -0,0 +1,65 @@ +
+ <% 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/tabmenu%> + +
+ <%+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 new file mode 100644 index 00000000..e7751481 --- /dev/null +++ b/luci-app-nginx-manager/po/zh-cn/nginx-manager.po @@ -0,0 +1,26 @@ +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 new file mode 120000 index 00000000..41451e4a --- /dev/null +++ b/luci-app-nginx-manager/po/zh_Hans @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000..aa1155ec --- /dev/null +++ b/luci-app-nginx-manager/root/etc/nginx/conf.d/templates @@ -0,0 +1,17 @@ +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 new file mode 100644 index 00000000..1db677c6 --- /dev/null +++ b/luci-app-nginx-manager/root/etc/uci-defaults/luci-app-nginx-manager @@ -0,0 +1,11 @@ +#!/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 new file mode 100644 index 00000000..35339440 --- /dev/null +++ b/luci-app-nginx-manager/root/usr/share/rpcd/acl.d/luci-app-nginx-manager.json @@ -0,0 +1,11 @@ +{ + "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-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-onliner/.gitattributes b/luci-app-onliner/.gitattributes new file mode 100644 index 00000000..dfe07704 --- /dev/null +++ b/luci-app-onliner/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/luci-app-onliner/.gitignore b/luci-app-onliner/.gitignore new file mode 100644 index 00000000..5b9bd874 --- /dev/null +++ b/luci-app-onliner/.gitignore @@ -0,0 +1,2 @@ + +*.bak diff --git a/luci-app-onliner/Makefile b/luci-app-onliner/Makefile new file mode 100644 index 00000000..e6c975ed --- /dev/null +++ b/luci-app-onliner/Makefile @@ -0,0 +1,32 @@ +# 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 arp online +LUCI_DEPENDS:= +LUCI_PKGARCH:=all +PKG_NAME:=luci-app-onliner +PKG_VERSION:=1.1 +PKG_RELEASE:=5 + +define Package/luci-app-onliner/install + $(INSTALL_DIR) $(1)/usr/lib/lua/luci + cp -pR ./luasrc/* $(1)/usr/lib/lua/luci + $(INSTALL_DIR) $(1)/ + cp -pR ./root/* $(1)/ +endef + +define Package/luci-app-onliner/postinst +#!/bin/sh + rm -f /tmp/luci-indexcache + rm -f /tmp/luci-modulecache/* + chmod -R 755 /usr/share/onliner/* +exit 0 +endef +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/luci-app-onliner/luasrc/controller/onliner.lua b/luci-app-onliner/luasrc/controller/onliner.lua new file mode 100644 index 00000000..33267bfd --- /dev/null +++ b/luci-app-onliner/luasrc/controller/onliner.lua @@ -0,0 +1,17 @@ +module("luci.controller.onliner",package.seeall) +nixio=require"nixio" +function index() +entry({"admin","status","onliner"},alias("admin","status","onliner","onliner"),_("Online User")) +entry({"admin","status","onliner","onliner"},template("onliner/onliner"),_("Online User"),1) +entry({"admin", "status","onliner","speed"}, template("onliner/display"), _("speed"), 2) +entry({"admin", "status","onliner","setnlbw"}, call("set_nlbw")) +end +function set_nlbw() + if nixio.fs.access("/var/run/onsetnlbw") then + nixio.fs.writefile("/var/run/onsetnlbw","1"); + else + io.popen("/usr/share/onliner/setnlbw.sh &") + end + luci.http.prepare_content("application/json") + luci.http.write('') +end \ No newline at end of file diff --git a/luci-app-onliner/luasrc/view/onliner/display.htm b/luci-app-onliner/luasrc/view/onliner/display.htm new file mode 100644 index 00000000..5c047757 --- /dev/null +++ b/luci-app-onliner/luasrc/view/onliner/display.htm @@ -0,0 +1,921 @@ +<%# + Copyright 2017 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% css = [[ + + #chartjs-tooltip { + opacity: 0; + position: absolute; + background: rgba(0, 0, 0, .7); + color: white; + padding: 3px; + border-radius: 3px; + -webkit-transition: all .1s ease; + transition: all .1s ease; + pointer-events: none; + -webkit-transform: translate(-50%, 0); + transform: translate(-50%, 0); + z-index: 200; + } + + #chartjs-tooltip.above { + -webkit-transform: translate(-50%, -100%); + transform: translate(-50%, -100%); + } + + #chartjs-tooltip.above:before { + border: solid; + border-color: #111 transparent; + border-color: rgba(0, 0, 0, .8) transparent; + border-width: 8px 8px 0 8px; + bottom: 1em; + content: ""; + display: block; + left: 50%; + top: 100%; + position: absolute; + z-index: 99; + -webkit-transform: translate(-50%, 0); + transform: translate(-50%, 0); + } + + table { + border: 1px solid #999; + border-collapse: collapse; + margin: 0 0 2px !important; + } + + th, td, table table td { + border: 1px solid #999; + text-align: right; + padding: 1px 3px !important; + white-space: nowrap; + } + + tbody td { + border-bottom-color: #ccc; + } + tbody td:nth-last-child(4) { + width: 10%; + } + tbody td:nth-last-child(3) { + width: 10%; + } + tbody td:nth-last-child(2) { + width: 10%; + } + tbody td:nth-last-child(1) { + width: 10%; + } + tbody td[rowspan] { + border-bottom-color: #999; + } + + tbody tr:last-child td { + border-bottom-color: #999; + } + + .kpi { + display: inline-block; + vertical-align: top; + } + + .kpi ul { + list-style: none; + } + + .kpi li { + margin: 10px; + display: none; + } + + .kpi big { + font-weight: bold; + } + + #detail-bubble { + position: absolute; + opacity: 0; + visibility: hidden; + } + + #detail-bubble.in { + opacity: 1; + visibility: visible; + transition: opacity 0.5s; + } + + #detail-bubble > div { + border: 1px solid #ccc; + border-radius: 2px; + padding: 5px; + background: #fcfcfc; + } + + #detail-bubble .head { + text-align: center; + white-space: nowrap; + position: relative; + } + + #detail-bubble .head .dismiss { + top: 0; + right: 0; + width: 20px; + line-height: 20px; + text-align: center; + text-decoration: none; + font-weight: bold; + color: #000; + position: absolute; + font-size: 20px; + } + #detail-bubble .kpi { + margin: 40px 5px 5px; + font-size: smaller; + text-align: left; + } + + #detail-bubble .kpi ul { + margin: 0; + } + + #bubble-arrow { + border: 1px solid #ccc; + border-width: 1px 0 0 1px; + background: #fcfcfc; + width: 15px; + height: 15px; + position: absolute; + left: 0; + top: -8px; + transform: rotate(45deg); + margin: 0 0 0 -8px; + } + + tr.active > td { + border-bottom: 2px solid red; + } + + tr.active > td.active { + border: 2px solid red; + border-bottom: none; + } + + td.detail { + border: 2px solid red; + border-top: none; + opacity: 0; + transition: opacity 0.5s; + } + + td.detail.in { + opacity: 1; + } + + th.hostname, + td.hostname { + text-align: left; + } + +]] -%> + +<%+header%> + + + + + +

<%:Netlink Bandwidth Monitor%>

+ +
+ +
+
+ × +
+
    +
  • <%_Hostname: example.org%>
  • +
  • <%_Vendor: Example Corp.%>
  • +
+
+
+
+
+
+ + + +
+
+
+
    +
  • <%_0 hosts%>
  • +
  • <%_0 download%>
  • +
  • <%_0 upload%>
  • +
  • <%_0 connections%>
  • +
+
+
+ + + + + + + + +
<%:Host%><%:MAC%><%:Connections%><%:Download (Bytes / Packets)%><%:Upload (Bytes / Packets)%>
+
+ + + + + + + +<%+footer%> diff --git a/luci-app-onliner/luasrc/view/onliner/onliner.htm b/luci-app-onliner/luasrc/view/onliner/onliner.htm new file mode 100644 index 00000000..0f1a9e97 --- /dev/null +++ b/luci-app-onliner/luasrc/view/onliner/onliner.htm @@ -0,0 +1,99 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2011 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% +local util = require "luci.util" +local function online_data() + local rv = { } + local fd = util.execi('/usr/bin/awk \'BEGIN{while ((getline < "/tmp/dhcp.leases") > 0){a[$2]=$4;}while ((getline < "/proc/net/arp") > 0){if (!a[$4]){a[$4]="\?";}if (match($3,"0x[26]")){"ping -q -c 1 "$1" &";if (b[$4]){b[$4]=b[$4]"/"$1;}else{b[$4]=$1;}c[$4]=$6;}}while (("ip -6 neighbor show | grep -v fe80" | getline) > 0){if (b[$5]) {"ping -q -c 1 "$1" &";b[$5]=b[$5]"/"$1;}}for (mac in b){print(a[mac],b[mac],mac,c[mac]);}}\' ') + while true do + local ln = fd() + if ln == nil then break end + local name,ip,mac,dev = ln:match("^(%S+) (%S+) (%S+) (%S+)") + if mac and ip and name and dev then + rv[#rv+1] = { + hostname = name, + device = dev, + macaddr = mac, + ipaddr = ip + } + end + end + return rv +end + + +if luci.http.formvalue("status") == "1" then + local rv = { + onlines = online_data() + } + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + return +end +-%> + +<%+header%> + + + + +

<%:Status%>

+ +
+ <%:user online%> + + + + + + + + + + + +
<%:Hostname%><%:IPv4-Address%><%:MAC-Address%><%:Interface%>

<%:Collecting data...%>
+
+ +<%+footer%> \ No newline at end of file diff --git a/luci-app-onliner/readme.md b/luci-app-onliner/readme.md new file mode 100644 index 00000000..3e4db61e --- /dev/null +++ b/luci-app-onliner/readme.md @@ -0,0 +1,6 @@ +### 通过arp实现的在线人员查看的luci界面,统计误差为arp老化时间 ### +### 通过nlbwmon实现的实时网速查看每两秒更新 需要luci-app-nlbwmon ### + +![图片](https://user-images.githubusercontent.com/22387141/70726447-0c01b000-1d39-11ea-914c-f539cf4943a0.png) + +![图片](https://user-images.githubusercontent.com/22387141/70726285-d2c94000-1d38-11ea-8ee6-10fc083533d3.png) diff --git a/luci-app-onliner/root/usr/share/onliner/setnlbw.sh b/luci-app-onliner/root/usr/share/onliner/setnlbw.sh new file mode 100644 index 00000000..1f36adf0 --- /dev/null +++ b/luci-app-onliner/root/usr/share/onliner/setnlbw.sh @@ -0,0 +1,20 @@ +#!/bin/sh +PATH="/usr/sbin:/usr/bin:/sbin:/bin" +echo "1">/var/run/onsetnlbw +interval=$(uci get nlbwmon.@nlbwmon[0].refresh_interval) +uci set nlbwmon.@nlbwmon[0].refresh_interval="2s" +/etc/init.d/nlbwmon reload +while true +do + sleep 12 + watchdog=$(cat /var/run/onsetnlbw) + if [ "$watchdog"x == "0"x ]; then + uci set nlbwmon.@nlbwmon[0].refresh_interval=$interval + uci commit nlbwmon + /etc/init.d/nlbwmon reload + rm -f /var/run/onsetnlbw + exit 0 + else + echo "0">/var/run/onsetnlbw + fi +done \ No newline at end of file diff --git a/luci-app-parentcontrol b/luci-app-parentcontrol deleted file mode 160000 index 54d39a4f..00000000 --- a/luci-app-parentcontrol +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 54d39a4f226bd007532fb601aa542dadb5e66b06 diff --git a/luci-app-parentcontrol/Makefile b/luci-app-parentcontrol/Makefile new file mode 100644 index 00000000..ca41cba1 --- /dev/null +++ b/luci-app-parentcontrol/Makefile @@ -0,0 +1,20 @@ +# Copyright (C) 2016 Openwrt.org +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + + +PKG_NAME:=luci-app-parentcontrol +PKG_VERSION:=1.5 +PKG_RELEASE:=20230115 +PKG_LICENSE:=Apache-2.0 +LUCI_TITLE:=LuCI support for Parent Control +LUCI_DEPENDS:=+iptables-mod-filter +kmod-ipt-filter +LUCI_PKGARCH:=all +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature + + diff --git a/luci-app-parentcontrol/README.md b/luci-app-parentcontrol/README.md new file mode 100644 index 00000000..87d4554d --- /dev/null +++ b/luci-app-parentcontrol/README.md @@ -0,0 +1,60 @@ +# luci-app-parentcontrol + +https://github.com/sirpdboy/luci-app-parentcontrol + +家长控制 ,可以按时间控制机器,端口和关键字过滤等。 + +本家长控制,是2022年群里某生找本人出钱定制界面开发,代码原来网上开源代码只是不符合要求,请本人二次开发,现经和需求方协议将代码开源!以感谢大家的支持与鼓励!!也算是为OPENWRT开源代码添砖加瓦! + +当然,本身这代码也不是一个什么很高级的代码,权当是抛砖引玉,如果有什么不足之处,欢迎一起ISSE使之更完善。 + +最初版本参考Lienol大的网址过滤源码和参考部分网上开源代码而来。 + + +参考来源: +https://github.com/Lienol/openwrt-package/tree/main/luci-app-control-weburl + + + +## 使用与授权相关说明 + +- 本人开源的所有源码,任何引用需注明本处出处,如需修改二次发布必告之本人,未经许可不得做于任何商用用途。 + + +# My other project + +- 网络速度测试 :https://github.com/sirpdboy/NetSpeedTest + +- 定时设置插件 : https://github.com/sirpdboy/luci-app-autotimeset + +- 关机功能插件 : https://github.com/sirpdboy/luci-app-poweroffdevice + +- opentopd主题 : https://github.com/sirpdboy/luci-theme-opentopd + +- kucat 主题: https://github.com/sirpdboy/luci-theme-kucat + +- 家长控制: https://github.com/sirpdboy/luci-theme-parentcontrol + +- 系统高级设置 : https://github.com/sirpdboy/luci-app-advanced + +- ddns-go动态域名: https://github.com/sirpdboy/luci-app-ddns-go + +- 进阶设置(系统高级设置+主题设置kucat/agron/opentopd): https://github.com/sirpdboy/luci-app-advancedplus + +- 设置向导: https://github.com/sirpdboy/luci-app-wizard + +- 分区扩容: https://github.com/sirpdboy/luci-app-partexp + +- lukcy大吉: https://github.com/sirpdboy/luci-app-lukcy + +## 捐助 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明3.jpg) + +| 图飞了😂 | 图飞了😂 | +| :-----------------: | :-------------: | +|![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/支付宝.png) | ![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/微信.png) | + + + 图飞了😂 + diff --git a/luci-app-parentcontrol/luasrc/controller/parentcontrol.lua b/luci-app-parentcontrol/luasrc/controller/parentcontrol.lua new file mode 100644 index 00000000..fec42755 --- /dev/null +++ b/luci-app-parentcontrol/luasrc/controller/parentcontrol.lua @@ -0,0 +1,21 @@ +module("luci.controller.parentcontrol", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/parentcontrol") then return end + + entry({"admin", "control"}, firstchild(), "Control", 44).dependent = false + local e=entry({"admin","control","parentcontrol"},firstchild(),_("Parent Control"),2) + e.dependent=false + entry({"admin","control","parentcontrol","time"},cbi("parentcontrol/time"),_("Time Control"),1).leaf=true + entry({"admin", "control", "parentcontrol","weburl"}, cbi("parentcontrol/weburl"), _("Weburl Control"), 20).leaf = true + entry({"admin", "control", "parentcontrol","protocol"}, cbi("parentcontrol/protocol"), _("Protocol Control"), 30).leaf = true + entry({"admin", "control", "parentcontrol","status"}, call("status")).leaf = true +end + +function status() + local e = {} + e.status = luci.sys.call("iptables -L FORWARD|grep PARENTCONTROL >/dev/null") == 0 + -- e.status=luci.sys.call("[ `iptables -L FORWARD 2>/dev/null|grep -c '^PARENTCONTROL' 2>/dev/null` -gt 0 ] > /dev/null") == 0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end diff --git a/luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/protocol.lua b/luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/protocol.lua new file mode 100644 index 00000000..fe978845 --- /dev/null +++ b/luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/protocol.lua @@ -0,0 +1,112 @@ +local o = require "luci.sys" +local fs = require "nixio.fs" +local ipc = require "luci.ip" +local net = require "luci.model.network".init() +local sys = require "luci.sys" +local a, t, e +a = Map("parentcontrol", translate("Parent Control"), translate("利用iptables来管控数据包过滤以禁止符合设定条件的用户连接互联网的工具软件。
\ +协议过滤:可以控制指定MAC机器是否使用指定协议端口,包括IPV4和IPV6,端口可以是连续端口范围用冒号分隔如5000:5100或多个端口用逗号分隔如:5100,5110,5001:5002,440:443
不指定MAC就是代表限制所有机器,起控时间要小于停控时间,不指定时间表示时段" )) + +a.template = "parentcontrol/index" +t = a:section(TypedSection, "basic", translate("")) +t.anonymous = true +e = t:option(DummyValue, "parentcontrol_status", translate("当前状态")) +e.template = "parentcontrol/parentcontrol" +e.value = translate("Collecting data...") + +e = t:option(Flag, "enabled", translate("开启")) +e.rmempty = false + +e = t:option(ListValue, "algos", translate("过滤力度")) +e:value("bm", "一般过滤") +e:value("kmp", "强效过滤") +e.default = "kmp" + +e = t:option(ListValue, "control_mode",translate("限制模式"), translate("黑名单模式,列表中的客户端设置将被禁止;白名单模式:仅有列表中的客户端设置允许。")) +e.rmempty = false +e:value("white_mode", "白名单") +e:value("black_mode", "黑名单") +e.default = "black_mode" + +t = a:section(TypedSection, "protocol", translate("协议过滤")) +t.template = "cbi/tblsection" +t.anonymous = true +t.addremove = true +e = t:option(Value, "mac", translate("MAC地址(留空则过滤全部客户端)")) +e.placeholder = "ALL" +e.rmempty = true +o.net.mac_hints(function(t, a) e:value(t, "%s (%s)" % {t, a}) end) +e = t:option(ListValue, "proto", translate("端口协议")) +e.rmempty = false +e.default = 'tcp' +e:value("tcp", translate("TCP")) +e:value("udp", translate("UDP")) +e:value("icmp", translate("ICMP")) +e = t:option(Value, "ports", translate("源端口")) +e.rmempty = true +e = t:option(Value, "portd", translate("目的端口")) +e:value("",translate("ICMP")) +e:value("80", "TCP-HTTP") +e:value("443", "TCP-HTTPS") +e:value("22", "TCP-SSH") +e:value("1723", "TCP-PPTP") +e:value("25", "TCP-SMTP") +e:value("110", "TCP-POP3") +e:value("21", "TCP-FTP21") +e:value("23", "TCP-TELNET") +e:value("53", "TCP-DNS53") +e:value("20", "UDP-FTP20") +e:value("1701", "UDP-L2TP") +e:value("69", "UDP-TFTP") +e:value("500", "UDP-IPSEC") +e:value("53", "UDP-DNS53") +e:value("161", "UDP-SNMP") +e.rmempty = true + function validate_time(self, value, section) + local hh, mm, ss + hh, mm, ss = string.match (value, "^(%d?%d):(%d%d)$") + hh = tonumber (hh) + mm = tonumber (mm) + if hh and mm and hh <= 23 and mm <= 59 then + return value + else + return nil, "时间格式必须为 HH:MM 或者留空" + end + end +e = t:option(Value, "timestart", translate("起控时间")) +e.placeholder = '00:00' +e.default = '00:00' +e.validate = validate_time +e.rmempty = true +e = t:option(Value, "timeend", translate("停控时间")) +e.placeholder = '00:00' +e.default = '00:00' +e.validate = validate_time +e.rmempty = true + +week=t:option(ListValue,"week",translate("Week Day")) +week.rmempty = true +week:value('*',translate("Everyday")) +week:value(7,translate("Sunday")) +week:value(1,translate("Monday")) +week:value(2,translate("Tuesday")) +week:value(3,translate("Wednesday")) +week:value(4,translate("Thursday")) +week:value(5,translate("Friday")) +week:value(6,translate("Saturday")) +week.default='*' + + +e = t:option(Flag, "enable", translate("开启")) +e.rmempty = false +e.default = '1' + +a.apply_on_parse = true +a.on_after_apply = function(self,map) + luci.sys.exec("/etc/init.d/parentcontrol restart") +end + +return a + + + diff --git a/luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/time.lua b/luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/time.lua new file mode 100644 index 00000000..889ec8c4 --- /dev/null +++ b/luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/time.lua @@ -0,0 +1,87 @@ +local o = require "luci.sys" +local fs = require "nixio.fs" +local ipc = require "luci.ip" +local net = require "luci.model.network".init() +local sys = require "luci.sys" +local a, t, e +a = Map("parentcontrol", translate("Parent Control"), translate("利用iptables来管控数据包过滤以禁止符合设定条件的用户连接互联网的工具软件。
\ +时间限制:限制指定MAC地址机器是否联网.包括IPV4和IPV6
不指定MAC就是代表限制所有机器,起控时间要小于停控时间,不指定时间表示所有时段" )) + +a.template = "parentcontrol/index" +t = a:section(TypedSection, "basic", translate("")) +t.anonymous = true +e = t:option(DummyValue, "parentcontrol_status", translate("当前状态")) +e.template = "parentcontrol/parentcontrol" +e.value = translate("Collecting data...") + +e = t:option(Flag, "enabled", translate("开启")) +e.rmempty = false + +e = t:option(ListValue, "algos", translate("过滤力度")) +e:value("bm", "一般过滤") +e:value("kmp", "强效过滤") +e.default = "kmp" + +e = t:option(ListValue, "control_mode",translate("限制模式"), translate("黑名单模式,列表中的客户端设置将被禁止;白名单模式:仅有列表中的客户端设置允许。")) +e.rmempty = false +e:value("white_mode", "白名单") +e:value("black_mode", "黑名单") +e.default = "black_mode" + +t = a:section(TypedSection, "time", translate("时间限制")) +t.template = "cbi/tblsection" +t.anonymous = true +t.addremove = true + +e = t:option(Value, "mac", translate("MAC地址*")) +e.rmempty = true +o.net.mac_hints(function(t, a) e:value(t, "%s (%s)" % {t, a}) end) + + function validate_time(self, value, section) + local hh, mm, ss + hh, mm, ss = string.match (value, "^(%d?%d):(%d%d)$") + hh = tonumber (hh) + mm = tonumber (mm) + if hh and mm and hh <= 23 and mm <= 59 then + return value + else + return nil, "时间格式必须为 HH:MM 或者留空" + end + end +e = t:option(Value, "timestart", translate("起控时间")) +e.placeholder = '00:00' +e.default = '00:00' +e.validate = validate_time +e.rmempty = true +e = t:option(Value, "timeend", translate("停控时间")) +e.placeholder = '00:00' +e.default = '00:00' +e.validate = validate_time +e.rmempty = true + +week=t:option(ListValue,"week",translate("Week Day")) +week.rmempty = true +week:value('*',translate("Everyday")) +week:value(7,translate("Sunday")) +week:value(1,translate("Monday")) +week:value(2,translate("Tuesday")) +week:value(3,translate("Wednesday")) +week:value(4,translate("Thursday")) +week:value(5,translate("Friday")) +week:value(6,translate("Saturday")) +week.default='*' + + +e = t:option(Flag, "enable", translate("开启")) +e.rmempty = false +e.default = '1' + +a.apply_on_parse = true +a.on_after_apply = function(self,map) + luci.sys.exec("/etc/init.d/parentcontrol restart") +end + +return a + + + diff --git a/luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/weburl.lua b/luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/weburl.lua new file mode 100644 index 00000000..b279e12b --- /dev/null +++ b/luci-app-parentcontrol/luasrc/model/cbi/parentcontrol/weburl.lua @@ -0,0 +1,89 @@ + local o = require "luci.sys" +local fs = require "nixio.fs" +local ipc = require "luci.ip" +local net = require "luci.model.network".init() +local sys = require "luci.sys" + +local a, t, e +a = Map("parentcontrol", translate("Parent Control"), translate("利用iptables来管控数据包过滤以禁止符合设定条件的用户连接互联网的工具软件。
\ +网址过滤:指定“关键词/URL”过滤,可以是字符串或网址.包括IPV4和IPV6
不指定MAC就是代表控制所有机器,起控时间要小于停控时间,不指定时间就是所有时段" )) + + +a.template = "parentcontrol/index" +t = a:section(TypedSection, "basic", translate("")) +t.anonymous = true +e = t:option(DummyValue, "parentcontrol_status", translate("当前状态")) +e.template = "parentcontrol/parentcontrol" +e.value = translate("Collecting data...") + +e = t:option(Flag, "enabled", translate("开启")) +e.rmempty = false + +e = t:option(ListValue, "algos", translate("过滤力度")) +e:value("bm", "一般过滤") +e:value("kmp", "强效过滤") +e.default = "kmp" + +e = t:option(ListValue, "control_mode",translate("限制模式"), translate("黑名单模式,列表中的客户端设置将被禁止;白名单模式:仅有列表中的客户端设置允许。")) +e.rmempty = false +e:value("white_mode", "白名单") +e:value("black_mode", "黑名单") +e.default = "black_mode" + +t = a:section(TypedSection, "weburl", translate("网址过滤")) +t.template = "cbi/tblsection" +t.anonymous = true +t.addremove = true + +e = t:option(Value, "mac", translate("MAC地址(留空则过滤全部客户端)")) +e.rmempty = true +o.net.mac_hints(function(t, a) e:value(t, "%s (%s)" % {t, a}) end) +e = t:option( Value, "word", translate("关键词/URL(可留空)")) +e.rmempty = true + function validate_time(self, value, section) + local hh, mm, ss + hh, mm, ss = string.match (value, "^(%d?%d):(%d%d)$") + hh = tonumber (hh) + mm = tonumber (mm) + if hh and mm and hh <= 23 and mm <= 59 then + return value + else + return nil, "时间格式必须为 HH:MM 或者留空" + end + end +e = t:option(Value, "timestart", translate("起控时间")) +e.placeholder = '00:00' +e.default = '00:00' +e.validate = validate_time +e.rmempty = true +e = t:option(Value, "timeend", translate("停控时间")) +e.placeholder = '00:00' +e.default = '00:00' +e.validate = validate_time +e.rmempty = true + +week=t:option(ListValue,"week",translate("Week Day")) +week.rmempty = true +week:value('*',translate("Everyday")) +week:value(7,translate("Sunday")) +week:value(1,translate("Monday")) +week:value(2,translate("Tuesday")) +week:value(3,translate("Wednesday")) +week:value(4,translate("Thursday")) +week:value(5,translate("Friday")) +week:value(6,translate("Saturday")) +week.default='*' + +e = t:option(Flag, "enable", translate("开启")) +e.rmempty = false +e.default = '1' + +a.apply_on_parse = true +a.on_after_apply = function(self,map) + luci.sys.exec("/etc/init.d/parentcontrol restart") +end + +return a + + + diff --git a/luci-app-parentcontrol/luasrc/view/parentcontrol/index.htm b/luci-app-parentcontrol/luasrc/view/parentcontrol/index.htm new file mode 100644 index 00000000..97bf43c7 --- /dev/null +++ b/luci-app-parentcontrol/luasrc/view/parentcontrol/index.htm @@ -0,0 +1,12 @@ +<% include("cbi/map") %> + \ No newline at end of file diff --git a/luci-app-parentcontrol/luasrc/view/parentcontrol/parentcontrol.htm b/luci-app-parentcontrol/luasrc/view/parentcontrol/parentcontrol.htm new file mode 100644 index 00000000..7c7e23f0 --- /dev/null +++ b/luci-app-parentcontrol/luasrc/view/parentcontrol/parentcontrol.htm @@ -0,0 +1,3 @@ +<%+cbi/valueheader%> +<%=pcdata(self:cfgvalue(section) or self.default or "")%> +<%+cbi/valuefooter%> \ No newline at end of file diff --git a/luci-app-parentcontrol/po/zh-cn/parentcontrol.po b/luci-app-parentcontrol/po/zh-cn/parentcontrol.po new file mode 100644 index 00000000..d4d8a00f --- /dev/null +++ b/luci-app-parentcontrol/po/zh-cn/parentcontrol.po @@ -0,0 +1,23 @@ +msgid "Control" +msgstr "管控" + +msgid "Parent Control" +msgstr "家长控制" + +msgid "Time Control" +msgstr "时间限制" + +msgid "Weburl Control" +msgstr "网址过滤" + +msgid "Protocol Control" +msgstr "协议过滤" + +msgid "feature Control" +msgstr "配置过滤库" + +msgid "Week Day" +msgstr "设定星期" + +msgid "Everyday" +msgstr "每天" diff --git a/luci-app-parentcontrol/po/zh_Hans b/luci-app-parentcontrol/po/zh_Hans new file mode 100644 index 00000000..41451e4a --- /dev/null +++ b/luci-app-parentcontrol/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-parentcontrol/root/etc/config/parentcontrol b/luci-app-parentcontrol/root/etc/config/parentcontrol new file mode 100644 index 00000000..7958f94b --- /dev/null +++ b/luci-app-parentcontrol/root/etc/config/parentcontrol @@ -0,0 +1,49 @@ +config basic + option algos 'kmp' + option control_mode 'black_mode' + option enabled '0' + +config time + option timeoff '00:00' + option timeon '00:00' + option daysofweek 'Monday Tuesday Wednesday Thursday Friday Saturday Sunday' + option enable '0' + + +config weburl + option timeon '00:00' + option timeoff '00:00' + option daysofweek 'Monday Tuesday Wednesday Thursday Friday Saturday Sunday' + option keyword 'baidu' + option enable '0' + +config weburl + option timeon '00:00' + option timeoff '00:00' + option daysofweek 'Monday Tuesday Wednesday Thursday Friday Saturday Sunday' + option keyword 'www' + option enable '0' + +config protocol + option timeon '00:00' + option daysofweek 'Monday Tuesday Wednesday Thursday Friday Saturday Sunday' + option proto 'tcp' + option timeoff '00:00' + option enable '0' + option dport '80' + +config protocol + option proto 'tcp' + option timeon '00:00' + option timeoff '00:00' + option daysofweek 'Monday Tuesday Wednesday Thursday Friday Saturday Sunday' + option enable '0' + option dport '443' + +config protocol + option proto 'tcp' + option timeon '00:00' + option timeoff '00:00' + option daysofweek 'Monday Tuesday Wednesday Thursday Friday Saturday Sunday' + option enable '0' + option dport '22' diff --git a/luci-app-parentcontrol/root/etc/init.d/parentcontrol b/luci-app-parentcontrol/root/etc/init.d/parentcontrol new file mode 100755 index 00000000..bac771c3 --- /dev/null +++ b/luci-app-parentcontrol/root/etc/init.d/parentcontrol @@ -0,0 +1,103 @@ +#!/bin/sh /etc/rc.common +# sirpdboy at 2021-2022 , + +START=98 + +LOCK=/var/lock/parentcontrol + +set_rules() { +mmode=$1 +rulessum=$(grep -c $mmode /etc/config/parentcontrol) +for i in $(seq 0 $((rulessum-1))) +do + enable=$(uci -q get parentcontrol.@$mmode[$i].enable ) + if [ "$enable" == 1 ]; then + mac=$(uci -q get parentcontrol.@$mmode[$i].mac ) && MAC="-m mac --mac-source $mac" || MAC="" + word=$(uci -q get parentcontrol.@$mmode[$i].word ) && STR="-m string --string ${word} --algo ${algos}" || STR="" + proto=$(uci -q get parentcontrol.@$mmode[$i].proto ) || proto="tcp" + ports=$(uci -q get parentcontrol.@$mmode[$i].ports ) && SPO="--sport ${ports}" || SPO="" + portd=$(uci -q get parentcontrol.@$mmode[$i].portd ) && DPO="--dport ${portd}" || DPO="" + mMPT=`echo "$sport"|grep ","` && mSPO="-m multiport" || mSPO="" + mMPT=`echo "$dport"|grep ","` && mDPO="-m multiport" || mDPO="" + [ -z "$sport" -a -z "$dport" ] && PTO="" || PTO="-p ${proto} ${mSPOT} ${SPO} ${mDPO} ${DPO}" + timestart=$(uci get parentcontrol.@$mmode[$i].timestart 2>/dev/null) || timestart="00:00" + timeend=$(uci get parentcontrol.@$mmode[$i].timeend 2>/dev/null) || timeend="00:00" + week=$(uci get parentcontrol.@$mmode[$i].week |sed 's/ /,/g' 2>/dev/null) + [ -z "$timestart" -o -z "$timeend" -o "$timestart" = "$timeend" ] && TIME="" || TIME="--timestart ${timestart} --timestop ${timeend}" + [ -z "$week" -o "$week" = "*" ] && WEEK="" || WEEK="--weekdays ${week}" + [ -n "$TIME" -o -n "$WEEK" ] && WT="-m time --kerneltz ${TIME} ${WEEK}" || WT="" + + logger "PARENTCONTROL:WT${WT} PTO${PTO} MAC${MAC} STR${STR} " + if [ -n "$STR" -a "x$word" = "x!" ] ; then + iptables -I PARENTCONTROL ${WT} ${PTO} ${MAC} -j ${mode_reo} 2>/dev/null + ip6tables -I PARENTCONTROL ${WT} ${PTO} ${MAC} -j ${mode_reo} 2>/dev/null + logger "PARENTCONTROL1:WT${WT} PTO${PTO} MAC${MAC} STR${STR} ${mode_reo}" + elif [ -z "$STR" ] ; then + iptables -A PARENTCONTROL ${WT} ${PTO} ${MAC} -j ${mode_rej} 2>/dev/null + ip6tables -A PARENTCONTROL ${WT} ${PTO} ${MAC} -j ${mode_rej} 2>/dev/null + logger "PARENTCONTROL2:WT${WT} PTO${PTO} MAC${MAC} STR${STR} ${mode_rej}" + fi + if [ $control_mode == "white_mode" -o -n "$STR" ]; then + iptables -I PARENTCONTROL ${STR} ${WT} ${MAC} -j ${mode_reo} 2>/dev/null + ip6tables -I PARENTCONTROL ${STR} ${WT} ${MAC} -j ${mode_reo} 2>/dev/null + logger "PARENTCONTROL3:WT${WT} PTO${PTO} MAC${MAC} STR${STR} ${mode_reo} " + elif [ -n "$STR" ] ; then + iptables -I PARENTCONTROL ${STR} ${WT} ${MAC} -j ${mode_rej} 2>/dev/null + ip6tables -I PARENTCONTROL ${STR} ${WT} ${MAC} -j ${mode_rej} 2>/dev/null + logger "PARENTCONTROL4:WT${WT} PTO${PTO} MAC${MAC} STR${STR} ${mode_rej}" + fi + unset STR MAC WT PTO +fi +done +} + +start(){ +[ -f $LOCK ] && exit +iptables -C FORWARD -j PARENTCONTROL 2>/dev/null && stop +enabled=`uci -q get parentcontrol.@basic[0].enabled ` +[ "p$enabled" == "p1" ] || exit 1 + +Ssum=`grep -c 'enable .1.' /etc/config/parentcontrol` +if [ "$Ssum" -gt 0 ]; then + touch $LOCK + algos=`uci -q get parentcontrol.@basic[0].algos ` + iptables -N PARENTCONTROL 2>/dev/null || iptables -F PARENTCONTROL 2>/dev/null + ip6tables -N PARENTCONTROL 2>/dev/null || ip6tables -F PARENTCONTROL 2>/dev/null + iptables -C FORWARD -j PARENTCONTROL 2>/dev/null || iptables -I FORWARD -j PARENTCONTROL 2>/dev/null + ip6tables -C FORWARD -j PARENTCONTROL 2>/dev/null || ip6tables -I FORWARD -j PARENTCONTROL 2>/dev/null + control_mode=`uci -q get parentcontrol.@basic[0].control_mode ` + if [ $control_mode == "black_mode" ]; then + mode_rej=REJECT + mode_reo=RETURN + else + mode_rej=RETURN + mode_reo=REJECT + fi + set_rules time + set_rules protocol + + set_rules weburl + if [ $control_mode == "white_mode" ]; then + iptables -A PARENTCONTROL -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN 2>/dev/null + ip6tables -A PARENTCONTROL -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN 2>/dev/null + iptables -A PARENTCONTROL -j REJECT 2>/dev/null + ip6tables -A PARENTCONTROL -j REJECT 2>/dev/null + + fi + # iptables -C FORWARD -j PARENTCONTROL 2>/dev/null && ip6tables -C FORWARD -j PARENTCONTROL 2>/dev/null + rm -f $LOCK 2>/dev/null +fi + +} + +stop(){ + +iptables -D FORWARD -j PARENTCONTROL 2>/dev/null +ip6tables -D FORWARD -j PARENTCONTROL 2>/dev/null +iptables -F PARENTCONTROL 2>/dev/null +ip6tables -F PARENTCONTROL 2>/dev/null +iptables -X PARENTCONTROL 2>/dev/null +ip6tables -X PARENTCONTROL 2>/dev/null + +} + diff --git a/luci-app-parentcontrol/root/etc/parentcontrol.include b/luci-app-parentcontrol/root/etc/parentcontrol.include new file mode 100644 index 00000000..170397ee --- /dev/null +++ b/luci-app-parentcontrol/root/etc/parentcontrol.include @@ -0,0 +1,2 @@ +/etc/init.d/parentcontrol start + diff --git a/luci-app-parentcontrol/root/etc/parentcontrol/black.list b/luci-app-parentcontrol/root/etc/parentcontrol/black.list new file mode 100644 index 00000000..2c45f824 --- /dev/null +++ b/luci-app-parentcontrol/root/etc/parentcontrol/black.list @@ -0,0 +1,3 @@ +baidu +163.com + diff --git a/luci-app-parentcontrol/root/etc/parentcontrol/white.list b/luci-app-parentcontrol/root/etc/parentcontrol/white.list new file mode 100644 index 00000000..6e9a94a0 --- /dev/null +++ b/luci-app-parentcontrol/root/etc/parentcontrol/white.list @@ -0,0 +1 @@ +baidu.com \ No newline at end of file diff --git a/luci-app-parentcontrol/root/etc/uci-defaults/luci-app-parentcontrol b/luci-app-parentcontrol/root/etc/uci-defaults/luci-app-parentcontrol new file mode 100644 index 00000000..9b2f52c9 --- /dev/null +++ b/luci-app-parentcontrol/root/etc/uci-defaults/luci-app-parentcontrol @@ -0,0 +1,17 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@parentcontrol[-1] + add ucitrack parentcontrol + set ucitrack.@parentcontrol[-1].init=parentcontrol + commit ucitrack +EOF + +uci delete firewall.parentcontrol +uci set firewall.parentcontrol=include +uci set firewall.parentcontrol.type=script +uci set firewall.parentcontrol.path=/etc/parentcontrol.include +uci set firewall.parentcontrol.reload=1 +uci commit firewall +rm -f /tmp/luci-indexcache +exit 0 diff --git a/luci-app-parentcontrol/root/usr/share/rpcd/acl.d/luci-app-parentcontrol.json b/luci-app-parentcontrol/root/usr/share/rpcd/acl.d/luci-app-parentcontrol.json new file mode 100644 index 00000000..478e9763 --- /dev/null +++ b/luci-app-parentcontrol/root/usr/share/rpcd/acl.d/luci-app-parentcontrol.json @@ -0,0 +1,11 @@ +{ + "luci-app-parentcontrol": { + "description": "Grant UCI access for luci-app-parentcontrol", + "read": { + "uci": [ "parentcontrol" ] + }, + "write": { + "uci": [ "parentcontrol" ] + } + } +} diff --git a/luci-app-partexp b/luci-app-partexp deleted file mode 160000 index 0f0085fa..00000000 --- a/luci-app-partexp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0f0085fa0a0500bfe8bd5b5bab71853db463900c diff --git a/luci-app-partexp/Makefile b/luci-app-partexp/Makefile new file mode 100644 index 00000000..368b1b24 --- /dev/null +++ b/luci-app-partexp/Makefile @@ -0,0 +1,24 @@ +# +# Copyright (C) 2020-2022 sirpdboy +# +# This is free software, licensed under the GNU General Public License v3. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-partexp +PKG_VERSION:=0.1.9 +PKG_RELEASE:=20221201 + +PKG_LICENSE:=Apache-2.0 +PKG_MAINTAINER:=Sirpdboy + +LUCI_TITLE:=LuCI Support for Automatic Partition Mount +LUCI_DEPENDS:=+fdisk +block-mount +LUCI_PKGARCH:=all + + +include $(TOPDIR)/feeds/luci/luci.mk + + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-partexp/README.md b/luci-app-partexp/README.md new file mode 100644 index 00000000..b2dd875c --- /dev/null +++ b/luci-app-partexp/README.md @@ -0,0 +1,116 @@ +### 访问数:[![](https://visitor-badge.glitch.me/badge?page_id=sirpdboy-visitor-badge)] [![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ) + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明1.jpg) + += +# luci-app-partexp + +luci-app-partexp 一键自动格式化分区、扩容、自动挂载插件 +[![若部分图片无法正常显示,请挂上机场浏览或点这里到末尾看修复教程](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) + +[luci-app-partexp](https://github.com/sirpdboy/luci-app-partexp) +====================== + + +请 **认真阅读完毕** 本页面,本页面包含注意事项和如何使用。 + +## 功能说明: + + +#### 一键自动格式化分区、扩容、自动挂载插件,专为OPENWRT设计,简化OPENWRT在分区挂载上烦锁的操作。本插件是sirpdboy耗费大量精力制作测试,请勿删除制作者信息!! + + + +- [partexp](#luci-app-partexp) + - [特性](#特性) + - [使用方法](#使用方法) + - [说明](#说明) + - [界面](#界面) + - [捐助](#捐助) + + + +## 特性 + luci-app-partexp 自动获格式化分区扩容,自动挂载插件 + +## 使用方法 + +- 将luci-app-partexp添加至 LEDE/OpenWRT 源码的方法。 + +### 下载源码方法: + + ```Brach + + # 下载源码 + + git clone https://github.com/sirpdboy/luci-app-partexp.git package/luci-app-partexp + make menuconfig + + ``` +### 配置菜单 + + ```Brach + make menuconfig + # 找到 LuCI -> Applications, 选择 luci-app-partexp, 保存后退出。 + ``` + +### 编译 + + ```Brach + # 编译固件 + make package/luci-app-partexp/compile V=s + ``` + +## 说明 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明2.jpg) + +## 界面 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/partexp.jpg) + + + + +## 使用与授权相关说明 + +- 本人开源的所有源码,任何引用需注明本处出处,如需修改二次发布必告之本人,未经许可不得做于任何商用用途。 + + +# My other project + +- 网络速度测试 :https://github.com/sirpdboy/NetSpeedTest + +- 定时设置插件 : https://github.com/sirpdboy/luci-app-autotimeset + +- 关机功能插件 : https://github.com/sirpdboy/luci-app-poweroffdevice + +- opentopd主题 : https://github.com/sirpdboy/luci-theme-opentopd + +- kucat 主题: https://github.com/sirpdboy/luci-theme-kucat + +- 家长控制: https://github.com/sirpdboy/luci-theme-parentcontrol + +- 系统高级设置 : https://github.com/sirpdboy/luci-app-advanced + +- ddns-go动态域名: https://github.com/sirpdboy/luci-app-ddns-go + +- 进阶设置(系统高级设置+主题设置kucat/agron/opentopd): https://github.com/sirpdboy/luci-app-advancedplus + +- 设置向导: https://github.com/sirpdboy/luci-app-wizard + +- 分区扩容: https://github.com/sirpdboy/luci-app-partexp + +- lukcy大吉: https://github.com/sirpdboy/luci-app-lukcy + +## 捐助 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明3.jpg) + +| 图飞了😂 | 图飞了😂 | +| :-----------------: | :-------------: | +|![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/支付宝.png) | ![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/微信.png) | + + + 图飞了😂 + diff --git a/luci-app-partexp/luasrc/controller/partexp.lua b/luci-app-partexp/luasrc/controller/partexp.lua new file mode 100644 index 00000000..bf840dff --- /dev/null +++ b/luci-app-partexp/luasrc/controller/partexp.lua @@ -0,0 +1,80 @@ +--[[ +LuCI - Lua Configuration Partition Expansion + Copyright (C) 2022 sirpdboy https://github.com/sirpdboy/luci-app-partexp +]]-- +require "luci.util" +local name = 'partexp' + +module("luci.controller.partexp", package.seeall) +function index() + entry({"admin","system","partexp"},alias("admin", "system", "partexp", "global"),_("Partition Expansion"), 54) +-- entry({"admin", "system", "partexp", "global"}, form("partexp/global"), nil).leaf = true + entry({"admin", "system", "partexp", "global"}, cbi('partexp/global', {hideapplybtn = true, hidesavebtn = true, hideresetbtn = true}), _('Partition Expansion'), 10).leaf = true + entry({"admin", "system", "partexp","partexprun"}, call("partexprun")).leaf = true +end + +function get_log() + local e = {} + e.running = luci.sys.call("busybox ps -w | grep partexp | grep -v grep >/dev/null") == 0 + e.log = fs.readfile("/etc/partexp/partexp.log") or "" + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end + +function partexprun() + local uci = luci.model.uci.cursor() + local keep_config = luci.http.formvalue('keep_config') + local auto_format = luci.http.formvalue('auto_format') + local target_function = luci.http.formvalue('target_function') + local target_disk = luci.http.formvalue('target_disk') + --uci:delete(name, '@global[0]', global) + uci:set(name, '@global[0]', 'target_disk', target_disk) + uci:set(name, '@global[0]', 'target_function', target_function) + uci:set(name, '@global[0]', 'auto_format', auto_format) + uci:set(name, '@global[0]', 'keep_config', keep_config) + uci:commit(name) + -- e = nixio.exec("/bin/sh", "-c" ,"/etc/init.d/partexp autopart") + e = luci.sys.exec('/etc/init.d/partexp autopart') + + luci.http.prepare_content('application/json') + luci.http.write_json(e) +end + +function outexec(cmd) + 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 fork_exec(command) + local pid = nixio.fork() + if pid > 0 then + return + elseif pid == 0 then + -- change to root dir + nixio.chdir("/") + + -- patch stdin, out, err to /dev/null + local null = nixio.open("/dev/null", "w+") + if null then + nixio.dup(null, nixio.stderr) + nixio.dup(null, nixio.stdout) + nixio.dup(null, nixio.stdin) + if null:fileno() > 2 then + null:close() + end + end + + -- replace with target command + nixio.exec("/bin/sh", "-c", command) + end +end \ No newline at end of file diff --git a/luci-app-partexp/luasrc/model/cbi/partexp/global.lua b/luci-app-partexp/luasrc/model/cbi/partexp/global.lua new file mode 100644 index 00000000..c66a9b04 --- /dev/null +++ b/luci-app-partexp/luasrc/model/cbi/partexp/global.lua @@ -0,0 +1,83 @@ +--[[ +LuCI - Lua Configuration Interface + Copyright (C) 2022 sirpdboy https://github.com/sirpdboy/luci-app-partexp +]]-- +local fs = require "nixio.fs" +local util = require "nixio.util" +local tp = require "luci.template.parser" +local uci=luci.model.uci.cursor() + -- get all device names (sdX and mmcblkX) + local target_devnames = {} + for dev in fs.dir("/dev") do + if dev:match("^sd[a-z]$") + or dev:match("^mmcblk%d+$") + or dev:match("^sata[a-z]$") + or dev:match("^nvme%d+n%d+$") + then + table.insert(target_devnames, dev) + end + end + local devices = {} + for i, bname in pairs(target_devnames) do + local device_info = {} + local device = "/dev/" .. bname + device_info["name"] = bname + device_info["dev"] = device + + s = tonumber((fs.readfile("/sys/class/block/%s/size" % bname))) + device_info["size"] = s and math.floor(s / 2048) + + devices[#devices+1] = device_info +end + +local m,t,e +m = Map("partexp", "" .. translate("One click partition expansion mounting tool") .."", +translate( "Automatically format and mount the target device partition. If there are multiple partitions, it is recommended to manually delete all partitions before using this tool.
For specific usage, see:") ..translate("GitHub @sirpdboy") ) + +t=m:section(TypedSection,"global") +t.anonymous=true + +e=t:option(ListValue,"target_function", translate("Select function"),translate("Select the function to be performed")) +e:value("/overlay", translate("Expand application space overlay (/overlay)")) +-- e:value("/", translate("Use as root filesystem (/)")) +e:value("/opt", translate("Used as Docker data disk (/opt)")) +e:value("/dev", translate("Normal mount and use by device name(/dev/x1)")) + +e=t:option(ListValue,"target_disk", translate("Destination hard disk"),translate("Select the hard disk device to operate")) +for i, d in ipairs(devices) do + if d.name and d.size then + e:value(d.name, "%s (%s, %d MB)" %{ d.name, d.dev, d.size }) + elseif d.name then + e:value(d.name, "%s (%s)" %{ d.name, d.dev }) + end +end + +o=t:option(Flag,"keep_config",translate("Keep configuration")) +o:depends("target_function", "/overlay") +o.default=0 + +o=t:option(Flag,'auto_format', translate('Format before use')) +o:depends("target_function", "/opt") +o:depends("target_function", "/dev") +o.default=0 + +o=t:option(DummyValue, '', '') +o.rawhtml = true +o.template ='partexp' + + +e=t:option(TextValue,"log") +e.rows=15 +e.wrap="on" +e.readonly=true +e.cfgvalue=function(t,t) +return fs.readfile("/etc/partexp/partexp.log")or"" +end +e.write=function(e,e,e) +end + +-- e =t:option(DummyValue, '', '') +-- e.rawhtml = true +-- e.template = 'partexplog' + +return m diff --git a/luci-app-partexp/luasrc/model/diskmount.lua b/luci-app-partexp/luasrc/model/diskmount.lua new file mode 100644 index 00000000..3d747c34 --- /dev/null +++ b/luci-app-partexp/luasrc/model/diskmount.lua @@ -0,0 +1,40 @@ +--[[ +LuCI - Lua Configuration Interface + Copyright (C) 2022 sirpdboy https://github.com/sirpdboy/luci-app-partexp +]]-- + +local fs = require "nixio.fs" +local util = require "nixio.util" +local tp = require "luci.template.parser" +local uci=luci.model.uci.cursor() +local ver = require "luci.version" + +local d.list_disks = function() + -- get all device names (sdX and mmcblkX) + local target_devnames = {} + for dev in fs.dir("/dev") do + if dev:match("^sd[a-z]$") + or dev:match("^mmcblk%d+$") + or dev:match("^sata[a-z]$") + or dev:match("^nvme%d+n%d+$") + then + table.insert(target_devnames, dev) + end + end + local devices = {} + for i, bname in pairs(target_devnames) do + local device_info = {} + local device = "/dev/" .. bname + device_info["name"] = bname + device_info["dev"] = device + + s = tonumber((fs.readfile("/sys/class/block/%s/size" % bname))) + device_info["size"] = s and math.floor(s / 2048) + + devices[#devices+1] = device_info + end + return devices +end + + +return d diff --git a/luci-app-partexp/luasrc/view/partexp.htm b/luci-app-partexp/luasrc/view/partexp.htm new file mode 100644 index 00000000..457813f0 --- /dev/null +++ b/luci-app-partexp/luasrc/view/partexp.htm @@ -0,0 +1,106 @@ +<%# +Copyright (C) 2022 sirpdboy https://github.com/sirpdboy/luci-app-partexp +-%> +<% +local fs = require "nixio.fs" +%> + +<%+cbi/valueheader%> + + + +
+ "> + +
+ + + + +<%+cbi/valuefooter%> diff --git a/luci-app-partexp/luasrc/view/partexp/log.htm b/luci-app-partexp/luasrc/view/partexp/log.htm new file mode 100644 index 00000000..298a32f0 --- /dev/null +++ b/luci-app-partexp/luasrc/view/partexp/log.htm @@ -0,0 +1,16 @@ +<%+cbi/valueheader%> + + + +<%+cbi/valuefooter%> diff --git a/luci-app-partexp/po/zh-cn/partexp.po b/luci-app-partexp/po/zh-cn/partexp.po new file mode 100644 index 00000000..77573421 --- /dev/null +++ b/luci-app-partexp/po/zh-cn/partexp.po @@ -0,0 +1,70 @@ +msgid "" +msgstr "" +"Copyright (C) 2022 sirpdboy herboy2008@gmail.com https://github.com/sirpdboy/luci-app-partexp" +"This is free software, licensed under the GNU General Public License v3." + +msgid "Partition Expansion" +msgstr "分区扩容" + +msgid "One click partition expansion mounting tool" +msgstr "一键分区扩容挂载工具" + +msgid "Automatically format and mount the target device partition. If there are multiple partitions, it is recommended to manually delete all partitions before using this tool.
For specific usage, see:" +msgstr "自动对目标设备分区格式化挂载,如果有多分区建议手动删除所有分区再使用本工具.
使用说明见:" + +msgid "Select the function to be performed" +msgstr "选择需要执行的功能" + +msgid "Expand application space overlay (/overlay)" +msgstr "用于overlay软件空间 (/overlay)" + +msgid "Use as root filesystem (/)" +msgstr "用作根文件系统(/)" + +msgid "Used as Docker data disk (/opt)" +msgstr "用作Docker数据盘 (/opt)" + +msgid "Normal mount and use by device name(/dev/x1)" +msgstr "按设备名普通挂载使用(/dev/x1)" + +msgid "Destination hard disk" +msgstr "目标硬盘" + +msgid "Keep configuration" +msgstr "保留配置" + +msgid "Format before use" +msgstr "使用前格式化" + +msgid "Select the hard disk device to operate" +msgstr "选择需要操作的硬盘设备" + +msgid "Select function" +msgstr "选择功能" + +msgid "Perform operation" +msgstr "执行操作" + +msgid "To make the operation effective, the device will restart. Are you sure to execute?" +msgstr "警告:操作一旦确定无法取消,设备将会重启,是否确定执行?" + +msgid "Operation in progress, please wait..." +msgstr "操作执行中,请稍候..." + +msgid "After operation, restart the machine, please wait..." +msgstr "操作完毕,机器重启,请稍候..." + +msgid "Please delete the partition or share and try again" +msgstr "错误,请检查是否有足够空间或是共享使用中。" + +msgid "Restart the device to take effect. Confirm whether to continue?" +msgstr "重启设备操作才生效,确定是否继续执行?" + +msgid "Operation execution complete" +msgstr "操作执行完毕" + +msgid "Ticking indicates formatting" +msgstr "打勾选择表示格式化" + +msgid "Tick means to retain the settings" +msgstr "打勾选择表示保留设置" \ No newline at end of file diff --git a/luci-app-partexp/po/zh_Hans b/luci-app-partexp/po/zh_Hans new file mode 100644 index 00000000..41451e4a --- /dev/null +++ b/luci-app-partexp/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-partexp/root/etc/config/partexp b/luci-app-partexp/root/etc/config/partexp new file mode 100644 index 00000000..39986dfe --- /dev/null +++ b/luci-app-partexp/root/etc/config/partexp @@ -0,0 +1,5 @@ +config global + option target_function '/overlay' + option target_disk '' + option keep_config '1' + option auto_format '1' diff --git a/luci-app-partexp/root/etc/init.d/partexp b/luci-app-partexp/root/etc/init.d/partexp new file mode 100644 index 00000000..8d0789b5 --- /dev/null +++ b/luci-app-partexp/root/etc/init.d/partexp @@ -0,0 +1,298 @@ +#!/bin/sh /etc/rc.common + +# +# Copyright (C) 2021-2022 sirpdboy https://github.com/sirpdboy/luci-app-partexp + +# This is free software, licensed under the Apache License, Version 2.0 . +# + +START=99 +USE_PROCD=1 + +EXTRA_COMMANDS="autopart" + +LOCK=/var/lock/partexp.lock +LOGD=/etc/partexp +LOG=/etc/partexp/partexp.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() { +[ -d "$LOGD" ] || mkdir -p $LOGD +[ ! -f "$LOG" ] && echo "" > $LOG + +} + + +gen_log()( + [ -s $LOG ] && echo " ---------------------------------------------------------------------- " >> $LOG + log "自动分区扩展挂载开始执行..." +) + +log(){ + echo " $(date +'%Y-%m-%d %H:%M:%S') $*" >> $LOG +} + + +get_config() { + config_get target_function $1 target_function 1 + config_get target_disk $1 target_disk 1 + config_get_bool keep_config $1 keep_config 1 + config_get_bool auto_format $1 auto_format 1 +} +nfdisk(){ +#Start partition + fdisk /dev/$a << EOF >/dev/null 2> /dev/null +n +p + + + +wq +EOF + +} + +fdiskB(){ + a=$1 + b=$2 + log "检测$a是否分区..." + isP=`fdisk -l /dev/$a |grep -v "bytes"|grep "/dev/$a$b" ` + sleep 2 + isfdisk=0 + if [ ! "$isP" ];then + nfdisk + sleep 2 + isfdisk=1 + + else + isfdisk=2 + fi + isP=`fdisk -l /dev/$a |grep -v "bytes" | grep "/dev/$a$b"` + if [ "$isP" -a "$isfdisk" = 1 ] ;then + log "分区$a$b建立成功!" + elif [ "$isP" -a "$isfdisk" = 2 ] ;then + log "检测目标分区$a$b已存在." + else + log "分区$a$b建立失败,没有足够的空间操作失败!" + expquit 1 + fi + isD=`df -T | grep /dev/$a$b ` + if [ "$isD" ];then + eval $(block info "/dev/$a$b" | grep -o -e "MOUNT=\S*") + log "检测$a$b是不是被共享..." + sleep 1 + if [ "$MOUNT" ] ; then + msum=$(grep -c "config sambashare" /etc/config/samba4) + for i in $(seq 0 $((msum-1))) + do + dev=`uci -q get samba4.@sambashare[$i].device ` + [ $? -ne 0 ] && break + [ "$dev" = "$a$b" ] && { + uci delete samba4.@sambashare[$i] + uci commit + /etc/init.d/samba4 restart & + sleep 5 + + } + done + block umount /dev/$a$b + sleep 5 + eval $(block info "/dev/$a$b" | grep -o -e "MOUNT=\S*") + if [ "$MOUNT" ] ;then + log "分区$a$b被挂载$MOUNT共享使用,删除共享失败,请手动删除共享再重新操作!" + expquit 1 + else + log "分区$a$b被挂载$MOUNT共享使用,自动删除共享成功!" + fi + else + log "检测目标硬盘$a$b未被共享..." + fi + fi + isD=`df -T | grep /dev/$a$b | awk '{print $2}'` + if [ "$target_function" = "/" -o "$target_function" = "/overlay" ] ; then + mkfs.ext4 -L extroot /dev/$a$b >/dev/null 2> /dev/null + log "硬盘/dev/$a$b格式化成功!" + elif [ "$auto_format" = "1" -o "$isfdisk" = "1" - ! "$isD" ] ; then + mkfs.ext4 -F /dev/$a$b >/dev/null 2> /dev/null + log "硬盘/dev/$a$b格式化成功!" + else + log "硬盘/dev/$a$b无需格式化!" + fi + eval $(block info /dev/$a$b | grep -o -e "UUID=\S*") + if [ "$UUID" = "" ] ; then + log "获取/dev/$a$b分区信息失败!" + expquit 1 + else + log "成功获取/dev/$a$b分区信息!" + fi + [ -d "/mnt/$a$b" ] || mkdir -p /mnt/$a$b + isM=`block info /dev/$a$b` + isD=`df -T | grep /dev/$a$b | awk '{print $2}'` + if [ "$isM" -a "$isD" ] ;then + umount /mnt/$a$b + eval $(block info "/dev/$a$b" | grep -o -e "MOUNT=\S*") + if [ "$MOUNT" ] ; then + log "检测设备/dev/$a$b挂载$MOUNT,请取消读写权限再重试!" + expquit 1 + else + [ "$isD" == "ntfs" ] && mount -t ntfs-3g /dev/$a$b /mnt/$a$b || mount -o rw,noatime,discard /dev/$a$b /mnt/$a$b + fi + fi + log "检测设备/dev/$a$b分区是$isD格式!" + + if [ "$target_function" = "/" ] ; then + mkdir -p /tmp/introot + mount --bind / /tmp/introot + tar -C /tmp/introot -cvf - . | tar -C /mnt/$a$b -xf - + umount /tmp/introot + umount /mnt/$a$b + block detect > /etc/config/fstab + log "保留数据根目录扩展/dev/$a$b成功!" + uci set fstab.@global[0].delay_root="15" + uci -q set fstab.@mount[0].uuid="${UUID}" + uci -q set fstab.@mount[0].target='/' + uci -q set fstab.@mount[0].enabled='1' + uci commit fstab + + expquit 2 + + elif [ "$target_function" = "/overlay" ] ; then + if [ "$keep_config" = "1" ] ; then + + # cp -a -f /overlay/* /mnt/$a$b/ || cp -a -f /rom/overlay/* /mnt/$a$b/ + tar -C /overlay -cvf - . | tar -C /mnt/$a$b/ -xf - || tar -C /rom/overlay -cvf - . | tar -C /mnt/$a$b/ -xf - + umount /mnt/$a$b + block detect > /etc/config/fstab + + msum=$(grep -c "'mount'" /etc/config/fstab) + for i in $(seq 0 $((msum-1))) + do + zuuid=`uci -q get fstab.@mount[$i].uuid ` + [ $? -ne 0 ] && break + if [ "$zuuid" = "$UUID" ] ; then + uci -q set fstab.@mount[$i].target="/overlay" + uci -q set fstab.@mount[$i].enabled='1' + fi + done + uci set fstab.@global[0].delay_root="15" + uci commit fstab + log "保留数据overlay扩展/dev/$a$b成功!" + log "设备重启才能生效,重启中..." + expquit 2 + + else + + umount /mnt/$a$b + block detect > /etc/config/fstab + + + msum=$(grep -c "'mount'" /etc/config/fstab) + for i in $(seq 0 $((msum-1))) + do + zuuid=`uci -q get fstab.@mount[$i].uuid ` + [ $? -ne 0 ] && break + if [ "$zuuid" = "$UUID" ] ; then + uci -q set fstab.@mount[$i].target="/overlay" + uci -q set fstab.@mount[$i].enabled='1' + fi + done + uci set fstab.@global[0].delay_root="15" + uci commit fstab + log "不保留数据overlay扩展/dev/$a$b成功!" + log "设备重启才能生效,重启中..." + expquit 2 + + fi + else + block detect > /etc/config/fstab + mkdir -p $target_function + msum=$(grep -c "'mount'" /etc/config/fstab) + for i in $(seq 0 $((msum-1))) + do + zuuid=`uci -q get fstab.@mount[$i].uuid ` + [ $? -ne 0 ] && break + if [ "$zuuid" = "$UUID" ] ; then + + [ "$target_function" = "/opt" ] && uci -q set fstab.@mount[$i].target="$target_function" || uci -q set fstab.@mount[$i].target="/mnt/$a$b" + + uci -q set fstab.@mount[$i].enabled='1' + fi + done + uci commit fstab + [ "$target_function" = "/opt" ] && log "挂载/dev/$a$b到$target_function成功!" || log "挂载/dev/$a$b到/mnt/$a$b成功!" + log "设备重启才能生效,重启中..." + expquit 2 + + fi +} + +autopart() { + # [ -f $LOCK ] && exit + config_load partexp + config_foreach get_config global + init_env + limit_log $LOG 500 + # touch $LOCK + cat $LOG 2>/dev/null | sed -n '$p' | grep -q '自动分区扩展挂载开始执行...' || gen_log + + isB=`df -P|grep '/boot' | head -n1 | awk -F ' ' '{print $1}'` + isb=`fdisk -l | grep /dev/$target_disk | grep -v "bytes" | wc -l` + if [ "$isb" = 0 -o "$isb" = "" -o "$isb" = 1 ] ;then + isb=1 + elif [ "$isb" = 3 -o "$isb" = 4 ] ;then + isb=3 + fi + isP=`fdisk -l /dev/$target_disk |grep "Disk /dev/$target_disk"` + if [ "$isP" = "" ];then + log "没有检测到/dev/$target_disk目标硬盘!操作失败!" + expquit 1 + else + log "检测到操作目标硬盘:/dev/$target_disk$isb!" + + case "$target_disk" in + sd*) + [ "$isB" = "/dev/${target_disk}1" -a "$target_function" = "/overlay" ] && fdiskB $target_disk 3 || fdiskB $target_disk $isb + ;; + nvme*) + [ "$isB" = "/dev/${target_disk}p1" -a "$target_function" = "/overlay" ] && fdiskB $target_disk p3 || fdiskB $target_disk p$isb + ;; + mmc*) + [ "$isB" = "/dev/${target_disk}p1" -a "$target_function" = "/overlay" ] && fdiskB $target_disk p3 || fdiskB $target_disk p$isb + ;; + *) + log "未能识别/dev/$target_disk目标硬盘!请联系作者sirpdboy!" + expquit 1 + ;; + esac + + fi + # rm -f $LOCK +} + +start() { +init_env +[ x$x = x1 ] && exit || autopart + +} + +boot() { +x=1 +} + +expquit() { + rm -f $LOCK + echo $1 + [ $1 == 2 ] &&reboot + exit $1 +} diff --git a/luci-app-partexp/root/etc/uci-defaults/40_luci-partexp b/luci-app-partexp/root/etc/uci-defaults/40_luci-partexp new file mode 100644 index 00000000..6cd1ec09 --- /dev/null +++ b/luci-app-partexp/root/etc/uci-defaults/40_luci-partexp @@ -0,0 +1,5 @@ +#!/bin/sh +chmod +x /etc/init.d/partexp >/dev/null 2>&1 + +rm -rf /tmp/luci-modulecache /tmp/luci-indexcache* +exit 0 diff --git a/luci-app-partexp/root/usr/share/rpcd/acl.d/luci-app-partexp.json b/luci-app-partexp/root/usr/share/rpcd/acl.d/luci-app-partexp.json new file mode 100644 index 00000000..da249bf5 --- /dev/null +++ b/luci-app-partexp/root/usr/share/rpcd/acl.d/luci-app-partexp.json @@ -0,0 +1,11 @@ +{ + "luci-app-partexp": { + "description": "Grant UCI access for luci-app-partexp", + "read": { + "uci": [ "partexp" ] + }, + "write": { + "uci": [ "partexp" ] + } + } +} diff --git a/luci-app-poweroff b/luci-app-poweroff deleted file mode 160000 index 425b7a07..00000000 --- a/luci-app-poweroff +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 425b7a073cf9794a922af57c7008890e0111b79a diff --git a/luci-app-poweroff/LICENSE b/luci-app-poweroff/LICENSE new file mode 100644 index 00000000..930b26f1 --- /dev/null +++ b/luci-app-poweroff/LICENSE @@ -0,0 +1,379 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + Preamble + The GNU General Public License is a free, copyleft license for software and other kinds of works. + The licenses for most software and other practical works are designed to take away your freedom to share and change the works. +By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a +program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public +License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your +programs, too. + When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure +that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code +or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you +can do these things. + To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. +Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to +respect the freedom of others. + For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the +same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them +these terms so they know their rights. + Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you +this License giving you legal permission to copy, distribute and/or modify it. + For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For +both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be +attributed erroneously to authors of previous versions. + Some devices are designed to deny users access to install or run modified versions of the software inside them, although the +manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. +The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most +unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such +problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of +the GPL, as needed to protect the freedom of users. + Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development +and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied +to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render +the program non-free. + The precise terms and conditions for copying, distribution and modification follow. + TERMS AND CONDITIONS + 0. Definitions. + "This License" refers to version 3 of the GNU General Public License. + "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" +and "recipients" may be individuals or organizations. + To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than +the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the +earlier work. + A "covered work" means either the unmodified Program or a work based on the Program. + To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation +includes copying, distribution (with or without modification), making available to the public, and in some countries other +activities as well. + To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with +a user through a computer network, with no transfer of a copy, is not conveying. + An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently +visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work +(except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a +copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the +list meets this criterion. + 1. Source Code. + The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any +non-source form of a work. + A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in +the case of interfaces specified for a particular programming language, one that is widely used among developers working in that +language. + The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the +normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of +the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public +in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) +of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an +object code interpreter used to run it. + The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an +executable work) run the object code and to modify the work, including scripts to control those activities. However, it does +not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified +in performing those activities but which are not part of the work. For example, Corresponding Source includes interface +definition files associated with source files for the work, and the source code for shared libraries and dynamically linked +subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between +those subprograms and other parts of the work. + The Corresponding Source need not include anything that users can regenerate automatically from other parts of the +Corresponding Source. + The Corresponding Source for a work in source code form is that same work. + 2. Basic Permissions. + All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the +stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output +from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This +License acknowledges your rights of fair use or other equivalent, as provided by copyright law. + You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise +remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for +you, or provide you with facilities for running those works, provided that you comply with the terms of this License in +conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do +so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; +section 10 makes it unnecessary. + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations +under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting +circumvention of such measures. + When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any +intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third +parties' legal rights to forbid circumvention of technological measures. + 4. Conveying Verbatim Copies. + You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously +and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and +any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any +warranty; and give all recipients a copy of this License along with the Program. + You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a +fee. + 5. Conveying Modified Source Versions. + You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code +under the terms of section 4, provided that you also meet all of these conditions: + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the +covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or +legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate +does not cause this License to apply to the other parts of the aggregate. + 6. Conveying Non-Source Forms. + You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, in one of these ways: + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need +not be included in conveying the object code work. + A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for +personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining +whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product +received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the +status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the +product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant mode of use of the product. + "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required +to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding +Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case +prevented or interfered with solely because modification has been made. + If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the +conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the +recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source +conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither +you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been +installed in ROM). + The requirement to provide Installation Information does not include a requirement to continue to provide support service, +warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has +been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the +operation of the network or violates the rules and protocols for communication across the network. + Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is +publicly documented (and with an implementation available to the public in source code form), and must require no special +password or key for unpacking, reading or copying. + 7. Additional Terms. + "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its +conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in +this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the +Program, that part may be used separately under those permissions, but the entire Program remains governed by this License +without regard to the additional permissions. + When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any +part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) +You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate +copyright permission. + Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the +copyright holders of that material) supplement the terms of this License with terms: + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the +Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term +that is a further restriction, you may remove that term. If a license document contains a further restriction but permits +relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license +document, provided that the further restriction does not survive such relicensing or conveying. + If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of +the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as +exceptions; the above requirements apply either way. + 8. Termination. + You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to +propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses +granted under the third paragraph of section 11). + However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the +copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of +the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any +work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights +from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive +new licenses for the same material under section 10. + 9. Acceptance Not Required for Having Copies. + You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a +covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require +acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These +actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you +indicate your acceptance of this License to do so. + 10. Automatic Licensing of Downstream Recipients. + Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, +modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with +this License. + An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or +subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, +each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's +predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source +of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For +example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you +may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed +by making, using, selling, offering for sale, or importing the Program or any portion of it. + 11. Patents. + A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is +based. The work thus licensed is called the contributor's "contributor version". + A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already +acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling +its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the +contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner +consistent with the requirements of this License. + Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent +claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor +version. + In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to +enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To +"grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the +party. + If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available +for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other +readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive +yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the +requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual +knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered +work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance +of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, +propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to +all recipients of the covered work and works based on it. + A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not +convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, +under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the +third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in +connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or +that patent license was granted, prior to 28 March 2007. + Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that +may otherwise be available to you under applicable patent law. + 12. No Surrender of Others' Freedom. + If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this +License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy +simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey +it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom +you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from +conveying the Program. + 13. Use with the GNU Affero General Public License. + Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work +licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. +The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU +Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. + 14. Revised Versions of this License. + The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. +Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or +concerns. + Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU +General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of +that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a +version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. + If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that +proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + Later license versions may give you additional or different permissions. However, no additional obligations are imposed on +any author or copyright holder as a result of your choosing to follow a later version. + 15. Disclaimer of Warranty. + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE +COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK +AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL +NECESSARY SERVICING, REPAIR OR CORRECTION. + 16. Limitation of Liability. + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO +MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL +OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR +DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + 17. Interpretation of Sections 15 and 16. + If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their +terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in +connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Programs + If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this +is to make it free software which everyone can redistribute and change under these terms. + To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most +effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the +full notice is found. + + Copyright (C) + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program. If not, see . Also add information on how to contact you by +electronic and paper mail. + If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, +you would use an "about box". + You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the +program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see +. + The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a +subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is +what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read +. diff --git a/luci-app-poweroff/Makefile b/luci-app-poweroff/Makefile new file mode 100644 index 00000000..46990b42 --- /dev/null +++ b/luci-app-poweroff/Makefile @@ -0,0 +1,16 @@ +# Copyright (C) 2016 Openwrt.org +# +# This is free software, licensed under the Apache License, Version 2.0 . +# Maintained by eSir Playground + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-poweroff +PKG_VERSION:=20200726 +PKG_RELEASE:=1 +LUCI_TITLE:=LuCI Support of PowerOff Router +LUCI_PKGARCH:=all + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-poweroff/README.md b/luci-app-poweroff/README.md new file mode 100644 index 00000000..994222aa --- /dev/null +++ b/luci-app-poweroff/README.md @@ -0,0 +1,4 @@ +# Shut Down Your Router +[![GitHub](https://img.shields.io/github/license/esirplayground/luci-app-poweroff?label=LICENSE&logo=github&logoColor=%20)](https://github.com/esirplayground/luci-app-poweroff/blob/master/LICENSE) +![GitHub Stars](https://img.shields.io/github/stars/esirplayground/luci-app-poweroff.svg?style=flat&logo=appveyor&label=Stars&logo=github) +![GitHub Forks](https://img.shields.io/github/forks/esirplayground/luci-app-poweroff.svg?style=flat&logo=appveyor&label=Forks&logo=github) diff --git a/luci-app-poweroff/luasrc/controller/poweroff.lua b/luci-app-poweroff/luasrc/controller/poweroff.lua new file mode 100644 index 00000000..dcddbe32 --- /dev/null +++ b/luci-app-poweroff/luasrc/controller/poweroff.lua @@ -0,0 +1,10 @@ +module("luci.controller.poweroff",package.seeall) + +function index() + entry({"admin","system","poweroff"},template("poweroff"),_("PowerOff"),99) + entry({"admin","system","poweroff","call"},post("action_poweroff")) +end + +function action_poweroff() +luci.util.exec("/sbin/poweroff") +end \ No newline at end of file diff --git a/luci-app-poweroff/luasrc/view/poweroff.htm b/luci-app-poweroff/luasrc/view/poweroff.htm new file mode 100644 index 00000000..f843ddf2 --- /dev/null +++ b/luci-app-poweroff/luasrc/view/poweroff.htm @@ -0,0 +1,58 @@ +<%# + Maintained by eSirPlayground + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:PowerOff%>

+
+ +

<%:Shut down your router%>

+ +<%- local c = require("luci.model.uci").cursor():changes(); if c and next(c) then -%> +

<%:Warning: There are unsaved changes that will get lost on shutting down!%>

+<%- end -%> + +
+ + + + + + + +<%+footer%> diff --git a/luci-app-poweroff/po/zh-cn/poweroff.po b/luci-app-poweroff/po/zh-cn/poweroff.po new file mode 100644 index 00000000..2dfe25d2 --- /dev/null +++ b/luci-app-poweroff/po/zh-cn/poweroff.po @@ -0,0 +1,31 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2.4\n" +"Last-Translator: eSirPlayground \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: zh_CN\n" + +msgid "PowerOff" +msgstr "关机" + +msgid "Shut down your router" +msgstr "吹灯拔蜡,关机回家" + +msgid "Perform PowerOff" +msgstr "关机,走你~" + +msgid "Warning: There are unsaved changes that will get lost on shutting down!" +msgstr "警告:没保存的改动在关机的时候都会丢失!别惊讶,要么保存,要么放弃" + +msgid "Waiting for device..." +msgstr "设备有点懵,要等一下..." + +msgid "Router is shutting down..." +msgstr "正在关机,说啥也不好使了..." diff --git a/luci-app-poweroff/po/zh-tw/poweroff.po b/luci-app-poweroff/po/zh-tw/poweroff.po new file mode 100644 index 00000000..b9e0e63e --- /dev/null +++ b/luci-app-poweroff/po/zh-tw/poweroff.po @@ -0,0 +1,31 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2.4\n" +"Last-Translator: ystartgo \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: zh_tw\n" + +msgid "PowerOff" +msgstr "關機" + +msgid "Shut down your router" +msgstr "關閉您的路由器" + +msgid "Perform PowerOff" +msgstr "執行關機" + +msgid "Warning: There are unsaved changes that will get lost on shutting down!" +msgstr "警告:沒存檔的更動在關機的時候都會移失!別驚訝,要麼存檔,要麼放棄關機" + +msgid "Waiting for device..." +msgstr "設備努力中,要等一下..." + +msgid "Router is shutting down..." +msgstr "正在關機,等等就會自動關..." diff --git a/luci-app-poweroff/po/zh_Hans b/luci-app-poweroff/po/zh_Hans new file mode 120000 index 00000000..41451e4a --- /dev/null +++ b/luci-app-poweroff/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-poweroffdevice b/luci-app-poweroffdevice deleted file mode 160000 index bdca3af5..00000000 --- a/luci-app-poweroffdevice +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bdca3af5bb72200acbec3bfd4cf363aacf378c0d diff --git a/luci-app-poweroffdevice/Makefile b/luci-app-poweroffdevice/Makefile new file mode 100644 index 00000000..309b2ba3 --- /dev/null +++ b/luci-app-poweroffdevice/Makefile @@ -0,0 +1,18 @@ +# +# provides Web UI to shut down (power off) your device. +# routers are listed at https://github.com/sirpdboy/luci-app-poweroffdevice +# This is free software, licensed under the GNU General Public License v3. + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-poweroffdevice +LUCI_TITLE:=LuCI support for poweroffdevice Router +LUCI_DESCRIPTION:=provides Web UI to shut down (power off) your device. + +LUCI_PKGARCH:=all +PKG_VERSION:=1 +PKG_RELEASE:=4 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-poweroffdevice/README.md b/luci-app-poweroffdevice/README.md new file mode 100644 index 00000000..2babe50d --- /dev/null +++ b/luci-app-poweroffdevice/README.md @@ -0,0 +1,105 @@ +[![若部分图片无法正常显示,请挂上机场浏览或点这里到末尾看修复教程](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) + + 图飞了😂 + + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明1.jpg) + +[poweroffdevice 设备关机功能](luci-app-poweroffdevice) +========================================== + +[![](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)](#捐助-) + +请 **认真阅读完毕** 本页面,本页面包含注意事项和如何使用。 + +poweroffdevice是一款基于OPNEWRT编译的关机源码插件。 +----------------------------------------- + +## 写在前面: +---------------------------------- + -这个关机功能最早使用者是KOOLSHARE的固件。苦于OPENWRT中没有关机补丁,有感于前辈们的付出,苦思2020年4月动手在OPENWRT上首次使用此插件,此源码源于官方源码重启的源码修改而来. +之前一直有朋友在问,怎么使用关机插件,关机插件是有二种使用方式。一种是下载插件编译,这相对来说占用资源多一点,另一种就是在系统的源码上修改。 + +## 使用说明 [![](https://img.shields.io/badge/-使用说明-F5F5F5.svg)](#使用说明-) + +将poweroffdevice关机功能 添加至 LEDE/OpenWRT 源码的二种方法。 + +## 使用关机功能方法一: +标准方法使用关机插件。 + + ```Brach + # 下载源码 + + git clone https://github.com/sirpdboy/luci-app-poweroffdevice package/luci-app-poweroffdevice + + make menuconfig + ``` + ```Brach + # 配置菜单 + make menuconfig + # 找到 LuCI -> Applications, 选择 luci-app-poweroffdevice, 保存后退出。 + ``` + ```Brach + # 编译固件 + make package/luci-app-poweroffdevice/{clean,compile} V=s + ``` +## 使用关机功能方法二【推荐此方法】: +系统的源码上修改,集成到系统源码菜单中,不需要另外选择和设置即可使用关机功能 + ```Brach + #在编译前,运行如下二条命令,集成到系统源码菜单中,不需要另外选择和设置即可使用关机功能。 + cd openwrt #进入源码目录 + curl -fsSL https://raw.githubusercontent.com/sirpdboy/other/master/patch/poweroff/poweroff.htm > ./feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/poweroff.htm + curl -fsSL https://raw.githubusercontent.com/sirpdboy/other/master/patch/poweroff/system.lua > ./feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua + + ``` +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明2.jpg) + +## 说明 [![](https://img.shields.io/badge/-说明-F5F5F5.svg)](#说明-) + +源码来源:https://github.com/sirpdboy/luci-app-poweroffdevice + + + +## 使用与授权相关说明 + +- 本人开源的所有源码,任何引用需注明本处出处,如需修改二次发布必告之本人,未经许可不得做于任何商用用途。 + + +# My other project + +- 网络速度测试 :https://github.com/sirpdboy/NetSpeedTest + +- 定时设置插件 : https://github.com/sirpdboy/luci-app-autotimeset + +- 关机功能插件 : https://github.com/sirpdboy/luci-app-poweroffdevice + +- opentopd主题 : https://github.com/sirpdboy/luci-theme-opentopd + +- kucat 主题: https://github.com/sirpdboy/luci-theme-kucat + +- 家长控制: https://github.com/sirpdboy/luci-theme-parentcontrol + +- 系统高级设置 : https://github.com/sirpdboy/luci-app-advanced + +- ddns-go动态域名: https://github.com/sirpdboy/luci-app-ddns-go + +- 进阶设置(系统高级设置+主题设置kucat/agron/opentopd): https://github.com/sirpdboy/luci-app-advancedplus + +- 设置向导: https://github.com/sirpdboy/luci-app-wizard + +- 分区扩容: https://github.com/sirpdboy/luci-app-partexp + +- lukcy大吉: https://github.com/sirpdboy/luci-app-lukcy + +## 捐助 + +![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明3.jpg) + +| 图飞了😂 | 图飞了😂 | +| :-----------------: | :-------------: | +|![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/支付宝.png) | ![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/微信.png) | + + + 图飞了😂 + + diff --git a/luci-app-poweroffdevice/luasrc/controller/poweroffdevice.lua b/luci-app-poweroffdevice/luasrc/controller/poweroffdevice.lua new file mode 100644 index 00000000..4ce8d30b --- /dev/null +++ b/luci-app-poweroffdevice/luasrc/controller/poweroffdevice.lua @@ -0,0 +1,13 @@ + +module("luci.controller.poweroffdevice", package.seeall) + + +function index() + entry({"admin","system","poweroffdevice"},template("poweroffdevice/poweroffdevice"), _("PowerOff"), 92) + entry({"admin","system","poweroffdevice","call"},post("action_poweroff")) +end + +function action_poweroff() + luci.sys.exec("/sbin/poweroff" ) + +end diff --git a/luci-app-poweroffdevice/luasrc/view/poweroffdevice/poweroffdevice.htm b/luci-app-poweroffdevice/luasrc/view/poweroffdevice/poweroffdevice.htm new file mode 100644 index 00000000..996f4cd9 --- /dev/null +++ b/luci-app-poweroffdevice/luasrc/view/poweroffdevice/poweroffdevice.htm @@ -0,0 +1,57 @@ +<%# + Copyright routers are listed at https://github.com/sirpdboy/poweroffdevice + Licensed to the public under the Apache License 2.0. +-%> + + +<%+header%> + + +

<%:Power Off Device%>

+

<%:Turn off the power to the device you are using%>

+

<%:WARNING: Power off might result in a reboot on a device which not support power off.%>

+ + + + + + + +<%+footer%> diff --git a/luci-app-poweroffdevice/po/zh-cn/poweroffdevice.po b/luci-app-poweroffdevice/po/zh-cn/poweroffdevice.po new file mode 100644 index 00000000..3aa7ff27 --- /dev/null +++ b/luci-app-poweroffdevice/po/zh-cn/poweroffdevice.po @@ -0,0 +1,31 @@ +# +# provides Web UI to shut down (power off) your device. +# routers are listed at https://github.com/sirpdboy/luci-app-poweroffdevice +# This is free software, licensed under the GNU General Public License v3. + +msgid "PowerOff" +msgstr "关机" + +msgid "Power Off Device" +msgstr "设备关机" + +msgid "Perform Power Off" +msgstr "执行关机" + +msgid "Turn off the power to the device you are using" +msgstr "关闭您正在使用的设备的电源" + +msgid "WARNING: Power off might result in a reboot on a device which not support power off." +msgstr "警告:对于不支持关机的设备,关机可能会导致重新启动." + +msgid "Device unreachable" +msgstr "操作设备无效" + +msgid "Shutting Down..." +msgstr "正在关机..." + +msgid "Device shutdown complete!" +msgstr "设备关机完毕!" + + + diff --git a/luci-app-poweroffdevice/po/zh_Hans b/luci-app-poweroffdevice/po/zh_Hans new file mode 100644 index 00000000..41451e4a --- /dev/null +++ b/luci-app-poweroffdevice/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-pushbot b/luci-app-pushbot deleted file mode 160000 index 7f07b39d..00000000 --- a/luci-app-pushbot +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7f07b39d7a6a924b8e3d14d8071daa0fad7c650b diff --git a/luci-app-pushbot/.github/workflows/build-package-onx86.yml b/luci-app-pushbot/.github/workflows/build-package-onx86.yml new file mode 100644 index 00000000..d56a7c66 --- /dev/null +++ b/luci-app-pushbot/.github/workflows/build-package-onx86.yml @@ -0,0 +1,189 @@ +# +# Copyright (c) 2019-2020 P3TERX +# +# This is free software, licensed under the MIT License. +# See /LICENSE for more information. +# +# https://github.com/P3TERX/Actions-OpenWrt +# Description: Build OpenWrt using GitHub Actions +# + +name: Build luci-app-pushbot-x86 + +on: + repository_dispatch: + workflow_dispatch: + inputs: + ssh: + description: 'SSH connection to Actions' + required: false + default: 'false' +# schedule: +# - cron: 10 14 * * 5 + +env: + SDK_URL: https://downloads.openwrt.org/releases/22.03.0-rc5/targets/x86/64/openwrt-sdk-22.03.0-rc5-x86-64_gcc-11.2.0_musl.Linux-x86_64.tar.xz + PackageName: luci-app-pushbot + PackageSource_URL: https://github.com/zzsj0928/luci-app-pushbot + UPLOAD_Package: true + UPLOAD_COWTRANSFER: false + UPLOAD_WETRANSFER: true + UPLOAD_RELEASE: true + TZ: Asia/Shanghai + UPLOAD_ZZNAS: false + ftp_username: ${{ secrets.FTP_USERNAME }} + ftp_psw: ${{ secrets.FTP_PSW }} + ftp_ip: ${{ secrets.FTP_IP }} + TargetPath: OpenwrtImgs/packages/luci-app-pushbot + upload_file: luci-app-pushbot_* + whkey: ${{ secrets.WEBHOOK }} + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@main + + - name: Initialization environment + env: + DEBIAN_FRONTEND: noninteractive + run: | + sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc + sudo -E apt-get -qq update + sudo -E apt-get -qq install $(curl -fsSL git.io/depends-ubuntu-2004) + sudo -E apt-get -qq autoremove --purge + sudo -E apt-get -qq clean + sudo timedatectl set-timezone "$TZ" + sudo mkdir -p /workdir + sudo chown $USER:$GROUPS /workdir + + - name: Clone source code + working-directory: /workdir + run: | + df -hT $PWD + wget $SDK_URL + mkdir /workdir/openwrt + tar xf openwrt-sdk-* -C /workdir/openwrt --strip-components 1 + ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt + + - name: Update feeds + run: cd openwrt && ./scripts/feeds update -a + + - name: Install feeds + run: cd openwrt && ./scripts/feeds install -a + + - name: Load custom configuration + run: | + cd openwrt + git clone $PackageSource_URL package/$PackageName + make defconfig + echo "CONFIG_PACKAGE_$PackageName=y" >> ./.config + + + - name: SSH connection to Actions + uses: P3TERX/ssh2actions@v1.0.0 + if: (github.event.inputs.ssh == 'true' && github.event.inputs.ssh != 'false') || contains(github.event.action, 'ssh') + env: + TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} + TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} + + - name: Compile the package + id: compile + run: | + send_dingding="curl -s \"https://oapi.dingtalk.com/robot/send?access_token=${whkey}\" -H 'Content-Type: application/json' -d '{\"msgtype\": \"markdown\",\"markdown\": {\"title\":" + send_content0="【${PackageName}】正在启动编译!请稍后大约4小时..." + markdown_splitline="\n\n---\n\n" + GITHUB_WORKFLOW_URL=https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID + nowtime=`date "+%Y-%m-%d %H:%M:%S"` + eval "$send_dingding \"${send_content0}\",\"text\":\"${nowtime} $markdown_splitline #### ${send_content0}\n\n[点此链接查看](${GITHUB_WORKFLOW_URL})\"}}'" + + + cd openwrt + echo -e "$(nproc) thread compile" + make package/$PackageName/compile V=s + echo "::set-output name=status::success" + + - name: Check space usage + if: (!cancelled()) + run: df -hT + + - name: Organize files + id: organize + if: env.UPLOAD_Package == 'true' && !cancelled() + run: | + cd openwrt/bin/packages/*/base + echo "PackagePath=$PWD" >> $GITHUB_ENV + echo "::set-output name=status::success" + + - name: Upload package + uses: actions/upload-artifact@main + if: steps.organize.outputs.status == 'success' && !cancelled() + with: + name: ${{ env.upload_file }} + path: ${{ env.PackagePath }} + + - name: Upload package to cowtransfer + id: cowtransfer + if: steps.organize.outputs.status == 'success' && env.UPLOAD_COWTRANSFER == 'true' && !cancelled() + run: | + curl -fsSL git.io/file-transfer | sh + ./transfer cow --block 2621440 -s -p 64 --no-progress ${PackagePath}/${upload_file} 2>&1 | tee cowtransfer.log + echo "::warning file=cowtransfer.com::$(cat cowtransfer.log | grep https)" + echo "::set-output name=url::$(cat cowtransfer.log | grep https | cut -f3 -d" ")" + + - name: Upload firmware to WeTransfer + id: wetransfer + if: steps.organize.outputs.status == 'success' && env.UPLOAD_WETRANSFER == 'true' && !cancelled() + run: | + curl -fsSL git.io/file-transfer | sh + ./transfer wet -s -p 16 --no-progress ${PackagePath}/${upload_file} 2>&1 | tee wetransfer.log + echo "::warning file=wetransfer.com::$(cat wetransfer.log | grep https)" + echo "::set-output name=url::$(cat wetransfer.log | grep https | cut -f3 -d" ")" + + - name: Upload firmware to my NAS + id: zz-nas + if: steps.organize.outputs.status == 'success' && env.UPLOAD_ZZNAS == 'true' && !cancelled() + run: | + send_dingding="curl -s \"https://oapi.dingtalk.com/robot/send?access_token=${whkey}\" -H 'Content-Type: application/json' -d '{\"msgtype\": \"markdown\",\"markdown\": {\"title\":" + send_content1="【${PackageName}】编译成功!正在上传固件到NAS..." + send_content2="【${PackageName}】编译成功!固件成功上传到NAS。" + markdown_splitline="\n\n---\n\n" + GITHUB_WORKFLOW_URL=https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID + nowtime=`date "+%Y-%m-%d %H:%M:%S"` + eval "$send_dingding \"${send_content1}\",\"text\":\"${nowtime} $markdown_splitline #### ${send_content1}\n\n[点此链接查看](${GITHUB_WORKFLOW_URL})\"}}'" + + cd openwrt/bin/packages/*/base + echo $ftp_psw > /tmp/rsync.psw && chmod 600 /tmp/rsync.psw + rsync -avrzP $upload_file_1 $ftp_username@$ftp_ip::$TargetPath/$(date +"%Y.%m.%d-%H%M")/ --password-file=/tmp/rsync.psw + echo "::warning file=zz-nas.com::All Released Files Uploaded to ZZ-NAS" + + nowtime=`date "+%Y-%m-%d %H:%M:%S"` + eval "$send_dingding \"${send_content2}\",\"text\":\"${nowtime} $markdown_splitline #### ${send_content2}\n\n[点此链接查看](${GITHUB_WORKFLOW_URL})\"}}'" + + - name: Generate release tag + id: tag + if: env.UPLOAD_RELEASE == 'true' && !cancelled() + run: | + echo "::set-output name=release_tag::$(date +"%Y.%m.%d-%H%M")" + touch release.txt + [ $UPLOAD_COWTRANSFER = true ] && echo "🔗 [Cowtransfer](${{ steps.cowtransfer.outputs.url }})" >> release.txt + [ $UPLOAD_WETRANSFER = true ] && echo "🔗 [WeTransfer](${{ steps.wetransfer.outputs.url }})" >> release.txt + echo "::set-output name=status::success" + + - name: Upload package 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.PackagePath }}/${{ env.upload_file }} + + - name: Delete workflow runs + uses: GitRML/delete-workflow-runs@main + with: + retain_days: 1 + keep_minimum_runs: 3 diff --git a/luci-app-pushbot/Makefile b/luci-app-pushbot/Makefile new file mode 100644 index 00000000..2a779819 --- /dev/null +++ b/luci-app-pushbot/Makefile @@ -0,0 +1,22 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-pushbot +PKG_VERSION:=3.60 +PKG_RELEASE:=1 + +PKG_MAINTAINER:=tty228 zzsj0928 + +LUCI_TITLE:=LuCI support for Pushbot +LUCI_PKGARCH:=all +LUCI_DEPENDS:=+iputils-arping +curl +jq + +define Package/$(PKG_NAME)/conffiles +/etc/config/pushbot +/usr/bin/pushbot/api/diy.json +/usr/bin/pushbot/api/ipv4.list +/usr/bin/pushbot/api/ipv6.list +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-pushbot/README.md b/luci-app-pushbot/README.md new file mode 100644 index 00000000..3c3284a5 --- /dev/null +++ b/luci-app-pushbot/README.md @@ -0,0 +1,93 @@ +# 改名公告 +#### 2021年04月25日 起luci-app-serverchand 改名为 luci-app-pushbot + +如需拉取编译 +请把: + +`# git clone https://github.com/zzsj0928/luci-app-serverchand package/luci-app-serverchand` + +改为 + +`git clone https://github.com/zzsj0928/luci-app-pushbot package/luci-app-pushbot` + +并把 .config 中 + +`CONFIG_PACKAGE_luci-app-serverchand=y` + +改为 + +`CONFIG_PACKAGE_luci-app-pushbot=y` + +注意:本次改名需要提前备份serverchand配置,并于PushBot中重新配置。 + +再次谢谢各位支持 + +# 申明 +- 本插件由[tty228/luci-app-serverchan](https://github.com/tty228/luci-app-serverchan)原创. +- 因微信推送存在诸多弊端(无法分开聊天工具与功能性消息推送,通知内不显示内容,内容需要点开才能查看等), +- 故由 然后七年 @zzsj0928 重新修改为本插件,为钉钉机器人API使用。 +- 本插件工作在:openwrt +- 本插件支持:钉钉推送,企业微信推送,PushPlus推送,微信推送,企业微信应用推送,飞书推送,钉钉机器人推送,企业微信机器人推送,飞书机器人推送,一对多推送,Bark推送(仅iOS),PushDeer,PushDeer自架 +- 自20210911之后的版本,支持Bark群组,群组名默认为设备名 +- 自20210901之后的版本,增加依赖jq,请重新编译或在安装前同步安装jq + +# 显示效果 +## 通知栏:直接显示推送主题,一目了然,按设备不同,分组显示 + + +## 消息列表:直接显示最新推送的标题 + + +## 消息内容:直接显示所有推送信息,不用二次点开再查看 + + +# 下载 +- [luci-app-pushbot](https://github.com/zzsj0928/luci-app-pushbot/releases) + + +----------------------------------------------------- +##################################################### +----------------------------------------------------- + +# 以下为原插件简介: + +# 简介 +- 用于 OpenWRT/LEDE 路由器上进行 Server酱 微信/Telegram 推送的插件 +- 基于 serverchan 提供的接口发送信息,Server酱说明:http://sc.ftqq.com/1.version +- **基于斐讯 k3 制作,不同系统不同设备,请自行修改部分代码,无测试条件无法重现的 bug 不考虑修复** +- 依赖 iputils-arping + curl 命令,安装前请 `opkg update`,小内存路由谨慎安装 +- 使用主动探测设备连接的方式检测设备在线状态,以避免WiFi休眠机制,主动探测较为耗时,**如遇设备休眠频繁,请自行调整超时设置** +- 流量统计功能依赖 wrtbwmon ,自行选装或编译,该插件与 Routing/NAT 、Flow Offloading 冲突,开启无法获取流量,自行选择,L大版本直接编译 luci-app-wrtbwmon + +#### 主要功能 +- 路由 ip/ipv6 变动推送 +- 设备别名 +- 设备上线推送 +- 设备离线推送及流量使用情况 +- CPU 负载、温度监视 +- 定时推送设备运行状态 +- MAC 白名单、黑名单、按接口检测设备 +- 免打扰 +- 无人值守任务 + +#### 说明 +- 潘多拉系统、或不支持 sh 的系统,请将脚本开头 `#!/bin/sh` 改为 `#!/bin/bash`,或手动安装 `sh` +- 追新是没有意义的,没有问题没必要更新,上班事情忙完了,摸鱼又不会摸,只能靠写几行 bug ,才能缓解无聊这样子 + +#### 已知问题 +- 直接关闭接口时,该接口的离线设备会忽略检测 +- 部分设备无法读取到设备名,脚本使用 `cat /var/dhcp.leases` 命令读取设备名,如果 dhcp 中不存在设备名,则无法读取设备名(如二级路由设备、静态ip设备),请使用设备名备注 + +# Download +- [luci-app-serverchan](https://github.com/tty228/luci-app-serverchan/releases) +- [wrtbwmon](https://github.com/brvphoenix/wrtbwmon) +- [luci-app-wrtbwmon](https://github.com/brvphoenix/luci-app-wrtbwmon) + +#### ps +- 新功能看情况开发 +- 王者荣耀新赛季,不思进取中 +- 欢迎各种代码提交 +- 提交bug时请尽量带上设备信息,日志与描述(如执行`/usr/bin/serverchan/serverchan`后的提示、日志信息、/tmp/serverchan/ipAddress 文件信息) +- 三言两句恕我无能为力 +- 武汉加油 + diff --git a/luci-app-pushbot/luasrc/controller/pushbot.lua b/luci-app-pushbot/luasrc/controller/pushbot.lua new file mode 100644 index 00000000..5b586154 --- /dev/null +++ b/luci-app-pushbot/luasrc/controller/pushbot.lua @@ -0,0 +1,32 @@ +module("luci.controller.pushbot",package.seeall) + +function index() + if not nixio.fs.access("/etc/config/pushbot") then + return + end + + entry({"admin", "services", "pushbot"}, alias("admin", "services", "pushbot", "setting"),_("全能推送"), 30).dependent = true + entry({"admin", "services", "pushbot", "setting"}, cbi("pushbot/setting"),_("配置"), 40).leaf = true + entry({"admin", "services", "pushbot", "advanced"}, cbi("pushbot/advanced"),_("高级设置"), 50).leaf = true + entry({"admin", "services", "pushbot", "client"}, form("pushbot/client"), "在线设备", 80) + entry({"admin", "services", "pushbot", "log"}, form("pushbot/log"),_("日志"), 99).leaf = true + entry({"admin", "services", "pushbot", "get_log"}, call("get_log")).leaf = true + entry({"admin", "services", "pushbot", "clear_log"}, call("clear_log")).leaf = true + entry({"admin", "services", "pushbot", "status"}, call("act_status")).leaf = true +end + +function act_status() + local e={} + e.running=luci.sys.call("busybox ps|grep -v grep|grep -c pushbot >/dev/null")==0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end + +function get_log() + luci.http.write(luci.sys.exec( + "[ -f '/tmp/pushbot/pushbot.log' ] && cat /tmp/pushbot/pushbot.log")) +end + +function clear_log() + luci.sys.call("echo '' > /tmp/pushbot/pushbot.log") +end diff --git a/luci-app-pushbot/luasrc/model/cbi/pushbot/advanced.lua b/luci-app-pushbot/luasrc/model/cbi/pushbot/advanced.lua new file mode 100644 index 00000000..a6fb78ae --- /dev/null +++ b/luci-app-pushbot/luasrc/model/cbi/pushbot/advanced.lua @@ -0,0 +1,124 @@ +local nt = require "luci.sys".net +local fs=require"nixio.fs" + +m=Map("pushbot",translate("提示"), +translate("如果你不了解这些选项的含义,请不要修改这些选项。")) + +s = m:section(TypedSection, "pushbot", "高级设置") +s.anonymous = true +s.addremove = false + +a=s:option(Value,"up_timeout",translate('设备上线检测超时(s)')) +a.default = "2" +a.optional=false +a.datatype="uinteger" + +a=s:option(Value,"down_timeout",translate('设备离线检测超时(s)')) +a.default = "20" +a.optional=false +a.datatype="uinteger" + +a=s:option(Value,"timeout_retry_count",translate('离线检测次数')) +a.default = "2" +a.optional=false +a.datatype="uinteger" +a.description = translate("若无二级路由设备,信号强度良好,可以减少以上数值
因夜间 wifi 休眠较为玄学,遇到设备频繁推送断开,烦请自行调整参数
..╮(╯_╰)╭..") + +a=s:option(Value,"thread_num",translate('最大并发进程数')) +a.default = "3" +a.datatype="uinteger" + +a=s:option(Value, "soc_code", "自定义温度读取命令") +a.rmempty = true +a:value("",translate("默认")) +a:value("pve",translate("PVE 虚拟机")) +a.description = translate("请尽量避免使用特殊符号,如双引号、$、!等,执行结果需为数字,用于温度对比") + +a=s:option(Value,"pve_host",translate("宿主机地址")) +a.rmempty=true +a.default="10.0.0.2" +a.description = translate("请确认已经设置好密钥登陆,否则会引起脚本无法运行等错误!
PVE 安装 sensors 命令自行百度
密钥登陆例:
opkg update #更新列表
opkg install openssh-client openssh-keygen #安装openssh客户端
ssh-keygen -t rsa # 生成密钥文件(自行设定密码等信息)
ssh root@10.0.0.2 \"tee -a ~/.ssh/id_rsa.pub\" < ~/.ssh/id_rsa.pub # 传送公钥到 PVE
ssh root@10.0.0.2 \"cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys\" # 写入公钥到 PVE
ssh -i ~/.ssh/id_rsa root@10.0.0.2 sensors # 测试温度命令") +a:depends({soc_code="pve"}) + +a=s:option(Value,"pve_port",translate("SSH端口")) +a.rmempty=true +a.default="22" +a.description = translate("默认为22,如有自定义,请填写自定义SSH端口") +a:depends({soc_code="pve"}) + +a=s:option(Button,"soc",translate("测试温度命令")) +a.inputtitle = translate("输出信息") +a.write = function() + luci.sys.call("/usr/bin/pushbot/pushbot soc") + luci.http.redirect(luci.dispatcher.build_url("admin","services","pushbot","advanced")) +end + +if nixio.fs.access("/tmp/pushbot/soc_tmp") then +e=s:option(TextValue,"soc_tmp") +e.rows=2 +e.readonly=true +e.cfgvalue = function() + return luci.sys.exec("cat /tmp/pushbot/soc_tmp && rm -f /tmp/pushbot/soc_tmp") +end +end + +a=s:option(Flag,"err_enable",translate("无人值守任务")) +a.default=0 +a.rmempty=true +a.description = translate("请确认脚本可以正常运行,否则可能造成频繁重启等错误!") + +a=s:option(Flag,"err_sheep_enable",translate("仅在免打扰时段重拨")) +a.default=0 +a.rmempty=true +a.description = translate("避免白天重拨 ddns 域名等待解析,此功能不影响断网检测
因夜间跑流量问题,该功能可能不稳定") +a:depends({err_enable="1"}) + +a= s:option(DynamicList, "err_device_aliases", translate("关注列表")) +a.rmempty = true +a.description = translate("只会在列表中设备都不在线时才会执行
免打扰时段一小时后,关注设备五分钟低流量(约100kb/m)将视为离线") +nt.mac_hints(function(mac, name) a :value(mac, "%s (%s)" %{ mac, name }) end) +a:depends({err_enable="1"}) + +a=s:option(ListValue,"network_err_event",translate("网络断开时")) +a.default="" +a:depends({err_enable="1"}) +a:value("",translate("无操作")) +a:value("1",translate("重启路由器")) +a:value("2",translate("重新拨号")) +a:value("3",translate("修改相关设置项,尝试自动修复网络")) +a.description = translate("选项 1 选项 2 不会修改设置,并最多尝试 2 次。
选项 3 会将设置项备份于 /usr/bin/pushbot/configbak 目录,并在失败后还原。
【!!无法保证兼容性!!】不熟悉系统设置项,不会救砖请勿使用") + +a=s:option(ListValue,"system_time_event",translate("定时重启")) +a.default="" +a:depends({err_enable="1"}) +a:value("",translate("无操作")) +a:value("1",translate("重启路由器")) +a:value("2",translate("重新拨号")) + +a= s:option(Value, "autoreboot_time", "系统运行时间大于") +a.rmempty = true +a.default = "24" +a.datatype="uinteger" +a:depends({system_time_event="1"}) +a.description = translate("单位为小时") + +a=s:option(Value, "network_restart_time", "网络在线时间大于") +a.rmempty = true +a.default = "24" +a.datatype="uinteger" +a:depends({system_time_event="2"}) +a.description = translate("单位为小时") + +a=s:option(Flag,"public_ip_event",translate("重拨尝试获取公网 ip")) +a.default=0 +a.rmempty=true +a:depends({err_enable="1"}) +a.description = translate("重拨时不会推送 ip 变动通知,并会导致你的域名无法及时更新 ip 地址
请确认你可以通过重拨获取公网 ip,否则这不仅徒劳无功还会引起频繁断网
移动等大内网你就别挣扎了!!") + +a= s:option(Value, "public_ip_retry_count", "当天最大重试次数") +a.rmempty = true +a.default = "10" +a.datatype="uinteger" +a:depends({public_ip_event="1"}) + +return m diff --git a/luci-app-pushbot/luasrc/model/cbi/pushbot/client.lua b/luci-app-pushbot/luasrc/model/cbi/pushbot/client.lua new file mode 100644 index 00000000..dbb80f2b --- /dev/null +++ b/luci-app-pushbot/luasrc/model/cbi/pushbot/client.lua @@ -0,0 +1,6 @@ +f = SimpleForm("pushbot") +luci.sys.call("/usr/bin/pushbot/pushbot client") +f.reset = false +f.submit = false +f:append(Template("pushbot/pushbot_client")) +return f diff --git a/luci-app-pushbot/luasrc/model/cbi/pushbot/log.lua b/luci-app-pushbot/luasrc/model/cbi/pushbot/log.lua new file mode 100644 index 00000000..0b73ae08 --- /dev/null +++ b/luci-app-pushbot/luasrc/model/cbi/pushbot/log.lua @@ -0,0 +1,5 @@ +f = SimpleForm("pushbot") +f.reset = false +f.submit = false +f:append(Template("pushbot/pushbot_log")) +return f diff --git a/luci-app-pushbot/luasrc/model/cbi/pushbot/setting.lua b/luci-app-pushbot/luasrc/model/cbi/pushbot/setting.lua new file mode 100644 index 00000000..f6330cf2 --- /dev/null +++ b/luci-app-pushbot/luasrc/model/cbi/pushbot/setting.lua @@ -0,0 +1,552 @@ + +local nt = require "luci.sys".net +local fs=require"nixio.fs" +local e=luci.model.uci.cursor() +local net = require "luci.model.network".init() +local sys = require "luci.sys" +local ifaces = sys.net:devices() + +m=Map("pushbot",translate("PushBot"), +translate("「全能推送」,英文名「PushBot」,是一款从服务器推送报警信息和日志到各平台的工具。
支持钉钉推送,企业微信推送,PushPlus推送。
本插件由tty228/luci-app-serverchan创建,然后七年修改为全能推送自用。

如果你在使用中遇到问题,请到这里提交:") +.. [[]] +.. translate("github 项目地址") +.. [[]] +) + +m:section(SimpleSection).template = "pushbot/pushbot_status" + +s=m:section(NamedSection,"pushbot","pushbot",translate("")) +s:tab("basic", translate("基本设置")) +s:tab("content", translate("推送内容")) +s:tab("crontab", translate("定时推送")) +s:tab("disturb", translate("免打扰")) +s.addremove = false +s.anonymous = true + +--基本设置 +a=s:taboption("basic", Flag,"pushbot_enable",translate("启用")) +a.default=0 +a.rmempty = true + +--精简模式 +a = s:taboption("basic", MultiValue, "lite_enable", translate("精简模式")) +a:value("device", translate("精简当前设备列表")) +a:value("nowtime", translate("精简当前时间")) +a:value("content", translate("只推送标题")) +a.widget = "checkbox" +a.default = nil +a.optional = true + +--推送模式 +a=s:taboption("basic", ListValue,"jsonpath",translate("推送模式")) +a.default="/usr/bin/pushbot/api/dingding.json" +a.rmempty = true +a:value("/usr/bin/pushbot/api/dingding.json",translate("钉钉")) +a:value("/usr/bin/pushbot/api/ent_wechat.json",translate("企业微信")) +a:value("/usr/bin/pushbot/api/feishu.json",translate("飞书")) +a:value("/usr/bin/pushbot/api/bark.json",translate("Bark")) +a:value("/usr/bin/pushbot/api/pushplus.json",translate("PushPlus")) +a:value("/usr/bin/pushbot/api/pushdeer.json",translate("PushDeer")) +a:value("/usr/bin/pushbot/api/diy.json",translate("自定义推送")) + +a=s:taboption("basic", Value,"dd_webhook",translate('Webhook'), translate("钉钉机器人 Webhook")..",只输入access_token=后面的即可
调用代码获取点击这里

") +a.rmempty = true +a:depends("jsonpath","/usr/bin/pushbot/api/dingding.json") + +a=s:taboption("basic", Value, "we_webhook", translate("Webhook"),translate("企业微信机器人 Webhook")..",只输入key=后面的即可
调用代码获取点击这里

") +a.rmempty = true +a:depends("jsonpath","/usr/bin/pushbot/api/ent_wechat.json") + +a=s:taboption("basic", Value,"pp_token",translate('PushPlus Token'), translate("PushPlus Token").."
调用代码获取点击这里

") +a.rmempty = true +a:depends("jsonpath","/usr/bin/pushbot/api/pushplus.json") + +a=s:taboption("basic", ListValue,"pp_channel",translate('PushPlus Channel')) +a.rmempty = true +a:depends("jsonpath","/usr/bin/pushbot/api/pushplus.json") +a:value("wechat",translate("wechat:PushPlus微信公众号")) +a:value("cp",translate("cp:企业微信应用")) +a:value("webhook",translate("webhook:第三方webhook")) +a:value("sms",translate("sms:短信")) +a:value("mail",translate("mail:邮箱")) +a.description = translate("第三方webhook:企业微信、钉钉、飞书、server酱
sms短信/mail邮箱:PushPlus暂未开放
具体channel设定参见:点击这里") + +a=s:taboption("basic", Value,"pp_webhook",translate('PushPlus Custom Webhook'), translate("PushPlus 自定义Webhook").."
第三方webhook或企业微信调用
具体自定义Webhook设定参见:点击这里

") +a.rmempty = true +a:depends("pp_channel","cp") +a:depends("pp_channel","webhook") + +a=s:taboption("basic", Flag,"pp_topic_enable",translate("PushPlus 一对多推送")) +a.default=0 +a.rmempty = true +a:depends("pp_channel","wechat") + +a=s:taboption("basic", Value,"pp_topic",translate('PushPlus Topic'), translate("PushPlus 群组编码").."
一对多推送时指定的群组编码
具体群组编码Topic设定参见:点击这里

") +a.rmempty = true +a:depends("pp_topic_enable","1") + +a=s:taboption("basic", Value,"pushdeer_key",translate('PushDeer Key'), translate("PushDeer Key").."
调用代码获取点击这里

") +a.rmempty = true +a:depends("jsonpath","/usr/bin/pushbot/api/pushdeer.json") + +a=s:taboption("basic", Flag,"pushdeer_srv_enable",translate("自建 PushDeer 服务器")) +a.default=0 +a.rmempty = true +a:depends("jsonpath","/usr/bin/pushbot/api/pushdeer.json") + +a=s:taboption("basic", Value,"pushdeer_srv",translate('PushDeer Server'), translate("PushDeer 自建服务器地址").."
如https://your.domain:port
具体自建服务器设定参见:点击这里

") +a.rmempty = true +a:depends("pushdeer_srv_enable","1") + +a=s:taboption("basic", Value,"fs_webhook",translate('WebHook'), translate("飞书 WebHook").."
调用代码获取点击这里

") +a.rmempty = true +a:depends("jsonpath","/usr/bin/pushbot/api/feishu.json") + +a=s:taboption("basic", Value,"bark_token",translate('Bark Token'), translate("Bark Token").."
调用代码获取点击这里

") +a.rmempty = true +a:depends("jsonpath","/usr/bin/pushbot/api/bark.json") + +a=s:taboption("basic", Flag,"bark_srv_enable",translate("自建 Bark 服务器")) +a.default=0 +a.rmempty = true +a:depends("jsonpath","/usr/bin/pushbot/api/bark.json") + +a=s:taboption("basic", Value,"bark_srv",translate('Bark Server'), translate("Bark 自建服务器地址").."
如https://your.domain:port
具体自建服务器设定参见:点击这里

") +a.rmempty = true +a:depends("bark_srv_enable","1") + +a=s:taboption("basic", Value,"bark_sound",translate('Bark Sound'), translate("Bark 通知声音").."
如silence.caf
具体设定参见:点击这里

") +a.rmempty = true +a.default = "silence.caf" +a:depends("jsonpath","/usr/bin/pushbot/api/bark.json") + +a=s:taboption("basic", Flag,"bark_icon_enable",translate(" Bark 通知图标")) +a.default=0 +a.rmempty = true +a:depends("jsonpath","/usr/bin/pushbot/api/bark.json") + +a=s:taboption("basic", Value,"bark_icon",translate('Bark Icon'), translate("Bark 通知图标").."(仅 iOS15 或以上支持)
如http://day.app/assets/images/avatar.jpg
具体设定参见:点击这里

") +a.rmempty = true +a.default = "http://day.app/assets/images/avatar.jpg" +a:depends("bark_icon_enable","1") + +a=s:taboption("basic", Value,"bark_level",translate('Bark Level'), translate("Bark 时效性通知").."
可选参数值:
active:不设置时的默认值,系统会立即亮屏显示通知。
timeSensitive:时效性通知,可在专注状态下显示通知。
passive:仅将通知添加到通知列表,不会亮屏提醒。") +a.rmempty = true +a.default = "active" +a:depends("jsonpath","/usr/bin/pushbot/api/bark.json") + +a=s:taboption("basic", TextValue, "diy_json", translate("自定义推送")) +a.optional = false +a.rows = 28 +a.wrap = "soft" +a.cfgvalue = function(self, section) + return fs.readfile("/usr/bin/pushbot/api/diy.json") +end +a.write = function(self, section, value) + fs.writefile("/usr/bin/pushbot/api/diy.json", value:gsub("\r\n", "\n")) +end +a:depends("jsonpath","/usr/bin/pushbot/api/diy.json") + +a=s:taboption("basic", Button,"__add",translate("发送测试")) +a.inputtitle=translate("发送") +a.inputstyle = "apply" +function a.write(self, section) + luci.sys.call("cbi.apply") + luci.sys.call("/usr/bin/pushbot/pushbot test &") +end + +a=s:taboption("basic", Value,"device_name",translate('本设备名称')) +a.rmempty = true +a.description = translate("在推送信息标题中会标识本设备名称,用于区分推送信息的来源设备") + +a=s:taboption("basic", Value,"sleeptime",translate('检测时间间隔')) +a.rmempty = true +a.optional = false +a.default = "60" +a.datatype = "and(uinteger,min(10))" +a.description = translate("越短的时间时间响应越及时,但会占用更多的系统资源") + +a=s:taboption("basic", ListValue,"oui_data",translate("MAC设备信息数据库")) +a.rmempty = true +a.default="" +a:value("",translate("关闭")) +a:value("1",translate("简化版")) +a:value("2",translate("完整版")) +a:value("3",translate("网络查询")) +a.description = translate("需下载 4.36m 原始数据,处理后完整版约 1.2M,简化版约 250kb
若无梯子,请勿使用网络查询") + +a=s:taboption("basic", Flag,"oui_dir",translate("下载到内存")) +a.rmempty = true +a:depends("oui_data","1") +a:depends("oui_data","2") +a.description = translate("懒得做自动更新了,下载到内存中,重启会重新下载
若无梯子,还是下到机身吧") + +a=s:taboption("basic", Flag,"reset_regularly",translate("每天零点重置流量数据")) +a.rmempty = true + +a=s:taboption("basic", Flag,"debuglevel",translate("开启日志")) +a.rmempty = true + +a= s:taboption("basic", DynamicList, "device_aliases", translate("设备别名")) +a.rmempty = true +a.description = translate("
请输入设备 MAC 和设备别名,用“-”隔开,如:
XX:XX:XX:XX:XX:XX-我的手机") + +--设备状态 +a=s:taboption("content", ListValue,"pushbot_ipv4",translate("IPv4 变更通知")) +a.rmempty = true +a.default="" +a:value("",translate("关闭")) +a:value("1",translate("通过接口获取")) +a:value("2",translate("通过URL获取")) + +a = s:taboption("content", ListValue, "ipv4_interface", translate("接口名称")) +a.rmempty = true +a:depends({pushbot_ipv4="1"}) +for _, iface in ipairs(ifaces) do + if not (iface == "lo" or iface:match("^ifb.*")) then + local nets = net:get_interface(iface) + nets = nets and nets:get_networks() or {} + for k, v in pairs(nets) do + nets[k] = nets[k].sid + end + nets = table.concat(nets, ",") + a:value(iface, ((#nets > 0) and "%s (%s)" % {iface, nets} or iface)) + end +end +a.description = translate("
一般选择 wan 接口,多拨环境请自行选择") + +a=s:taboption("content", TextValue, "ipv4_list", translate("IPv4 API列表")) +a.optional = false +a.rows = 8 +a.wrap = "soft" +a.cfgvalue = function(self, section) + return fs.readfile("/usr/bin/pushbot/api/ipv4.list") +end +a.write = function(self, section, value) + fs.writefile("/usr/bin/pushbot/api/ipv4.list", value:gsub("\r\n", "\n")) +end +a.description = translate("
会因服务器稳定性、连接频繁等原因导致获取失败
如接口可以正常获取 IP,不推荐使用
从以上列表中随机地址访问") +a:depends({pushbot_ipv4="2"}) + +a=s:taboption("content", ListValue,"pushbot_ipv6",translate("IPv6 变更通知")) +a.rmempty = true +a.default="disable" +a:value("0",translate("关闭")) +a:value("1",translate("通过接口获取")) +a:value("2",translate("通过URL获取")) + +a = s:taboption("content", ListValue, "ipv6_interface", translate("接口名称")) +a.rmempty = true +a:depends({pushbot_ipv6="1"}) +for _, iface in ipairs(ifaces) do + if not (iface == "lo" or iface:match("^ifb.*")) then + local nets = net:get_interface(iface) + nets = nets and nets:get_networks() or {} + for k, v in pairs(nets) do + nets[k] = nets[k].sid + end + nets = table.concat(nets, ",") + a:value(iface, ((#nets > 0) and "%s (%s)" % {iface, nets} or iface)) + end +end +a.description = translate("
一般选择 wan 接口,多拨环境请自行选择") + +a=s:taboption("content", TextValue, "ipv6_list", translate("IPv6 API列表")) +a.optional = false +a.rows = 8 +a.wrap = "soft" +a.cfgvalue = function(self, section) + return fs.readfile("/usr/bin/pushbot/api/ipv6.list") +end +a.write = function(self, section, value) + fs.writefile("/usr/bin/pushbot/api/ipv6.list", value:gsub("\r\n", "\n")) +end +a.description = translate("
会因服务器稳定性、连接频繁等原因导致获取失败
如接口可以正常获取 IP,不推荐使用
从以上列表中随机地址访问") +a:depends({pushbot_ipv6="2"}) + +a=s:taboption("content", Flag,"pushbot_up",translate("设备上线通知")) +a.default=1 +a.rmempty = true + +a=s:taboption("content", Flag,"pushbot_down",translate("设备下线通知")) +a.default=1 +a.rmempty = true + +a=s:taboption("content", Flag,"cpuload_enable",translate("CPU 负载报警")) +a.default=1 +a.rmempty = true + +a= s:taboption("content", Value, "cpuload", "负载报警阈值") +a.default = 2 +a.rmempty = true +a:depends({cpuload_enable="1"}) + +a=s:taboption("content", Flag,"temperature_enable",translate("CPU 温度报警")) +a.default=1 +a.rmempty = true +a.description = translate("请确认设备可以获取温度,如需修改命令,请移步高级设置") + +a= s:taboption("content", Value, "temperature", "温度报警阈值") +a.rmempty = true +a.default = "80" +a.datatype="uinteger" +a:depends({temperature_enable="1"}) +a.description = translate("
设备报警只会在连续五分钟超过设定值时才会推送
而且一个小时内不会再提醒第二次") + +a=s:taboption("content", Flag,"client_usage",translate("设备异常流量")) +a.default=0 +a.rmempty = true + +a= s:taboption("content", Value, "client_usage_max", "每分钟流量限制") +a.default = "10M" +a.rmempty = true +a:depends({client_usage="1"}) +a.description = translate("设备异常流量警报(byte),你可以追加 K 或者 M") + +a=s:taboption("content", Flag,"client_usage_disturb",translate("异常流量免打扰")) +a.default=1 +a.rmempty = true +a:depends({client_usage="1"}) + +a = s:taboption("content", DynamicList, "client_usage_whitelist", translate("异常流量关注列表")) +nt.mac_hints(function(mac, name) a:value(mac, "%s (%s)" %{ mac, name }) end) +a.rmempty = true +a:depends({client_usage_disturb="1"}) +a.description = translate("请输入设备 MAC") + +--LoginNoti +a=s:taboption("content", Flag,"web_logged",translate("Web 登录提醒")) +a.default=0 +a.rmempty = true + +a=s:taboption("content", Flag,"ssh_logged",translate("SSH 登录提醒")) +a.default=0 +a.rmempty = true + +a=s:taboption("content", Flag,"web_login_failed",translate("Web 错误尝试提醒")) +a.default=0 +a.rmempty = true + +a=s:taboption("content", Flag,"ssh_login_failed",translate("SSH 错误尝试提醒")) +a.default=0 +a.rmempty = true + +a= s:taboption("content", Value, "login_max_num", "错误尝试次数") +a.default = "3" +a.datatype="and(uinteger,min(1))" +a:depends("web_login_failed","1") +a:depends("ssh_login_failed","1") +a.description = translate("超过次数后推送提醒") + +a=s:taboption("content", Flag,"web_login_black",translate("自动拉黑")) +a.default=0 +a.rmempty = true +a:depends("web_login_failed","1") +a:depends("ssh_login_failed","1") +a.description = translate("直到重启前都不会重置次数,请先添加白名单") + +a= s:taboption("content", Value, "ip_black_timeout", "拉黑时间(秒)") +a.default = "86400" +a.datatype="and(uinteger,min(0))" +a:depends("web_login_black","1") +a.description = translate("0 为永久拉黑,慎用
如不幸误操作,请更改设备 IP 进入 LUCI 界面清空规则") + +a=s:taboption("content", DynamicList, "ip_white_list", translate("白名单 IP 列表")) +a.datatype = "ipaddr" +a.rmempty = true +luci.ip.neighbors({family = 4}, function(entry) + if entry.reachable then + a:value(entry.dest:string()) + end +end) +a:depends("web_logged","1") +a:depends("ssh_logged","1") +a:depends("web_login_failed","1") +a:depends("ssh_login_failed","1") +a.description = translate("忽略白名单登陆提醒和拉黑操作,暂不支持掩码位表示") + +a=s:taboption("content", TextValue, "ip_black_list", translate("IP 黑名单列表")) +a.optional = false +a.rows = 8 +a.wrap = "soft" +a.cfgvalue = function(self, section) + return fs.readfile("/usr/bin/pushbot/api/ip_blacklist") +end +a.write = function(self, section, value) + fs.writefile("/usr/bin/pushbot/api/ip_blacklist", value:gsub("\r\n", "\n")) +end +a:depends("web_login_black","1") + +--定时推送 +a=s:taboption("crontab", ListValue,"crontab",translate("定时任务设定")) +a.rmempty = true +a.default="" +a:value("",translate("关闭")) +a:value("1",translate("定时发送")) +a:value("2",translate("间隔发送")) + +a=s:taboption("crontab", ListValue,"regular_time",translate("发送时间")) +a.rmempty = true +for t=0,23 do +a:value(t,translate("每天"..t.."点")) +end +a.default=8 +a.datatype=uinteger +a:depends("crontab","1") + +a=s:taboption("crontab", ListValue,"regular_time_2",translate("发送时间")) +a.rmempty = true +a:value("",translate("关闭")) +for t=0,23 do +a:value(t,translate("每天"..t.."点")) +end +a.default="关闭" +a.datatype=uinteger +a:depends("crontab","1") + +a=s:taboption("crontab", ListValue,"regular_time_3",translate("发送时间")) +a.rmempty = true + +a:value("",translate("关闭")) +for t=0,23 do +a:value(t,translate("每天"..t.."点")) +end +a.default="关闭" +a.datatype=uinteger +a:depends("crontab","1") + +a=s:taboption("crontab", ListValue,"interval_time",translate("发送间隔")) +a.rmempty = true +for t=1,23 do +a:value(t,translate(t.."小时")) +end +a.default=6 +a.datatype=uinteger +a:depends("crontab","2") +a.description = translate("
从 00:00 开始,每 * 小时发送一次") + +a= s:taboption("crontab", Value, "send_title", translate("推送标题")) +a:depends("crontab","1") +a:depends("crontab","2") +a.placeholder = "OpenWrt By tty228 路由状态:" +a.description = translate("
使用特殊符号可能会造成发送失败") + +a=s:taboption("crontab", Flag,"router_status",translate("系统运行情况")) +a.default=1 +a:depends("crontab","1") +a:depends("crontab","2") + +a=s:taboption("crontab", Flag,"router_temp",translate("设备温度")) +a.default=1 +a:depends("crontab","1") +a:depends("crontab","2") + +a=s:taboption("crontab", Flag,"router_wan",translate("WAN信息")) +a.default=1 +a:depends("crontab","1") +a:depends("crontab","2") + +a=s:taboption("crontab", Flag,"client_list",translate("客户端列表")) +a.default=1 +a:depends("crontab","1") +a:depends("crontab","2") + +a=s:taboption("crontab", Value,"google_check_timeout",translate("全球互联检测超时时间")) +a.rmempty = true +a.optional = false +a.default = "10" +a.datatype = "and(uinteger,min(3))" +a.description = translate("过短的时间可能导致检测不准确") + +e=s:taboption("crontab", Button,"_add",translate("手动发送")) +e.inputtitle=translate("发送") +e:depends("crontab","1") +e:depends("crontab","2") +e.inputstyle = "apply" +function e.write(self, section) +luci.sys.call("cbi.apply") + luci.sys.call("/usr/bin/pushbot/pushbot send &") +end + +--免打扰 +a=s:taboption("disturb", ListValue,"pushbot_sheep",translate("免打扰时段设置"),translate("在指定整点时间段内,暂停推送消息
免打扰时间中,定时推送也会被阻止。")) +a.rmempty = true + +a:value("",translate("关闭")) +a:value("1",translate("模式一:脚本挂起")) +a:value("2",translate("模式二:静默模式")) +a.description = translate("模式一停止一切检测,包括无人值守。") +a=s:taboption("disturb", ListValue,"starttime",translate("免打扰开始时间")) +a.rmempty = true + +for t=0,23 do +a:value(t,translate("每天"..t.."点")) +end +a.default=0 +a.datatype=uinteger +a:depends({pushbot_sheep="1"}) +a:depends({pushbot_sheep="2"}) +a=s:taboption("disturb", ListValue,"endtime",translate("免打扰结束时间")) +a.rmempty = true + +for t=0,23 do +a:value(t,translate("每天"..t.."点")) +end +a.default=8 +a.datatype=uinteger +a:depends({pushbot_sheep="1"}) +a:depends({pushbot_sheep="2"}) + +a=s:taboption("disturb", ListValue,"macmechanism",translate("MAC过滤")) +a:value("",translate("disable")) +a:value("allow",translate("忽略列表内设备")) +a:value("block",translate("仅通知列表内设备")) +a:value("interface",translate("仅通知此接口设备")) +a.rmempty = true + + +a = s:taboption("disturb", DynamicList, "pushbot_whitelist", translate("忽略列表")) +nt.mac_hints(function(mac, name) a :value(mac, "%s (%s)" %{ mac, name }) end) +a.rmempty = true +a:depends({macmechanism="allow"}) +a.description = translate("AA:AA:AA:AA:AA:AA\\|BB:BB:BB:BB:BB:B 可以将多个 MAC 视为同一用户
任一设备在线后不再推送,设备全部离线时才会推送,避免双 wifi 频繁推送") + +a = s:taboption("disturb", DynamicList, "pushbot_blacklist", translate("关注列表")) +nt.mac_hints(function(mac, name) a:value(mac, "%s (%s)" %{ mac, name }) end) +a.rmempty = true +a:depends({macmechanism="block"}) +a.description = translate("AA:AA:AA:AA:AA:AA\\|BB:BB:BB:BB:BB:B 可以将多个 MAC 视为同一用户
任一设备在线后不再推送,设备全部离线时才会推送,避免双 wifi 频繁推送") + +a = s:taboption("disturb", ListValue, "pushbot_interface", translate("接口名称")) +a:depends({macmechanism="interface"}) +a.rmempty = true + +for _, iface in ipairs(ifaces) do + if not (iface == "lo" or iface:match("^ifb.*")) then + local nets = net:get_interface(iface) + nets = nets and nets:get_networks() or {} + for k, v in pairs(nets) do + nets[k] = nets[k].sid + end + nets = table.concat(nets, ",") + a:value(iface, ((#nets > 0) and "%s (%s)" % {iface, nets} or iface)) + end +end + +a=s:taboption("disturb", ListValue,"macmechanism2",translate("MAC过滤2")) +a:value("",translate("disable")) +a:value("MAC_online",translate("列表内任意设备在线时免打扰")) +a:value("MAC_offline",translate("列表内设备都离线后免打扰")) +a.rmempty = true + +a = s:taboption("disturb", DynamicList, "MAC_online_list", translate("在线免打扰列表")) +nt.mac_hints(function(mac, name) a:value(mac, "%s (%s)" %{ mac, name }) end) +a.rmempty = true +a:depends({macmechanism2="MAC_online"}) + +a = s:taboption("disturb", DynamicList, "MAC_offline_list", translate("任意离线免打扰列表")) +nt.mac_hints(function(mac, name) a:value(mac, "%s (%s)" %{ mac, name }) end) +a.rmempty = true +a:depends({macmechanism2="MAC_offline"}) + +return m diff --git a/luci-app-pushbot/luasrc/view/pushbot/pushbot_log.htm b/luci-app-pushbot/luasrc/view/pushbot/pushbot_log.htm new file mode 100644 index 00000000..42b1e52e --- /dev/null +++ b/luci-app-pushbot/luasrc/view/pushbot/pushbot_log.htm @@ -0,0 +1,33 @@ +<% +local dsp = require "luci.dispatcher" +-%> + + +
+ <%:自动刷新%> + + +
diff --git a/luci-app-pushbot/luasrc/view/pushbot/pushbot_status.htm b/luci-app-pushbot/luasrc/view/pushbot/pushbot_status.htm new file mode 100644 index 00000000..a60c1967 --- /dev/null +++ b/luci-app-pushbot/luasrc/view/pushbot/pushbot_status.htm @@ -0,0 +1,22 @@ + + +
+

+ <%:Collecting data...%> +

+
diff --git a/luci-app-pushbot/root/etc/config/pushbot b/luci-app-pushbot/root/etc/config/pushbot new file mode 100644 index 00000000..89af5a7a --- /dev/null +++ b/luci-app-pushbot/root/etc/config/pushbot @@ -0,0 +1,10 @@ + +config pushbot 'pushbot' + option pushbot_enable '0' + option sleeptime '60' + option pushbot_ipv6 '0' + option pushbot_up '1' + option pushbot_down '1' + option cpuload_enable '1' + option cpuload '2' + option temperature_enable '0' diff --git a/luci-app-pushbot/root/etc/init.d/pushbot b/luci-app-pushbot/root/etc/init.d/pushbot new file mode 100755 index 00000000..915ee989 --- /dev/null +++ b/luci-app-pushbot/root/etc/init.d/pushbot @@ -0,0 +1,26 @@ +#!/bin/sh /etc/rc.common + +START=99 +STOP=10 + +start() { + state=`pgrep -f "/usr/bin/pushbot/pushbot"` + if [ ! -z "$state" ]; then + restart + else + /usr/bin/pushbot/pushbot & + fi + echo "pushbot is starting now ..." +} + +stop() { + kill -9 `pgrep -f "/usr/bin/pushbot/pushbot"` 2>/dev/null + echo "pushbot exit ..." +} + +restart(){ + stop + sleep 1 + start + echo "restarted." +} diff --git a/luci-app-pushbot/root/etc/uci-defaults/luci-pushbot b/luci-app-pushbot/root/etc/uci-defaults/luci-pushbot new file mode 100755 index 00000000..b29a280f --- /dev/null +++ b/luci-app-pushbot/root/etc/uci-defaults/luci-pushbot @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@pushbot[-1] + add ucitrack pushbot + set ucitrack.@pushbot[-1].init=pushbot + commit ucitrack +EOF + +rm -rf /tmp/luci-* +exit 0 diff --git a/luci-app-pushbot/root/usr/bin/pushbot/api/bark.json b/luci-app-pushbot/root/usr/bin/pushbot/api/bark.json new file mode 100644 index 00000000..8d1f73ab --- /dev/null +++ b/luci-app-pushbot/root/usr/bin/pushbot/api/bark.json @@ -0,0 +1,36 @@ +{ + "_api": "这是Bark推送 post 模板信息 api 文件", + "_api": "【Bark推送】", + + "url": "${bark_srv}/push", + "data": "@${tempjsonpath}", + "content_type": "Content-Type: application/json; charset=utf-8", + "str_title_start": "【", + "str_title_end": "】", + "str_linefeed": "\\n", + "str_splitline": "\\n\\n", + "str_space": " ", + "str_tab": " ", + "table_tab": "", + "font_green": "", + "font_green2": "", + "font_red": "", + "font_blue": "", + "font_purple": "", + "font_end": "", + "font_end2": "", + "percentsym": "", + "boldstar": "", + "type": { + "device_key": "\"${bark_token}\"", + "title": "\"${1}\"", + "body": "\"${nowtime}${str_linefeed}${2}\"", + "ext_params": { + "group": "\"${device_name}\"", + "isArchive": "1", + "icon": "\"${bark_icon}\"", + "level": "\"${bark_level}\"" + }, + "sound": "\"${bark_sound}\"" + } +} \ No newline at end of file diff --git a/luci-app-pushbot/root/usr/bin/pushbot/api/dingding.json b/luci-app-pushbot/root/usr/bin/pushbot/api/dingding.json new file mode 100644 index 00000000..c28a90ed --- /dev/null +++ b/luci-app-pushbot/root/usr/bin/pushbot/api/dingding.json @@ -0,0 +1,32 @@ +{ + "_api": "这是 Pushbot:钉钉 api 文件", + "_api": "【钉钉推送】", + + "url": "\"https://oapi.dingtalk.com/robot/send?access_token=${dd_webhook}\"", + "data": "@${tempjsonpath}", + "content_type": "Content-Type:application/json", + "str_title_start": "**", + "str_title_end": "**", + "str_linefeed": "\\n\\n", + "str_splitline": "\\n\\n---\\n\\n", + "str_space": " ", + "str_tab": " ", + "table_tab": "", + "font_green": "", + "font_green2": "", + "font_red": "", + "font_blue": "", + "font_purple": "", + "font_end": "", + "font_end2": "", + "percentsym": "", + "boldstar": "**", + "type": + { + "msgtype": "\"markdown\"", + "markdown": { + "title": "\"${1}\"", + "text": "\"${str_title_start}${font_purple}${1}${font_end}${str_title_end}${str_linefeed}${nowtime}${str_linefeed}${2}${str_linefeed}${font_purple}${1}${font_end}\"" + } + } +} diff --git a/luci-app-pushbot/root/usr/bin/pushbot/api/diy.json b/luci-app-pushbot/root/usr/bin/pushbot/api/diy.json new file mode 100644 index 00000000..c22f0bc7 --- /dev/null +++ b/luci-app-pushbot/root/usr/bin/pushbot/api/diy.json @@ -0,0 +1,50 @@ +{ + "_//": "-------------------------------------------------------------------------------", + "_readme": "这是 自定义 api 文件,这里以 telegram 为例", + "_readme": "特殊符号请使用斜杠转义,变量使用 ${var} 表示", + "_//": "-------------------------------------------------------------------------------", + "_api": "【DIY 推送】", + "_url": "api 地址", + "_data": "生成的 json 文件路径,一般不需要改,如 api 不支持 json,请参考 serverchan 推送接口", + "_content_type": "post 内容类型,这里为 json", + "_//": "-------------------------------------------------------------------------------", + "_str_title_start": "标题粗体字开始符号", + "_str_title_end": "标题粗体字结束符号", + "_str_linefeed": "换行符号", + "_str_splitline": "换行+分隔符", + "_str_space": "空格", + "_str_tab": "TAB(用在行首,生成文字区块)", + "_//": "-------------------------------------------------------------------------------", + "_type": + { + "_readme": "type 对象因为需要转义变量,前后必须使用 斜杠+双引号 转义", + "_readme": "参照上文说明,填写下文相关参数" + }, + "_//": "-------------------------------------------------------------------------------", + + "url": "https://api.telegram.org/bot${tg_token}/sendMessage", + "data": "@${tempjsonpath}", + "content_type": "Content-Type: application/json", + "str_title_start": "", + "str_title_end": "", + "str_linefeed": "\\n", + "str_splitline": "\\n----\\n", + "str_space": " ", + "str_tab": " ", + "table_tab": "", + "font_green": "", + "font_green2": "", + "font_red": "", + "font_blue": "", + "font_purple": "", + "font_end": "", + "font_end2": "", + "percentsym": "25", + "boldstar": "**", + "type": + { + "text":"\"${str_title_start}${1}${str_title_end}${str_splitline}${nowtime}${2}\"", + "chat_id":"\"${chat_id}\"", + "parse_mode":"\"HTML\"" + } +} diff --git a/luci-app-pushbot/root/usr/bin/pushbot/api/ent_wechat.json b/luci-app-pushbot/root/usr/bin/pushbot/api/ent_wechat.json new file mode 100644 index 00000000..14d3ea74 --- /dev/null +++ b/luci-app-pushbot/root/usr/bin/pushbot/api/ent_wechat.json @@ -0,0 +1,32 @@ +{ + "_api": "这是企业微信 markdown 模板信息 api 文件", + "_api": "【企业微信】", + + "url": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${we_webhook}", + "data": "@${tempjsonpath}", + "content_type": "Content-Type: application/json", + "str_title_start": "#### ", + "str_title_end": "", + "str_linefeed": "\\n", + "str_splitline": "\\n------\\n", + "str_space": " ", + "str_tab": " ", + "table_tab": "", + "font_green": "", + "font_green2": "", + "font_red": "", + "font_blue": "", + "font_purple": "", + "font_end": "", + "font_end2": "", + "percentsym": "", + "boldstar": "**", + "type": + { + "msgtype": "\"markdown\"", + "markdown": { + "title": "\"${1}\"", + "content": "\"${str_title_start}${font_purple}${1}${font_end}${str_title_end}${str_linefeed}${nowtime}${str_linefeed}${2}\"" + } + } +} diff --git a/luci-app-pushbot/root/usr/bin/pushbot/api/feishu.json b/luci-app-pushbot/root/usr/bin/pushbot/api/feishu.json new file mode 100644 index 00000000..0d16bf93 --- /dev/null +++ b/luci-app-pushbot/root/usr/bin/pushbot/api/feishu.json @@ -0,0 +1,61 @@ +{ + "_api": "这是飞书推送 post 模板信息 api 文件", + "_api": "【飞书推送】", + + "url": "https://open.feishu.cn/open-apis/bot/v2/hook/${fs_webhook}", + "data": "@${tempjsonpath}", + "content_type": "Content-Type: application/json", + "str_title_start": "**", + "str_title_end": "**", + "str_linefeed": "\\n", + "str_splitline": "\\n\\n", + "str_space": " ", + "str_tab": " ", + "table_tab": "", + "font_green": "", + "font_green": "", + "font_red": "", + "font_blue": "", + "font_purple": "", + "font_end": "", + "font_end2": "", + "percentsym": "", + "boldstar": "**", + "type": + { + "msg_type": "\"interactive\"", + "card": { + "config": { + "wide_screen_mode": "true" + }, + "header": { + "template": "\"purple\"", + "title": { + "content": "\"${1}\"", + "tag": "\"plain_text\"" + } + }, + "elements": [ + { + "tag": "\"div\"", + "text": { + "content": "\"${nowtime}${str_linefeed}${2}\"", + "tag": "\"lark_md\"" + } + }, + { + "tag": "\"hr\"" + }, + { + "elements": [ + { + "content": "\"来自${device_name}\"", + "tag": "\"lark_md\"" + } + ], + "tag": "\"note\"" + } + ] + } + } +} diff --git a/luci-app-pushbot/root/usr/bin/pushbot/api/ip_blacklist b/luci-app-pushbot/root/usr/bin/pushbot/api/ip_blacklist new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/luci-app-pushbot/root/usr/bin/pushbot/api/ip_blacklist @@ -0,0 +1 @@ + diff --git a/luci-app-pushbot/root/usr/bin/pushbot/api/ipv4.list b/luci-app-pushbot/root/usr/bin/pushbot/api/ipv4.list new file mode 100644 index 00000000..72081532 --- /dev/null +++ b/luci-app-pushbot/root/usr/bin/pushbot/api/ipv4.list @@ -0,0 +1,6 @@ +www.cip.cc +ipv4.ddnspod.com +ifcfg.cn +speed.neu.edu.cn/getIP.php +ddns.oray.com/checkip +www.net.cn/static/customercare/yourip.asp diff --git a/luci-app-pushbot/root/usr/bin/pushbot/api/ipv6.list b/luci-app-pushbot/root/usr/bin/pushbot/api/ipv6.list new file mode 100644 index 00000000..5f1ca230 --- /dev/null +++ b/luci-app-pushbot/root/usr/bin/pushbot/api/ipv6.list @@ -0,0 +1,5 @@ +ip.sb +ipv6.ddnspod.com +api-ipv6.ip.sb/ip +speed.neu6.edu.cn/getIP.php +v6.myip.la/json diff --git a/luci-app-pushbot/root/usr/bin/pushbot/api/pushdeer.json b/luci-app-pushbot/root/usr/bin/pushbot/api/pushdeer.json new file mode 100644 index 00000000..441d7d30 --- /dev/null +++ b/luci-app-pushbot/root/usr/bin/pushbot/api/pushdeer.json @@ -0,0 +1,31 @@ +{ + "_api": "这是 PushDeer推送 api 文件", + "_api": "【PushDeer推送】", + + "url": "${pushdeer_srv}/message/push", + "data": "@${tempjsonpath}", + "content_type": "Content-Type:application/json", + "str_title_start": "**【", + "str_title_end": "】**", + "str_linefeed": "\\n\\n", + "str_splitline": "\\n\\n---\\n\\n", + "str_space": " ", + "str_tab": " ", + "table_tab": "┋", + "font_green": "", + "font_green2": "", + "font_red": "", + "font_blue": "", + "font_purple": "", + "font_end": "", + "font_end2": "", + "percentsym": "", + "boldstar": "**", + "type": + { + "pushkey": "\"${pushdeer_key}\"", + "type": "\"markdown\"", + "text": "\"${1}\"", + "desp": "\"${nowtime}${str_linefeed}${2}\"" + } +} diff --git a/luci-app-pushbot/root/usr/bin/pushbot/api/pushplus.json b/luci-app-pushbot/root/usr/bin/pushbot/api/pushplus.json new file mode 100644 index 00000000..855472ff --- /dev/null +++ b/luci-app-pushbot/root/usr/bin/pushbot/api/pushplus.json @@ -0,0 +1,34 @@ +{ + "_api": "这是 Pushbot:PushPlus api 文件", + "_api": "【PushPlus推送】", + + "url": "http://www.pushplus.plus/send", + "data": "@${tempjsonpath}", + "content_type": "Content-Type:application/json", + "str_title_start": "#### ", + "str_title_end": "", + "str_linefeed": "\\n\\n", + "str_splitline": "\\n----\\n", + "str_space": " ", + "str_tab": " ", + "table_tab": "", + "font_green": "", + "font_green2": "", + "font_red": "", + "font_blue": "", + "font_purple": "", + "font_end": "", + "font_end2": "", + "percentsym": "", + "boldstar": "", + "type": + { + "token": "\"${pp_token}\"", + "channel": "\"${pp_channel}\"", + "webhook": "\"${pp_webhook}\"", + "topic": "\"${pp_topic}\"", + "title": "\"${1}\"", + "content": "\"${2}\"", + "template": "\"markdown\"" + } +} diff --git a/luci-app-pushbot/root/usr/bin/pushbot/pushbot b/luci-app-pushbot/root/usr/bin/pushbot/pushbot new file mode 100755 index 00000000..7c9b7858 --- /dev/null +++ b/luci-app-pushbot/root/usr/bin/pushbot/pushbot @@ -0,0 +1,1274 @@ +#!/bin/sh + +# 读取设置文件 +function get_config(){ + while [[ "$*" != "" ]]; do + eval ${1}='`uci get pushbot.pushbot.$1`' 2>/dev/null + shift + done +} + +# 初始化设置信息 +function read_config(){ + get_config "pushbot_enable" "lite_enable" "device_name" "sleeptime" "oui_dir" "oui_data" "reset_regularly" "debuglevel" "device_aliases" \ + "pushbot_ipv4" "ipv4_interface" "pushbot_ipv6" "ipv6_interface" "pushbot_up" "pushbot_down" "cpuload_enable" "cpuload" "temperature_enable" "temperature" \ + "regular_time" "regular_time_2" "regular_time_3" "interval_time" \ + "client_usage" "client_usage_max" "client_usage_disturb" "client_usage_whitelist" \ + "web_logged" "ssh_logged" "web_login_failed" "ssh_login_failed" "login_max_num" "web_login_black" "ip_white_list" "ip_black_timeout" \ + "pushbot_sheep" "starttime" "endtime" "pushbot_whitelist" "pushbot_blacklist" "pushbot_interface" "MAC_online_list" "MAC_offline_list" \ + "up_timeout" "down_timeout" "timeout_retry_count" "thread_num" "soc_code" "pve_host" "pve_port"\ + "err_enable" "err_sheep_enable" "err_device_aliases" "network_err_event" "system_time_event" "autoreboot_time" "network_restart_time" "public_ip_event" "public_ip_retry_count" \ + "jsonpath" "dd_webhook" "we_webhook" "pp_token" "pp_channel" "pp_webhook" "pp_topic_enable" "pp_topic" "fs_webhook" "pushdeer_key" "pushdeer_srv_enable" "pushdeer_srv" "bark_srv_enable" "bark_srv" "bark_token" "bark_sound" "bark_icon" "bark_icon_enable" "bark_level" + + for str_version in "wrtbwmon" "iputils-arping" "curl" "iw"; do + eval `echo ${str_version:0:2}"_version"`=`opkg list-installed|grep -w ^${str_version}|awk '{print $3}'` 2>/dev/null + done + dir="/tmp/pushbot/" && mkdir -p ${dir} + tempjsonpath="/tmp/pushbot/temp.json" + ip_blacklist_path="/usr/bin/pushbot/api/ip_blacklist" + [ ! -z "$oui_dir" ] && [ "$oui_dir" -eq "1" ] && oui_base="${dir}oui_base.txt" || oui_base="/usr/bin/pushbot/oui_base.txt" + debuglevel=`echo "$debuglevel"` && [ -z "$debuglevel" ] && logfile="/dev/null" || logfile="${dir}pushbot.log" + pushbot_blacklist=`echo "$pushbot_blacklist"|sed 's/ /\n/g'` 2>/dev/null + pushbot_whitelist=`echo "$pushbot_whitelist"|sed 's/ /\n/g'` 2>/dev/null + device_aliases=`echo "$device_aliases"|sed 's/ /\n/g'|sed 's/-/ /'` 2>/dev/null + err_device_aliases=`echo "$err_device_aliases"|sed 's/ /\n/g'` 2>/dev/null + client_usage_whitelist=`echo "$client_usage_whitelist"|sed 's/ /\n/g'` 2>/dev/null + ip_white_list=`echo "$ip_white_list"|sed 's/ /\n/g'` 2>/dev/null + mark_mac_list="${MAC_online_list} ${MAC_offline_list}" + mark_mac_list=`echo "$mark_mac_list"|sed 's/ /\n/g'|sed 's/-/ /'` 2>/dev/null + ipv4_urllist=`cat /usr/bin/pushbot/api/ipv4.list` 2>/dev/null + ipv6_urllist=`cat /usr/bin/pushbot/api/ipv6.list` 2>/dev/null + [ -z "$pushbot_ipv4" ] && pushbot_ipv4=0 + [ -z "$pushbot_ipv6" ] && pushbot_ipv6=0 + [ "$iw_version" ] && wlan_interface=`iw dev|grep Interface|awk '{print $2}'` >/dev/null 2>&1 + [ -z "$up_timeout" ] || [ "$up_timeout" -eq "0" ] && up_timeout="2" + [ -z "$down_timeout" ] || [ "$down_timeout" -eq "0" ] && down_timeout="20";down_timeout=`expr ${down_timeout} / 2 + 1` + [ -z "$timeout_retry_count" ] && timeout_retry_count="2";[ "$timeout_retry_count" -eq "0" ] && timeout_retry_count="1" + [ ! -z "$bark_token" ] && [ -z "$bark_srv" ] && bark_srv="https://api.day.app" + [ ! -z "$pushdeer_key" ] && [ -z "$pushdeer_srv" ] && pushdeer_srv="https://api2.pushdeer.com" + +# 字符串读取 + str_title_start=`/usr/bin/jq -r '.str_title_start' ${jsonpath}` + str_title_end=`/usr/bin/jq -r '.str_title_end' ${jsonpath}` + str_linefeed=`/usr/bin/jq -r '.str_linefeed' ${jsonpath}` + str_splitline=`/usr/bin/jq -r '.str_splitline' ${jsonpath}` + str_space=`/usr/bin/jq -r '.str_space' ${jsonpath}` + str_tab=`/usr/bin/jq -r '.str_tab' ${jsonpath}` + font_red=`/usr/bin/jq -r '.font_red' ${jsonpath}` + font_green=`/usr/bin/jq -r '.font_green' ${jsonpath}` + font_green2=`/usr/bin/jq -r '.font_green2' ${jsonpath}` + font_blue=`/usr/bin/jq -r '.font_blue' ${jsonpath}` + font_purple=`/usr/bin/jq -r '.font_purple' ${jsonpath}` + font_end=`/usr/bin/jq -r '.font_end' ${jsonpath}` + font_end2=`/usr/bin/jq -r '.font_end2' ${jsonpath}` + percentsym=`/usr/bin/jq -r '.percentsym' ${jsonpath}` + boldstar=`/usr/bin/jq -r '.boldstar' ${jsonpath}` + table_tab=`/usr/bin/jq -r '.tabletab' ${jsonpath}` + ( echo "$lite_enable"|grep -q "content" ) && str_title_start="" && str_title_end="" && str_splitline="" && str_linefeed="" && str_tab="" +} + + + +# 初始化 +function pushbot_init(){ + enable_detection + if [ -f "/usr/bin/pushbot/errlog" ]; then + cat /usr/bin/pushbot/errlog > ${logfile} + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】载入上次重启前日志" >> ${logfile} + echo "--------------------------------------------------------" >> ${logfile} + fi + down_oui & + deltemp + get_syslog + add_ip_black + + rm -f ${dir}fd1 ${dir}sheep_usage ${dir}old_sheep_usage ${dir}client_usage_aliases ${dir}old_client_usage_aliases /usr/bin/pushbot/errlog >/dev/null 2>&1 + [ ! -f "/usr/sbin/wrtbwmon" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】未安装 wrtbwmon ,流量统计不可用" >> ${logfile} + [ -z "$ip_version" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法获取依赖项 iputils-arping 版本号,请确认插件是否正常运行" >> ${logfile} + [ -z "$cu_version" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法获取依赖项 curl 版本号,请确认插件是否正常运行" >> ${logfile} + [ -z "${dd_webhook}${pp_token}${we_webhook}${fs_webhook}${bark_token}${pushdeer_key}" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】请填写正确的Token/Webhook " >> ${logfile} && return 1 + local interfacelist=`getinterfacelist` && [ -z "$interfacelist" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法正确获取接口信息,请确认插件是否正常运行" >> ${logfile} + return 0 +} + +# 推送 +function diy_send(){ + ( ! echo "$lite_enable"|grep -q "content" ) && ( ! echo "$lite_enable"|grep -q "nowtime" ) && local nowtime=`date "+%Y-%m-%d %H:%M:%S"` + local diyurl=`/usr/bin/jq -r .url ${3}` && local diyurl=`eval echo ${diyurl}` + local type=`/usr/bin/jq -r '.type' ${3}` && local type=`eval echo ${type}` + local data=`/usr/bin/jq -r '.data' ${3}` && local data=`eval echo ${data}` + local content_type=`/usr/bin/jq -r '.content_type' ${3}` + /usr/bin/jq ".type + $type" ${jsonpath} > ${tempjsonpath} + /usr/bin/jq -r '.[]' ${tempjsonpath}|grep -w "null" && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】参数值错误,请检查设置项 `/usr/bin/jq -r '.' ${tempjsonpath}|grep "null"`" >> ${logfile} && return 1 + [ -f ${tempjsonpath} ] && local logrow=$(grep -c "" ${tempjsonpath}) || local logrow="0" + [ $logrow -eq "0" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】json 文件生成失败,请检查文件格式" >> ${logfile} && return 1 + /usr/bin/jq -r '.[]' ${tempjsonpath}|grep "null" && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】参数变量生成失败,请检查设置项 `/usr/bin/jq -r '.' ${tempjsonpath}|grep "null"`" >> ${logfile} + + curl -X POST -H "$content_type" -d "${data}" "${diyurl}" +} + +# 下载设备MAC厂商信息 +function down_oui(){ + [ -f ${oui_base} ] && local logrow=$(grep -c "" ${oui_base}) || local logrow="0" + [ $logrow -lt "10" ] && rm -f ${oui_base} >/dev/null 2>&1 + if [ ! -z "$oui_data" ] && [ "$oui_data" -ne "3" ] && [ ! -f ${oui_base} ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】设备MAC厂商信息不存在,重新下载" >> ${logfile} + wget --no-check-certificate -t 3 -T 15 -O ${dir}oui.txt https://standards-oui.ieee.org/oui/oui.txt >/dev/null 2>&1 + if [ -f ${dir}oui.txt ] && [ "$oui_data" -eq "1" ]; then + cat ${dir}oui.txt|grep "base 16"|grep -i "apple\|aruba\|asus\|autelan\|belkin\|bhu\|buffalo\|cctf\|cisco\|comba\|datang\|dell\|dlink\|dowell\|ericsson\|fast\|feixun\|\ +fiberhome\|fujitsu\|grentech\|h3c\|hisense\|hiwifi\|honghai\|honghao\|hp\|htc\|huawei\|intel\|jinli\|jse\|lenovo\|lg\|liteon\|malata\|meizu\|mercury\|meru\|moto\|netcore\|\ +netgear\|nokia\|omron\|oneplus\|oppo\|philips\|router_unkown\|samsung\|shanzhai\|sony\|start_net\|sunyuanda\|tcl\|tenda\|texas\|tianyu\|tp-link\|ubq\|undefine\|VMware\|\ +utstarcom\|volans\|xerox\|xiaomi\|zdc\|zhongxing\|smartisan" > ${oui_base} && echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】设备MAC厂商信息下载成功" >> ${logfile} || echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】设备MAC厂商信息下载失败" >> ${logfile} + fi + if [ -f ${dir}oui.txt ] && [ "$oui_data" -eq "2" ]; then + cat ${dir}oui.txt|grep "base 16" > ${oui_base} && echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】设备MAC厂商信息下载成功" >> ${logfile} || echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】设备MAC厂商信息下载失败" >> ${logfile} + fi + rm -f ${dir}oui.txt >/dev/null 2>&1 + fi +} + +# 清理临时文件 +function deltemp(){ + unset title content ipAddress_logrow online_list online_mac mac_online_status + rm -f ${dir}title ${dir}content ${dir}tmp_downlist ${dir}send_enable.lock ${tempjsonpath} >/dev/null 2>&1 + LockFile unlock + [ -f ${logfile} ] && local logrow=$(grep -c "" ${logfile}) || local logrow="0" + [ $logrow -gt 500 ] && sed -i '1,100d' ${logfile} && echo "`date "+%Y-%m-%d %H:%M:%S"` 【清理】日志超出上限,删除前 100 条" >> ${logfile} +} + +# 检测程序开关 +function enable_detection(){ + [ ! "$1" ] && local time_n=1 + for i in `seq 1 $time_n`; do + get_config pushbot_enable;[ -z "$pushbot_enable" ] || [ "$pushbot_enable" -eq "0" ] && `/etc/init.d/pushbot stop` || sleep 1 + done +} + +# 获取 ip +function getip(){ + [ ! "$1" ] && return + if [ $1 == "wanipv4" ] ;then + [ ! -z "$ipv4_interface" ] && local wanIP=$(/sbin/ifconfig ${ipv4_interface}|awk '/inet addr/ {print $2}'|awk -F: '{print $2}'|grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') + [ -z "$ipv4_interface" ] && local wanIP=$(getinterfacelist|grep '\"address\"'|grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') + echo "$wanIP" + elif [ $1 == "hostipv4" ] ;then + function get_hostipv4() + { + local url_number=`echo "$ipv4_urllist"|wc -l` + local ipv4_URL=`echo "$ipv4_urllist"| sed -n "$(rand 1 $url_number)p"|sed -e 's/\r//g'` + [ ! -z "$ipv4_interface" ] && local hostIP=$(curl -k -s -4 --interface ${ipv4_interface} -m 5 ${ipv4_URL}) || local hostIP=$(curl -k -s -4 -m 5 ${ipv4_URL}) + echo $hostIP|grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|head -n1 + } + local hostIP=`get_hostipv4` + [ -z "$hostIP" ] && local hostIP=`get_hostipv4` + [ -z "$hostIP" ] && local hostIP=`get_hostipv4` + echo $hostIP # 重试,偷懒,有空再优化 + elif [ $1 == "wanipv6" ] ;then + [ ! -z "$ipv6_interface" ] && local wanIPv6=$(ip addr show ${ipv6_interface}|grep -v deprecated|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|sort -nr|head -n1|awk '{print $2}') + [ -z "$ipv6_interface" ] && local wanIPv6=$(ip addr show|grep -v deprecated|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|sort -nr|head -n1|awk '{print $2}') + echo "$wanIPv6" + elif [ $1 == "hostipv6" ] ;then + function get_hostipv6() + { + local urlv6_number=`echo "$ipv6_urllist"|wc -l` + local ipv6_URL=`echo "$ipv6_urllist"| sed -n "$(rand 1 $urlv6_number)p"|sed -e 's/\r//g'` + [ ! -z "$ipv6_interface" ] && local hostIPv6=$(curl -k -s -6 --interface ${ipv6_interface} -m 5 ${ipv6_URL}) || local hostIPv6=$(curl -k -s -6 -m 5 ${ipv6_URL}) + echo $hostIPv6|grep -oE '([\da-fA-F0-9]{1,4}(:{1,2})){1,15}[\da-fA-F0-9]{1,4}'|head -n1 + } + local hostIPv6=`get_hostipv6` + [ -z "$hostIPv6" ] && local hostIPv6=`get_hostipv6` + [ -z "$hostIPv6" ] && local hostIPv6=`get_hostipv6` + echo $hostIPv6 # 重试,偷懒,有空再优化 + fi +} + +# 获取接口信息 +function getinterfacelist(){ + [ `ubus list|grep -w -i "network.interface.wan"|wc -l` -ge "1" ] && ubus call network.interface.wan status && return + [ `ubus list|grep -i "network.interface."|grep -v "loopback"|grep -v "wan6"|wc -l` -eq "1" ] && ubus call `ubus list|grep "network.interface."|grep -v "loopback"` status && return +} + +# 获取接口在线时间 +function getinterfaceuptime(){ + getinterfacelist|grep \"uptime\"|sed $'s/\"uptime": //g'|sed $'s/\,//g' +} + +# 查询 mac 地址 +function getmac(){ + ( echo "$tmp_mac"|grep -q "unknown" ) && unset tmp_mac # 为unknown时重新读取 + [ -f "${dir}ipAddress" ] && [ -z "$tmp_mac" ] && local tmp_mac=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + [ -f "${dir}tmp_downlist" ] && [ -z "$tmp_mac" ] && local tmp_mac=`cat ${dir}tmp_downlist|grep -w ${1}|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + [ -f "/var/dhcp.leases" ] && [ -z "$tmp_mac" ] && local tmp_mac=`cat /var/dhcp.leases|grep -w ${1}|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + [ -z "$tmp_mac" ] && local tmp_mac=`cat /proc/net/arp|grep "0x2\|0x6"|grep -w ${1}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` + [ -z "$tmp_mac" ] && local tmp_mac="unknown" + echo "$tmp_mac" +} + +# 查询主机名 +function getname(){ + [ -z "$tmp_name" ] && local tmp_name=`echo "$device_aliases"|grep -i $2|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + [ -f "${dir}ipAddress" ] && [ -z "$tmp_name" ] && local tmp_name=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $3}'|grep -v "^$"|sort -u|head -n1` + [ -f "${dir}tmp_downlist" ] && [ -z "$tmp_name" ] && local tmp_name=`cat ${dir}tmp_downlist|grep -w ${1}|awk '{print $3}'|grep -v "^$"|sort -u|head -n1` + ( ! echo "$tmp_name"|grep -q -w "unknown\|*" ) && [ ! -z "$tmp_name" ] && echo "$tmp_name" && return || unset tmp_name # 为unknown时重新读取 + [ -f "/var/dhcp.leases" ] && [ -z "$tmp_name" ] && local tmp_name=`cat /var/dhcp.leases|grep -w ${1}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` + ( ! echo "$tmp_name"|grep -q -w "unknown\|*" ) && [ ! -z "$tmp_name" ] && echo "$tmp_name" && return || unset tmp_name # 为unknown时重新读取 + [ -z "$dhcp_config" ] && dhcp_config=`uci show dhcp|grep "ip\|mac\|name"` + for dhcp_config_str in "host" "domain"; do + local dhcp_ip_n=`echo "$dhcp_config"|grep -w ^dhcp.@${dhcp_config_str}.*ip=.${1}|sed -nr 's#^dhcp.(.*).ip.*#\1#gp'` 2>/dev/null + [ ! -z "$dhcp_ip_n" ] && [ -z "$tmp_name" ] && local tmp_name=`uci get dhcp.${dhcp_ip_n}.name` 2>/dev/null + local dhcp_mac_n=`echo "$dhcp_config"|grep -i ^dhcp.@${dhcp_config_str}.*mac=.${2}|sed -nr 's#^dhcp.(.*).mac.*#\1#gp'` 2>/dev/null + [ ! -z "$dhcp_mac_n" ] && [ -z "$tmp_name" ] && local tmp_name=`uci get dhcp.${dhcp_ip_n}.name` 2>/dev/null + [ ! -z "$tmp_name" ] && break + done + ( ! echo "$tmp_name"|grep -q -w "unknown\|*" ) && [ ! -z "$tmp_name" ] && echo "$tmp_name" && return || unset tmp_name # 为unknown时重新读取 + [ -f "$oui_base" ] && local tmp_name=$(cat $oui_base|grep -i $(echo "$2"|cut -c 1,2,4,5,7,8)|sed -nr 's#^.*16)..(.*)#\1#gp'|sed 's/ /_/g') + [ ! -z "$oui_data" ] && [ "$oui_data" -eq "4" ] && local tmp_name=$(curl -sS "https://standards-oui.ieee.org/oui/oui.txt"|grep -i $(echo "$2"|cut -c 1,2,4,5,7,8)|sed -nr 's#^.*16)..(.*)#\1#gp'|sed 's/ /_/g') + [ -z "$tmp_name" ] && local tmp_name="unknown" + echo "$tmp_name" +} + +# 查询设备接口 +function getinterface(){ + [ -f "${dir}ipAddress" ] && local ip_interface=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $5}'|grep -v "^$"|sort -u|head -n1` + [ -f "${dir}tmp_downlist" ] && [ -z "$ip_interface" ] && local ip_interface=`cat ${dir}tmp_downlist|grep -w ${1}|awk '{print $5}'|grep -v "^$"|sort -u|head -n1` + if [ -z "$ip_interface" ] && [ ! -z "$wlan_interface" ]; then + for interface in $wlan_interface; do + local ip_interface=`iw dev $interface station dump 2>/dev/null|grep Station|grep -i -w ${1}|sed -nr 's#^.*on (.*))#\1#gp'` >/dev/null 2>&1 + [ ! -z "$ip_interface" ] && echo "$ip_interface" && return + done + fi + [ -z "$ip_interface" ] && local ip_interface=`cat /proc/net/arp|grep "0x2\|0x6"|grep -i -w ${1}|awk '{print $6}'|grep -v "^$"|sort -u|head -n1` + echo "$ip_interface" +} + +# ping +function getping(){ + [ "$iw_version" ] && local wlan_online=`iw dev ${ip_interface} station dump|grep -i -w ${ip_mac}|grep Station` >/dev/null 2>&1 + [ "$wlan_online" ] && return 0 + for i in `seq 1 ${3}`; do + ( ! echo "$ip_ms"|grep -q "ms" ) && local ip_ms=$( arping -I `cat /proc/net/arp|grep -w ${1}|awk '{print $6}'|grep -v "^$"|sort -u|head -n1` -c 20 -f -w ${2} $1 ) 2>/dev/null + ( ! echo "$ip_ms"|grep -q "ms" ) && local ip_ms=`ping -c 5 -w ${2} ${1}|grep -v '100% packet loss'` 2>/dev/null + ( ! echo "$ip_ms"|grep -q "ms" ) && sleep 1 + done + ( echo "$ip_ms"|grep -q "ms" ) +} + +# CPU 占用率 +function getcpu(){ + local AT=$(cat /proc/stat|grep "^cpu "|awk '{print $2+$3+$4+$5+$6+$7+$8 " " $2+$3+$4+$7+$8}') + sleep 3 + local BT=$(cat /proc/stat|grep "^cpu "|awk '{print $2+$3+$4+$5+$6+$7+$8 " " $2+$3+$4+$7+$8}') + printf "%.01f%%" $(echo ${AT} ${BT}|awk '{print (($4-$2)/($3-$1))*100}') +} + +# 获取SOC温度 (取所有传感器温度最大值) +function soc_temp(){ + [ -z "$soc_code" ] && local soctemp=`sensors 2>/dev/null|grep °C|sed -nr 's#^.*:.*\+(.*)°C .*#\1#gp'|sort -nr|head -n1` + [ -z "$soc_code" ] && [ -z "$soctemp" ] && local soctemp=`cat /sys/class/thermal/thermal_zone*/temp 2>/dev/null|sort -nr|head -n1|cut -c-2` + [ "$soc_code" == "pve" ] && [ ! -z "$pve_host" ] && local soctemp=`ssh -i ~/.ssh/id_rsa root@${pve_host} -p ${pve_port} sensors 2>/dev/null|grep °C|sed -nr 's#^.*:.*\+(.*)°C .*#\1#gp'|sort -nr|head -n1` + [ ! -z "$soctemp" ] && echo "$soctemp" && return + [ ! -z "$soc_code" ] && eval `echo "$soc_code"` 2>/dev/null +} + +# 流量数据 +function usage(){ + [ ! -f "/usr/sbin/wrtbwmon" ] || [ ! "$1" ] && return + if [ $1 == "update" ] ;then + function version_le() { test "$(echo "$@"|tr " " "\n"|sort -n|head -n 1)" == "$1"; } + function version_ge() { test "$(echo "$@"|tr " " "\n"|sort -r|head -n 1)" == "$1"; } + [ ! -z "$wr_version" ] && ( version_ge "${wr_version}" "1.2.0" ) && wrtbwmon -f ${dir}usage.db 2>/dev/null && return + [ ! -z "$wr_version" ] && ( version_le "${wr_version}" "1.0.0" ) || [ -z "$wr_version" ] && wrtbwmon update ${dir}usage.db 2>/dev/null && return + elif [ $1 == "get" ] ;then + [ ! -f "${dir}usage.db" ] && [ ! "$3" ] && echo `bytes_for_humans 0` && return + [ ! -f "${dir}usage.db" ] && [ "$3" ] && echo 0 && return + [ -z "$total_n" ] && total_n=`cat ${dir}usage.db|head -n1|grep "total"|sed 's/,/\n/g'|awk '/total/{print NR}'` 2>/dev/null + [ -z "$total_n" ] && total_n="6" + [ "$2" ] && local tmptotal=`cat ${dir}usage.db|sed 's/,,,/,0,0,/g'|sed 's/,,/,0,/g'|sed 's/,/ /g'|grep -i -w ${2}|awk "{print "'$'$total_n"}"|grep -v "^$"|sort -u|head -n1` 2>/dev/null + [ -z "$tmptotal" ] && local tmptotal="0" + [ ! "$3" ] && echo `bytes_for_humans ${tmptotal}` || echo "$tmptotal" + elif [ $1 == "down" ] ;then + [ "$2" ] && sed -i "/,${2},/d" ${dir}usage.db 2>/dev/null + fi +} + +# 流量数据单位换算 +function bytes_for_humans { + [ ! "$1" ] && return + [ "$1" -gt 1073741824 ] && echo "`awk 'BEGIN{printf "%.2f\n",'$1'/'1073741824'}'` G" && return + [ "$1" -gt 1048576 ] && echo "`awk 'BEGIN{printf "%.2f\n",'$1'/'1048576'}'` M" && return + [ "$1" -gt 1024 ] && echo "`awk 'BEGIN{printf "%.2f\n",'$1'/'1024'}'` K" && return + echo "${1} bytes" +} + +# 设备异常流量检测 +function get_client_usage(){ + [ -z "$client_usage" ] && return + [ "$client_usage" -ne "1" ] && return + [ -z "$client_usage_max" ] && return + [ -z "$get_client_usage_time" ] && get_client_usage_time=`date +%s` + ( echo $client_usage_max|sed -r 's/.*(.)$/\1/'|grep -q "K\|k" ) && client_usage_max=`expr ${client_usage_max%?} \* 1024` + ( echo $client_usage_max|sed -r 's/.*(.)$/\1/'|grep -q "M\|m" ) && client_usage_max=`expr ${client_usage_max%?} \* 1048576` + ( echo $client_usage_max|sed -r 's/.*(.)$/\1/'|grep -q "G\|g" ) && client_usage_max=`expr ${client_usage_max%?} \* 1073741824` + [ -z "$client_usage_disturb" ] && client_usage_disturb="0" + [ "$client_usage_disturb" -eq "0" ] && [ -f "${dir}ipAddress" ] && local MACLIST=`cat ${dir}ipAddress|awk '{print $2}'|grep -v "^$"|sort -u` + [ "$client_usage_disturb" -eq "1" ] && [ ! -z "$client_usage_whitelist" ] && local MACLIST=`echo "$client_usage_whitelist"` + [ -z "$MACLIST" ] && return + + if [ "$((`date +%s`-$get_client_usage_time))" -ge "60" ]; then + > ${dir}client_usage_aliases + for mac in $MACLIST; do + ( ! cat ${dir}ipAddress|grep -q -i -w $mac|grep -v "^$"|sort -u|head -n1 ) && continue + echo "$mac" `usage get ${mac} bytes` >> ${dir}client_usage_aliases + [ -f "${dir}old_client_usage_aliases" ] && get_client_usage_bytes=`cat ${dir}old_client_usage_aliases|grep -i -w $mac|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` || continue + [ -z "$get_client_usage_bytes" ] && get_client_usage_bytes="0" + if [ "$((`usage get ${mac} bytes`-$get_client_usage_bytes))" -ge "$client_usage_max" ]; then + local ip=`cat ${dir}ipAddress|grep -i -w $mac|awk '{print $1}'|grep -v "^$"|sort -u|head -n1` + local ip_name=`getname ${ip} ${mac}` + local tmp_usage=$(bytes_for_humans $(expr `usage get ${mac} bytes` - ${get_client_usage_bytes})) + local time_up=`cat ${dir}ipAddress|grep -w ${ip}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` + local ip_total=`usage get $mac` && [ ! -z "$ip_total" ] && local ip_total="${str_linefeed}${str_tab}总计流量: ${str_space}${str_space}${str_space}${str_space}${ip_total}" + local time1=`date +%s` + local time1=$(time_for_humans `expr ${time1} - ${time_up}`) + if [ -z "$title" ]; then + title="${ip_name} 流量异常" + content="${content}${str_splitline}${str_title_start}${font_red} 设备流量异常${font_end}${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${mac}$ip_total${str_linefeed}${str_tab}一分钟内流量: ${str_space}${str_space}${tmp_usage}${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + elif ( echo "$title"|grep -q "流量异常" ); then + title="${ip_name} ${title}" + content="${content}${str_splitline}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${mac}$ip_total${str_linefeed}${str_tab}一分钟内流量: ${str_space}${str_space}${str_space}${tmp_usage}${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start}${font_red} 设备流量异常${font_end}${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${mac}$ip_total${str_linefeed}${str_tab}一分钟内流量: ${str_space}${str_space}${str_space}${tmp_usage}${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + fi + fi + done + cat ${dir}client_usage_aliases > ${dir}old_client_usage_aliases + get_client_usage_time=`date +%s` + fi +} + +# 时间单位换算 +function time_for_humans { + [ ! "$1" ] && return + if [ "$1" -lt 60 ]; then + echo "${1} 秒" + elif [ "$1" -lt 3600 ]; then + local usetime_min=`expr $1 / 60` + local usetime_sec=`expr $usetime_min \* 60` + local usetime_sec=`expr $1 - $usetime_sec` + echo "${usetime_min} 分 ${usetime_sec} 秒" + elif [ "$1" -lt 86400 ]; then + local usetime_hour=`expr $1 / 3600` + local usetime_min=`expr $usetime_hour \* 3600` + local usetime_min=`expr $1 - $usetime_min` + local usetime_min=`expr $usetime_min / 60` + echo "${usetime_hour} 小时 ${usetime_min} 分" + else + local usetime_day=`expr $1 / 86400` + local usetime_hour=`expr $usetime_day \* 86400` + local usetime_hour=`expr $1 - $usetime_hour` + local usetime_hour=`expr $usetime_hour / 3600` + echo "${usetime_day} 天 ${usetime_hour} 小时" + fi +} + +# 计算字符真实长度 +function length_str { + [ ! "$1" ] && return + local length_zh=`echo "$1"|awk '{print gensub(/[\u4e00-\u9FA5A-Za-z0-9_]/,"","g",$0)}'|awk -F "" '{print NF}'` + local length_en=`echo "$1"|awk '{print gensub(/[^\u4e00-\u9FA5A-Za-z0-9_]/,"","g",$0)}'|awk -F "" '{print NF}'` + echo `expr $length_zh / 3 \* 2 + $length_en` +} + +# 截取字符,避免中文乱码 +function cut_str { + [ ! "$1" ] && return + [ ! "$2" ] && return + [ `length_str $1` -le "$2" ] && echo "$1" && return + local temp_length=$2 + while [ $(length_str `echo "$1"|cut -c -$temp_length`) -lt "$2" ]; do + temp_length=`expr $temp_length + 1` + done + while [ $(printf "%d" \'`echo "$1"|cut -c $temp_length`) -ge "128" ] && [ $(printf "%d" \'`echo "$1"|cut -c $temp_length`) -lt "224" ]; do + temp_length=`expr $temp_length + 1` + done + temp_length=`expr $temp_length - 1` + echo $(echo "$1"|cut -c -$temp_length)"..." +} + +# 随机数 +function rand(){ + local min=$1 + local max=$(($2- $min + 1)) + local num=$(date +%s%N) + echo $(($num % $max + $min)) +} + +# 在线设备列表 +function pushbot_first(){ + [ -f "${dir}ipAddress" ] && local IPLIST=`cat ${dir}ipAddress|awk '{print $1}'|grep -v "^$"|sort -u` + for ip in $IPLIST; do + read -u 5 + { + down $ip + echo "" >&5 + }& + done + wait + unset ip IPLIST + local IPLIST=`cat /proc/net/arp|grep "0x2\|0x6"|awk '{print $1}'|grep -v "^169.254."|grep -v "^$"|sort -u|grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'` + for ip in $IPLIST; do + read -u 5 + { + up $ip + echo "" >&5 + }& + done + wait +} +# 创建计划任务 +function pushbot_cron(){ + function del_cron(){ + ( echo `crontab -l 2>/dev/null`|grep -q "pushbot" ) && crontab -l > conf && sed -i "/pushbot/d" conf && crontab conf && rm -f conf >/dev/null 2>&1 + } + function re_cron(){ + /etc/init.d/cron stop + /etc/init.d/cron start + } + del_cron + if [ -z "$pushbot_enable" ]; then + re_cron + return + fi + + # 重置流量 + if [ ! -z "$reset_regularly" ] && [ "$reset_regularly" -eq "1" ]; then + crontab -l 2>/dev/null > conf && echo -e "0 0 * * * rm /tmp/pushbot/usage.db >/dev/null 2>&1" >> conf && crontab conf && rm -f conf >/dev/null 2>&1 + crontab -l 2>/dev/null > conf && echo -e "0 0 * * * rm /tmp/pushbot/usage6.db >/dev/null 2>&1" >> conf && crontab conf && rm -f conf >/dev/null 2>&1 + fi + [ ! -z "$regular_time_2" ] && local regular_time_2=",${regular_time_2}" + [ ! -z "$regular_time_3" ] && local regular_time_3=",${regular_time_3}" + # 定时发送 + if [ ! -z "$regular_time" ] || [ ! -z "$regular_time_2" ] || [ ! -z "$regular_time_3" ]; then + crontab -l 2>/dev/null > conf && echo -e "0 $regular_time$regular_time_2$regular_time_3 * * * /usr/bin/pushbot/pushbot send &" >> conf && crontab conf && rm -f conf >/dev/null 2>&1 + # 间隔发送 + elif [ ! -z "$interval_time" ]; then + crontab -l 2>/dev/null > conf && echo -e "0 */$interval_time * * * /usr/bin/pushbot/pushbot send &" >> conf && crontab conf && rm -f conf >/dev/null 2>&1 + fi + re_cron +} + +# 免打扰检测 +function pushbot_disturb(){ + [ -z "$pushbot_sheep" ] || [ -z "$starttime" ] || [ -z "$endtime" ] && return 0 + if [ `date +%H` -ge $endtime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a `date +%H` -ge $endtime -a $starttime -gt $endtime ]; then + unset sheep_starttime + rm -f ${dir}sheep_usage ${dir}old_sheep_usage 2>/dev/null + disturb_text=`/usr/bin/jq -r '._api' ${jsonpath}` + return 0 + else + [ -z "$sheep_starttime" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【免打扰】夜深了,该休息了" >> ${logfile} && sheep_starttime=`date +%s` + if [ "$pushbot_sheep" -eq "1" ] ;then + while [ `date +%H` -lt "$endtime" ]; do + enable_detection + sleep $sleeptime + done + elif [ "$pushbot_sheep" -eq "2" ] ;then + disturb_text="【免打扰】" + return 1 + fi + fi +} + +# 文件锁 +function LockFile(){ + if [ $1 = "lock" ] ;then + [ ! -f "${dir}pushbot.lock" ] && > ${dir}pushbot.lock && return + while [ -f "${dir}pushbot.lock" ]; do + enable_detection 1 + done + LockFile lock + fi + [ $1 = "unlock" ] && rm -f ${dir}pushbot.lock >/dev/null 2>&1 + return 0 +} + +# 检测黑白名单 +function blackwhitelist(){ + [ ! "$1" ] && return 1 + [ -z "$pushbot_whitelist" ] && [ -z "$pushbot_blacklist" ] && [ -z "$pushbot_interface" ] && [ -z "$MAC_online_list" ] && [ -z "$MAC_offline_list" ] && return 0 + [ ! -z "$pushbot_whitelist" ] && ( echo "$pushbot_whitelist"|grep -q -i -w $1 ) && return 1 + [ ! -z "$pushbot_blacklist" ] && ( ! echo "$pushbot_blacklist"|grep -q -i -w $1 ) && return 1 + [ ! -z "$pushbot_interface" ] && ( ! echo `getinterface ${1}`|grep -q -i -w $pushbot_interface ) && return 1 + [ ! -z "$MAC_online_list" ] && [ ! -z "$mac_online_status" ] && return 1 + [ ! -z "$MAC_online_list" ] && ( echo "$MAC_online_list"|grep -q -i -w $1 ) && return 1 + [ ! -z "$MAC_offline_list" ] && [ -z "$mac_online_status" ] && return 1 + return 0 +} + +function get_client(){ + if [ -f "${dir}ipAddress" ]; then + while read line; do + local js_str="${js_str}
" + local js_str="${js_str}
<%:`echo "$line"|awk '{print $3}'`%>
" + local tmp_mac=`echo "$line"|awk '{print $2}'` + local js_str="${js_str}
<%:${tmp_mac}%>
" + local js_str="${js_str}
<%:`echo "$line"|awk '{print $1}'`%>
" + local tmp_usage=`usage get ${tmp_mac}` + local js_str="${js_str}
<%:${tmp_usage}%>
" + local tmp_uptime=`echo "$line"|awk '{print $4}'` + local tmp_timenow=`date +%s` + local tmp_uptime=$(time_for_humans `expr ${tmp_timenow} - ${tmp_uptime}`) + local js_str="${js_str}
<%:${tmp_uptime}%>
" + done < ${dir}ipAddress + fi +cat>/usr/lib/lua/luci/view/pushbot/pushbot_client.htm<<%:在线设备列表%>
<%:客户端名%>
<%:MAC%>
<%:IP%>
<%:总计流量%>
<%:在线时间%>
+$js_str +
+EOF +} + +# 重启网络服务 +function network_restart(){ +cat>${dir}network_restart</dev/null 2>&1 & +/etc/init.d/firewall restart >/dev/null 2>&1 & +/etc/init.d/dnsmasq restart >/dev/null 2>&1 & +EOF + chmod 0755 ${dir}network_restart && ${dir}network_restart + rm -f ${dir}network_restart >/dev/null 2>&1 +} + +# 查看无人值守任务设备是否在线 +function geterrdevicealiases(){ + [ -z "$err_device_aliases" ] && return + [ -f ${dir}ipAddress ] && local logrow=$(grep -c "" ${dir}ipAddress) || local logrow="0";[ $logrow -eq "0" ] && return + local MACLIST=`cat ${dir}ipAddress|awk '{print $2}'|grep -v "^$"|sort -u` + for mac in $MACLIST; do + [ -z "$err_mac" ] && [ ! -z "$mac" ] && local err_mac=`echo "$err_device_aliases"|grep -i $mac|grep -v "^$"|sort -u|head -n1` + done + # 进入免打扰时间已经超过一小时 + if [ ! -z "$sheep_starttime" ] && [ "$((`date +%s`-$sheep_starttime))" -ge "3600" ]; then + > ${dir}sheep_usage + local MACLIST=`echo "$err_device_aliases"|grep -v "^$"|sort -u` + for mac in $MACLIST; do + [ ! -z "$mac" ] && local tmptotal=`usage get ${mac} bytes` + [ ! -z "$tmptotal" ] && awk 'BEGIN{printf "%.0f\n",'$tmptotal'/'204800'}' 2>/dev/null >> ${dir}sheep_usage + done + old_sheep_usage=`cat ${dir}old_sheep_usage` 2>/dev/null + sheep_usage=`cat ${dir}sheep_usage` 2>/dev/null + [ "$old_sheep_usage" == "$sheep_usage" ] && [ -z "$sheep_nousage_starttime" ] && sheep_nousage_starttime=`date +%s` + [ "$old_sheep_usage" != "$sheep_usage" ] && unset sheep_nousage_starttime && cat ${dir}sheep_usage 2>/dev/null > ${dir}old_sheep_usage + [ ! -z "$sheep_nousage_starttime" ] && [ "$((`date +%s`-$sheep_nousage_starttime))" -ge "300" ] && unset err_mac + fi + [ -z "$err_mac" ] +} + +# 无人值守任务 +function unattended(){ + [ -z "$err_enable" ] || [ "$err_enable" -ne "1" ] && return + [ ! -z "$err_sheep_enable" ] && [ "$err_sheep_enable" -eq "1" ] && [ -z "$sheep_starttime" ] && return + geterrdevicealiases;[ $? -eq "1" ] && return + + if [ ! -z "$system_time_event" ]; then + local interfaceuptime=`getinterfaceuptime` + if [ ! -z "$autoreboot_time" ] && [ `cat /proc/uptime|awk -F. '{run_hour=$1/3600;printf("%d",run_hour)}'` -ge "$autoreboot_time" ] && [ "$system_time_event" -eq "1" ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【无人值守任务】重启路由器咯" >> ${logfile} + cat ${logfile} > /usr/bin/pushbot/errlog + sleep 2 && reboot && exit + elif [ ! -z "$network_restart_time" ] && [ ! -z "$interfaceuptime" ] && [ `echo "$interfaceuptime"|awk -F. '{run_hour=$1/3600;printf("%d",run_hour)}'` -ge "$network_restart_time" ] && [ "$system_time_event" -eq "2" ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【无人值守任务】重新拨号咯" >> ${logfile} + ifup wan >/dev/null 2>&1 + sleep 60 + fi + fi + + [ -z "$public_ip_today" ] && public_ip_today=`date +"%d"` + [ -z "$public_ip_count" ] && public_ip_count="0" + [ $public_ip_today -ne `date +"%d"` ] && public_ip_today=`date +"%d"` && public_ip_count=1 + if [ ! -z "$public_ip_event" ] && [ ! -z "$public_ip_retry_count" ] && [ "$public_ip_count" -le "$public_ip_retry_count" ]; then + public_ip_count=`expr $public_ip_count + 1` + local wanIP=`getip wanipv4` + local hostIP=`getip hostipv4` + if [ ! -z "$wanIP" ] && [ ! -z "$hostIP" ] && ( ! echo "$wanIP"|grep -q -w ${hostIP} );then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【无人值守任务】重拨尝试获取公网 ip,当前第 $public_ip_count 次 " >> ${logfile} + ifup wan >/dev/null 2>&1 + sleep 60 + local wanIP=`getip wanipv4` && local hostIP=`getip hostipv4` + [ ! -z "$pushbot_ipv4" ] && [ "$pushbot_ipv4" -eq "1" ] && local IPv4=${wanIP} + [ ! -z "$pushbot_ipv4" ] && [ "$pushbot_ipv4" -eq "2" ] && local IPv4=${hostIP} + [ ! -z "$pushbot_ipv6" ] && [ "$pushbot_ipv6" -eq "1" ] && local IPv6=`getip wanipv6` + [ ! -z "$pushbot_ipv6" ] && [ "$pushbot_ipv6" -eq "2" ] && local IPv6=`getip hostipv6` + [ ! -z "$wanIP" ] && [ ! -z "$hostIP" ] && ( ! echo "$wanIP"|grep -q -w ${hostIP} ) && echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $last_IPv6 >> ${dir}ip + fi + fi +} + +# 检测网络状态 +function rand_geturl(){ + function getcheck(){ + local urllist="https://www.163.com https://www.qq.com https://www.baidu.com https://www.qidian.com https://www.douban.com" + local url_number=`expr $(echo "$urllist"|grep -o ' '|wc -l) + 1` + local url_str=`echo "$urllist"|awk -v i=$(rand 1 $url_number) '{print $i}'` + echo `curl -k -s -w "%{http_code}" -m 5 ${url_str} -A "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" -o /dev/null` + } + local check=`getcheck` + while [ -z "$check" ] || [ "$check" -ne "200" ]; do + local check=`getcheck` + if [ ! -z "$check" ] && [ "$check" -eq "200" ]; then + [ ! -z "$network_enable" ] && [ "$network_enable" -eq "404" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【网络状态】网络恢复正常.." >> ${logfile} + local network_enable="200" + else + [ -z "$network_enable" ] || [ "$network_enable" -eq "200" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】当前网络不通!停止检测! " >> ${logfile} + local network_enable="404" + [ -z "$network_err_time" ] && network_err_time=`date +%s` + if [ ! -z "$network_err_event" ] && [ "$((`date +%s`-$network_err_time))" -ge "600" ]; then + > ${dir}send_enable.lock && pushbot_first && deltemp + geterrdevicealiases + if [ "$?" -eq "0" ]; then + [ -f /usr/bin/pushbot/autoreboot_count ] && retry_count=`cat /usr/bin/pushbot/autoreboot_count` && rm -f /usr/bin/pushbot/autoreboot_count >/dev/null 2>&1 + [ ! -z ${retry_count} ] && retry_count=0;retry_count=`expr $retry_count + 1` + if [ "$network_err_event" -eq "1" ] ;then + if [ "$retry_count" -lt "3" ] ;then + echo "$retry_count" > /usr/bin/pushbot/autoreboot_count + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】正在尝试重启路由,当前第 $retry_count 次 " >> ${logfile} + cat ${logfile} > /usr/bin/pushbot/errlog + sleep 2 && reboot && exit + fi + [ "$retry_count" -eq "3" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】已经重启路由2次,修复失败,请主人自行修复哦" >> ${logfile} + elif [ "$network_err_event" -eq "2" ] ;then + [ "$retry_count" -lt "3" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】正在尝试重启网络,当前第 $retry_count 次 " >> ${logfile} && ifup wan >/dev/null 2>&1 + [ "$retry_count" -eq "3" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】已经重启网络2次,修复失败,请主人自行修复哦 " >> ${logfile} + elif [ "$network_err_event" -eq "3" ] ;then + if [ "$retry_count" -eq "1" ] ;then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】正在尝试修复网络,当前第 1 次,重启网络服务中 " >> ${logfile} && network_restart + elif [ "$retry_count" -eq "2" ] ;then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】正在尝试修复网络,当前第 2 次,关闭可能造成网络断开的软件" >> ${logfile} + [ `uci get koolproxy.@global[0].enabled 2>/dev/null` -eq "1" ] && [ `uci get koolproxy.@global[0].koolproxy_mode 2>/dev/null` -eq "1" ] && /etc/init.d/koolproxy stop >/dev/null 2>&1 + [ `uci get adbyby.@adbyby[0].enable 2>/dev/null` -eq "1" ] && [ `uci get adbyby.@adbyby[0].wan_mode 2>/dev/null` -eq "0" ] && /etc/init.d/adbyby stop >/dev/null 2>&1 + [ `uci get passwall.@global[0].enabled 2>/dev/null` -eq "1" ] && [ `uci get passwall.@global[0].proxy_mode 2>/dev/null|grep global` ] && /etc/init.d/koolproxy stop >/dev/null 2>&1 + local shadowsocksr_enabled=`uci get shadowsocksr.@global[0].global_server 2>/dev/null|grep nil` + local shadowsocksr_run_mode=`uci get shadowsocksr.@global[0].run_mode 2>/dev/null|grep all` + [ -z "$shadowsocksr_enabled" ] && [ ! -z "$shadowsocksr_run_mode" ] && /etc/init.d/shadowsocksr stop >/dev/null 2>&1 + sleep 60 && network_restart + elif [ "$retry_count" -eq "3" ] ;then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】正在尝试修复网络,当前第 3 次,备份设置项,并修改相关设置" >> ${logfile} + mkdir -p /usr/bin/pushbot/configbak + cp -p -f /etc/config/network /usr/bin/pushbot/configbak/network + cp -p -f /etc/config/dhcp /usr/bin/pushbot/configbak/dhcp + cp -p -f /etc/config/firewall /usr/bin/pushbot/configbak/firewall + cp -p -f /etc/firewall.user /usr/bin/pushbot/configbak/firewall.user + uci set network.wan.peerdns='0' + uci delete network.wan.dns + uci add_list network.wan.dns='223.5.5.5' + uci add_list network.wan.dns='119.29.29.29' + uci delete network.wan.mtu + uci commit network + uci set dhcp.@dnsmasq[0].port='53' + uci set dhcp.@dnsmasq[0].resolvfile='/tmp/resolv.conf.auto' + uci delete dhcp.@dnsmasq[0].server + uci delete dhcp.@dnsmasq[0].noresolv + uci commit dhcp + uci delete firewall.redirect + >/etc/firewall.user + uci commit firewall + sleep 60 && network_restart + elif [ "$retry_count" -eq "4" ] ;then + echo "$retry_count" > /usr/bin/pushbot/autoreboot_count + cat ${logfile} > /usr/bin/pushbot/errlog + sleep 2 && reboot && exit + elif [ "$retry_count" -eq "5" ] ;then + echo "$retry_count" > /usr/bin/pushbot/autoreboot_count + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】修复失败,还原设置中,请自行检查网络设置" >> ${logfile} + cp -p -f /usr/bin/pushbot/configbak/network /etc/config/network + cp -p -f /usr/bin/pushbot/configbak/dhcp /etc/config/dhcp + cp -p -f /usr/bin/pushbot/configbak/firewall /etc/config/firewall + cp -p -f /usr/bin/pushbot/configbak/firewall.user /etc/firewall.user + cat ${logfile} > /usr/bin/pushbot/errlog + sleep 2 && reboot && exit + fi + fi + fi + elif [ -f /usr/bin/pushbot/autoreboot_count ]; then + network_err_time=`expr $network_err_time - 600` && sleep 60 + fi + enable_detection + sleep $sleeptime + fi + continue + done + rm -f /usr/bin/pushbot/autoreboot_count >/dev/null 2>&1 +} + +# 检测 ip 状况 +function ip_changes(){ + [ ! -z "$pushbot_ipv4" ] && [ "$pushbot_ipv4" -eq "1" ] && local IPv4=`getip wanipv4` + [ ! -z "$pushbot_ipv4" ] && [ "$pushbot_ipv4" -eq "2" ] && local IPv4=`getip hostipv4` + [ ! -z "$pushbot_ipv6" ] && [ "$pushbot_ipv6" -eq "1" ] && local IPv6=`getip wanipv6` + [ ! -z "$pushbot_ipv6" ] && [ "$pushbot_ipv6" -eq "2" ] && local IPv6=`getip hostipv6` + + if [ -f ${dir}ip ]; then + local last_IPv4=$(cat "${dir}ip"|grep IPv4|awk '{print $2}'|grep -v "^$"|sort -u|head -n1) + local last_IPv6=$(cat "${dir}ip"|grep IPv6|awk '{print $2}'|grep -v "^$"|sort -u|head -n1) + if [ ! -z "$pushbot_ipv4" ] && [ "$pushbot_ipv4" -ne "0" ] && [ ! -z "$IPv4" ] && ( ! echo ${IPv4}|grep -w -q ${last_IPv4} ); then + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}当前IP:${IPv4}" >> ${logfile} + echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $last_IPv6 >> ${dir}ip + title="IP 地址变化" + content="${content}${str_splitline}${str_title_start}${font_green} IP 地址变化${font_end}${str_title_end}${str_linefeed}${str_tab}当前 IP:${IPv4}" + elif [ ! -z "$pushbot_ipv4" ] && [ "$pushbot_ipv4" -ne "0" ] && [ -z "$IPv4" ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】获取 IPv4 地址失败" >> ${logfile} + fi + + if [ ! -z "$pushbot_ipv6" ] && [ "$pushbot_ipv6" -ne "0" ] && [ ! -z "$IPv6" ] && ( ! echo "$IPv6"|grep -w -q ${last_IPv6} ); then + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}当前IPv6:${IPv6}" >> ${logfile} + echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $IPv6 >> ${dir}ip + [ -z "$title" ] && title="IPv6 地址变化" + [ ! -z "$title" ] && title="IP 地址变化" + content="${content}${str_splitline}${str_title_start}${font_green} IPv6 地址变化${font_end}${str_title_end}${str_linefeed}${str_tab}当前 IPv6:${IPv6}" + elif [ ! -z "$pushbot_ipv6" ] && [ "$pushbot_ipv6" -ne "0" ] && [ -z "$IPv6" ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】获取 IPv6 地址失败" >> ${logfile} + fi + + else + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}路由器已经重启!" >> ${logfile} + [ ! -z "$pushbot_ipv4" ] && [ "$pushbot_ipv4" -ne "0" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 当前IP: ${IPv4}" >> ${logfile} + [ ! -z "$pushbot_ipv6" ] && [ "$pushbot_ipv6" -ne "0" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 当前IPv6: ${IPv6}" >> ${logfile} + echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $IPv6 >> ${dir}ip + title="路由器重新启动" + content="${content}${str_splitline}${str_title_start}${font_green} 路由器重新启动${font_end}${str_title_end}" + [ ! -z "$pushbot_ipv4" ] && [ "$pushbot_ipv4" -ne "0" ] && content="${content}${str_linefeed}${str_tab}当前IP:${IPv4}" + [ ! -z "$pushbot_ipv6" ] && [ "$pushbot_ipv6" -ne "0" ] && content="${content}${str_linefeed}${str_tab}当前IPv6:${IPv6}" + fi + + if [ ! -z "$content" ] ;then + [ -z "$ddns_enabled" ] && ddns_enabled=$(uci show ddns|grep "enabled"|grep "1") + [ -z "$ddns_enabled" ] && ddns_logrow=0 || ddns_logrow=$(echo "$ddns_enabled"|wc -l) + if [ $ddns_logrow -ge 1 ]; then + /etc/init.d/ddns restart >/dev/null 2>&1 + fi + [ -z "$zerotier_enabled" ] && zerotier_enabled=$(uci get zerotier.sample_config.enabled) + if [ ! -z "$zerotier_enabled" ] && [ $zerotier_enabled -eq "1" ] ; then + /etc/init.d/zerotier restart >/dev/null 2>&1 + fi + fi +} + +# 检测设备上线 +function up(){ + [ -f ${dir}ipAddress ] && ( cat ${dir}ipAddress|grep -q -w $1 ) && return + local ip_mac=`getmac $1` + local ip_name=`getname ${1} ${ip_mac}` + local ip_interface=`getinterface ${ip_mac}` + getping ${1} ${up_timeout} "1";local ping_online=$? + if [ "$ping_online" -eq "0" ]; then + LockFile lock + [ ! -z "$pushbot_blacklist" ] && local tmp_mac=`echo "${pushbot_blacklist}"|grep -w -i ${ip_mac}` + [ ! -z "$pushbot_whitelist" ] && local tmp_mac=`echo "${pushbot_whitelist}"|grep -w -i ${ip_mac}` + if [ ! -z "$tmp_mac" ] && ( cat ${dir}ipAddress|grep -q -w -i ${tmp_mac} ); then + usage down $1 + echo "$1 ${ip_mac} ${ip_name} `date +%s` ${ip_interface}" >> ${dir}ipAddress + LockFile unlock && return + elif [ ! -z "$tmp_mac" ] && [ -f "${dir}tmp_downlist" ] && ( cat ${dir}tmp_downip|grep -q -w -i ${tmp_mac} ); then + local tmp_downip=`cat ${dir}tmp_downlist|grep -w -i ${tmp_mac}|awk '{print $1}'|grep -v "^$"|sort -u|head -n1` + usage down $tmp_downip + sed -i "/^${tmp_downip} /d" ${dir}tmp_downlist + LockFile unlock && return + fi + [ -f "${dir}tmp_downlist" ] && local tmp_downip=`cat ${dir}tmp_downlist|grep -w ${1}|grep -v "^$"|sort -u|head -n1` + if [ ! -z "$tmp_downip" ]; then + cat ${dir}tmp_downlist|grep -w ${1}|grep -v "^$"|sort -u|head -n1 >> ${dir}ipAddress + sed -i "/^${1} /d" ${dir}tmp_downlist + else + usage down $1 + echo "$1 ${ip_mac} ${ip_name} `date +%s` ${ip_interface}" >> ${dir}ipAddress + blackwhitelist ${ip_mac};local ip_blackwhite=$? + [ -f "${dir}send_enable.lock" ] || [ -z "$pushbot_up" ] || [ -z "$ip_blackwhite" ] && LockFile unlock && return + [ ! -z "$pushbot_up" ] && [ "$pushbot_up" -ne "1" ] && LockFile unlock && return + [ -z "$ip_blackwhite" ] || [ "$ip_blackwhite" -ne "0" ] && LockFile unlock && return + [ -f "${dir}title" ] && local title=`cat ${dir}title` + [ -f "${dir}content" ] && local content=`cat ${dir}content` + if [ -z "$title" ]; then + local title="$ip_name 连接了你的路由器" + local content="${str_splitline}${str_title_start}${font_green} 新设备连接${font_end}${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${1}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}${str_linefeed}${str_tab}网络接口:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_interface}" + elif ( echo ${title}|grep -q "连接了你的路由器" ); then + local title="${ip_name} ${title}" + local content="${str_splitline}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${1}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}${str_linefeed}${str_tab}网络接口:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_interface}" + else + local title="设备状态变化" + local content="${str_splitline}${str_title_start}${font_green} 新设备连接${font_end}${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${1}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}${str_linefeed}${str_tab}网络接口:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_interface}" + fi + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}新设备 ${ip_name} ${1} 连接了">> ${logfile} + #[ ! -z "$pushbot_blacklist" ] && local title="你偷偷关注的设备上线了" + [ ! -z "$title" ] && echo "$title" >${dir}title + [ ! -z "$content" ] && echo -n "$content" >>${dir}content + fi + fi + LockFile unlock +} + +# 检测设备离线 +function down(){ + local ip_mac=`getmac $1` + local ip_name=`getname ${1} ${ip_mac}` + local ip_interface=`getinterface ${ip_mac}` + getping ${1} ${down_timeout} ${timeout_retry_count};local ping_online=$? + if [ "$ping_online" -eq "1" ]; then + LockFile lock + [ ! -f "${dir}send_enable.lock" ] && cat ${dir}ipAddress|grep -w ${1}|grep -v "^$"|sort -u|head -n1 >> ${dir}tmp_downlist + sed -i "/^${1} /d" ${dir}ipAddress + LockFile unlock + else + local tmp_name=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $3}'|grep -v "^$"|sort -u|head -n1` + if [ "$ip_name" != "$tmp_name" ]; then + LockFile lock + local tmp_str=$(echo "$1 ${ip_mac} ${ip_name} `cat ${dir}ipAddress|grep -w ${1}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` ${ip_interface}") + sed -i "/^${1} /d" ${dir}ipAddress + echo "$tmp_str" >> ${dir}ipAddress + LockFile unlock + fi + fi +} + +# 设备离线通知 +function down_send(){ + [ ! -f "${dir}tmp_downlist" ] && return + local IPLIST=`cat ${dir}tmp_downlist|awk '{print $1}'` + for ip in $IPLIST; do + local ip_mac=`getmac ${ip}` + blackwhitelist ${ip_mac};local ip_blackwhite=$? + [ -z "$pushbot_down" ] || [ -z "$ip_blackwhite" ] && continue + [ ! -z "$pushbot_down" ] && [ "$pushbot_down" -ne "1" ] && continue + [ -z "$ip_blackwhite" ] || [ "$ip_blackwhite" -ne "0" ] && continue + [ ! -z "$pushbot_blacklist" ] && local tmp_mac=`echo "${pushbot_blacklist}"|grep -w -i ${ip_mac}` + [ ! -z "$pushbot_whitelist" ] && local tmp_mac=`echo "${pushbot_whitelist}"|grep -w -i ${ip_mac}` + [ ! -z "$tmp_mac" ] && ( cat ${dir}ipAddress|grep -q -w -i ${tmp_mac} ) && continue + local ip_name=`getname ${ip} ${ip_mac}` + local time_up=`cat ${dir}tmp_downlist|grep -w ${ip}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` + local ip_total=`usage get $ip_mac` && [ ! -z "$ip_total" ] && local ip_total="${str_linefeed}${str_tab}总计流量: ${str_space}${str_space}${str_space}${str_space}${ip_total}" + local time1=`date +%s` + local time1=$(time_for_humans `expr ${time1} - ${time_up}`) + if [ -z "$title" ]; then + title="${ip_name} 断开连接" + content="${content}${str_splitline}${str_title_start}${font_red} 设备断开连接${font_end}${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}$ip_total${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + elif ( echo "$title"|grep -q "断开连接" ); then + title="${ip_name} ${title}" + content="${content}${str_splitline}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}$ip_total${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start}${font_red} 设备断开连接${font_end}${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}$ip_total${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + fi + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}设备 ${ip_name} ${ip} 断开连接 " >> ${logfile} + done + rm -f ${dir}tmp_downlist >/dev/null 2>&1 +} + +# 当前设备列表 +function current_device(){ + ( echo "$lite_enable"|grep -q "content" ) || ( echo "$lite_enable"|grep -q "device" ) && return + [ -f ${dir}ipAddress ] && local logrow=$(grep -c "" ${dir}ipAddress) || local logrow="0";[ $logrow -eq "0" ] && return + [ -f ${dir}usage.db ] && local ip_total_db="总计流量${str_space}${str_space}${str_space}${str_space}" + content="${content}${str_splitline}${str_title_start}${font_blue} 现有在线设备 ${logrow} 台,具体如下${font_end}${str_title_end}${str_linefeed}${str_tab}IP 地址${str_space}${str_space}${str_space}${str_space}${str_space}${str_space}${str_space}${str_space}${str_space}${ip_total_db}${boldstar}客户端名${boldstar}" + local IPLIST=`cat ${dir}ipAddress|awk '{print $1}'` + for ip in $IPLIST; do + local ip_mac=`getmac ${ip}` + local ip_total=`usage get ${ip_mac}` + local ip_name=`getname ${ip} ${ip_mac}` + local ip_name=`cut_str $ip_name 15` + if [ "${#ip}" -lt "15" ]; then + local n=`expr 15 - ${#ip}` + for i in `seq 1 $n`; do + local ip="${ip}${str_space}" + done + unset i n + fi + if [ ! -z "$ip_total" ]; then + local n=`expr 11 - ${#ip_total}` + for i in `seq 1 $n`; do + local ip_total="${ip_total}${str_space}" + done + fi + content="${content}${str_linefeed}${str_tab}${ip}${ip_total}${boldstar}${font_green2}${ip_name}${font_end2}${boldstar}" + unset i n ip_total ip_mac ip_name + done +} + +# 检测 cpu 状态 +function cpu_load(){ + if [ ! -z "$temperature_enable" ] && [ "$temperature_enable" -eq "1" ] && [ ! -z "$temperature" ]; then + [ -z "$temperature_time" ] && temperature_time=`date +%s` + local cpu_wendu=`soc_temp`; + [ -z "$cpu_wendu" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取设备温度,请检查命令" >> ${logfile} + + if [ `expr $cpu_wendu \> $temperature` -eq "1" ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!警报!!】 CPU 温度过高: ${cpu_wendu}" >> ${logfile} + else + temperature_time=`date +%s` + fi + + if [ "$((`date +%s`-$temperature_time))" -ge "300" ] && [ -z "$temperaturecd_time" ]; then + title="CPU 温度过高!" + temperaturecd_time=`date +%s` + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text} CPU 温度过高: ${cpu_wendu}" >> ${logfile} + content="${content}${str_splitline}${str_title_start}${font_red} CPU 温度过高${font_end}${str_title_end}${str_linefeed}${str_tab}CPU 温度已连续五分钟超过预设${str_linefeed}${str_tab}接下来一小时不再提示${str_linefeed}${str_tab}当前温度:${cpu_wendu}℃" + elif [ ! -z "$temperaturecd_time" ] && [ "$((`date +%s`-$temperaturecd_time))" -ge "3300" ] ;then + unset temperaturecd_time + fi + fi + + if [ ! -z "$cpuload_enable" ] && [ "$cpuload_enable" -eq "1" ] && [ ! -z "$cpuload" ]; then + [ -z "$cpuload_time" ] && cpuload_time=`date +%s` + local cpu_fuzai=`cat /proc/loadavg|awk '{print $1}'` 2>/dev/null + [ -z "$cpu_fuzai" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取设备负载,请检查命令" >> ${logfile} + + if [ `expr $cpu_fuzai \> $cpuload` -eq "1" ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!警报!!】 CPU 负载过高: ${cpu_fuzai}" >> ${logfile} + cputop log + else + cpuload_time=`date +%s` + fi + + if [ "$((`date +%s`-$cpuload_time))" -ge "300" ] && [ -z "$cpucd_time" ]; then + unset getlogtop + if [ ! -z "$title" ] && ( echo "$title"|grep -q "过高" ); then + title="设备报警!" + else + title="CPU 负载过高!" + fi + cpucd_time=`date +%s` + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text} CPU 负 载过高: ${cpu_fuzai}" >> ${logfile} + content="${content}${str_splitline}${font_red}CPU 负载过高${font_end}${str_linefeed}${str_tab}CPU 负载已连续五分钟超过预设${str_linefeed}${str_tab}接下来一小时不再提示${str_linefeed}${str_tab}当前负载:${cpu_fuzai}" + cputop + elif [ ! -z "$cpucd_time" ] && [ "$((`date +%s`-$cpucd_time))" -ge "3300" ] ;then + unset cpucd_time + fi + fi +} + +function cputop(){ + [ -z "$1" ] && content="${content}${str_splitline}${str_title_start} 当前 CPU 占用前三的进程${str_title_end}" + local gettop=`top -bn 1|grep -v "top -bn 1"` + for i in `seq 5 7`; do + local top_name=`echo "${gettop}"|awk 'NR=='${i}|awk '{print ($8 ~ /\/bin\/sh|\/bin\/bash/) ? $9 : $8}'` + local top_load=`echo "${gettop}"|awk 'NR=='${i}|awk '{print $7}'` + local temp_top="${top_name} ${top_load}" + [ ! -z "$1" ] && local logtop="$logtop $temp_top" + [ -z "$1" ] && content="${content}${str_linefeed}${str_tab}${temp_top}" + done + unset i + [ ! -z "$1" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!警报!!】 CPU 占用前三: ${logtop}" >> ${logfile} +} + +# 生成日志监控文件,避免后台影响 wait 语句 +function get_syslog(){ + kill -9 `pgrep -f "logread -f -p notice"` 2>/dev/null + [ -z "$web_logged" ] && [ -z "$ssh_logged" ] && [ -z "$web_login_failed" ] && [ -z "$ssh_login_failed" ] && return + rm -f ${dir}login_monitor >/dev/null 2>&1 + +cat>${dir}get_syslog<> ${dir}login_monitor & +EOF + chmod 0755 ${dir}get_syslog && ${dir}get_syslog + rm -f ${dir}get_syslog >/dev/null 2>&1 +} + +# 登录提醒通知 +function login_send(){ + [ -z "$web_logged" ] && [ -z "$ssh_logged" ] && [ -z "$web_login_failed" ] && [ -z "$ssh_login_failed" ] && return + [ ! -f ${dir}login_monitor ] && return + cat ${dir}login_monitor|grep -i "accepted login"|awk '{print $4" "$NF}' >> ${dir}web_login + cat ${dir}login_monitor|grep -i "Password auth succeeded\|Pubkey auth succeeded"|grep -Eo "[0-9]{2}:[0-9]{2}:[0-9]{2}.*[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"|awk '{print $1" "$NF" "$5}' >> ${dir}ssh_login + cat ${dir}login_monitor|grep -i "failed login"|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" >> ${dir}web_failed + cat ${dir}login_monitor|grep -i "Bad password attempt\|Login attempt for nonexistent user from"|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" >> ${dir}ssh_failed + echo "" > ${dir}login_monitor + add_ip_black + + local login_ip_list=`cat ${dir}web_login|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + for login_ip in $login_ip_list; do + [ -z "$login_ip" ] && continue + echo "$ip_white_list"|grep -w -q "$login_ip" && continue + local web_login_time=`cat ${dir}web_login|grep -w ${login_ip}|awk '{print $1}'|grep -v "^$"|sort -u|head -n1` + local web_login_mode=`cat ${dir}web_login|grep -w ${login_ip}|awk '{print $3}'|grep -v "^$"|sort -u|head -n1` + if [ ! -z "$web_logged" ] && [ "$web_logged" -eq "1" ]; then + if [ -z "$title" ]; then + title="${login_ip} 通过 Web 登录了路由器" + content="${content}${str_splitline}${str_title_start}${font_green} 登录信息${font_end}${str_title_end}${str_linefeed}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${web_login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + elif ( echo "$title"|grep -q "登录了路由器" ); then + title="${login_ip} ${title}" + content="${content}${str_splitline}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${web_login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start}${font_green} 登录成功来源${font_end}${str_title_end}${str_linefeed}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${web_login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + fi + fi + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}设备 ${login_ip} 通过 web ${web_login_mode} 登录了路由器 " >> ${logfile} + done + echo "" > ${dir}web_login + unset login_ip login_ip_list + + local login_ip_list=`cat ${dir}ssh_login|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + for login_ip in $login_ip_list; do + [ -z "$login_ip" ] && continue + echo "$ip_white_list"|grep -w -q "$login_ip" && continue + local ssh_login_time=`cat ${dir}ssh_login|grep -w ${login_ip}|awk '{print $1}'|grep -v "^$"|sort -u|head -n1` + local ssh_login_mode=`cat ${dir}ssh_login|grep -w ${login_ip}|awk '{print $3}'|grep -v "^$"|sort -u|head -n1` + [ ! -z "$ssh_login_mode" ] && local content_mode="${str_linefeed}${str_tab}登录方式: ${str_space}${str_space}${str_space}${str_space}${ssh_login_mode}" + if [ ! -z "$ssh_logged" ] && [ "$ssh_logged" -eq "1" ]; then + if [ -z "$title" ]; then + title="${login_ip} 通过 SSH 登录了路由器" + content="${content}${str_splitline}${str_title_start}${font_green} 登录成功来源${font_end}${str_title_end}${str_linefeed}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${ssh_login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + elif ( echo "$title"|grep -q "登录了路由器" ); then + title="${login_ip} ${title}" + content="${content}${str_splitline}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${ssh_login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start}${font_green} 登录成功来源${str_title_end}${str_linefeed}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${ssh_login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + fi + fi + echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】设备 ${login_ip} 通过 SSH ${ssh_login_mode} 登录了路由器 " >> ${logfile} + done + echo "" > ${dir}ssh_login + unset login_ip login_ip_list + + local login_ip_list=`cat ${dir}web_failed|awk '{print $1}'|grep -v "^$"|sort -u|head -n1` + for login_ip in $login_ip_list; do + [ -z "$login_ip" ] && continue + echo "$ip_white_list"|grep -w -q "$login_ip" && continue + local web_login_sum=`cat ${dir}web_failed|grep -w "${login_ip}"|wc -l` + if [ "$web_login_sum" -ge "$login_max_num" ] ;then + if [ ! -z "$web_login_failed" ] && [ "$web_login_failed" -eq "1" ]; then + if [ -z "$title" ]; then + title="${login_ip} 通过 Web 频繁尝试登录" + content="${content}${str_splitline}${str_title_start}${font_red} 登录失败来源${font_end}${str_title_end}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + elif ( echo "$title"|grep -q "频繁尝试登录" ); then + title="${login_ip} ${title}" + content="${content}${str_splitline}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start}${font_red} 登录失败来源${font_end}${str_title_end}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + fi + fi + sed -i "/^${login_ip}$/d" ${dir}web_failed + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】设备 ${login_ip} 通过 Web 频繁尝试登录" >> ${logfile} + add_ip_black $login_ip + fi + done + unset login_ip + + local login_ip_list=`cat ${dir}ssh_failed|awk '{print $1}'|grep -v "^$"|sort -u|head -n1` + for login_ip in $login_ip_list; do + [ -z "$login_ip" ] && continue + echo "$ip_white_list"|grep -w -q "$login_ip" && continue + local ssh_login_sum=`cat ${dir}ssh_failed|grep -w "${login_ip}"|wc -l` + if [ "$ssh_login_sum" -ge "$login_max_num" ] ;then + if [ ! -z "$ssh_login_failed" ] && [ "$ssh_login_failed" -eq "1" ]; then + if [ -z "$title" ]; then + title="${login_ip} 通过 SSH 频繁尝试登录" + content="${content}${str_splitline}${str_title_start}${font_red} 登录失败来源${font_end}${str_title_end}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + elif ( echo "$title"|grep -q "频繁尝试登录" ); then + title="${login_ip} ${title}" + content="${content}${str_splitline}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start}${font_red} 登录失败来源${font_end}${str_title_end}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + fi + fi + sed -i "/^${login_ip}$/d" ${dir}ssh_failed + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】设备 ${login_ip} 通过 SSH 频繁尝试登录" >> ${logfile} + add_ip_black $login_ip + fi + done + unset login_ip + +} + +# 添加黑名单 +function add_ip_black(){ + [ -f "${ip_blacklist_path}" ] && local logrow=$(grep -c "" ${ip_blacklist_path}) || local logrow="0" + [ ! -f "${ip_blacklist_path}" ] && local logrow="0" + [ ! -z "$web_login_black" ] && [ "$web_login_black" -eq "0" ] || [ -z "$web_login_black" ] && local logrow="0" + ipset flush ip_blacklist >/dev/null 2>&1 + + if [ $logrow -le "0" ]; then + iptables -D INPUT -m set --match-set ip_blacklist src -j DROP >/dev/null 2>&1 + ipset destroy ip_blacklist >/dev/null 2>&1 + return + fi + + ipset list ip_blacklist >/dev/null 2>&1 || ipset create ip_blacklist hash:ip timeout ${ip_black_timeout} >/dev/null 2>&1 + iptables -C INPUT -m set --match-set ip_blacklist src -j DROP >/dev/null 2>&1 || iptables -I INPUT -m set --match-set ip_blacklist src -j DROP >/dev/null 2>&1 + echo "$1" >> ${ip_blacklist_path} + for ip_black in `cat ${ip_blacklist_path}`; do + ip_black=`echo "$ip_black"|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"` + ipset -! add ip_blacklist $ip_black >/dev/null 2>&1 + done + ipset list ip_blacklist|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" > ${ip_blacklist_path} +} + +# 发送定时数据 +function send(){ + echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】创建定时任务" >> ${logfile} + pushbot_disturb;local send_disturb=$? + get_config "send_title" "router_status" "router_temp" "router_wan" "client_list" "google_check_timeout" + + [ -z "$send_title" ] && local send_title="路由状态:" + [ -z "$google_check_timeout" ] && local google_check_timeout="10" + [ ! -z "$1" ] && local send_title="发送测试:" && local send_content="${str_splitline}${str_title_start}内容1${str_title_end}${str_linefeed}${str_tab}设备1${str_linefeed}${str_tab}设备2${str_splitline}${str_title_start}内容2${str_title_end}${str_linefeed}${str_tab}设备3${str_linefeed}${str_tab}设备4" + [ -z "$1" ] && [ ! -z "$client_list" ] && [ "$client_list" -eq "1" ] && > ${dir}send_enable.lock && pushbot_first & + + if [ -z "$1" ] && [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ]; then + local systemload=`cat /proc/loadavg|awk '{print $1" "$2" "$3}'` + local cpuload=`getcpu` + local ramload=`free -m|sed -n '2p'|awk '{printf "%.2f%%\n",($3/$2)*100}'` + local Qwai=`curl -o /dev/null --connect-timeout ${google_check_timeout} -s -w %{http_code} www.google.com` + if [[ "$Qwai" -eq "200" ]] || [[ "$Qwai" -eq "301" ]] || [[ "$Qwai" -eq "302" ]]; then + local Qwai_status="已连通!" + else + local Qwai_status="已断开!" + fi + local systemstatustime=`cat /proc/uptime|awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("运行时间:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'`;unset run_days run_hour run_minute run_second + local send_content="${send_content}${str_splitline}${str_title_start}${font_blue} 系统运行状态${font_end}${str_title_end}" + local send_content="${send_content}${str_linefeed}${str_tab}平均负载:${systemload}" + local send_content="${send_content}${str_linefeed}${str_tab}CPU占用:${cpuload}${percentsym}" + local send_content="${send_content}${str_linefeed}${str_tab}内存占用:${ramload}${percentsym}" + local send_content="${send_content}${str_linefeed}${str_tab}全球互联:${Qwai_status}" + local send_content="${send_content}${str_linefeed}${str_tab}${systemstatustime}" + fi + + if [ -z "$1" ] && [ ! -z "$router_temp" ] && [ "$router_temp" -eq "1" ]; then + local cputemp=`soc_temp` + [ ! -z "$cputemp" ] && local send_content="${send_content}${str_splitline}${str_title_start}${font_blue} 设备温度${font_end}${str_title_end}${str_linefeed}${str_tab}CPU:${cputemp}℃" + [ -z "$cputemp" ] && local send_content="${send_content}${str_splitline}${str_title_start}${font_red} 设备温度${font_end}${str_title_end}${str_linefeed}${str_tab}无法获取设备温度" + fi + + if [ -z "$1" ] && [ ! -z "$router_wan" ] && [ "$router_wan" -eq "1" ]; then + local send_wanIP=`getip wanipv4`;local send_hostIP=`getip hostipv4` + local send_content="${send_content}${str_splitline}${str_title_start}${font_blue} WAN 口信息${font_end}${str_title_end}${str_linefeed}${str_tab}接口ip:${send_wanIP}" + local send_content="${send_content}${str_linefeed}${str_tab}外网ip:${send_hostIP}" + if [ ! -z "$pushbot_ipv6" ] && [ "$pushbot_ipv6" -ne "0" ]; then + local send_wanIPv6=`getip wanipv6`;local send_hostIPv6=`getip hostipv6` + local send_content="${send_content}${str_linefeed}${str_tab}ipv6 :${send_wanIPv6}" + local send_content="${send_content}${str_linefeed}${str_tab}外网v6:${send_hostIPv6}" + fi + ( ! echo "$send_wanIP"|grep -q -w ${send_hostIP} ) && local send_content="${send_content}${str_linefeed}${str_tab}外网 ip 与接口 ip 不一致,你的 ip 不是公网 ip" + local interfaceuptime=`getinterfaceuptime` + [ ! -z "$interfaceuptime" ] && local wanstatustime=`getinterfaceuptime|awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("在线时间:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'` && unset run_days run_hour run_minute run_second + local send_content="${send_content}${str_linefeed}${str_tab}${wanstatustime}" + fi + + if [ -z "$1" ] && [ ! -z "$client_list" ] && [ "$client_list" -eq "1" ]; then + wait + local IPLIST=`cat ${dir}ipAddress 2>/dev/null|awk '{print $1}'` + [ -f ${dir}ipAddress ] && local logrow=$(grep -c "" ${dir}ipAddress) || local logrow="0" + [ "$logrow" -eq "0" ] && local send_content="${send_content}${str_splitline}${str_title_start}${font_red} 当前无在线设备${font_end}${str_title_end}" || local send_content="${send_content}${str_splitline}${str_title_start}${font_blue} 现有在线设备 ${logrow} 台${font_end}${str_title_end}" + for ip in $IPLIST; do + local time_up=`cat ${dir}ipAddress|grep -w ${ip}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` + local time1=`date +%s` + local time1=$(time_for_humans `expr ${time1} - ${time_up}`) + local ip_mac=`getmac ${ip}` + local ip_name=`getname ${ip} ${ip_mac}` + local ip_total=`usage get ${ip_mac}`;[ ! -z "$ip_total" ] && local ip_total="总计流量:${ip_total} " + local ip_name=`cut_str $ip_name 18` + local send_content="${send_content}${str_linefeed}${str_tab}${font_green2}【${ip_name}】${font_end2} ${ip}${str_linefeed}${str_tab}${ip_total}在线 ${time1}" + unset ip_total time_down time_up time1 ip_mac ip_name + done + fi + + [ ! -z "$device_name" ] && local send_title="【$device_name】${send_title}" + [ -z "$send_content" ] && local send_content="${str_splitline}${str_title_start} 我遇到了一个难题${str_title_end}${str_linefeed}${str_tab}定时发送选项错误,你没有选择需要发送的项目,该怎么办呢${str_splitline}" + [ "$send_disturb" -eq "0" ] && diy_send "${send_title}" "${send_content}" "${jsonpath}" >/dev/null 2>&1 + [ $? -eq 1 ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】定时推送失败,请检查网络或设置信息" >> ${logfile} || echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}定时推送任务完成" >> ${logfile} + deltemp +} + +# 初始化 +read_config +deltemp +pushbot_cron + +# 限制并发进程 +[ -z "$thread_num" ] || [ "$thread_num" -eq "0" ] && thread_num=5 +[ -e ${dir}fd1 ] || mkfifo ${dir}fd1 +exec 5<>${dir}fd1 +rm -f ${dir}fd1 >/dev/null 2>&1 +for i in `seq 1 $thread_num`; do + echo >&5 +done +unset i + +# 启动参数 +if [ "$1" ] ;then + [ $1 == "send" ] && send + [ $1 == "soc" ] && echo `soc_temp` > ${dir}soc_tmp + [ $1 == "client" ] && get_client + [ $1 == "test" ] && send test + exit +fi + +# 载入在线设备 +pushbot_init;[ $? -eq 1 ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】读取设置出错,请检查设置项 " >> ${logfile} && exit +echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】载入在线设备" >> ${logfile} +> ${dir}send_enable.lock && pushbot_first && deltemp +echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】初始化完成" >> ${logfile} + +# 循环 +while [ "$pushbot_enable" -eq "1" ]; do + deltemp + usage update + pushbot_disturb;disturb=$? + + # 外网IP变化检测 + [ -f ${dir}ipAddress ] && ipAddress_logrow=$(grep -c "" ${dir}ipAddress) || ipAddress_logrow="0"; + if [ $ipAddress_logrow -ne "0" ]; then + online_list=`cat ${dir}ipAddress|awk '{print $2}'|grep -v "^$"|sort -u` + for online_mac in $online_list; do + [ ! -z "$online_mac" ] && mac_online_status="`echo "$mark_mac_list"|grep -i $online_mac|grep -v "^$"|sort -u|head -n1`${mac_online_status}" + done + fi + + if [ "$pushbot_ipv4" -ne "0" ] || [ "$pushbot_ipv6" -ne "0" ]; then + rand_geturl + ip_changes + fi + + # 设备列表 + if [ ! -f "${dir}send_enable.lock" ]; then + [ ! -z "$title" ] && echo "$title" > ${dir}title + [ ! -z "$content" ] && echo "$content" > ${dir}content + pushbot_first + [ -f "${dir}title" ] && title=`cat ${dir}title` && rm -f ${dir}title >/dev/null 2>&1 + [ -f "${dir}content" ] && content=`cat ${dir}content` && rm -f ${dir}content >/dev/null 2>&1 + fi + + # 离线缓存区推送 + [ ! -f "${dir}send_enable.lock" ] && down_send + + # 当前设备列表 + [ ! -z "$content" ] && [ ! -f "${dir}send_enable.lock" ] && current_device + + # 无人值守任务 + [ ! -f "${dir}send_enable.lock" ] && unattended + + # CPU 检测 + [ ! -f "${dir}send_enable.lock" ] && cpu_load + + # 异常流量检测 + [ ! -f "${dir}send_enable.lock" ] && get_client_usage + + # 登录提醒通知 + [ ! -f "${dir}send_enable.lock" ] && login_send + + # 通知 + if [ ! -f "${dir}send_enable.lock" ] && [ ! -z "$title" ] && [ ! -z "$content" ]; then + [ ! -z "$device_name" ] && title="【$device_name】$title" + ( echo "$lite_enable"|grep -q "content" ) && content="$title" + [ "$disturb" -eq "0" ] && diy_send "${title}" "${content}" "${jsonpath}" >/dev/null 2>&1 + [ $? -eq 1 ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】推送失败,请检查网络或设置信息 " >> ${logfile} + fi + + while [ -f "${dir}send_enable.lock" ]; do + sleep $sleeptime + done + sleep $sleeptime +done diff --git a/luci-app-pushbot/root/usr/share/rpcd/acl.d/luci-app-pushbot.json b/luci-app-pushbot/root/usr/share/rpcd/acl.d/luci-app-pushbot.json new file mode 100644 index 00000000..473cdcd1 --- /dev/null +++ b/luci-app-pushbot/root/usr/share/rpcd/acl.d/luci-app-pushbot.json @@ -0,0 +1,11 @@ +{ + "luci-app-pushbot": { + "description": "Grant UCI access for luci-app-pushbot", + "read": { + "uci": [ "pushbot" ] + }, + "write": { + "uci": [ "pushbot" ] + } + } +} diff --git a/luci-app-rebootschedule b/luci-app-rebootschedule deleted file mode 160000 index 0fc3fef5..00000000 --- a/luci-app-rebootschedule +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0fc3fef5006ea0843d0a7c77201833584de62b29 diff --git a/luci-app-rebootschedule/Makefile b/luci-app-rebootschedule/Makefile new file mode 100644 index 00000000..87500882 --- /dev/null +++ b/luci-app-rebootschedule/Makefile @@ -0,0 +1,46 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-rebootschedule +PKG_VERSION:=1.0 +PKG_RELEASE:=20210522 + +include $(INCLUDE_DIR)/package.mk + +define Package/$(PKG_NAME) + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=3. Applications + TITLE:=LuCI support for rebootschedule + PKGARCH:=all +endef + +define Package/$(PKG_NAME)/description + LuCI support for rebootschedule +endef + +define Build/Compile +endef + + +define Package/$(PKG_NAME)/postinst +#!/bin/sh +rm -f /tmp/luci-indexcache /tmp/luci-modulecache +endef + +define Package/$(PKG_NAME)/conffiles +/etc/config/rebootschedule +endef + +define Package/$(PKG_NAME)/install + $(INSTALL_DIR) $(1)/usr/bin $(1)/etc/init.d $(1)/etc/config $(1)/usr/lib/lua/luci + $(CP) ./luasrc/* $(1)/usr/lib/lua/luci + $(INSTALL_CONF) ./root/etc/config/* $(1)/etc/config + $(INSTALL_BIN) ./root/etc/init.d/* $(1)/etc/init.d + $(INSTALL_BIN) ./file/* $(1)/usr/bin + +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/luci-app-rebootschedule/README.md b/luci-app-rebootschedule/README.md new file mode 100644 index 00000000..be35f7f4 --- /dev/null +++ b/luci-app-rebootschedule/README.md @@ -0,0 +1 @@ +# luci-app-rebootschedule diff --git a/luci-app-rebootschedule/file/sysfree.sh b/luci-app-rebootschedule/file/sysfree.sh new file mode 100644 index 00000000..1c7cd2a3 --- /dev/null +++ b/luci-app-rebootschedule/file/sysfree.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +cd /overlay +rm -rf `ls | egrep -v '(upper|.fs_state)'` +cd /overlay/upper +rm -rf `ls | egrep -v '(etc|usr)'` +cd /overlay/upper/usr +rm -rf `ls | egrep -v '(share)'` +cd /overlay/upper/usr/share +rm -rf `ls | egrep -v '(unblockneteasemusic|passwall)'` +cd /overlay/upper/etc +rm -rf `ls | egrep -v '(config|smartdns|ssrplus|bench.log|shadow|openclash|rebootschedule)'` +cd /overlay/upper/etc/config +rm -rf `ls | egrep -v '(timecontrol|arpbind|ksmbd|access_control|netspeedtest|rebootschedule|wrtbwmon|ddns|wolplus|advanced|firewall|jd-dailybonus|network|oled|openclash|passwall|serverchan|shadowsocksr|sqm|unblockneteasemusic|weburl|zerotier|vssr|zero|dhcp)'` +rm -f /tmp/luci* +rm -f /tmp/cache/* +sync && echo 3 > /proc/sys/vm/drop_caches + + \ No newline at end of file diff --git a/luci-app-rebootschedule/luasrc/controller/rebootschedule.lua b/luci-app-rebootschedule/luasrc/controller/rebootschedule.lua new file mode 100644 index 00000000..7f76d74f --- /dev/null +++ b/luci-app-rebootschedule/luasrc/controller/rebootschedule.lua @@ -0,0 +1,12 @@ +module("luci.controller.rebootschedule", package.seeall) +function index() + if not nixio.fs.access("/etc/config/rebootschedule") then + return + end + + + entry({"admin", "system", "rebootschedule"}, cbi("rebootschedule"), _("定时任务"), 20).dependent = true +end + + + diff --git a/luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua b/luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua new file mode 100644 index 00000000..84cac6e9 --- /dev/null +++ b/luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua @@ -0,0 +1,67 @@ +m=Map("rebootschedule",translate("定时任务设置"), +translate("让计划任务更加易用的插件,可以使用-表示连续的时间范围,使用,表示不连续的多个时间点,使用*/表示循环执行。可以使用“添加”来添加多条计划任务命令。可使用“--自定义--”来自行添加其它参数。
") .. +translate("*所有时间参数都是指该自然单位中的时间点,而非累积计数,比如星期只能是0~6,小时只能是0~23,分钟只能是0~59,不能使用48小时、80分钟这种累积计数表示法。
") .. +translate("* 所有数值可使用 - 连接表示连续范围,比如星期:1-5 表示星期一至星期五;使用,表示不连续的点,比如星期:1,3,5 表示仅仅星期一、三、五。") .. +translate("   ") +) + +s=m:section(TypedSection,"crontab","") +s.anonymous = true +s.addremove = true +s.sortable = false +s.template = "cbi/tblsection" +s.rmempty = false + +p=s:option(Flag,"enable",translate("启用")) +p.rmempty = false +p.default=0 + + +week=s:option(Value,"week",translate("星期 (数值范围0~6)"), +translate("和日期是逻辑“与”关系
n1-n5连续,n1,n3,n5不连续
")) +week.rmempty = true +week:value('*',translate("每天")) +week:value(0,translate("Sunday")) +week:value(1,translate("Monday")) +week:value(2,translate("Tuesday")) +week:value(3,translate("Wednesday")) +week:value(4,translate("Thursday")) +week:value(5,translate("Friday")) +week:value(6,translate("Saturday")) +week.default='*' + + +hour=s:option(Value,"hour",translate("时 (数值范围0~23)"), +translate("*表示每小时,*/n表示每n小时
n1-n5连续,n1,n3,n5不连续
")) +hour.rmempty = false +hour.default = '5' + +minute=s:option(Value,"minute",translate("分 (数值范围0~59)"), +translate("*表示每分钟,*/n表示每n分钟
n1-n5连续,n1,n3,n5不连续
")) +minute.rmempty = false +minute.default = '0' + +command=s:option(Value,"command",translate("执行命令 (多条用 && 连接)"), +translate("按“--自定义--”可进行修改
(亦可添加后到计划任务中修改)
")) +command:value('sync && echo 3 > /proc/sys/vm/drop_caches', translate("A.释放内存")) +command:value('sysfree.sh',translate("B.清理垃圾")) +command:value('sleep 5 && touch /etc/banner && reboot',translate("C.重启系统")) +command:value('poweroff',translate("D.关闭电源")) +command:value('/etc/init.d/ksmdb restart &&/etc/init.d/samba restart',translate("E.重启共享")) +command:value('/etc/init.d/network restart',translate("F.重启网络")) +command:value('ifdown wan && ifup wan',translate("G.重启WAN")) +command:value('killall -q pppd && sleep 5 && pppd file /tmp/ppp/options.wan', translate("H.重新拨号")) +command:value('ifdown wan',translate("I.关闭联网")) +command:value('ifup wan',translate("J.打开联网")) +command:value('wifi down',translate("K.关闭WIFI")) +command:value('wifi up',translate("L.打开WIFI")) +command.default='sleep 5 && touch /etc/banner && reboot' + +local e=luci.http.formvalue("cbi.apply") +if e then + io.popen("/etc/init.d/rebootschedule restart") +end + +return m diff --git a/luci-app-rebootschedule/po/en/rebootschedule.mo b/luci-app-rebootschedule/po/en/rebootschedule.mo new file mode 100644 index 0000000000000000000000000000000000000000..0ccffe1bbe76c8e6a9997efd5b680c84e27df784 GIT binary patch literal 4765 zcmcInTWnOv8J?u+%}p<)m-OC=ngLl`;6az>WQ-i?OF71qqjarNE7hqkK+fe{u6}k1U3K{fro*A2X20XkT~!M zpHz4p_)Cl*08_vnp8_B7S^$0lU_Cb-?$4g6>I7J_YU=@U31HJzNJb>}PAmp!r2SEI~7z6hMUx!h4W8X)> zH5hOE63zzx0{B&+qwyF}$aM+$HQ+lyasHoy!mjTEAp&_H_;p|bDCi#pQ+$%AfnNkx z0R>$%5Gs=&>G2DCyaOogvl}S*y$aj_d<`h*rhrcauL8S)e*pdvxCX+t0lR?0Uq^w0 z{tOW6$@V>s0=|#_4RjG}-$WOCmz$7RG>{U6m(*A2BJ5I$E*i{CbZAPsgw7%kMEe#x z#3Bg6sC@-rLf>c5g}qj{@8}8PTcMxOfucW)F4}j|gRDC#DNiSM!(W@SUH(UKl^{XW|?Ddeh_~V-wy{4Ci%WJ{t}nEo7$)N3Z1%-wsC3<`zbBv)6H8D0ix3 z3j@PT7cb>+W%F0Eg_$YPu977fy;hLi>K`mz+JMF2#wZw+Os{Jc^T&=Xot`Y2Z`z1? zq3WRprTzM5MGfJb>lH!a{%`VEMv4W{X1sY8%C*+@I_;#j&*pHjowS{{%6`YpRJK>^ zUD;8^1_xEw@o18(SxL?t4Bn)yja|H?d6V;&Nm9uCh< zBZ}a$rGfdv;;9b?CUUbUJ{Y(d4BpJ&od1~o!{H$?Gz`Q+Ff*RJJ7gGw^=P(m|3YDE zICp<09J?#esLIW~h57K#d~p1?!O0WBu^R}9;MnQhJZ7d4JZkfEWliR=cx8KQZ+l_p z?P99%!YyzM&!0g?iP#$jx7#qJNVEBA6&8l_Ta*zhK%-RqkC_u(9?#8QD-LJ1wYp9* z3>L5DPh`WPE6@|cRD2{%qV$9d=gZ^a#i?THgHsE+`OBJCR)sRQ1U-z4Gc=dM z+ri8sm53^Y+qJ=@l}ShK($VAL*kW*GFt~o6{J1up9n7CR5?neIOe~VkSRDyYX5sk! z{3O{@iy&A!cRfG$`*7|g*{WBA!FO_VzayQ?n-@;y=O;*~W5vx3d0x-%>UfE~Ail#l zZ-j4L4My*fF3qlRU@X6Iiu|ND96A%+8_>fS_3Ey!&MvY|ugSr7n+wh_o1X8;4_}UZ z629Y#agWa=?qYGSzL0>lByXtz}$Q~deD%0h+ z$!63R#yz74H%|-o*nY1roir`JiN+G9<1(-9r#+oUb49mfzs6#o(G@pdVUBCryoFYD z?=W_UM+=}DBEwQ(n+WwSP5;VrKDsqSG}=8tt4#US+%mRQ7xrlIS)Kx z;1#l_jY^I6%~X&|`wKy|3u6@yA8oFu>HxQvs#;i5A@t3z z9l-W7C!_b*P+aaM^B74{-Id#snvSr>viD)E26QOKo8*!Zd1blm9ac^Pp>nzNr70f4 z=^|j_NOqbq;a!s^?S3nU0O)vW3rs4UZgV$br60l3-SC%7D-C0_?|OF1Fz{lwX$sY& zFGDR)o=B@uFGPHpN!J!3V8-JtF2h`Iv@p=2>&6l+?k6$fneLvbPL}w5`PI-NYD&K$ zDNT>2%stGdr3_rkOxIGmf<&#QKeK%)2?hq_w0Inbg5k^}H>-@&g#a6cLeWO#kY^!b zXxwsR4$`qG|6CRGf~2~xgesPaC9N2ejm3Q7j1oa;Wk)*Bh?C4whMG$pDGXWl;B*|YNWh*s6> z1H-swCh_nn<==&C(E%}@AbNo>^Ae}LxI7DS^lK#A_J2M|wySzk_EMMs399RYu6mSg zuN^Dg5OR`MAy;iHa@^*Q}V*Bdw@IayyRd~g#?%x463*!I) literal 0 HcmV?d00001 diff --git a/luci-app-rebootschedule/po/en/rebootschedule.po b/luci-app-rebootschedule/po/en/rebootschedule.po new file mode 100644 index 00000000..6c7eb9fd --- /dev/null +++ b/luci-app-rebootschedule/po/en/rebootschedule.po @@ -0,0 +1,195 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: en\n" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:5 +msgid "" +"   " +msgstr "" +"*All time parameters refer to the time point in the natural unit, not the " +"cumulative count. For example, the week can only be 0-6, the hour can only " +"be 0-23, the minute can only be 0-59, and 48 hours cannot be used. This " +"cumulative count representation of 80 minutes.
" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:42 +msgid "" +"*表示每分钟,*/n表示每n分钟
n1-n5连续,n1,n3,n5不连" +"续
" +msgstr "" +"* means every minute, */n means every n minutes
n1-" +"n5 are continuous, n1, n3, n5 are not continuous
" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:37 +msgid "" +"*表示每小时,*/n表示每n小时
n1-n5连续,n1,n3,n5不连" +"续
" +msgstr "" +"* means every hour, */n means every n hours
n1-n5 " +"are continuous, n1, n3, n5 are not continuous
" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:23 +msgid "" +"和日期是逻辑“与”关系
n1-n5连续,n1,n3,n5不连续" +msgstr "" +"and date have a logical AND relationship
n1-n5 are " +"continuous, n1, n3, n5 are not continuous
" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:47 +msgid "" +"按“--自定义--”可进行修改
(亦可添加后到计划任务中修" +"改)
" +msgstr "" +"Press \"--Custom--\" to modify it
(it can also be " +"added and modified in the scheduled task)
" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:2 +msgid "" +"让计划任务更加易用的插件,可以使用-表示连续的时间范" +"围,使用,表示不连续的多个时间点,使用*/表示循环执行。可以使用“添加”来添加多" +"条计划任务命令。可使用“--自定义--”来自行添加其它参数。
" +msgstr "" +"A plug-in that makes scheduled tasks easier to use. " +"You can use-to indicate a continuous time range, use to indicate multiple " +"discrete time points, and use */ to indicate cyclic execution. You can use " +"\"Add\" to add multiple scheduled task commands. You can use \"--Custom--\" " +"to add other parameters yourself.
" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:48 +msgid "A.释放内存" +msgstr "A. Release memory" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:49 +msgid "B.清理垃圾" +msgstr "B. Clean up rubbish" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:50 +msgid "C.重启系统" +msgstr "C. Restart the system" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:51 +msgid "D.关闭电源" +msgstr "D. Turn off the power" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:52 +msgid "E.重启共享" +msgstr "E. Restart sharing" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:53 +msgid "F.重启网络" +msgstr "F. Restart the network" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:31 +msgid "Friday" +msgstr "Friday" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:54 +msgid "G.重启WAN" +msgstr "G. Restart WAN" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:55 +msgid "H.重新拨号" +msgstr "H. Redial" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:56 +msgid "I.关闭联网" +msgstr "I. Turn off the Internet" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:57 +msgid "J.打开联网" +msgstr "J. Turn on networking" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:58 +msgid "K.关闭WIFI" +msgstr "K. Turn off WIFI" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:59 +msgid "L.打开WIFI" +msgstr "L. Turn on WIFI" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:27 +msgid "Monday" +msgstr "Monday" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:32 +msgid "Saturday" +msgstr "Saturday" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:26 +msgid "Sunday" +msgstr "Sunday" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:30 +msgid "Thursday" +msgstr "Thursday" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:28 +msgid "Tuesday" +msgstr "Tuesday" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:29 +msgid "Wednesday" +msgstr "Wednesday" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:41 +msgid "分 (数值范围0~59)" +msgstr "Minutes (value range 0~59)" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:17 +msgid "启用" +msgstr "Enable" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:1 +msgid "定时任务设置" +msgstr "Scheduled task settings" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:46 +msgid "执行命令 (多条用 && 连接)" +msgstr "" +"Execute the command (multiple items connected with " +"&&)" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:36 +msgid "时 (数值范围0~23)" +msgstr "When (numerical range 0~23)" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:22 +msgid "星期 (数值范围0~6)" +msgstr "Day of the week (value range 0~6)" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:6 +msgid "查看/验证" +msgstr "View/Verify" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:25 +msgid "每天" +msgstr "every day" diff --git a/luci-app-rebootschedule/po/en/rebootschedule.pot b/luci-app-rebootschedule/po/en/rebootschedule.pot new file mode 100644 index 00000000..ecb15bbd --- /dev/null +++ b/luci-app-rebootschedule/po/en/rebootschedule.pot @@ -0,0 +1,160 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:5 +msgid "" +"   " +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:42 +msgid "" +"*表示每分钟,*/n表示每n分钟
n1-n5连续,n1,n3,n5不连" +"续
" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:37 +msgid "" +"*表示每小时,*/n表示每n小时
n1-n5连续,n1,n3,n5不连" +"续
" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:23 +msgid "" +"和日期是逻辑“与”关系
n1-n5连续,n1,n3,n5不连续" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:47 +msgid "" +"按“--自定义--”可进行修改
(亦可添加后到计划任务中修" +"改)
" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:2 +msgid "" +"让计划任务更加易用的插件,可以使用-表示连续的时间范" +"围,使用,表示不连续的多个时间点,使用*/表示循环执行。可以使用“添加”来添加多条" +"计划任务命令。可使用“--自定义--”来自行添加其它参数。
" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:48 +msgid "A.释放内存" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:49 +msgid "B.清理垃圾" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:50 +msgid "C.重启系统" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:51 +msgid "D.关闭电源" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:52 +msgid "E.重启共享" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:53 +msgid "F.重启网络" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:31 +msgid "Friday" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:54 +msgid "G.重启WAN" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:55 +msgid "H.重新拨号" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:56 +msgid "I.关闭联网" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:57 +msgid "J.打开联网" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:58 +msgid "K.关闭WIFI" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:59 +msgid "L.打开WIFI" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:27 +msgid "Monday" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:32 +msgid "Saturday" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:26 +msgid "Sunday" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:30 +msgid "Thursday" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:28 +msgid "Tuesday" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:29 +msgid "Wednesday" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:41 +msgid "分 (数值范围0~59)" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:17 +msgid "启用" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:1 +msgid "定时任务设置" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:46 +msgid "执行命令 (多条用 && 连接)" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:36 +msgid "时 (数值范围0~23)" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:22 +msgid "星期 (数值范围0~6)" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:6 +msgid "查看/验证" +msgstr "" + +#: luci-app-rebootschedule/luasrc/model/cbi/rebootschedule.lua:25 +msgid "每天" +msgstr "" diff --git a/luci-app-rebootschedule/root/etc/config/rebootschedule b/luci-app-rebootschedule/root/etc/config/rebootschedule new file mode 100644 index 00000000..70462623 --- /dev/null +++ b/luci-app-rebootschedule/root/etc/config/rebootschedule @@ -0,0 +1,66 @@ +config crontab + option week '*' + option hour '*/4' + option day '*' + option month '*' + option minute '0' + option command 'sync && echo 3 > /proc/sys/vm/drop_caches' + option enable '1' + +config crontab + option month '*' + option day '*' + option hour '5' + option minute '0' + option week '1,3,5' + option command 'sleep 5 && touch /etc/banner && reboot' + option enable '0' + +config crontab + option enable '0' + option week '*' + option hour '23' + option minute '59' + option command 'poweroff' + +config crontab + option month '*' + option day '*' + option week '*' + option command '/etc/init.d/network restart' + option enable '0' + option hour '*/12' + option minute '30' + +config crontab + option month '*' + option day '*' + option week '1-5' + option hour '7' + option minute '50' + option command 'wifi up' + option enable '0' + +config crontab + option month '*' + option day '*' + option minute '0' + option week '1-5' + option hour '18' + option command 'wifi down' + option enable '0' + +config crontab + option minute '0' + option week '*' + option hour '5' + option enable '0' + option command '/etc/init.d/ksmdb restart &&/etc/init.d/samba restart' + +config crontab + option minute '0' + option week '2' + option hour '5' + option command 'sysfree.sh' + option enable '0' + diff --git a/luci-app-rebootschedule/root/etc/init.d/rebootschedule b/luci-app-rebootschedule/root/etc/init.d/rebootschedule new file mode 100644 index 00000000..c2427690 --- /dev/null +++ b/luci-app-rebootschedule/root/etc/init.d/rebootschedule @@ -0,0 +1,48 @@ +#!/bin/sh /etc/rc.common +# Author=wulishui , 20200908-0915 ; +# 20210514 by sirpdboy + +START=55 + + +up_cron() { +if [ "`grep 'option enable .1.' /etc/config/rebootschedule 2>/dev/null`" ]; then + [ -s /etc/crontabs/root ] || mcronrst=1 + del_cron + sum=$(grep -c 'config crontab' /etc/config/rebootschedule 2>/dev/null) + for i in $(seq 0 $((sum-1))); do + enable=`uci get rebootschedule.@crontab[$i].enable 2>/dev/null` + if [ $enable -eq 1 ]; then + month=`uci get rebootschedule.@crontab[$i].month 2>/dev/null` || month="*" + day=`uci get rebootschedule.@crontab[$i].day 2>/dev/null` || day="*" + week=`uci get rebootschedule.@crontab[$i].week 2>/dev/null` || week="*" + #[ ! "$day" = "*" ] && week="*" + hour=`uci get rebootschedule.@crontab[$i].hour 2>/dev/null` || hour="*"; [ "$hour" = "0" ] && hour="00" + minute=`uci get rebootschedule.@crontab[$i].minute 2>/dev/null` || minute="00"; [ "$minute" = "0" ] && minute="00" + command=`uci get rebootschedule.@crontab[$i].command 2>/dev/null` || command="echo "Reboot schedule tested."" + echo "$minute $hour $day $month $week $command #rebootschedule" >> /etc/crontabs/root + fi + done + [ $mcronrst ] && /etc/init.d/cron restart +fi +} + +del_cron() { + sed -i '/rebootschedule/d' /etc/crontabs/root 2>/dev/nul +} + + +start() +{ + + if [ ! -e /etc/config/rebootschedule ]; then + logger -p daemon.error -t 'rebootschedule' "missing config /etc/config/rebootschedule!" + exit 1 + fi + up_cron +} + +stop() +{ + del_cron +} diff --git a/luci-app-rebootschedule/root/etc/uci-defaults/luci-app-rebootschedule b/luci-app-rebootschedule/root/etc/uci-defaults/luci-app-rebootschedule new file mode 100644 index 00000000..0a4afce8 --- /dev/null +++ b/luci-app-rebootschedule/root/etc/uci-defaults/luci-app-rebootschedule @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@rebootschedule[-1] + add ucitrack rebootschedule + set ucitrack.@rebootschedule[-1].init=rebootschedule + commit ucitrack +EOF + +rm -f /tmp/luci-* +exit 0 diff --git a/luci-app-rebootschedule/root/usr/share/rpcd/acl.d/luci-app-rebootschedule.json b/luci-app-rebootschedule/root/usr/share/rpcd/acl.d/luci-app-rebootschedule.json new file mode 100644 index 00000000..b80a47af --- /dev/null +++ b/luci-app-rebootschedule/root/usr/share/rpcd/acl.d/luci-app-rebootschedule.json @@ -0,0 +1,11 @@ +{ + "luci-app-rebootschedule": { + "description": "Grant UCI access for luci-app-rebootschedule", + "read": { + "uci": [ "rebootschedule" ] + }, + "write": { + "uci": [ "rebootschedule" ] + } + } +} diff --git a/luci-app-smartdns b/luci-app-smartdns deleted file mode 160000 index af0af5cd..00000000 --- a/luci-app-smartdns +++ /dev/null @@ -1 +0,0 @@ -Subproject commit af0af5cd7c2d09cd25b712a2672785a109e3fd02 diff --git a/luci-app-smartdns/Makefile b/luci-app-smartdns/Makefile new file mode 100644 index 00000000..2c3f9f86 --- /dev/null +++ b/luci-app-smartdns/Makefile @@ -0,0 +1,38 @@ +# +# Copyright (C) 2018-2023 Ruilin Peng (Nick) . +# +# smartdns 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. +# +# smartdns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +include $(TOPDIR)/rules.mk + +PKG_LICENSE:=GPL-3.0-or-later +PKG_MAINTAINER:=Nick Peng +PKG_VERSION:=1.2023.43 +PKG_RELEASE:=1 + +LUCI_TITLE:=LuCI for smartdns +LUCI_DESCRIPTION:=Provides Luci for smartdns +LUCI_DEPENDS:=+smartdns +luci-compat +LUCI_PKGARCH:=all + +define Package/$(PKG_NAME)/config +# shown in make menuconfig +help + $(LUCI_TITLE) + Version: $(PKG_VERSION)-$(PKG_RELEASE) +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-smartdns/luasrc/controller/smartdns.lua b/luci-app-smartdns/luasrc/controller/smartdns.lua new file mode 100644 index 00000000..be70065f --- /dev/null +++ b/luci-app-smartdns/luasrc/controller/smartdns.lua @@ -0,0 +1,57 @@ +-- +-- Copyright (C) 2018-2023 Ruilin Peng (Nick) . +-- +-- smartdns 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. +-- +-- smartdns is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +module("luci.controller.smartdns", package.seeall) +local smartdns = require "luci.model.smartdns" + +function index() + if not nixio.fs.access("/etc/config/smartdns") then + return + end + + local page + page = entry({"admin", "services", "smartdns"}, cbi("smartdns/smartdns"), _("SmartDNS"), 60) + page.dependent = true + page = entry({"admin", "services", "smartdns", "status"}, call("act_status")) + page.leaf = true + page = entry({"admin", "services", "smartdns", "upstream"}, cbi("smartdns/upstream"), nil) + page.leaf = true +end + +local function is_running() + return luci.sys.call("pidof smartdns >/dev/null") == 0 +end + +function act_status() + local e={} + local ipv6_server; + local dnsmasq_server = smartdns.get_config_option("dhcp", "dnsmasq", "server", {nil})[1] + local auto_set_dnsmasq = smartdns.get_config_option("smartdns", "smartdns", "auto_set_dnsmasq", nil); + + e.auto_set_dnsmasq = auto_set_dnsmasq + e.dnsmasq_server = dnsmasq_server + e.local_port = smartdns.get_config_option("smartdns", "smartdns", "port", nil); + if e.local_port ~= nil and e.local_port ~= "53" and auto_set_dnsmasq ~= nil and auto_set_dnsmasq == "1" then + local str; + str = "127.0.0.1#" .. e.local_port + if dnsmasq_server ~= str then + e.dnsmasq_redirect_failure = 1 + end + end + e.running = is_running() + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end diff --git a/luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua b/luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua new file mode 100644 index 00000000..6ab6a8d0 --- /dev/null +++ b/luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua @@ -0,0 +1,787 @@ +-- +-- Copyright (C) 2018-2023 Ruilin Peng (Nick) . +-- +-- smartdns 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. +-- +-- smartdns is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +require ("nixio.fs") +require ("luci.http") +require ("luci.dispatcher") +require ("nixio.fs") + +local uci = require "luci.model.uci".cursor() + +m = Map("smartdns") +m.title = translate("SmartDNS Server") +m.description = translate("SmartDNS is a local high-performance DNS server, supports finding fastest IP, supports ad filtering, and supports avoiding DNS poisoning.") + +m:section(SimpleSection).template = "smartdns/smartdns_status" + +-- Basic +s = m:section(TypedSection, "smartdns", translate("Settings"), translate("General Settings")) +s.anonymous = true + +s:tab("settings", translate("General Settings")) +s:tab("advanced", translate('Advanced Settings')) +s:tab("seconddns", translate("Second Server Settings")) +s:tab("dns64", translate("DNS64 Server Settings")) +s:tab("proxy", translate("Proxy Server Settings")) +s:tab("custom", translate("Custom Settings")) + +---- Eanble +o = s:taboption("settings", Flag, "enabled", translate("Enable"), translate("Enable or disable smartdns server")) +o.default = o.disabled +o.rempty = false + +---- server name +o = s:taboption("settings", Value, "server_name", translate("Server Name"), translate("Smartdns server name")) +o.default = "smartdns" +o.datatype = "hostname" +o.rempty = false + +---- Port +o = s:taboption("settings", Value, "port", translate("Local Port"), + translate("Smartdns local server port, smartdns will be automatically set as main dns when the port is 53.")) +o.placeholder = 53 +o.default = 53 +o.datatype = "port" +o.rempty = false + +-- Automatically Set Dnsmasq +o = s:taboption("settings", Flag, "auto_set_dnsmasq", translate("Automatically Set Dnsmasq"), translate("Automatically set as upstream of dnsmasq when port changes.")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- Speed check mode; +o = s:taboption("advanced", Value, "speed_check_mode", translate("Speed Check Mode"), translate("Smartdns speed check mode.")); +o.rmempty = true; +o.placeholder = "default"; +o.default = o.enabled; +o:value("", translate("default")) +o:value("ping,tcp:80,tcp:443"); +o:value("ping,tcp:443,tcp:80"); +o:value("tcp:80,tcp:443,ping"); +o:value("tcp:443,tcp:80,ping"); +o:value("none", translate("None")); +function o.validate (section_id, value) + if value == "" then + return value + end + + if value == nil then + return nil, translate("Speed check mode is invalid.") + end + + if value == "none" then + return value + end + + local mode = value:split(","); + for _, v in ipairs(mode) do repeat + if v == "ping" then + break + end + + if v == nil then + return nil, translate("Speed check mode is invalid.") + end + + local port = v:split(":"); + if "tcp" == port[1] then + if tonumber(port[2]) then + break + end + end + + return nil, translate("Speed check mode is invalid.") + until true end + + return value +end + +---- response mode; +o = s:taboption("advanced", ListValue, "response_mode", translate("Response Mode"), + translate("Smartdns response mode, First Ping: return the first ping IP, Fastest IP: return the fastest IP, Fastest Response: return the fastest DNS response.")) +o.rmempty = true +o.placeholder = "default" +o:value("", translate("default")) +o:value("first-ping", translate("First Ping")) +o:value("fastest-ip", translate("Fastest IP")) +o:value("fastest-response", translate("Fastest Response")) + +---- Enable TCP server +o = s:taboption("advanced", Flag, "tcp_server", translate("TCP Server"), translate("Enable TCP DNS Server")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "1" +end + +---- Support IPV6 +o = s:taboption("advanced", Flag, "ipv6_server", translate("IPV6 Server"), translate("Enable IPV6 DNS Server")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "1" +end + +---- bind to device; +o = s:taboption("advanced", Flag, "bind_device", translate("Bind Device"), translate("Listen only on the specified interfaces.")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "1" +end + +---- bind device name; +o = s:taboption("advanced", Value, "bind_device_name", translate("Bind Device Name"), translate("Name of device name listen on.")) +o.placeholder = "default" +o.rempty = true +o.datatype = "string" + +---- Support DualStack ip selection +o = s:taboption("advanced", Flag, "dualstack_ip_selection", translate("Dual-stack IP Selection"), translate("Enable IP selection between IPV4 and IPV6")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- Domain prefetch load +o = s:taboption("advanced", Flag, "prefetch_domain", translate("Domain prefetch"), translate("Enable domain prefetch, accelerate domain response speed.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- Domain Serve expired +o = s:taboption("advanced", Flag, "serve_expired", translate("Serve expired"), + translate("Attempts to serve old responses from cache with a TTL of 0 in the response without waiting for the actual resolution to finish.")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- cache-size +o = s:taboption("advanced", Value, "cache_size", translate("Cache Size"), translate("DNS domain result cache size")) +o.rempty = true + +---- cache-persist; +o = s:taboption("advanced", Flag, "cache_persist", translate("Cache Persist"), translate("Write cache to disk on exit and load on startup.")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "1" +end + +-- cache-size +o = s:taboption("advanced", Flag, "resolve_local_hostnames", translate("Resolve Local Hostnames"), translate("Resolve local hostnames by reading Dnsmasq lease file.")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "1" +end + +-- Force AAAA SOA +o = s:taboption("advanced", Flag, "force_aaaa_soa", translate("Force AAAA SOA"), translate("Force AAAA SOA.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +-- Force HTTPS SOA +o = s:taboption("advanced", Flag, "force_https_soa", translate("Force HTTPS SOA"), translate("Force HTTPS SOA.")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "1" +end + +---- Ipset no speed. +o = s:taboption("advanced", Value, "ipset_no_speed", translate("No Speed IPset Name"), + translate("Ipset name, Add domain result to ipset when speed check fails.")); +o.rmempty = true; +o.datatype = "hostname"; +o.rempty = true; + +---- NFTset no speed. +o = s:taboption("advanced", Value, "nftset_no_speed", translate("No Speed NFTset Name"), + translate("Nftset name, Add domain result to nftset when speed check fails, format: [#[4|6]:[family#table#set]]")); +o.rmempty = true; +o.datatype = "string"; +o.rempty = true; +function o.validate(self, value) + if (value == "") then + return value + end + + if (value:match("#[4|6]:[a-zA-Z0-9%-_]+#[a-zA-Z0-9%-_]+#[a-zA-Z0-9%-_]+$")) then + return value + end + + return nil, translate("NFTset name format error, format: [#[4|6]:[family#table#set]]") +end + +---- rr-ttl +o = s:taboption("advanced", Value, "rr_ttl", translate("Domain TTL"), translate("TTL for all domain result.")) +o.rempty = true + +---- rr-ttl-min +o = s:taboption("advanced", Value, "rr_ttl_min", translate("Domain TTL Min"), translate("Minimum TTL for all domain result.")) +o.rempty = true +o.placeholder = "600" +o.default = 600 +o.optional = true + +---- rr-ttl-max +o = s:taboption("advanced", Value, "rr_ttl_max", translate("Domain TTL Max"), translate("Maximum TTL for all domain result.")) +o.rempty = true + +---- rr-ttl-reply-max +o = s:taboption("advanced", Value, "rr_ttl_reply_max", translate("Reply Domain TTL Max"), translate("Reply maximum TTL for all domain result.")) +o.rempty = true + +o = s:taboption("advanced", DynamicList, "conf_files", translate("Include Config Files
/etc/smartdns/conf.d"), + translate("Include other config files from /etc/smartdns/conf.d or custom path, can be downloaded from the download page.")); +uci:foreach("smartdns", "download-file", function(section) + local filetype = section.type + if (filetype ~= 'config') then + return + end + + o:value(section.name); +end) + +---- other args +o = s:taboption("advanced", Value, "server_flags", translate("Additional Server Args"), translate("Additional server args, refer to the help description of the bind option.")) +o.default = "" +o.rempty = true +o.optional = true + +---- second dns server +---- Eanble +o = s:taboption("seconddns", Flag, "seconddns_enabled", translate("Enable"), translate("Enable or disable second DNS server.")) +o.default = o.disabled +o.rempty = false + +---- Port +o = s:taboption("seconddns", Value, "seconddns_port", translate("Local Port"), translate("Smartdns local server port")) +o.placeholder = 6553 +o.default = 6553 +o.datatype = "port" +o.rempty = false + +---- Enable TCP server +o = s:taboption("seconddns", Flag, "seconddns_tcp_server", translate("TCP Server"), translate("Enable TCP DNS Server")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "1" +end + +---- dns server group +o = s:taboption("seconddns", Value, "seconddns_server_group", translate("Server Group"), translate("Query DNS through specific dns server group, such as office, home.")) +o.rmempty = true +o.placeholder = "default" +o.datatype = "hostname" +o.rempty = true + +o = s:taboption("seconddns", Flag, "seconddns_no_speed_check", translate("Skip Speed Check"), translate("Do not check speed.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- skip address rules +o = s:taboption("seconddns", Flag, "seconddns_no_rule_addr", translate("Skip Address Rules"), translate("Skip address rules.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- skip name server rules +o = s:taboption("seconddns", Flag, "seconddns_no_rule_nameserver", translate("Skip Nameserver Rule"), translate("Skip nameserver rules.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- skip ipset rules +o = s:taboption("seconddns", Flag, "seconddns_no_rule_ipset", translate("Skip Ipset Rule"), translate("Skip ipset rules.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- skip soa address rule +o = s:taboption("seconddns", Flag, "seconddns_no_rule_soa", translate("Skip SOA Address Rule"), translate("Skip SOA address rules.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +o = s:taboption("seconddns", Flag, "seconddns_no_dualstack_selection", translate("Skip Dualstack Selection"), translate("Skip Dualstack Selection.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- skip cache +o = s:taboption("seconddns", Flag, "seconddns_no_cache", translate("Skip Cache"), translate("Skip Cache.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- Force AAAA SOA +o = s:taboption("seconddns", Flag, "seconddns_force_aaaa_soa", translate("Force AAAA SOA"), translate("Force AAAA SOA.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +o = s:taboption("seconddns", Value, "seconddns_ipset_name", translate("IPset Name"), translate("IPset name.")) +o.rmempty = true +o.datatype = "hostname" +o.rempty = true + +o = s:taboption("seconddns", Value, "seconddns_nftset_name", translate("NFTset Name"), translate("NFTset name, format: [#[4|6]:[family#table#set]]")) +o.rmempty = true +o.datatype = "string" +o.rempty = true +function o.validate(self, value) + if (value == "") then + return value + end + + if (value:match("#[4|6]:[a-zA-Z0-9%-_]+#[a-zA-Z0-9%-_]+#[a-zA-Z0-9%-_]+$")) then + return value + end + + return nil, translate("NFTset name format error, format: [#[4|6]:[family#table#set]]") +end + +---- other args +o = s:taboption("seconddns", Value, "seconddns_server_flags", translate("Additional Server Args"), translate("Additional server args, refer to the help description of the bind option.")) +o.default = "" +o.rempty = true +o.optional = true + +----- Proxy server settings +o = s:taboption("proxy", Value, "proxy_server", translate("Proxy Server"), translate("Proxy Server URL, format: [socks5|http]://user:pass@ip:port.")); +o.datatype = 'string'; +function o.validate(self, value) + if (value == "") then + return true + end + + if (not value:match("^http://") and not value:match("^socks5://")) then + return nil, translate("Proxy server URL format error, format: [socks5|http]://user:pass@ip:port.") + end + + return value +end + +----- dns64 server settings +o = s:taboption("dns64", Value, "dns64", translate("DNS64")); +o.placeholder = "64:ff9b::/96" +o.datatype = 'ip6addr' +o.rmempty = true + +----- custom settings +custom = s:taboption("custom", Value, "Custom Settings", + translate(""), + translate("smartdns custom settings")) + +custom.template = "cbi/tvalue" +custom.rows = 20 + +function custom.cfgvalue(self, section) + return nixio.fs.readfile("/etc/smartdns/custom.conf") +end + +function custom.write(self, section, value) + value = value:gsub("\r\n?", "\n") + nixio.fs.writefile("/etc/smartdns/custom.conf", value) +end + +o = s:taboption("custom", Flag, "coredump", translate("Generate Coredump"), translate("Generate Coredump file when smartdns crash, coredump file is located at /tmp/smartdns.xxx.core.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +o = s:taboption("custom", Value, "log_size", translate("Log Size")) +o.rmempty = true +o.placeholder = "default" + +o = s:taboption("custom", ListValue, "log_level", translate("Log Level")) +o.rmempty = true +o.placeholder = "default" +o:value("", translate("default")) +o:value("debug") +o:value("info") +o:value("notice") +o:value("warn") +o:value("error") +o:value("fatal") +o:value("off") + +o = s:taboption("custom", Value, "log_num", translate("Log Number")) +o.rmempty = true +o.placeholder = "default" + +o = s:taboption("custom", Value, "log_file", translate("Log File")) +o.rmempty = true +o.placeholder = "/var/log/smartdns/smartdns.log" + +-- Upstream servers +s = m:section(TypedSection, "server", translate("Upstream Servers"), translate("Upstream Servers, support UDP, TCP protocol. " .. + "Please configure multiple DNS servers, including multiple foreign DNS servers.")) + +s.anonymous = true +s.addremove = true +s.template = "cbi/tblsection" +s.extedit = luci.dispatcher.build_url("admin/services/smartdns/upstream/%s") + +---- enable flag +o = s:option(Flag, "enabled", translate("Enable"), translate("Enable")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "1" +end + +---- name +s:option(Value, "name", translate("DNS Server Name"), translate("DNS Server Name")) + +---- IP address +o = s:option(Value, "ip", translate("ip"), translate("DNS Server ip")) +o.datatype = "or(ipaddr, string)" +o.rmempty = false +---- port +o = s:option(Value, "port", translate("port"), translate("DNS Server port")) +o.placeholder = "default" +o.datatype = "port" +o.rempty = true +o:depends("type", "udp") +o:depends("type", "tcp") +o:depends("type", "tls") + +---- type +o = s:option(ListValue, "type", translate("type"), translate("DNS Server type")) +o.placeholder = "udp" +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 + +---- domain rules; +s = m:section(TypedSection, "domain-rule", translate("Domain Rules"), translate("Domain Rules Settings")) +s.anonymous = true +s.nodescriptions = true + +s:tab("forwarding", translate('DNS Forwarding Setting')) +s:tab("block", translate("DNS Block Setting")) +s:tab("domain-address", translate("Domain Address"), translate("Set Specific domain ip address.")) +s:tab("blackip-list", translate("IP Blacklist"), translate("Set Specific ip blacklist.")) + +---- domain forwarding; +o = s:taboption("forwarding", Value, "server_group", translate("Server Group"), translate("DNS Server group belongs to, such as office, home.")) +o.rmempty = true +o.placeholder = "default" +o.datatype = "hostname" +o.rempty = true +uci:foreach("smartdns", "server", function(section) + local server_group = section.server_group + if server_group == nil then + return + end + o:value(server_group); +end) + +function o.validate (section_id, value) + if value == "" then + return value + end + + if value == nil then + return nil, translate('Server Group not exists') + end + + local exists = false + uci:foreach("smartdns", "server", function(section) + local server_group = section.server_group + if (exists == true) then + return + end + + if (value == server_group) then + exists = true + end + end) + + if exists == false then + return nil, translate('Server Group not exists') + end + + return value; + +end + +o = s:taboption("forwarding", Flag, "no_speed_check", translate("Skip Speed Check"), + translate("Do not check speed.")) +o.rmempty = true +o.default = o.disabled + +o = s:taboption("forwarding", Flag, "force_aaaa_soa", translate("Force AAAA SOA"), translate("Force AAAA SOA.")) +o.rmempty = true +o.default = o.disabled + +o = s:taboption("forwarding", Value, "ipset_name", translate("IPset Name"), translate("IPset name.")) +o.rmempty = true +o.datatype = "hostname" +o.rempty = true + +o = s:taboption("forwarding", Value, "nftset_name", translate("NFTset Name"), translate("NFTset name, format: [#[4|6]:[family#table#set]]")) +o.rmempty = true +o.datatype = "string" +o.rempty = true +function o.validate(self, value) + if (value == "") then + return value + end + + if (value:match("#[4|6]:[a-zA-Z0-9%-_]+#[a-zA-Z0-9%-_]+#[a-zA-Z0-9%-_]+$")) then + return value + end + + return nil, translate("NFTset name format error, format: [#[4|6]:[family#table#set]]") +end + +---- other args +o = s:taboption("forwarding", Value, "addition_flag", translate("Additional Rule Flag"), translate("Additional Flags for rules, read help on domain-rule for more information.")) +o.default = "" +o.rempty = true +o.modalonly = true; + +o = s:taboption("forwarding", FileUpload, "forwarding_domain_set_file", translate("Domain List File"), + translate("Upload domain list file, or configure auto download from Download File Setting page.")) +o.rmempty = true +o.datatype = "file" +o.rempty = true +o.editable = true +o.root_directory = "/etc/smartdns/domain-set" + +o = s:taboption("forwarding", TextValue, "domain_forwarding_list", + translate("Domain List"), translate("Configure forwarding domain name list.")) +o.rows = 10 +o.cols = 64 +o.monospace = true +function o.cfgvalue(self, section) + return nixio.fs.readfile("/etc/smartdns/domain-forwarding.list") +end +function o.write(self, section, value) + value = value:gsub("\r\n?", "\n") + nixio.fs.writefile("/etc/smartdns/domain-forwarding.list", value) +end + +---- domain block; +o = s:taboption("block", FileUpload, "block_domain_set_file", translate("Domain List File"), translate("Upload domain list file.")) +o.rmempty = true +o.datatype = "file" +o.rempty = true +o.editable = true +o.root_directory = "/etc/smartdns/domain-set" + +o = s:taboption("block", TextValue, "domain_block_list", + translate("Domain List"), translate("Configure block domain list.")) +o.rows = 10 +o.cols = 64 +function o.cfgvalue(self, section) + return nixio.fs.readfile("/etc/smartdns/domain-block.list") +end +function o.write(self, section, value) + value = value:gsub("\r\n?", "\n") + nixio.fs.writefile("/etc/smartdns/domain-block.list", value) +end + +-- Doman addresss +addr = s:taboption("domain-address", Value, "address", + translate(""), + translate("Specify an IP address to return for any host in the given domains, Queries in the domains are never forwarded and always replied to with the specified IP address which may be IPv4 or IPv6.")) + +addr.template = "cbi/tvalue" +addr.rows = 20 + +function addr.cfgvalue(self, section) + return nixio.fs.readfile("/etc/smartdns/address.conf") +end + +function addr.write(self, section, value) + value = value:gsub("\r\n?", "\n") + nixio.fs.writefile("/etc/smartdns/address.conf", value) +end + +-- IP Blacklist +addr = s:taboption("blackip-list", Value, "blacklist_ip", + translate(""), + translate("Configure IP blacklists that will be filtered from the results of specific DNS server.")) + +addr.template = "cbi/tvalue" +addr.rows = 20 + +function addr.cfgvalue(self, section) + return nixio.fs.readfile("/etc/smartdns/blacklist-ip.conf") +end + +function addr.write(self, section, value) + value = value:gsub("\r\n?", "\n") + nixio.fs.writefile("/etc/smartdns/blacklist-ip.conf", value) +end + +s = m:section(TypedSection, "smartdns", translate("Download Files Setting"), translate("Download domain list files for domain-rule and include config files, please refresh the page after download to take effect.")) +s.anonymous = true + +---- download Files Settings +o = s:option(Flag, "enable_auto_update", translate("Enable Auto Update"), translate("Enable daily auto update.")) +o.rmempty = true +o.default = o.disabled +o.rempty = true + +o = s:option(ListValue, "auto_update_day_time", translate("Update time (every day)")) +for i = 0, 23 do o:value(i, i .. ":00") end +o.default = 5 + +o = s:option(FileUpload, "upload_conf_file", translate("Upload Config File"), + translate("Upload smartdns config file to /etc/smartdns/conf.d")) +o.rmempty = true +o.datatype = "file" +o.rempty = true +o.editable = true +o.root_directory = "/etc/smartdns/conf.d" + +o = s:option(FileUpload, "upload_list_file", translate("Upload Domain List File"), + translate("Upload domain list file to /etc/smartdns/domain-set")) +o.rmempty = true +o.datatype = "file" +o.rempty = true +o.editable = true +o.root_directory = "/etc/smartdns/domain-set" + +o = s:option(Button, "_updateate") +o.title = translate("Update Files") +o.inputtitle = translate("Update Files") +o.inputstyle = "apply" +o.write = function() + luci.sys.call("/etc/init.d/smartdns updatefiles >/dev/null 2>&1") +end + +s = m:section(TypedSection, "download-file", translate("Download Files"), translate("List of files to download.")) +s.anonymous = true +s.addremove = true +s.template = "cbi/tblsection" + +o = s:option(Value, 'name', translate('File Name'), translate('File Name')) +o.rmempty = true +o.datatype = 'string' + +o = s:option(Value, 'url', translate('URL'), translate('URL')) +o.rmempty = true +o.datatype = 'string' +function o.validate(self, value, section) + if value == "" then + return nil, translate("URL format error, format: http:// or https://") + end + + if value == nil then + return nil, translate("URL format error, format: http:// or https://") + end + + if value.find(value, "http://") then + return value + end + + if value.find(value, "https://") then + return value + end + + return nil, translate("URL format error, format: http:// or https://") +end + +o = s:option(ListValue, "type", translate("type"), translate("File Type")) +o:value("list", translate("domain list (/etc/smartdns/domain-set)")) +o:value("config", translate("smartdns config (/etc/smartdns/conf.d)")) +o.default = "list" +o.rempty = false + +o = s:option(Value, 'desc', translate('Description'), translate('Description')) +o.rmempty = true +o.datatype = 'string' + +-- Technical Support +s = m:section(TypedSection, "smartdns", translate("Technical Support"), + translate("If you like this software, please buy me a cup of coffee.")) +s.anonymous = true + +o = s:option(Button, "web") +o.title = translate("SmartDNS official website") +o.inputtitle = translate("open website") +o.inputstyle = "apply" +o.write = function() + luci.http.redirect("https://pymumu.github.io/smartdns") +end + +o = s:option(Button, "report") +o.title = translate("Report bugs") +o.inputtitle = translate("Report bugs") +o.inputstyle = "apply" +o.write = function() + luci.http.redirect("https://github.com/pymumu/smartdns/issues") +end + +o = s:option(Button, "Donate") +o.title = translate("Donate to smartdns") +o.inputtitle = translate("Donate") +o.inputstyle = "apply" +o.write = function() + luci.http.redirect("https://pymumu.github.io/smartdns/#donate") +end + +o = s:option(Button, "Restart") +o.title = translate("Restart Service") +o.inputtitle = translate("Restart") +o.inputstyle = "apply" +o.write = function() + luci.sys.call("/etc/init.d/smartdns restart >/dev/null 2>&1") +end + +return m + diff --git a/luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua b/luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua new file mode 100644 index 00000000..02b7a5f4 --- /dev/null +++ b/luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua @@ -0,0 +1,158 @@ +-- +-- Copyright (C) 2018-2023 Ruilin Peng (Nick) . +-- +-- smartdns 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. +-- +-- smartdns is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +local sid = arg[1] + +m = Map("smartdns", "%s - %s" %{translate("SmartDNS Server"), translate("Upstream DNS Server Configuration")}) +m.redirect = luci.dispatcher.build_url("admin/services/smartdns") + +if m.uci:get("smartdns", sid) ~= "server" then + luci.http.redirect(m.redirect) + return +end + +-- [[ Edit Server ]]-- +s = m:section(NamedSection, sid, "server") +s.anonymous = true +s.addremove = false + +---- name +s:option(Value, "name", translate("DNS Server Name"), translate("DNS Server Name")) + +---- IP address +o = s:option(Value, "ip", translate("ip"), translate("DNS Server ip")) +o.datatype = "or(host, string)" +o.rmempty = false +---- port +o = s:option(Value, "port", translate("port"), translate("DNS Server port")) +o.placeholder = "default" +o.datatype = "port" +o.rempty = true +o:depends("type", "udp") +o:depends("type", "tcp") +o:depends("type", "tls") + +---- type +o = s:option(ListValue, "type", translate("type"), translate("DNS Server type")) +o.placeholder = "udp" +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 + +---- server group +o = s:option(Value, "server_group", translate("Server Group"), translate("DNS Server group belongs to, such as office, home.")) +o.rmempty = true +o.placeholder = "default" +o.datatype = "hostname" +o.rempty = true + +---- exclude default group +o = s:option(Flag, "exclude_default_group", translate("Exclude Default Group"), translate("Exclude DNS Server from default group.")) +o.rmempty = true +o.default = o.disabled +o.editable = true +o.modalonly = true + +---- blacklist_ip +o = s:option(Flag, "blacklist_ip", translate("IP Blacklist Filtering"), translate("Filtering IP with blacklist")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- TLS host verify +o = s:option(Value, "tls_host_verify", translate("TLS Hostname Verify"), translate("Set TLS hostname to verify.")) +o.default = "" +o.datatype = "string" +o.rempty = true +o:depends("type", "tls") +o:depends("type", "https") + +---- certificate verify +o = s:option(Flag, "no_check_certificate", translate("No check certificate"), translate("Do not check certificate.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end +o:depends("type", "tls") +o:depends("type", "https") + +---- SNI host name +o = s:option(Value, "host_name", translate("TLS SNI name"), translate("Sets the server name indication for query.")) +o.default = "" +o.datatype = "hostname" +o.rempty = true +o:depends("type", "tls") +o:depends("type", "https") + +---- http host +o = s:option(Value, "http_host", translate("HTTP Host"), translate("Set the HTTP host used for the query. Use this parameter when the host of the URL address is an IP address.")) +o.default = "" +o.datatype = "hostname" +o.rempty = true +o:depends("type", "https") + +---- anti-Answer-Forgery +-- o = s:option(Flag, "check_edns", translate("Anti Answer Forgery"), translate("Anti answer forgery, if DNS does not work properly after enabling, please turn off this feature")) +-- o.rmempty = false +-- o.default = o.disabled +-- o:depends("type", "udp") +-- o.cfgvalue = function(...) +-- return Flag.cfgvalue(...) or "0" +-- end + +---- SPKI pin +o = s:option(Value, "spki_pin", translate("TLS SPKI Pinning"), translate("Used to verify the validity of the TLS server, The value is Base64 encoded SPKI fingerprint, leaving blank to indicate that the validity of TLS is not verified.")) +o.default = "" +o.datatype = "string" +o.rempty = true +o:depends("type", "tls") +o:depends("type", "https") + +---- mark +o = s:option(Value, "set_mark", translate("Marking Packets"), translate("Set mark on packets.")) +o.default = "" +o.rempty = true +o.datatype = "uinteger" + +---- use proxy +o = s:option(Flag, "use_proxy", translate("Use Proxy"), translate("Use proxy to connect to upstream DNS server.")) +o.rmempty = true +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end +function o.validate(self, value, section) + if value == "1" then + local proxy = m.uci:get_first("smartdns", "smartdns", "proxy_server") + if proxy == nil or proxy == "" then + return nil, translate("Please set proxy server first.") + end + end + return value +end + +---- other args +o = s:option(Value, "addition_arg", translate("Additional Server Args"), translate("Additional Args for upstream dns servers")) +o.default = "" +o.rempty = true + +return m \ No newline at end of file diff --git a/luci-app-smartdns/luasrc/model/smartdns.lua b/luci-app-smartdns/luasrc/model/smartdns.lua new file mode 100644 index 00000000..d71742b7 --- /dev/null +++ b/luci-app-smartdns/luasrc/model/smartdns.lua @@ -0,0 +1,31 @@ +-- +-- Copyright (C) 2018-2023 Ruilin Peng (Nick) . +-- +-- smartdns 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. +-- +-- smartdns is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +require ("nixio.fs") +require ("luci.http") +require ("luci.dispatcher") +require ("nixio.fs") + +local uci = require "luci.model.uci".cursor() + +module("luci.model.smartdns", package.seeall) + +function get_config_option(module, section, option, default) + return uci:get_first(module, section, option) or default +end + +return m + diff --git a/luci-app-smartdns/luasrc/view/smartdns/smartdns_status.htm b/luci-app-smartdns/luasrc/view/smartdns/smartdns_status.htm new file mode 100644 index 00000000..c75fb663 --- /dev/null +++ b/luci-app-smartdns/luasrc/view/smartdns/smartdns_status.htm @@ -0,0 +1,28 @@ + + +
+

+ <%:Collecting data...%> +

+
+ \ No newline at end of file diff --git a/luci-app-smartdns/po/zh-cn/smartdns.po b/luci-app-smartdns/po/zh-cn/smartdns.po new file mode 100644 index 00000000..15421fc0 --- /dev/null +++ b/luci-app-smartdns/po/zh-cn/smartdns.po @@ -0,0 +1,654 @@ + +msgid "Additional Args for upstream dns servers" +msgstr "额外的上游 DNS 服务器参数" + +msgid "" +"Additional Flags for rules, read help on domain-rule for more information." +msgstr "额外的规则标识,具体参考domain-rule的帮助说明。" + +msgid "Additional Rule Flag" +msgstr "额外规则标识" + +msgid "Additional Server Args" +msgstr "额外的服务器参数" + +msgid "Additional server args, refer to the help description of the bind option." +msgstr "额外的服务器参数,参考bind选项的帮助说明。" + +msgid "Advanced Settings" +msgstr "高级设置" + +msgid "" +"Attempts to serve old responses from cache with a TTL of 0 in the response " +"without waiting for the actual resolution to finish." +msgstr "查询性能优化,有请求时尝试回应TTL为0的过期记录,以避免查询等待。" + +msgid "Automatically Set Dnsmasq" +msgstr "自动设置Dnsmasq" + +msgid "Automatically set as upstream of dnsmasq when port changes." +msgstr "端口更改时自动设为 dnsmasq 的上游。" + +msgid "Bind Device" +msgstr "绑定到设备" + +msgid "Bind Device Name" +msgstr "绑定的设备名称" + +msgid "Block domain" +msgstr "屏蔽域名" + +msgid "Block domain." +msgstr "屏蔽域名。" + +msgid "Cache Persist" +msgstr "持久化缓存" + +msgid "Cache Size" +msgstr "缓存大小" + +msgid "Collecting data ..." +msgstr "正在收集数据..." + +msgid "" +"Configure IP blacklists that will be filtered from the results of specific " +"DNS server." +msgstr "配置需要从指定域名服务器结果过滤的IP黑名单。" + +msgid "Configure block domain list." +msgstr "配置屏蔽域名列表" + +msgid "Configure domain rule list." +msgstr "配置域名规则列表" + +msgid "Configure forwarding domain name list." +msgstr "配置分流域名列表" + +msgid "Custom Settings" +msgstr "自定义设置" + +msgid "DNS Block Setting" +msgstr "域名屏蔽设置" + +msgid "DNS Forwarding Setting" +msgstr "域名分流设置" + +msgid "DNS Server Name" +msgstr "DNS服务器名称" + +msgid "DNS Server group" +msgstr "服务器组" + +msgid "DNS Server group belongs to, such as office, home." +msgstr "设置服务器组,例如office,home" + +msgid "DNS Server ip" +msgstr "DNS服务器IP" + +msgid "DNS Server port" +msgstr "DNS服务器端口" + +msgid "DNS Server type" +msgstr "协议类型" + +msgid "DNS domain result cache size" +msgstr "缓存DNS的结果,缓存大小,配置零则不缓存。" + +msgid "DNS64" +msgstr "DNS64" + +msgid "DNS64 Server Settings" +msgstr "DNS64服务器配置" + +msgid "default" +msgstr "默认" + +msgid "Description" +msgstr "描述" + +msgid "Dnsmasq Forwarded To Smartdns Failure" +msgstr "重定向dnsmasq到smartdns失败" + +msgid "Do not check certificate." +msgstr "不校验证书的合法性。" + +msgid "Do not check speed." +msgstr "禁用测速。" + +msgid "Domain Address" +msgstr "域名地址" + +msgid "Domain List" +msgstr "域名列表" + +msgid "Domain List File" +msgstr "域名列表文件" + +msgid "Domain Rule List" +msgstr "域名规则列表" + +msgid "Domain Rule Name" +msgstr "域名规则名称" + +msgid "Domain Rules" +msgstr "域名规则" + +msgid "Domain Rules Settings" +msgstr "域名规则设置" + +msgid "Domain TTL" +msgstr "域名TTL" + +msgid "Domain TTL Max" +msgstr "域名TTL最大值" + +msgid "Domain TTL Min" +msgstr "域名TTL最小值" + +msgid "Domain prefetch" +msgstr "域名预加载" + +msgid "Donate" +msgstr "捐助" + +msgid "Donate to smartdns" +msgstr "捐助smartdns项目" + +msgid "Download Files" +msgstr "下载文件" + +msgid "Download Files Setting" +msgstr "下载文件设置" + +msgid "" +"Download domain list files for domain-rule and include config files, please " +"refresh the page after download to take effect." +msgstr "" +"下载域名规则所需要的域名列表文件和smartdns配置文件,下载完成后刷新页面。" + +msgid "Dual-stack IP Selection" +msgstr "双栈IP优选" + +msgid "Enable" +msgstr "启用" + +msgid "Enable Auto Update" +msgstr "启用自动更新" + +msgid "Enable IP selection between IPV4 and IPV6" +msgstr "启用 IPV4 和 IPV6 间的 IP 优选策略。" + +msgid "Enable IPV6 DNS Server" +msgstr "启用IPV6服务器。" + +msgid "Enable TCP DNS Server" +msgstr "启用TCP服务器。" + +msgid "Enable daily auto update." +msgstr "启用每日自动更新" + +msgid "Update time (every day)" +msgstr "更新时间(每天)" + +msgid "Enable domain prefetch, accelerate domain response speed." +msgstr "启用域名预加载,加速域名响应速度。" + +msgid "Enable or disable second DNS server." +msgstr "是否启用第二DNS服务器。" + +msgid "Enable or disable smartdns server" +msgstr "启用或禁用SmartDNS服务" + +msgid "Exclude DNS Server from default group." +msgstr "从default默认服务器组中排除。" + +msgid "Exclude Default Group" +msgstr "从默认组中排除" + +msgid "Fastest IP" +msgstr "最快IP" + +msgid "Fastest Response" +msgstr "最快响应" + +msgid "File Name" +msgstr "文件名" + +msgid "File Type" +msgstr "文件类型" + +msgid "Filtering IP with blacklist" +msgstr "使用IP黑名单过滤" + +msgid "First Ping" +msgstr "最快PING" + +msgid "Force AAAA SOA" +msgstr "停用IPV6地址解析" + +msgid "Force AAAA SOA." +msgstr "停用IPV6地址解析。" + +msgid "Force HTTPS SOA" +msgstr "停用HTTPS地址解析" + +msgid "Force HTTPS SOA." +msgstr "停用HTTPS地址解析。" + +msgid "General Settings" +msgstr "常规设置" + +msgid "Generate Coredump" +msgstr "生成coredump" + +msgid "" +"Generate Coredump file when smartdns crash, coredump file is located at /tmp/" +"smartdns.xxx.core." +msgstr "" +"当smartdns异常时生成coredump文件,coredump文件在/tmp/smartdns.xxx.core." + +msgid "Grant access to LuCI app smartdns" +msgstr "授予访问 LuCI 应用 smartdns 的权限" + +msgid "HTTP Host" +msgstr "HTTP主机" + +msgid "IP Blacklist" +msgstr "IP黑名单" + +msgid "IP Blacklist Filtering" +msgstr "IP黑名单过滤" + +msgid "IPV6 Server" +msgstr "IPV6服务器" + +msgid "IPset Name" +msgstr "IPset名称" + +msgid "IPset name." +msgstr "IPset名称。" + +msgid "If you like this software, please buy me a cup of coffee." +msgstr "如果本软件对你有帮助,请给作者加个蛋。" + +msgid "Include Config Files
/etc/smartdns/conf.d" +msgstr "包含配置文件
/etc/smartdns/conf.d" + +msgid "" +"Include other config files from /etc/smartdns/conf.d or custom path, can be " +"downloaded from the download page." +msgstr "" +"包含配置文件,路径为/etc/smartdns/conf.d,或自定义配置文件路径,可以从下载页" +"配置自动下载。面配置自动下载。" + +msgid "Ipset name, Add domain result to ipset when speed check fails." +msgstr "IPset名称,当测速失败时,将查询到的结果添加到对应的IPSet集合中。" + +msgid "List of files to download." +msgstr "下载文件列表。" + +msgid "Listen only on the specified interfaces." +msgstr "监听在指定的设备上,避免非本地网络的DNS查询请求。" + +msgid "Local Port" +msgstr "本地端口" + +msgid "Log Size" +msgstr "日志大小" + +msgid "Log Level" +msgstr "日志级别" + +msgid "Log Number" +msgstr "日志数量" + +msgid "Log File" +msgstr "日志文件路径" + +msgid "Marking Packets" +msgstr "数据包标记" + +msgid "Maximum TTL for all domain result." +msgstr "所有域名的最大 TTL 值。" + +msgid "Minimum TTL for all domain result." +msgstr "所有域名的最小 TTL 值。" + +msgid "NFTset Name" +msgstr "NFTSet名称" + +msgid "NFTset name format error, format: [#[4|6]:[family#table#set]]" +msgstr "NFTSet名称格式错误,格式:[#[4|6]:[family#table#set]]" + +msgid "NFTset name, format: [#[4|6]:[family#table#set]]" +msgstr "NFTSet名称,格式:[#[4|6]:[family#table#set]]" + +msgid "NOT RUNNING" +msgstr "未运行" + +msgid "Name of device name listen on." +msgstr "绑定的设备名称。" + +msgid "" +"Nftset name, Add domain result to nftset when speed check fails, format: " +"[#[4|6]:[family#table#set]]" +msgstr "NFTset名称,当测速失败时,将查询到的结果添加到对应的NFTSet集合中。" + +msgid "No" +msgstr "否" + +msgid "No Speed IPset Name" +msgstr "无速度时IPSet名称" + +msgid "No Speed NFTset Name" +msgstr "无速度时NFTSet名称" + +msgid "No check certificate" +msgstr "停用证书校验" + +msgid "None" +msgstr "无" + +msgid "Only socks5 proxy support udp server." +msgstr "仅SOCKS5代理支持UDP服务器。" + +msgid "Please set proxy server first." +msgstr "请先设置代理服务器。" + +msgid "Proxy Server" +msgstr "代理服务器" + +msgid "Proxy Server Settings" +msgstr "代理服务器设置" + +msgid "Proxy Server URL, format: [socks5|http]://user:pass@ip:port." +msgstr "代理服务器地址,格式:[socks5|http]://user:pass@ip:port。" + +msgid "" +"Proxy server URL format error, format: [socks5|http]://user:pass@ip:port." +msgstr "代理服务器地址格式错误,格式:[socks5|http]://user:pass@ip:port。" + +msgid "Query DNS through specific dns server group, such as office, home." +msgstr "使用指定服务器组查询,比如office, home。" + +msgid "RUNNING" +msgstr "运行中" + +msgid "Reply Domain TTL Max" +msgstr "回应的域名TTL最大值" + +msgid "Reply maximum TTL for all domain result." +msgstr "设置返回给客户端的域名TTL最大值。" + +msgid "Report bugs" +msgstr "报告BUG" + +msgid "Resolve Local Hostnames" +msgstr "解析本地主机名" + +msgid "Resolve local hostnames by reading Dnsmasq lease file." +msgstr "读取Dnsmasq的租约文件解析本地主机名。" + +msgid "Response Mode" +msgstr "响应模式" + +msgid "Restart" +msgstr "重启" + +msgid "Restart Service" +msgstr "重启服务" + +msgid "Second Server Settings" +msgstr "第二DNS服务器" + +msgid "Serve expired" +msgstr "缓存过期服务" + +msgid "Server Group" +msgstr "服务器组" + +msgid "Server Group %s not exists" +msgstr "服务器组%s不存在" + +msgid "Server Name" +msgstr "服务器名称" + +msgid "Set Specific domain ip address." +msgstr "设置指定域名的IP地址。" + +msgid "Set Specific domain rule list." +msgstr "设置指定域名的规则列表。" + +msgid "Set Specific ip blacklist." +msgstr "设置指定的 IP 黑名单列表。" + +msgid "Set TLS hostname to verify." +msgstr "设置校验TLS主机名。" + +msgid "Set mark on packets." +msgstr "设置数据包标记。" + +msgid "" +"Set the HTTP host used for the query. Use this parameter when the host of " +"the URL address is an IP address." +msgstr "设置查询时使用的HTTP主机,当URL地址的host是IP地址时,使用此参数。" + +msgid "Sets the server name indication for query. '-' for disable SNI name." +msgstr "设置服务器SNI名称,‘-’表示禁用SNI名称。" + +msgid "Settings" +msgstr "设置" + +msgid "Skip Address Rules" +msgstr "跳过address规则" + +msgid "Skip Cache" +msgstr "跳过cache" + +msgid "Skip Cache." +msgstr "跳过cache。" + +msgid "Skip Dualstack Selection" +msgstr "跳过双栈优选" + +msgid "Skip Dualstack Selection." +msgstr "跳过双栈优选。" + +msgid "Skip Ipset Rule" +msgstr "跳过ipset规则" + +msgid "Skip Nameserver Rule" +msgstr "跳过Nameserver规则" + +msgid "Skip SOA Address Rule" +msgstr "跳过address SOA(#)规则" + +msgid "Skip SOA address rules." +msgstr "跳过address SOA(#)规则。" + +msgid "Skip Speed Check" +msgstr "跳过测速" + +msgid "Skip address rules." +msgstr "跳过address规则。" + +msgid "Skip ipset rules." +msgstr "跳过ipset规则。" + +msgid "Skip nameserver rules." +msgstr "跳过Nameserver规则。" + +msgid "SmartDNS" +msgstr "SmartDNS" + +msgid "SmartDNS Server" +msgstr "SmartDNS 服务器" + +msgid "" +"SmartDNS is a local high-performance DNS server, supports finding fastest " +"IP, supports ad filtering, and supports avoiding DNS poisoning." +msgstr "SmartDNS是一个本地高性能DNS服务器,支持返回最快IP,支持广告过滤。" + +msgid "SmartDNS official website" +msgstr "SmartDNS官方网站" + +msgid "Smartdns local server port" +msgstr "SmartDNS本地服务端口" + +msgid "" +"Smartdns local server port, smartdns will be automatically set as main dns " +"when the port is 53." +msgstr "" +"SmartDNS本地服务端口,当端口号设置为53时,smartdns将会自动配置为主dns。" + +msgid "" +"Smartdns response mode, First Ping: return the first ping IP, Fastest IP: " +"return the fastest IP, Fastest Response: return the fastest DNS response." +msgstr "" +"SmartDNS响应模式,最快PING: 返回最早有ping结果的IP,速度适中;最快IP: 返回" +"最快IP,查询请求可能延长; 最快响应:返回最快响应的结果,查询请求时间短。" + +msgid "Smartdns server name" +msgstr "SmartDNS的服务器名称,默认为smartdns,留空为主机名" + +msgid "Smartdns speed check mode." +msgstr "SmartDNS测速模式。" + +msgid "" +"Specify an IP address to return for any host in the given domains, Queries " +"in the domains are never forwarded and always replied to with the specified " +"IP address which may be IPv4 or IPv6." +msgstr "" +"配置特定域名返回特定的IP地址,域名查询将不到上游服务器请求,直接返回配置的IP" +"地址,可用于广告屏蔽。" + +msgid "Speed Check Mode" +msgstr "测速模式" + +msgid "Speed check mode is invalid." +msgstr "测速模式无效。" + +msgid "TCP Server" +msgstr "TCP服务器" + +msgid "TCP port is empty" +msgstr "TCP端口号为空" + +msgid "TLS Hostname Verify" +msgstr "校验TLS主机名" + +msgid "TLS SNI name" +msgstr "TLS SNI名称" + +msgid "TLS SPKI Pinning" +msgstr "TLS SPKI 指纹" + +msgid "TTL for all domain result." +msgstr "设置所有域名的 TTL 值。" + +msgid "Technical Support" +msgstr "技术支持" + +msgid "URL" +msgstr "URL" + +msgid "URL format error, format: http:// or https://" +msgstr "URL格式错误,格式:http://或https://" + +msgid "Update" +msgstr "更新" + +msgid "Update Files" +msgstr "更新文件" + +msgid "Upload Config File" +msgstr "上传配置文件" + +msgid "Upload Domain List File" +msgstr "上传域名列表文件" + +msgid "Upload domain list file to /etc/smartdns/domain-set" +msgstr "上传域名列表文件到/etc/smartdns/domain-set" + +msgid "" +"Upload domain list file, or configure auto download from Download File " +"Setting page." +msgstr "上传域名列表文件,或在下载文件设置页面设置自动下载。" + +msgid "Upload domain list file." +msgstr "上传域名列表文件" + +msgid "Upload smartdns config file to /etc/smartdns/conf.d" +msgstr "上传配置文件到/etc/smartdns/conf.d" + +msgid "Upstream DNS Server Configuration" +msgstr "上游DNS服务器配置" + +msgid "Upstream Servers" +msgstr "上游服务器" + +msgid "" +"Upstream Servers, support UDP, TCP protocol. Please configure multiple DNS " +"servers, including multiple foreign DNS servers." +msgstr "" +"上游 DNS 服务器,支持 UDP,TCP 协议。请配置多个上游 DNS 服务器,包括多个国内" +"外服务器。" + +msgid "Use Proxy" +msgstr "使用代理" + +msgid "Use proxy to connect to upstream DNS server." +msgstr "使用代理连接上游DNS服务器。" + +msgid "" +"Used to verify the validity of the TLS server, The value is Base64 encoded " +"SPKI fingerprint, leaving blank to indicate that the validity of TLS is not " +"verified." +msgstr "" +"用于校验 TLS 服务器的有效性,数值为 Base64 编码的 SPKI 指纹,留空表示不验证 " +"TLS 的合法性。" + +msgid "Write cache to disk on exit and load on startup." +msgstr "退出时保存cache到磁盘,启动时加载。" + +msgid "Yes" +msgstr "是" + +msgid "default" +msgstr "默认" + +msgid "domain list (/etc/smartdns/domain-set)" +msgstr "域名列表(/etc/smartdns/domain-set)" + +msgid "https" +msgstr "https" + +msgid "ip" +msgstr "ip" + +msgid "ipset name format error, format: [#[4|6]:]ipsetname" +msgstr "IPset名称格式错误,格式:[#[4|6]:]ipsetname" + +msgid "open website" +msgstr "打开网站" + +msgid "port" +msgstr "端口" + +msgid "smartdns config (/etc/smartdns/conf.d)" +msgstr "smartdns 配置文件(/etc/smartdns/conf.d)" + +msgid "smartdns custom settings" +msgstr "smartdns 自定义设置,具体配置参数参考指导" + +msgid "tcp" +msgstr "tcp" + +msgid "tls" +msgstr "tls" + +msgid "type" +msgstr "类型" + +msgid "udp" +msgstr "udp" diff --git a/luci-app-smartdns/po/zh_Hans b/luci-app-smartdns/po/zh_Hans new file mode 120000 index 00000000..41451e4a --- /dev/null +++ b/luci-app-smartdns/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns b/luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns new file mode 100644 index 00000000..88efcacb --- /dev/null +++ b/luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns @@ -0,0 +1,26 @@ +#!/bin/sh +# +# Copyright (C) 2018-2023 Ruilin Peng (Nick) . +# +# smartdns 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. +# +# smartdns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@smartdns[-1] + add ucitrack smartdns + set ucitrack.@smartdns[-1].init=smartdns + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/luci-app-ssr-plus/Makefile b/luci-app-ssr-plus/Makefile new file mode 100644 index 00000000..461f5539 --- /dev/null +++ b/luci-app-ssr-plus/Makefile @@ -0,0 +1,192 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-ssr-plus +PKG_VERSION:=188 +PKG_RELEASE:=3 + +PKG_CONFIG_DEPENDS:= \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_NONE_V2RAY \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Xray \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_MosDNS \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Tuic_Client \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadow_TLS \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2 \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_NONE_Client \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_NONE_Server \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Simple_Obfs \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_V2ray_Plugin \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan + +LUCI_TITLE:=SS/SSR/V2Ray/Trojan/NaiveProxy/Tuic/ShadowTLS/Hysteria/Socks5/Tun LuCI interface +LUCI_PKGARCH:=all +LUCI_DEPENDS:= \ + @(PACKAGE_libustream-mbedtls||PACKAGE_libustream-openssl||PACKAGE_libustream-wolfssl) \ + +coreutils +coreutils-base64 +dns2socks +dns2tcp +dnsmasq-full +@PACKAGE_dnsmasq_full_ipset +ipset +kmod-ipt-nat \ + +ip-full +iptables +iptables-mod-tproxy +lua +lua-neturl +libuci-lua +microsocks \ + +tcping +resolveip +shadowsocksr-libev-ssr-check +uclient-fetch \ + +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:curl \ + +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray-core \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:curl \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:xray-core \ + +PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG:chinadns-ng \ + +PACKAGE_$(PKG_NAME)_INCLUDE_MosDNS:mosdns \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria:hysteria \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Tuic_Client:tuic-client \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Shadow_TLS:shadow-tls \ + +PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks:ipt2socks \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun:kcptun-client \ + +PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy:naiveproxy \ + +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_Shadowsocks_Simple_Obfs:simple-obfs \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_V2ray_Plugin:v2ray-plugin \ + +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_Trojan:trojan + +define Package/$(PKG_NAME)/config +select PACKAGE_luci-lib-ipkg if PACKAGE_$(PKG_NAME) + +choice + prompt "Shadowsocks Client Selection" + default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client if aarch64 || x86_64 + default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client + + config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_NONE_Client + bool "None" + + config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client + bool "Shadowsocks-libev" + + config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client + bool "Shadowsocks-rust" + depends on aarch64||arm||i386||mips||mipsel||x86_64 + depends on !(TARGET_x86_geode||TARGET_x86_legacy) +endchoice + +choice + prompt "Shadowsocks Server Selection" + default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server if aarch64 + default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server if i386||x86_64||arm + default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_NONE_Server + + config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_NONE_Server + bool "None" + + config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server + bool "Shadowsocks-libev" + + config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server + bool "Shadowsocks-rust" + depends on aarch64||arm||i386||mips||mipsel||x86_64 + depends on !(TARGET_x86_geode||TARGET_x86_legacy) +endchoice + +choice + prompt "V2ray-core Selection" + default PACKAGE_$(PKG_NAME)_INCLUDE_Xray if aarch64||arm||i386||x86_64 + default PACKAGE_$(PKG_NAME)_INCLUDE_NONE_V2RAY + + config PACKAGE_$(PKG_NAME)_INCLUDE_NONE_V2RAY + bool "None" + + config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray + bool "V2ray-core" + + config PACKAGE_$(PKG_NAME)_INCLUDE_Xray + bool "Xray-core" +endchoice + +config PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG + bool "Include ChinaDNS-NG" + default y + +config PACKAGE_$(PKG_NAME)_INCLUDE_MosDNS + bool "Include MosDNS" + default y if i386||x86_64||arm + +config PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria + bool "Include Hysteria" + select PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_Tuic_Client + bool "Include Tuic-Client" + select PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG + select PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks + depends on aarch64||arm||i386||x86_64 + depends on !(TARGET_x86_geode||TARGET_x86_legacy) + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_Shadow_TLS + bool "Include Shadow-TLS" + select PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG + select PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client + depends on aarch64||arm||x86_64 + depends on !(TARGET_x86_geode||TARGET_x86_legacy) + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks + bool "Include IPT2Socks" + 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||armeb||mips||mips64||powerpc||TARGET_gemini) + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2 + bool "Include Redsocks2" + default n + +config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Simple_Obfs + bool "Include Shadowsocks Simple Obfs Plugin" + default y + +config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_V2ray_Plugin + bool "Include Shadowsocks V2ray Plugin" + default n + +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_Trojan + bool "Include Trojan" + select PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks + default n +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 new file mode 100644 index 00000000..8ceaba7b --- /dev/null +++ b/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua @@ -0,0 +1,135 @@ +-- 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")), _("Servers 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")) +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 diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua new file mode 100644 index 00000000..ea08f58b --- /dev/null +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua @@ -0,0 +1,140 @@ +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://fastly.jsdelivr.net/gh/YW5vbnltb3Vz/domain-list-community@release/gfwlist.txt", translate("v2fly/domain-list-community")) +o:value("https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/gfw.txt", translate("Loyalsoldier/v2ray-rules-dat")) +o:value("https://fastly.jsdelivr.net/gh/Loukky/gfwlist-by-loukky/gfwlist.txt", translate("Loukky/gfwlist-by-loukky")) +o:value("https://fastly.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt", translate("gfwlist/gfwlist")) +o.default = "https://fastly.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:value("https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china.txt", translate("china-operator-ip")) +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://fastly.jsdelivr.net/gh/QiuSimons/Netflix_IP/NF_only.txt", translate("Netflix IP Only")) +o:value("https://fastly.jsdelivr.net/gh/QiuSimons/Netflix_IP/getflix.txt", translate("Netflix and AWS")) +o.default = "https://fastly.jsdelivr.net/gh/QiuSimons/Netflix_IP/NF_only.txt" +o.description = translate("Customize Netflix IP Url") +o:depends("netflix_enable", "1") + +o = s:option(ListValue, "shunt_dns_mode", translate("DNS Query Mode For Shunt Mode")) +o:value("1", translate("Use DNS2SOCKS query and cache")) +o:value("2", translate("Use MOSDNS query")) +o:depends("netflix_enable", "1") +o.default = 1 + +o = s:option(Value, "shunt_dnsserver", translate("Anti-pollution DNS Server For Shunt Mode")) +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:depends("shunt_dns_mode", "1") +o.description = translate("Custom DNS Server format as IP:PORT (default: 8.8.4.4:53)") +o.datatype = "ip4addrport" + +o = s:option(ListValue, "shunt_mosdns_dnsserver", translate("Anti-pollution DNS Server")) +o:value("tcp://8.8.4.4:53,tcp://8.8.8.8:53", translate("Google Public DNS")) +o:value("tcp://208.67.222.222:53,tcp://208.67.220.220:53", translate("OpenDNS")) +o:value("tcp://209.244.0.3:53,tcp://209.244.0.4:53", translate("Level 3 Public DNS-1 (209.244.0.3-4)")) +o:value("tcp://4.2.2.1:53,tcp://4.2.2.2:53", translate("Level 3 Public DNS-2 (4.2.2.1-2)")) +o:value("tcp://4.2.2.3:53,tcp://4.2.2.4:53", translate("Level 3 Public DNS-3 (4.2.2.3-4)")) +o:value("tcp://1.1.1.1:53,tcp://1.0.0.1:53", translate("Cloudflare DNS")) +o:depends("shunt_dns_mode", "2") +o.description = translate("Custom DNS Server for mosdns") + +o = s:option(Flag, "shunt_mosdns_ipv6", translate("Disable IPv6 In MOSDNS Query Mode (Shunt Mode)")) +o:depends("shunt_dns_mode", "2") +o.rmempty = false +o.default = "0" + +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_dnsmasq.conf", translate("NEO DEV HOST Lite")) +o:value("https://raw.githubusercontent.com/neodevpro/neodevhost/master/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_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 new file mode 100644 index 00000000..fa81be4a --- /dev/null +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua @@ -0,0 +1,1029 @@ +-- 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" +require "luci.model.ipkg" + +local m, s, o +local sid = arg[1] +local uuid = luci.sys.exec("cat /proc/sys/kernel/random/uuid") + +local function is_finded(e) + return luci.sys.exec('type -t -p "%s"' % e) ~= "" and true or false +end + +local function is_installed(e) + return luci.model.ipkg.installed(e) +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 = { + -- plain + "none", + "plain", + -- aead + "aes-128-gcm", + "aes-192-gcm", + "aes-256-gcm", + "chacha20-ietf-poly1305", + "xchacha20-ietf-poly1305", + -- aead 2022 + "2022-blake3-aes-128-gcm", + "2022-blake3-aes-256-gcm", + "2022-blake3-chacha20-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 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" +} + +local 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 tls_flows = { + -- tls + "xtls-rprx-vision", + "xtls-rprx-vision-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("ss-local") or is_finded("ss-redir") then + o:value("ss", translate("Shadowsocks-libev Version")) +end +if is_finded("sslocal") or is_finded("ssmanager") then + o:value("ss", translate("Shadowsocks-rust 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("hysteria") then + o:value("hysteria", translate("Hysteria")) +end +if is_finded("tuic-client") then + o:value("tuic", translate("TUIC")) +end +if is_finded("shadow-tls") and is_finded("sslocal") then + o:value("shadowtls", translate("Shadow-TLS")) +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")) +if is_finded("xray") then + o:value("wireguard", translate("WireGuard")) +end +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", "hysteria") +o:depends("type", "tuic") +o:depends("type", "shadowtls") +o:depends("type", "socks5") + +o = s:option(Value, "server_port", translate("Server Port")) +o.datatype = "port" +o.rmempty = true +o:depends("type", "ssr") +o:depends("type", "ss") +o:depends("type", "v2ray") +o:depends("type", "trojan") +o:depends("type", "naiveproxy") +o:depends({type = "hysteria",port_hopping = false}) +o:depends("type", "tuic") +o:depends("type", "shadowtls") +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", "shadowtls") +o:depends({type = "socks5", auth_enable = true}) +o:depends({type = "v2ray", v2ray_protocol = "http", auth_enable = true}) +o:depends({type = "v2ray", v2ray_protocol = "socks", socks_ver = "5", 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:depends({type = "v2ray", v2ray_protocol = "shadowsocks"}) + +o = s:option(Flag, "uot", translate("UDP over TCP")) +o.description = translate("Enable the SUoT protocol, requires server support.") +o.rmempty = true +o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"}) +o.default = "0" + +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") + +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") + + +-- [[ Hysteria2 ]]-- +o = s:option(Value, "hy2_auth", translate("Users Authentication")) +o:depends("type", "hysteria") +o.rmempty = false + +o = s:option(ListValue, "transport_protocol", translate("Protocol")) +o:depends("type", "hysteria") +o:value("udp", translate("udp")) +o.default = "udp" +o.rmempty = true + +o = s:option(Flag, "port_hopping", translate("Enable Port Hopping")) +o:depends("type", "hysteria") +o.rmempty = true +o.default = "0" + +o = s:option(Value, "hopinterval", translate("Port Hopping Interval(Unit:Second)")) +o:depends({type = "hysteria", port_hopping = true}) +o.datatype = "uinteger" +o.rmempty = true +o.default = "30" + +o = s:option(Value, "port_range", translate("Port Range")) +o:depends({type = "hysteria", port_hopping = true}) +o.rmempty = false + +o = s:option(Flag, "lazy_mode", translate("Enable Lazy Mode")) +o:depends("type", "hysteria") +o.rmempty = true +o.default = "0" + +o = s:option(Flag, "flag_obfs", translate("Enable Obfuscation")) +o:depends("type", "hysteria") +o.rmempty = true +o.default = "0" + +o = s:option(Value, "obfs_type", translate("Obfuscation Type")) +o:depends({type = "hysteria", flag_obfs = "1"}) +o.rmempty = true +o.default = "salamander" + +o = s:option(Value, "salamander", translate("Obfuscation Password")) +o:depends({type = "hysteria", flag_obfs = "1"}) +o.rmempty = true +o.default = "cry_me_a_r1ver" + +o = s:option(Flag, "flag_quicparam", translate("Hysterir QUIC parameters")) +o:depends("type", "hysteria") +o.rmempty = true +o.default = "0" + +--[[Hysteria2 QUIC parameters setting]] +o = s:option(Value, "initstreamreceivewindow", translate("QUIC initStreamReceiveWindow")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.datatype = "uinteger" +o.rmempty = true +o.default = "8388608" + +o = s:option(Value, "maxstreamseceivewindow", translate("QUIC maxStreamReceiveWindow")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.datatype = "uinteger" +o.rmempty = true +o.default = "8388608" + +o = s:option(Value, "initconnreceivewindow", translate("QUIC initConnReceiveWindow")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.datatype = "uinteger" +o.rmempty = true +o.default = "20971520" + +o = s:option(Value, "maxconnreceivewindow", translate("QUIC maxConnReceiveWindow")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.datatype = "uinteger" +o.rmempty = true +o.default = "20971520" + +o = s:option(Value, "maxidletimeout", translate("QUIC maxIdleTimeout(Unit:second)")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.rmempty = true +o.datatype = "uinteger" +o.default = "30" + +o = s:option(Value, "keepaliveperiod", translate("The keep-alive period.(Unit:second)")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.rmempty = true +o.datatype = "uinteger" +o.default = "10" + +o = s:option(Flag, "disablepathmtudiscovery", translate("Disable Path MTU discovery")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.rmempty = true +o.default = false + + +--[[ Shadow-TLS Options ]] +o = s:option(ListValue, "shadowtls_protocol", translate("shadowTLS protocol Version")) +o:depends("type", "shadowtls") +o:value("v3", translate("Enable V3 protocol.")) +o:value("v2", translate("Enable V2 protocol.")) +o.default = "v3" +o.rmempty = true + +o = s:option(Flag, "strict", translate("TLS 1.3 Strict mode")) +o:depends("type", "shadowtls") +o.default = "1" +o.rmempty = false + +o = s:option(Flag, "fastopen", translate("TCP Fast Open")) +o:depends("type", "shadowtls") +o.default = "0" +o.rmempty = false + +o = s:option(Flag, "disable_nodelay", translate("Disable TCP No_delay")) +o:depends("type", "shadowtls") +o.default = "0" +o.rmempty = true + +o = s:option(Value, "shadowtls_sni", translate("shadow-TLS SNI")) +o:depends("type", "shadowtls") +o.datatype = "host" +o.rmempty = true +o.default = "" + +--[[ add a ListValue for Choose chain type,sslocal or vmess ]] +o = s:option(ListValue, "chain_type", translate("Shadow-TLS ChainPoxy type")) +o:depends("type", "shadowtls") +if is_finded("sslocal") then + o:value("sslocal", translate("Shadowsocks-rust Version")) +end +if is_finded("xray") or is_finded("v2ray") then + o:value("vmess", translate("Vmess Protocol")) +end +o.default = "sslocal" +o.rmempty = false + +o = s:option(Value, "sslocal_password",translate("Shadowsocks password")) +o:depends({type = "shadowtls", chain_type = "sslocal"}) +o.rmempty = true + +o = s:option(ListValue, "sslocal_method", translate("Encrypt Method")) +o:depends({type = "shadowtls", chain_type = "sslocal"}) +for _, v in ipairs(encrypt_methods_ss) do + o:value(v) +end + +o = s:option(Value, "vmess_uuid", translate("Vmess UUID")) +o:depends({type = "shadowtls", chain_type = "vmess"}) +o.rmempty = false +o.default = uuid + +o = s:option(ListValue, "vmess_method", translate("Encrypt Method")) +o:depends({type = "shadowtls", chain_type = "vmess"}) +for _, v in ipairs(securitys) do + o:value(v, v:lower()) +end +o.rmempty = true +o.default="auto" + +-- [[ TUIC ]] +-- TuicNameId +o = s:option(Value, "tuic_uuid", translate("TUIC User UUID")) +o.rmempty = true +o.default = uuid +o:depends("type", "tuic") + +--Tuic IP +o = s:option(Value, "tuic_ip", translate("TUIC Server IP Address")) +o.rmempty = true +o.datatype = "ip4addr" +o.default = "" +o:depends("type", "tuic") + +-- Tuic Password +o = s:option(Value, "tuic_passwd", translate("TUIC User Password")) +o.rmempty = true +o.default = "" +o:depends("type", "tuic") + + +o = s:option(ListValue, "udp_relay_mode", translate("UDP relay mode")) +o:depends("type", "tuic") +o:value("native", translate("native UDP characteristics")) +o:value("quic", translate("lossless UDP relay using QUIC streams")) +o.default = "native" +o.rmempty = true + +o = s:option(ListValue, "congestion_control", translate("Congestion control algorithm")) +o:depends("type", "tuic") +o:value("bbr", translate("BBR")) +o:value("cubic", translate("CUBIC")) +o:value("new_reno", translate("New Reno")) +o.default = "cubic" +o.rmempty = true + +o = s:option(Value, "heartbeat", translate("Heartbeat interval(second)")) +o:depends("type", "tuic") +o.datatype = "uinteger" +o.default = "3" +o.rmempty = true + +o = s:option(Value, "timeout", translate("Timeout for establishing a connection to server(second)")) +o:depends("type", "tuic") +o.datatype = "uinteger" +o.default = "8" +o.rmempty = true + +o = s:option(Value, "gc_interval", translate("Garbage collection interval(second)")) +o:depends("type", "tuic") +o.datatype = "uinteger" +o.default = "3" +o.rmempty = true + +o = s:option(Value, "gc_lifetime", translate("Garbage collection lifetime(second)")) +o:depends("type", "tuic") +o.datatype = "uinteger" +o.default = "15" +o.rmempty = true + +o = s:option(Value, "send_window", translate("TUIC send window")) +o:depends("type", "tuic") +o.datatype = "uinteger" +o.default = 20971520 +o.rmempty = true + +o = s:option(Value, "receive_window", translate("TUIC receive window")) +o:depends("type", "tuic") +o.datatype = "uinteger" +o.default = 10485760 +o.rmempty = true + +o = s:option(Flag, "disable_sni", translate("Disable SNI")) +o:depends("type", "tuic") +o.default = "0" +o.rmempty = true + +o = s:option(Flag, "zero_rtt_handshake", translate("Enable 0-RTT QUIC handshake")) +o:depends("type", "tuic") +o.default = "0" +o.rmempty = true + +-- Tuic settings for the local inbound socks5 server +o = s:option(Flag, "tuic_dual_stack", translate("Dual-stack Listening Socket")) +o:depends("type", "tuic") +o.default = "0" +o.rmempty = true + +o = s:option(Value, "tuic_max_package_size", translate("Maximum packet size the socks5 server can receive from external")) +o:depends("type", "tuic") +o.datatype = "uinteger" +o.default = 1500 +o.rmempty = true + +-- AlterId +o = s:option(Value, "alter_id", translate("AlterId")) +o.datatype = "port" +o.default = 16 +o.rmempty = true +o:depends({type = "v2ray", v2ray_protocol = "vmess"}) + +-- 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"}) + +-- SOCKS Version +o = s:option(ListValue, "socks_ver", translate("Socks Version")) +o:value("4", "Socks4") +o:value("4a", "Socks4A") +o:value("5", "Socks5") +o.rmempty = true +o.default = "5" +o:depends({type = "v2ray", v2ray_protocol = "socks"}) + +-- 传输协议 +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", v2ray_protocol = "vless"}) +o:depends({type = "v2ray", v2ray_protocol = "vmess"}) +o:depends({type = "v2ray", v2ray_protocol = "trojan"}) +o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"}) +o:depends({type = "v2ray", v2ray_protocol = "socks"}) +o:depends({type = "v2ray", v2ray_protocol = "http"}) + +-- [[ 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 + +if is_finded("v2ray") then + -- WS前置数据 + o = s:option(Value, "ws_ed", translate("Max Early Data")) + o:depends("ws_ed_enable", true) + o.datatype = "uinteger" + o:value("2048") + o.rmempty = true + + -- WS前置数据标头 + o = s:option(Value, "ws_ed_header", translate("Early Data Header Name")) + o:depends("ws_ed_enable", true) + o:value("Sec-WebSocket-Protocol") + o.rmempty = true +end + +-- [[ 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("gRPC Service Name")) +o:depends("transport", "grpc") +o.rmempty = true + +if is_finded("xray") then + -- gPRC模式 + o = s:option(ListValue, "grpc_mode", translate("gRPC Mode")) + o:depends("transport", "grpc") + o:value("gun", translate("Gun")) + o:value("multi", translate("Multi")) + o.rmempty = true +end + +if is_finded("xray") then + -- 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 +end + +-- [[ 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:depends({type = "v2ray", v2ray_protocol = "wireguard"}) +-- 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(Default:Mbps)")) +o.datatype = "uinteger" +o:depends("transport", "kcp") +o:depends("type", "hysteria") +o.default = 5 +o.rmempty = true + +o = s:option(Value, "downlink_capacity", translate("Downlink Capacity(Default:Mbps)")) +o.datatype = "uinteger" +o:depends("transport", "kcp") +o:depends("type", "hysteria") +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("transport", "kcp") +o.rmempty = true + +o = s:option(Flag, "congestion", translate("Congestion")) +o:depends("transport", "kcp") +o.rmempty = true + +-- [[ WireGuard 部分 ]]-- +o = s:option(DynamicList, "local_addresses", translate("Local addresses")) +o.datatype = "cidr" +o:depends({type = "v2ray", v2ray_protocol = "wireguard"}) +o.rmempty = true + +o = s:option(Value, "private_key", translate("Private key")) +o:depends({type = "v2ray", v2ray_protocol = "wireguard"}) +o.password = true +o.rmempty = true + +o = s:option(Value, "peer_pubkey", translate("Peer public key")) +o:depends({type = "v2ray", v2ray_protocol = "wireguard"}) +o.rmempty = true + +o = s:option(Value, "preshared_key", translate("Pre-shared key")) +o:depends({type = "v2ray", v2ray_protocol = "wireguard"}) +o.password = true +o.rmempty = true + +-- [[ TLS ]]-- +o = s:option(Flag, "tls", translate("TLS")) +o.rmempty = true +o.default = "0" +o:depends({type = "v2ray", v2ray_protocol = "vless", reality = false}) +o:depends({type = "v2ray", v2ray_protocol = "vmess", reality = false}) +o:depends({type = "v2ray", v2ray_protocol = "trojan", reality = false}) +o:depends({type = "v2ray", v2ray_protocol = "shadowsocks", reality = false}) +o:depends({type = "v2ray", v2ray_protocol = "socks", socks_ver = "5", reality = false}) +o:depends({type = "v2ray", v2ray_protocol = "http", reality = false}) +o:depends("type", "trojan") +o:depends("type", "hysteria") + +-- [[ TLS部分 ]] -- +o = s:option(Flag, "tls_sessionTicket", translate("Session Ticket")) +o:depends({type = "trojan", tls = true}) +o.default = "0" + +if is_finded("xray") then + -- [[ REALITY ]] + o = s:option(Flag, "reality", translate("REALITY")) + o.rmempty = true + o.default = "0" + o:depends({type = "v2ray", v2ray_protocol = "vless", tls = false}) + + o = s:option(Value, "reality_publickey", translate("Public key")) + o.rmempty = true + o:depends({type = "v2ray", v2ray_protocol = "vless", reality = true}) + + o = s:option(Value, "reality_shortid", translate("Short ID")) + o.rmempty = true + o:depends({type = "v2ray", v2ray_protocol = "vless", reality = true}) + + o = s:option(Value, "reality_spiderx", translate("spiderX")) + o.rmempty = true + o:depends({type = "v2ray", v2ray_protocol = "vless", reality = true}) + + -- [[ XTLS ]]-- + o = s:option(Value, "tls_flow", translate("Flow")) + for _, v in ipairs(tls_flows) do + o:value(v, translate(v)) + end + o.rmempty = true + o:depends({type = "v2ray", v2ray_protocol = "vless", transport = "tcp", tls = true}) + o:depends({type = "v2ray", v2ray_protocol = "vless", transport = "tcp", reality = true}) + + -- [[ uTLS ]]-- + o = s:option(Value, "fingerprint", translate("Finger Print")) + o:value("", translate("disable")) + o:value("chrome", translate("chrome")) + o:value("firefox", translate("firefox")) + o:value("safari", translate("safari")) + o:value("ios", translate("ios")) + o:value("android", translate("android")) + o:value("edge", translate("edge")) + o:value("360", translate("360")) + o:value("qq", translate("qq")) + o:value("random", translate("random")) + o:value("randomized", translate("randomized")) + o:depends({type = "v2ray", tls = true}) + o:depends({type = "v2ray", reality = true}) +end + +o = s:option(Value, "tls_host", translate("TLS Host")) +o.datatype = "hostname" +o:depends("tls", true) +o:depends("reality", true) +o.rmempty = true + +o = s:option(DynamicList, "tls_alpn", translate("TLS ALPN")) +o:depends("tls", true) +o:depends("type", "tuic") +o:depends("type", "hysteria") +o.rmempty = true + +-- [[ allowInsecure ]]-- +o = s:option(Flag, "insecure", translate("allowInsecure")) +o.rmempty = false +o:depends("tls", true) +o:depends("type", "hysteria") +o.description = translate("If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates.") + +-- [[ Hysteria2 TLS pinSHA256 ]] -- +o = s:option(Value, "pinsha256", translate("Certificate fingerprint")) +o:depends({type = "hysteria", insecure = true }) +o.rmempty = true + +-- [[ Mux ]]-- +o = s:option(Flag, "mux", translate("Mux")) +o.rmempty = false +o:depends({type = "v2ray", v2ray_protocol = "vless"}) +o:depends({type = "v2ray", v2ray_protocol = "vmess"}) +o:depends({type = "v2ray", v2ray_protocol = "trojan"}) +o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"}) +o:depends({type = "v2ray", v2ray_protocol = "socks"}) +o:depends({type = "v2ray", v2ray_protocol = "http"}) + +o = s:option(Value, "concurrency", translate("Concurrency")) +o.datatype = "uinteger" +o.rmempty = true +o.default = "4" +o:depends("mux", "1") +o:depends("type", "naiveproxy") + +-- [[ Cert ]]-- +o = s:option(Flag, "certificate", translate("Self-signed Certificate")) +o.rmempty = true +o.default = "0" +o:depends("type", "tuic") +o:depends({type = "hysteria", insecure = false}) +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.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:depends("type", "hysteria") + +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 + o = s:option(Flag, "kcp_enable", translate("KcpTun Enable")) + o.rmempty = true + o.default = "0" + o:depends("type", "ssr") + o: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 new file mode 100644 index 00000000..8864d0be --- /dev/null +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua @@ -0,0 +1,168 @@ +-- 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 +local uci = luci.model.uci.cursor() + +local validation = require "luci.cbi.datatypes" +local function is_finded(e) + return luci.sys.exec('type -t -p "%s"' % e) ~= "" and true or false +end + +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') == '1' 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 DNS2TCP query")) +o:value("2", translate("Use DNS2SOCKS query and cache")) +if is_finded("mosdns") then +o:value("3", translate("Use MOSDNS query (Not Support Oversea Mode)")) +end +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 = "ip4addrport" + +o = s:option(ListValue, "tunnel_forward_mosdns", translate("Anti-pollution DNS Server")) +o:value("tcp://8.8.4.4:53,tcp://8.8.8.8:53", translate("Google Public DNS")) +o:value("tcp://208.67.222.222:53,tcp://208.67.220.220:53", translate("OpenDNS")) +o:value("tcp://209.244.0.3:53,tcp://209.244.0.4:53", translate("Level 3 Public DNS-1 (209.244.0.3-4)")) +o:value("tcp://4.2.2.1:53,tcp://4.2.2.2:53", translate("Level 3 Public DNS-2 (4.2.2.1-2)")) +o:value("tcp://4.2.2.3:53,tcp://4.2.2.4:53", translate("Level 3 Public DNS-3 (4.2.2.3-4)")) +o:value("tcp://1.1.1.1:53,tcp://1.0.0.1:53", translate("Cloudflare DNS")) +o:depends("pdnsd_enable", "3") +o.description = translate("Custom DNS Server for mosdns") + +o = s:option(Flag, "mosdns_ipv6", translate("Disable IPv6 in MOSDNS query mode")) +o:depends("pdnsd_enable", "3") +o.rmempty = false +o.default = "0" + +if is_finded("chinadns-ng") then + o = s:option(Value, "chinadns_forward", translate("Domestic DNS Server")) + o:value("", translate("Disable ChinaDNS-NG")) + o:value("wan", translate("Use DNS from WAN")) + o:value("wan_114", translate("Use DNS from WAN and 114DNS")) + o:value("114.114.114.114:53", translate("Nanjing Xinfeng 114DNS (114.114.114.114)")) + o:value("119.29.29.29:53", translate("DNSPod Public DNS (119.29.29.29)")) + o:value("223.5.5.5:53", translate("AliYun Public DNS (223.5.5.5)")) + o:value("180.76.76.76:53", translate("Baidu Public DNS (180.76.76.76)")) + o:value("101.226.4.6:53", translate("360 Security DNS (China Telecom) (101.226.4.6)")) + o:value("123.125.81.6:53", translate("360 Security DNS (China Unicom) (123.125.81.6)")) + o:value("1.2.4.8:53", translate("CNNIC SDNS (1.2.4.8)")) + o:depends({pdnsd_enable = "1", run_mode = "router"}) + o:depends({pdnsd_enable = "2", run_mode = "router"}) + o.description = translate("Custom DNS Server format as IP:PORT (default: disabled)") + o.validate = function(self, value, section) + if (section and value) then + if value == "wan" or value == "wan_114" then + return value + end + + if validation.ip4addrport(value) then + return value + end + + return nil, translate("Expecting: %s"):format(translate("valid address:port")) + end + + return value + end +end + +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 new file mode 100644 index 00000000..070fb5b9 --- /dev/null +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua @@ -0,0 +1,143 @@ +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 new file mode 100644 index 00000000..fdf9e59f --- /dev/null +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua @@ -0,0 +1,20 @@ +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 new file mode 100644 index 00000000..f9ac268e --- /dev/null +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua @@ -0,0 +1,154 @@ +-- 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", + -- aead 2022 + "2022-blake3-aes-128-gcm", + "2022-blake3-aes-256-gcm", + "2022-blake3-chacha20-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 new file mode 100644 index 00000000..6ef44c08 --- /dev/null +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua @@ -0,0 +1,144 @@ +-- 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", + -- aead 2022 + "2022-blake3-aes-128-gcm", + "2022-blake3-aes-256-gcm", + "2022-blake3-chacha20-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 new file mode 100644 index 00000000..b2cb81bd --- /dev/null +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua @@ -0,0 +1,151 @@ +-- 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 Servers")) +o.rawhtml = true +o.template = "shadowsocksr/subscribe" + +o = s:option(Button, "delete", translate("Delete All Subscribe Servers")) +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 new file mode 100644 index 00000000..a095d44e --- /dev/null +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua @@ -0,0 +1,190 @@ +-- 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/dns2tcp") or Process_list:find("ssrplus/bin/mosdns") 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 + +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/certupload.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/certupload.htm new file mode 100644 index 00000000..f34f04d7 --- /dev/null +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/certupload.htm @@ -0,0 +1,4 @@ +<%+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 new file mode 100644 index 00000000..5f6a673a --- /dev/null +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/check.htm @@ -0,0 +1,29 @@ +<%+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 new file mode 100644 index 00000000..56ee0ab2 --- /dev/null +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/checkport.htm @@ -0,0 +1,25 @@ +<%+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 new file mode 100644 index 00000000..5b396f7c --- /dev/null +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/ping.htm @@ -0,0 +1,3 @@ +<%+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 new file mode 100644 index 00000000..da89fd53 --- /dev/null +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/refresh.htm @@ -0,0 +1,37 @@ +<%+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 new file mode 100644 index 00000000..1882ac56 --- /dev/null +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/reset.htm @@ -0,0 +1,25 @@ +<%+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 new file mode 100644 index 00000000..259cb7ff --- /dev/null +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm @@ -0,0 +1,145 @@ +<%# + 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 new file mode 100644 index 00000000..7b7b691f --- /dev/null +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/socket.htm @@ -0,0 +1,6 @@ +<%+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 new file mode 100644 index 00000000..5eecbee6 --- /dev/null +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm @@ -0,0 +1,371 @@ +<%+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 new file mode 100644 index 00000000..58bf67f2 --- /dev/null +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/status.htm @@ -0,0 +1,22 @@ + + +
+

+ <%:Collecting data...%> +

+
diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/subscribe.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/subscribe.htm new file mode 100644 index 00000000..90e86dd3 --- /dev/null +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/subscribe.htm @@ -0,0 +1,18 @@ +<%+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 new file mode 100644 index 00000000..f498ed9b --- /dev/null +++ b/luci-app-ssr-plus/po/zh-cn/ssr-plus.po @@ -0,0 +1,1003 @@ +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 "Enable the SUoT protocol, requires server support." +msgstr "启用 SUoT 协议,需要服务端支持。" + +msgid "Bloom Filter" +msgstr "布隆过滤器" + +msgid "VLESS Encryption" +msgstr "VLESS 加密" + +msgid "Socks Version" +msgstr "Socks 版本" + +msgid "Flow" +msgstr "流控(Flow)" + +msgid "Transport" +msgstr "传输协议" + +msgid "Protocol" +msgstr "传输协议" + +msgid "TLS Host" +msgstr "TLS 主机名" + +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 "Authentication type" +msgstr "验证类型" + +msgid "Users Authentication" +msgstr "用户验证" + +msgid "NOTE: If the server uses the userpass authentication, the format must be username:password." +msgstr "注意: 如果服务器使用 userpass 验证,格式必须是 username:password。" + +msgid "Enable Port Hopping" +msgstr "启用端口跃迁" + +msgid "Port Range" +msgstr "端口范围值" + +msgid "Port Hopping Interval(Unit:Second)" +msgstr "端口跃迁间隔(单位:秒)" + +msgid "Enable Lazy Mode" +msgstr "启用懒狗模式" + +msgid "Enable Obfuscation" +msgstr "启用混淆功能" + +msgid "Obfuscation Type" +msgstr "混淆类型" + +msgid "Obfuscation Password" +msgstr "混淆密码" + +msgid "Hysterir QUIC parameters" +msgstr "QUIC参数" + +msgid "QUIC initStreamReceiveWindow" +msgstr "QUIC初始流接收窗口大小。" + +msgid "QUIC maxStreamReceiveWindow" +msgstr "QUIC最大的流接收窗口大小" + +msgid "QUIC initConnReceiveWindow" +msgstr "QUIC初始的连接接收窗口大小" + +msgid "QUIC maxConnReceiveWindow" +msgstr "QUIC最大的连接接收窗口大小" + +msgid "QUIC maxIdleTimeout(Unit:second)" +msgstr "QUIC最长空闲超时时间(单位:秒)" + +msgid "The keep-alive period.(Unit:second)" +msgstr "心跳包发送间隔(单位:秒)" + + +msgid "Certificate fingerprint" +msgstr "证书指纹" + +msgid "shadowTLS protocol Version" +msgstr "ShadowTLS协议版本" + +msgid "TLS 1.3 Strict mode" +msgstr "TLS 1.3 限定模式" + +msgid "Disable TCP No_delay" +msgstr "禁用TCP无延迟" + +msgid "shadow-TLS SNI" +msgstr "服务器名称指示" + +msgid "Shadow-TLS ChainPoxy type" +msgstr "代理链类型" + +msgid "Shadowsocks-rust Version" +msgstr "shadowsocks rust版本" + +msgid "Vmess Protocol" +msgstr "VMESS协议" + +msgid "Shadowsocks password" +msgstr "shadowsocks密码" + +msgid "QUIC connection receive window" +msgstr "QUIC 连接接收窗口" + +msgid "QUIC stream receive window" +msgstr "QUIC 流接收窗口" + + +msgid "Lazy Start" +msgstr "延迟启动" + +msgid "Disable Path MTU discovery" +msgstr "禁用 MTU 探测" + +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 "GFW 列表更新 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 "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 DNS2TCP query" +msgstr "使用 DNS2TCP 查询" + +msgid "Use DNS2SOCKS query and cache" +msgstr "使用 DNS2SOCKS 查询并缓存" + +msgid "Use MOSDNS query (Not Support Oversea Mode)" +msgstr "使用 MOSDNS 查询 (不支持海外用户回国模式)" + +msgid "Disable IPv6 in MOSDNS query mode" +msgstr "禁止 MOSDNS 返回 IPv6 记录" + +msgid "DNS Query Mode For Shunt Mode" +msgstr "分流模式下的 DNS 查询模式" + +msgid "Anti-pollution DNS Server For Shunt Mode" +msgstr "分流模式下的访问国外域名 DNS 服务器" + +msgid "Use MOSDNS query" +msgstr "使用 MOSDNS 查询" + +msgid "Custom DNS Server for mosdns" +msgstr "MOSDNS 自定义 DNS 服务器" + +msgid "Disable IPv6 In MOSDNS Query Mode (Shunt Mode)" +msgstr "禁止 MOSDNS 返回 IPv6 记录 (分流模式)" + +msgid "DNS Server IP:Port" +msgstr "DNS 服务器 IP:Port" + +msgid "Domestic DNS Server" +msgstr "国内 DNS 服务器" + +msgid "Use DNS from WAN" +msgstr "使用 WAN 下发的 DNS" + +msgid "Use DNS from WAN and 114DNS" +msgstr "使用 WAN 下发的 DNS 和 114DNS" + +msgid "Custom DNS Server format as IP:PORT (default: disabled)" +msgstr "格式为 IP:PORT(默认:禁用)" + +msgid "Update time (every day)" +msgstr "更新时间(每天)" + +msgid "Auto Update Server subscription, GFW list and CHN route" +msgstr "自动更新服务器订阅、GFW 列表和中国大陆 IP 段" + +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 Servers" +msgstr "删除所有订阅服务器节点" + +msgid "Servers 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 Servers" +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 "HTTP Host" +msgstr "HTTP 主机名" + +msgid "HTTP Path" +msgstr "HTTP 路径" + +msgid "WebSocket Host" +msgstr "WebSocket 主机名" + +msgid "WebSocket Path" +msgstr "WebSocket 路径" + +msgid "Max Early Data" +msgstr "最大前置数据" + +msgid "Early Data Header Name" +msgstr "前置数据标头" + +msgid "HTTP/2 Host" +msgstr "HTTP/2 主机名" + +msgid "HTTP/2 Path" +msgstr "HTTP/2 路径" + +msgid "gRPC Service Name" +msgstr "gRPC 服务名称" + +msgid "gRPC Mode" +msgstr "gRPC 模式" + +msgid "Initial Windows Size" +msgstr "初始窗口大小" + +msgid "H2/gRPC Health Check" +msgstr "H2/gRPC 健康检查" + +msgid "H2 Read Idle Timeout" +msgstr "H2 读取空闲超时" + +msgid "gRPC Idle Timeout" +msgstr "gPRC 空闲超时" + +msgid "Health Check Timeout" +msgstr "健康检查超时" + +msgid "QUIC Security" +msgstr "QUIC 加密方式" + +msgid "QUIC Key" +msgstr "QUIC 密钥" + +msgid "VideoCall (SRTP)" +msgstr "视频通话(SRTP)" + +msgid "BitTorrent (uTP)" +msgstr "BT 下载(uTP)" + +msgid "WechatVideo" +msgstr "微信视频通话" + +msgid "DTLS 1.2" +msgstr "DTLS 1.2 数据包" + +msgid "MTU" +msgstr "最大传输单元" + +msgid "TTI" +msgstr "传输时间间隔" + +msgid "Uplink Capacity(Default:Mbps)" +msgstr "上行链路容量(默认:Mbps)" + +msgid "Downlink Capacity(Default:Mbps)" +msgstr "下行链路容量(默认:Mbps)" + +msgid "Read Buffer Size" +msgstr "读取缓冲区大小" + +msgid "Write Buffer Size" +msgstr "写入缓冲区大小" + +msgid "Congestion" +msgstr "拥塞控制" + +msgid "Local addresses" +msgstr "本地地址" + +msgid "Private key" +msgstr "私钥" + +msgid "Peer public key" +msgstr "节点公钥" + +msgid "Pre-shared key" +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 "Finger Print" +msgstr "指纹伪造" + +msgid "Reapply" +msgstr "重新应用" + +msgid "Apply" +msgstr "应用" + +msgid "Enable Netflix Mode" +msgstr "启用 Netflix 分流模式" + +msgid "TUIC User UUID" +msgstr "TUIC用户uuid" + +msgid "TUIC Server IP Address" +msgstr "TUIC 服务器IP地址" + +msgid "TUIC User Password" +msgstr "TUIC用户密钥" + +msgid "UDP relay mode" +msgstr "UDP中继模式" + +msgid "native UDP characteristics" +msgstr "原生UDP特性" + +msgid "lossless UDP relay using QUIC streams" +msgstr "使用 QUIC 流的无损 UDP 中继" + +msgid "Congestion control algorithm" +msgstr "拥塞控制算法" + +msgid "Heartbeat interval(second)" +msgstr "保活心跳包发送间隔(单位:秒)" + +msgid "Timeout for establishing a connection to server(second)" +msgstr "连接超时时间(单位:秒)" + +msgid "Garbage collection interval(second)" +msgstr "UDP数据包片残片清理间隔(单位:秒)" + +msgid "Garbage collection lifetime(second)" +msgstr "UDP数据包残片在服务器的保留时间(单位:秒)" + +msgid "Disable SNI" +msgstr "关闭SNI服务器名称指示" + +msgid "Enable 0-RTT QUIC handshake" +msgstr "客户端启用 0-RTT QUIC 连接握手" + +msgid "TUIC send window" +msgstr "发送窗口(无需确认即可发送的最大字节数:默认8Mb*2)" + +msgid "TUIC receive window" +msgstr "接收窗口(无需确认即可接收的最大字节数:默认8Mb)" + +msgid "Dual-stack Listening Socket" +msgstr "双栈Socket监听" + +msgid "Maximum packet size the socks5 server can receive from external" +msgstr "socks5服务器可以从外部接收的最大数据包大小(单位:字节)" + +msgid "Disable ChinaDNS-NG" +msgstr "直通模式(禁用ChinaDNS-NG)" diff --git a/luci-app-ssr-plus/po/zh_Hans b/luci-app-ssr-plus/po/zh_Hans new file mode 120000 index 00000000..41451e4a --- /dev/null +++ b/luci-app-ssr-plus/po/zh_Hans @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000..e69de29b diff --git a/luci-app-ssr-plus/root/etc/init.d/shadowsocksr b/luci-app-ssr-plus/root/etc/init.d/shadowsocksr new file mode 100755 index 00000000..2415b624 --- /dev/null +++ b/luci-app-ssr-plus/root/etc/init.d/shadowsocksr @@ -0,0 +1,1180 @@ +#!/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 + +chain_config_file= #generate shadowtls chain proxy config file +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 +china_dns_port="5333" #china_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 +tmp_tcp_local_port="306" #tcp socks 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=$(wget -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 + [ -n "$ip" ] || ip="$(uci_get_by_name $1 ip "ERROR")" + + local chinadns="$(uci_get_by_type global chinadns_forward)" + if [ -n "$chinadns" ] && [ "$ip" != "$host" ]; then + grep -q "$host" "$TMP_DNSMASQ_PATH/chinadns_fixed_server.conf" 2>"/dev/null" || \ + echo -e "address=/$host/$ip" >> "$TMP_DNSMASQ_PATH/chinadns_fixed_server.conf" + fi + + echo $ip +} + +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 + } + ulimit -n 1000000 + ${file_func:-echolog " - ${ln_name}"} "$@" >/dev/null 2>&1 & +} + +add_dns_into_ipset() { + case "$1" in + gfw) ipset add gfwlist ${2%:*} 2>/dev/null ;; + oversea) ipset add oversea ${2%:*} 2>/dev/null ;; + *) ipset add ss_spec_wan_ac ${2%:*} nomatch 2>/dev/null ;; + esac +} + +start_dns() { + local ssrplus_dns="$(uci_get_by_type global pdnsd_enable 0)" + local dnsserver="$(uci_get_by_type global tunnel_forward 8.8.4.4:53)" + local run_mode="$(uci_get_by_type global run_mode)" + + if [ "$ssrplus_dns" != "0" ]; then + if [ -n "$dnsserver" ]; then + add_dns_into_ipset $run_mode $dnsserver + fi + case "$ssrplus_dns" in + 1) + ln_start_bin $(first_type dns2tcp) dns2tcp -L 127.0.0.1#$dns_port -R ${dnsserver/:/#} + 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 127.0.0.1:$dns_port -q + pdnsd_enable_flag=2 + ;; + 3) + local mosdns_ipv6="$(uci_get_by_type global mosdns_ipv6)" + local mosdns_dnsserver="$(uci_get_by_type global tunnel_forward_mosdns)" + output=$(for i in $(echo $mosdns_dnsserver | sed "s/,/ /g"); do + dnsserver=${i%:*} + dnsserver=${i##*/} + add_dns_into_ipset $run_mode $dnsserver + echo " - addr: $i" + echo " enable_pipeline: true" + done) + + awk -v line=14 -v text="$output" 'NR == line+1 {print text} 1' /etc/ssrplus/mosdns-config.yaml | sed "s/DNS_PORT/$dns_port/g" > $TMP_PATH/mosdns-config.yaml + if [ "$mosdns_ipv6" == "0" ]; then + sed -i "s/DNS_MODE/main_sequence_with_IPv6/g" $TMP_PATH/mosdns-config.yaml + else + sed -i "s/DNS_MODE/main_sequence_disable_IPv6/g" $TMP_PATH/mosdns-config.yaml + fi + ln_start_bin $(first_type mosdns) mosdns start -c $TMP_PATH/mosdns-config.yaml + pdnsd_enable_flag=3 + ;; + esac + + if [ "$run_mode" = "router" ]; then + local chinadns="$(uci_get_by_type global chinadns_forward)" + if [ -n "$chinadns" ]; then + local wandns="$(ifstatus wan | jsonfilter -e '@["dns-server"][0]' || echo "119.29.29.29")" + case "$chinadns" in + "wan") chinadns="$wandns" ;; + "wan_114") chinadns="$wandns,114.114.114.114" ;; + esac + + ln_start_bin $(first_type chinadns-ng) chinadns-ng -l $china_dns_port -4 china -p 3 -c ${chinadns/:/#} -t 127.0.0.1#$dns_port -N -f -r + + cat <<-EOF >> "$TMP_DNSMASQ_PATH/chinadns_fixed_server.conf" + no-poll + no-resolv + server=127.0.0.1#$china_dns_port + EOF + fi + fi + fi +} + +gen_service_file() { #1-server.type 2-cfgname 3-file_path + local fastopen + if [ $(uci_get_by_name $2 fast_open) == "1" ]; then + fastopen="true" + else + fastopen="false" + fi + case $1 in + ssr) + 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 + ;; + ss) + 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 + ;; + esac +} + +get_name() { + case "$1" in + ss) echo "Shadowsocks" ;; + ssr) echo "ShadowsocksR" ;; + esac +} + +gen_config_file() { #server1 type2 code3 local_port4 socks_port5 chain6 threads5 + case "$3" in + 1) + config_file=$tcp_config_file + chain_config_file=$(echo ${config_file}|sed 's/ssrplus\//ssrplus\/chain-/') + ;; + 2) + config_file=$udp_config_file + chain_config_file=$(echo ${config_file}|sed 's/ssrplus\//ssrplus\/chain-/') + ;; + 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 + chain_config_file=$(echo ${config_file}|sed 's/ssrplus\//ssrplus\/chain-/') + ;; + 4) + local ss_protocol="socks" + config_file=$local_config_file + chain_config_file=$(echo ${config_file}|sed 's/ssrplus\//ssrplus\/chain-/') + ;; + 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 >$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 + ;; + hysteria) + lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 $5 >$config_file + ;; + tuic) + case "$3" in + 1|2|4) + lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 >$config_file + ;; + 3) + [ -z "$6" ] && lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 >$shunt_dns_config_file || lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 >$config_file + ;; + esac + ;; + shadowtls) + case "$3" in + 1|2|4) + [ -z "$6" ] && lua /usr/share/shadowsocksr/gen_config.lua $1 $type $4 >$chain_config_file || lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 $5 $6 >$config_file + ;; + 3) + lua /usr/share/shadowsocksr/gen_config.lua $1 $type $4 >$chain_config_file + lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 $5 $6 >$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 #>/dev/null > 2>&1 +} + +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 run -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="" + ;; + hysteria) + gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_port + ln_start_bin $(first_type hysteria) hysteria client --config $udp_config_file + echolog "UDP TPROXY Relay:$($(first_type "hysteria") version | awk '{print $1,$3}') Started!" + ;; + tuic) + # FIXME: ipt2socks cannot handle udp reply from tuic + # 20230726 uncomment following 4 lines + gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_local_port + ln_start_bin $(first_type tuic-client) tuic-client --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:tuic-client $($(first_type tuic-client) --version) Started!" + echolog "TUIC UDP TPROXY Relay not supported!" + #redir_udp=0 + #ARG_UDP="" + ;; + shadowtls) + gen_config_file $UDP_RELAY_SERVER $type 2 ${tmp_udp_local_port} + gen_config_file $UDP_RELAY_SERVER $type 2 ${tmp_udp_local_port} 0 chain + ln_start_bin $(first_type shadow-tls) shadow-tls config --config $chain_config_file + local chain_type=$(uci_get_by_name $UDP_RELAY_SERVER chain_type) + case ${chain_type} in + vmess) + ln_start_bin $(first_type xray v2ray) v2ray run -c $udp_config_file + echolog "UDP TPROXY Relay:shadow-tls chain-to $($(first_type xray) --version) Started!" + ;; + sslocal) + ln_start_bin $(first_type sslocal) sslocal -c $udp_config_file + echolog "UDP TPROXY Relay:shadow-tls chain-to $($(first_type sslocal) --version) Started!" + ;; + esac + ;; + 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 +} + +shunt_dns_command() { + local shunt_dns_mode="$(uci_get_by_type global shunt_dns_mode)" + local shunt_dnsserver="$(uci_get_by_type global shunt_dnsserver)" + case "$shunt_dns_mode" in + 1) + ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_port $shunt_dnsserver 127.0.0.1:$tmp_shunt_dns_port -q + ;; + 2) + local shunt_mosdns_ipv6="$(uci_get_by_type global shunt_mosdns_ipv6)" + local shunt_mosdns_dnsserver="$(uci_get_by_type global shunt_mosdns_dnsserver)" + output=$(for i in $(echo $shunt_mosdns_dnsserver | sed "s/,/ /g"); do + echo " - addr: $i" + echo " socks5: \"127.0.0.1:$tmp_port\"" + echo " enable_pipeline: true" + done) + awk -v line=14 -v text="$output" 'NR == line+1 {print text} 1' /etc/ssrplus/mosdns-config.yaml | sed "s/DNS_PORT/$tmp_shunt_dns_port/g" > $TMP_PATH/mosdns-config-shunt.yaml + + if [ "$shunt_mosdns_ipv6" == "0" ]; then + sed -i "s/DNS_MODE/main_sequence_with_IPv6/g" $TMP_PATH/mosdns-config-shunt.yaml + else + sed -i "s/DNS_MODE/main_sequence_disable_IPv6/g" $TMP_PATH/mosdns-config-shunt.yaml + fi + ln_start_bin $(first_type mosdns) mosdns start -c $TMP_PATH/mosdns-config-shunt.yaml + ;; + 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 + shunt_dns_command + echolog "shunt:$(get_name $type) Started!" + ;; + v2ray) + local tmp_port=${tmp_local_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 run -config $shunt_config_file + shunt_dns_command + 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 + shunt_dns_command + 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 + shunt_dns_command + echolog "shunt:$($(first_type "naive") --version 2>&1 | head -1) Started!" + redir_udp=0 + ;; + hysteria) + if [ -n "$tmp_local_port" ]; then + local tmp_port=$tmp_local_port + gen_config_file $SHUNT_SERVER $type 3 $tmp_shunt_port + else + local tmp_port=$tmp_shunt_local_port + gen_config_file $SHUNT_SERVER $type 3 $tmp_shunt_port $tmp_port + fi + ln_start_bin $(first_type hysteria) hysteria client --config $shunt_config_file + shunt_dns_command + echolog "shunt:$($(first_type hysteria) version | awk '{print $1,$3}') Started!" + ;; + tuic) + local chain_shunt_port="30${tmp_shunt_port}" + gen_config_file $SHUNT_SERVER $type 3 $chain_shunt_port 0 chain #make a tuic socks:30303, make a ipt2socks redir:303 + ln_start_bin $(first_type tuic-client) tuic-client --config $shunt_config_file + ln_start_bin $(first_type ipt2socks) ipt2socks -R -b 0.0.0.0 -4 -s 127.0.0.1 -p $chain_shunt_port -l $tmp_shunt_port + + [ -n "$tmp_local_port" ] && tmp_port=$tmp_local_port || tmp_port=$tmp_shunt_local_port + gen_config_file $SHUNT_SERVER $type 3 $tmp_port # make a tuic socks :304 + ln_start_bin $(first_type tuic-client) tuic-client --config $shunt_dns_config_file + shunt_dns_command + echolog "Netflix Separated Shunt Server:tuic-client $($(first_type tuic-client) --version) Started!" + # FIXME: ipt2socks cannot handle udp reply from tuic + #redir_udp=0 + ;; + shadowtls) + [ -n "$tmp_local_port" ] && tmp_port=$tmp_local_port || tmp_port=$tmp_shunt_local_port + gen_config_file $SHUNT_SERVER $type 3 "10${tmp_shunt_port}" $tmp_port chain/$tmp_shunt_port #make a redir:303 and a socks:304 + #echo "debug \$tmp_port=$tmp_port, \$tmp_shunt_port=${tmp_shunt_port}, \$tmp_shunt_local_port=$tmp_shunt_local_port" + ln_start_bin $(first_type shadow-tls) shadow-tls config --config $chain_config_file + shunt_dns_command + local chain_type=$(uci_get_by_name $SHUNT_SERVER chain_type) + case ${chain_type} in + vmess) + ln_start_bin $(first_type xray v2ray) v2ray run -c $shunt_config_file + echolog "Netflix Separated Shunt Server:shadow-tls chain-to$($(first_type xray) --version) Started!" + ;; + sslocal) + ln_start_bin $(first_type sslocal) sslocal -c $shunt_config_file + echolog "Netflix Separated Shunt Server:shadow-tls chain-to$($(first_type sslocal) --version) Started!" + ;; + esac + ;; + # 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 + # shunt_dns_command + # 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 + shunt_dns_command + 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 run -config $local_config_file + fi + echolog "Global_Socks5:$($(first_type "xray" "v2ray") version | head -1) Started!" + ;; + 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 naive) --version | head -1) Started!" + ;; + hysteria) + if [ "$_local" == "2" ]; then + gen_config_file $LOCAL_SERVER $type 4 0 $local_port + ln_start_bin $(first_type hysteria) hysteria client --config $local_config_file + echolog "Global_Socks5:$($(first_type hysteria) version | awk '{print $1,$3}') Started!" + fi + ;; + tuic) + if [ "$_local" == "2" ]; then + gen_config_file $LOCAL_SERVER $type 4 $local_port + ln_start_bin $(first_type tuic-client) tuic-client --config $local_config_file + echolog "Global Socks5:tuic-client $($(first_type tuic-client) --version) Started!" + fi + ;; + shadowtls) + #respective config for global socks and main node + if [ "$_local" == "2" ]; then + gen_config_file $LOCAL_SERVER $type 4 "10${tmp_tcp_local_port}" + gen_config_file $LOCAL_SERVER $type 4 0 $local_port chain/"10${tmp_tcp_local_port}" + ln_start_bin $(first_type shadow-tls) shadow-tls config --config $chain_local_config_file + local chain_type=$(uci_get_by_name $LOCAL_SERVER chain_type) + case ${chain_type} in + vmess) + ln_start_bin $(first_type xray v2ray) v2ray run -c $local_config_file + echolog "Global Socks5 Proxy:shadow-tls chain-to$($(first_type xray) --version) Started!" + ;; + sslocal) + ln_start_bin $(first_type sslocal) sslocal -c $local_config_file + echolog "Global Socks5 Proxy:shadow-tls chain-to$($(first_type sslocal) --version) Started!" + ;; + esac + fi + ;; + *) + [ -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 run -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) + gen_config_file $GLOBAL_SERVER $type 1 $tcp_port + ln_start_bin $(first_type naive) naive $tcp_config_file + echolog "Main node:$($(first_type naive) --version 2>&1 | head -1) , $threads Threads Started!" + ;; + hysteria) + gen_config_file $GLOBAL_SERVER $type 1 $tcp_port $socks_port + ln_start_bin $(first_type hysteria) hysteria client --config $tcp_config_file + echolog "Main node:$($(first_type hysteria) version | awk '{print $1,$3}') Started!" + ;; + tuic) + local PARAM + [ $mode == "tcp" ] && PARAM="-T" || PARAM="" + gen_config_file $GLOBAL_SERVER $type 1 $tmp_tcp_local_port + ln_start_bin $(first_type tuic-client) tuic-client --config $tcp_config_file + ln_start_bin $(first_type ipt2socks) ipt2socks "$PARAM" -R -b 0.0.0.0 -4 -s 127.0.0.1 -p $tmp_tcp_local_port -l $tcp_port + if [ -n $socks_port ] && [ $GLOBAL_SERVER == $LOCAL_SERVER ]; then #start a new tuic instance + gen_config_file $GLOBAL_SERVER $type 4 $socks_port + ln_start_bin $(first_type tuic-client) tuic-client --config $local_config_file + echolog "Global Socks5:tuic-client $($(first_type tuic-client) --version) Started!" + fi + echolog "Main node:tuic-client $($(first_type tuic-client) --version) Started!" + ;; + shadowtls) + if [ -z "$socks_port" ]; then + gen_config_file $GLOBAL_SERVER $type 1 "10${tmp_tcp_local_port}" + gen_config_file $GLOBAL_SERVER $type 1 "10${tmp_tcp_local_port}" 0 chain + else + gen_config_file $GLOBAL_SERVER $type 1 "10${tmp_tcp_local_port}" + gen_config_file $GLOBAL_SERVER $type 1 "10${tmp_tcp_local_port}" $socks_port chain + fi + local chain_type=$(uci_get_by_name $GLOBAL_SERVER chain_type) + case ${chain_type} in + vmess) + ln_start_bin $(first_type shadow-tls) shadow-tls config --config $chain_config_file + ln_start_bin $(first_type xray v2ray) v2ray run -c $tcp_config_file + echolog "Mian node:shadow-tls chain-to $($(first_type xray) --version) Started!" + ;; + sslocal) + ln_start_bin $(first_type shadow-tls) shadow-tls config --config $chain_config_file + ln_start_bin $(first_type sslocal) sslocal -c $tcp_config_file + echolog "Main node:shadow-tls chain-to $($(first_type sslocal) --version) Started!" + ;; + esac + ;; + 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 + ;; + $SHUNT_SERVER) + _local="3" + local_config_file=$TMP_PATH/tcp-udp-ssr-local.json + start_local + ;; + *) + _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 + ;; + $LOCAL_SERVER) + shunt="$tmp_shunt_port" + shunt_config_file=$TMP_PATH/tcp-udp-ssr-local.json + shunt_dns_config_file=$TMP_PATH/shunt-dns-ssr-plus.json + start_shunt + ;; + *) + 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 + 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 & + ( \ + # Graceful kill first, so programs have the chance to stop its subprocesses + $PS -w | grep -v "grep" | grep "$TMP_PATH" | awk '{print $1}' | xargs kill >/dev/null 2>&1 ; \ + sleep 3s; \ + # Force kill hanged programs + $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 [ "$(uci -q get "dhcp.@dnsmasq[0]._unused_ssrp_changed")" = "1" ]; then + uci -q del "dhcp.@dnsmasq[0].noresolv" + uci -q del_list "dhcp.@dnsmasq[0].server"="127.0.0.1#$china_dns_port" + uci -q rename "dhcp.@dnsmasq[0]._orig_noresolv"="noresolv" + uci -q rename "dhcp.@dnsmasq[0]._orig_server"="server" + uci -q del "dhcp.@dnsmasq[0]._unused_ssrp_changed" + uci -q commit "dhcp" + fi + 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].default_packet_encoding='xudp' + set shadowsocksr.@global[0].shunt_dns='1' + set shadowsocksr.@global[0].gfwlist_url='https://fastly.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://fastly.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 new file mode 100644 index 00000000..e69de29b diff --git a/luci-app-ssr-plus/root/etc/ssrplus/black.list b/luci-app-ssr-plus/root/etc/ssrplus/black.list new file mode 100644 index 00000000..e69de29b diff --git a/luci-app-ssr-plus/root/etc/ssrplus/china_ssr.txt b/luci-app-ssr-plus/root/etc/ssrplus/china_ssr.txt new file mode 100644 index 00000000..d3548833 --- /dev/null +++ b/luci-app-ssr-plus/root/etc/ssrplus/china_ssr.txt @@ -0,0 +1,8612 @@ +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/13 +43.176.0.0/12 +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.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.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.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.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.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.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/21 +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.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.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.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.144.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.32.0/22 +45.114.40.0/22 +45.114.52.0/22 +45.114.96.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.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.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.125.100.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.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.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.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 +57.176.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.47.0.0/16 +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.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.98.0/23 +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.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.186.0/23 +103.18.192.0/22 +103.18.206.0/23 +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.50.0/23 +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.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.24.0/23 +103.29.29.0/24 +103.29.128.0/22 +103.29.132.0/22 +103.29.136.0/22 +103.29.236.0/23 +103.30.20.0/22 +103.30.96.0/22 +103.30.104.0/23 +103.30.106.0/23 +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.31.242.0/23 +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.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.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/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/21 +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.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.158.0/23 +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.132.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.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.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.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.236.0/22 +103.53.248.0/22 +103.54.8.0/22 +103.54.48.0/22 +103.54.160.0/22 +103.54.164.0/22 +103.54.212.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.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.94.0/23 +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.59.168.0/23 +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.65.204.0/23 +103.65.206.0/23 +103.65.224.0/23 +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.62.0/23 +103.69.116.0/22 +103.69.132.0/22 +103.69.152.0/22 +103.70.8.0/22 +103.70.14.0/23 +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.71.0.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.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.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.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.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.228.0/23 +103.79.240.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.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.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.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.112.0/23 +103.91.138.0/23 +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.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.200.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.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.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.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.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.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.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.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.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.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.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.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.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.136.0/22 +103.117.188.0/22 +103.117.220.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.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.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.92.0/23 +103.139.113.0/24 +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.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.228.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.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.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.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.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.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.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.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.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.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.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.170.72.0/23 +103.170.134.0/23 +103.170.210.0/23 +103.170.212.0/23 +103.171.32.0/23 +103.171.166.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.98.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.44.0/23 +103.177.70.0/23 +103.177.136.0/23 +103.177.162.0/23 +103.178.56.0/23 +103.178.240.0/23 +103.179.76.0/23 +103.179.78.0/23 +103.180.108.0/23 +103.180.226.0/23 +103.181.164.0/23 +103.181.234.0/23 +103.183.26.0/23 +103.183.66.0/23 +103.183.122.0/23 +103.183.124.0/23 +103.184.44.0/23 +103.184.46.0/23 +103.184.60.0/23 +103.185.78.0/23 +103.185.80.0/23 +103.185.228.0/23 +103.186.4.0/23 +103.186.108.0/23 +103.186.112.0/23 +103.186.136.0/23 +103.186.158.0/23 +103.186.162.0/23 +103.186.228.0/23 +103.189.92.0/23 +103.189.140.0/23 +103.189.152.0/23 +103.189.154.0/23 +103.190.20.0/23 +103.190.71.0/24 +103.190.104.0/23 +103.190.116.0/23 +103.190.118.0/23 +103.190.122.0/23 +103.191.102.0/23 +103.191.242.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.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.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.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.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.216.0/23 +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.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.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.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.44.0/22 +103.212.48.0/22 +103.212.84.0/22 +103.212.100.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.214.48.0/22 +103.214.84.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.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.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.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.162.0/23 +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.100.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.152.0/22 +103.239.156.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.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.12.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.240.0/22 +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.134.184.0/22 +114.134.188.0/23 +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.142.136.0/21 +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.216.0/22 +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.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/22 +118.26.133.0/24 +118.26.134.0/23 +118.26.136.0/21 +118.26.160.0/20 +118.26.188.0/22 +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.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.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.91.104.0/21 +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/17 +122.8.192.0/18 +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.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 +143.64.0.0/16 +144.0.0.0/16 +144.7.0.0/16 +144.12.0.0/16 +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.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.0.0/16 +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.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.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.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.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.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.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.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.128.0/17 +223.123.128.0/17 +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 new file mode 100644 index 00000000..dc4344e7 --- /dev/null +++ b/luci-app-ssr-plus/root/etc/ssrplus/deny.list @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000..62cec37c --- /dev/null +++ b/luci-app-ssr-plus/root/etc/ssrplus/gfw_base.conf @@ -0,0 +1,108 @@ +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 new file mode 100644 index 00000000..a44d3714 --- /dev/null +++ b/luci-app-ssr-plus/root/etc/ssrplus/gfw_list.conf @@ -0,0 +1,35608 @@ +server=/samebags.com/127.0.0.1#5335 +ipset=/samebags.com/gfwlist +server=/premiumhd.net/127.0.0.1#5335 +ipset=/premiumhd.net/gfwlist +server=/facebool.com/127.0.0.1#5335 +ipset=/facebool.com/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=/hentais.tube/127.0.0.1#5335 +ipset=/hentais.tube/gfwlist +server=/teenport.com/127.0.0.1#5335 +ipset=/teenport.com/gfwlist +server=/zeit.sh/127.0.0.1#5335 +ipset=/zeit.sh/gfwlist +server=/mrvideosdesexo.xxx/127.0.0.1#5335 +ipset=/mrvideosdesexo.xxx/gfwlist +server=/xxxindiantv.com/127.0.0.1#5335 +ipset=/xxxindiantv.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=/kaggle.com/127.0.0.1#5335 +ipset=/kaggle.com/gfwlist +server=/bbycontent.net/127.0.0.1#5335 +ipset=/bbycontent.net/gfwlist +server=/imagebam.com/127.0.0.1#5335 +ipset=/imagebam.com/gfwlist +server=/oreillystatic.com/127.0.0.1#5335 +ipset=/oreillystatic.com/gfwlist +server=/ahxxx.club/127.0.0.1#5335 +ipset=/ahxxx.club/gfwlist +server=/duckduckco.com/127.0.0.1#5335 +ipset=/duckduckco.com/gfwlist +server=/duyaoss.com/127.0.0.1#5335 +ipset=/duyaoss.com/gfwlist +server=/buyitnow.org/127.0.0.1#5335 +ipset=/buyitnow.org/gfwlist +server=/paypali.net/127.0.0.1#5335 +ipset=/paypali.net/gfwlist +server=/nvidia.com.tr/127.0.0.1#5335 +ipset=/nvidia.com.tr/gfwlist +server=/applepaycash.tv/127.0.0.1#5335 +ipset=/applepaycash.tv/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=/bustylornamorgan.com/127.0.0.1#5335 +ipset=/bustylornamorgan.com/gfwlist +server=/18acg.us/127.0.0.1#5335 +ipset=/18acg.us/gfwlist +server=/google.co.ke/127.0.0.1#5335 +ipset=/google.co.ke/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=/hentaiclub.net/127.0.0.1#5335 +ipset=/hentaiclub.net/gfwlist +server=/cloudchoose.com/127.0.0.1#5335 +ipset=/cloudchoose.com/gfwlist +server=/codeforces.com/127.0.0.1#5335 +ipset=/codeforces.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=/vpngate.net/127.0.0.1#5335 +ipset=/vpngate.net/gfwlist +server=/developer-advisor.com/127.0.0.1#5335 +ipset=/developer-advisor.com/gfwlist +server=/81jia.tv/127.0.0.1#5335 +ipset=/81jia.tv/gfwlist +server=/youtube.co.uk/127.0.0.1#5335 +ipset=/youtube.co.uk/gfwlist +server=/youporngay.com/127.0.0.1#5335 +ipset=/youporngay.com/gfwlist +server=/alphabet.pt/127.0.0.1#5335 +ipset=/alphabet.pt/gfwlist +server=/itfromtheinside.com/127.0.0.1#5335 +ipset=/itfromtheinside.com/gfwlist +server=/teenchoice.com/127.0.0.1#5335 +ipset=/teenchoice.com/gfwlist +server=/filmespornos.net/127.0.0.1#5335 +ipset=/filmespornos.net/gfwlist +server=/ftvnews.com.tw/127.0.0.1#5335 +ipset=/ftvnews.com.tw/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=/faycbok.com/127.0.0.1#5335 +ipset=/faycbok.com/gfwlist +server=/scpwiki.com/127.0.0.1#5335 +ipset=/scpwiki.com/gfwlist +server=/sexyandfunny.com/127.0.0.1#5335 +ipset=/sexyandfunny.com/gfwlist +server=/google.vg/127.0.0.1#5335 +ipset=/google.vg/gfwlist +server=/runporn.com/127.0.0.1#5335 +ipset=/runporn.com/gfwlist +server=/alivertsm.com/127.0.0.1#5335 +ipset=/alivertsm.com/gfwlist +server=/camwhores.forum/127.0.0.1#5335 +ipset=/camwhores.forum/gfwlist +server=/wolfatbestbuy.net/127.0.0.1#5335 +ipset=/wolfatbestbuy.net/gfwlist +server=/legaltracker.com/127.0.0.1#5335 +ipset=/legaltracker.com/gfwlist +server=/centervillage.co.jp/127.0.0.1#5335 +ipset=/centervillage.co.jp/gfwlist +server=/cshive.com/127.0.0.1#5335 +ipset=/cshive.com/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=/aiaa.org/127.0.0.1#5335 +ipset=/aiaa.org/gfwlist +server=/yahoo.rw/127.0.0.1#5335 +ipset=/yahoo.rw/gfwlist +server=/dudethrill.com/127.0.0.1#5335 +ipset=/dudethrill.com/gfwlist +server=/ouplaw.com/127.0.0.1#5335 +ipset=/ouplaw.com/gfwlist +server=/anthemthegame.com/127.0.0.1#5335 +ipset=/anthemthegame.com/gfwlist +server=/adobetag.com/127.0.0.1#5335 +ipset=/adobetag.com/gfwlist +server=/kingkong.com.tw/127.0.0.1#5335 +ipset=/kingkong.com.tw/gfwlist +server=/appleos.tv/127.0.0.1#5335 +ipset=/appleos.tv/gfwlist +server=/igayporn.tv/127.0.0.1#5335 +ipset=/igayporn.tv/gfwlist +server=/beatsheadphonesonline.com/127.0.0.1#5335 +ipset=/beatsheadphonesonline.com/gfwlist +server=/maturetube.com/127.0.0.1#5335 +ipset=/maturetube.com/gfwlist +server=/visasoutheasteurope.com/127.0.0.1#5335 +ipset=/visasoutheasteurope.com/gfwlist +server=/trueamateurs.com/127.0.0.1#5335 +ipset=/trueamateurs.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=/videodesexo.blog/127.0.0.1#5335 +ipset=/videodesexo.blog/gfwlist +server=/hpiie.org/127.0.0.1#5335 +ipset=/hpiie.org/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=/beatsbydreoksale.com/127.0.0.1#5335 +ipset=/beatsbydreoksale.com/gfwlist +server=/paypal-security.org/127.0.0.1#5335 +ipset=/paypal-security.org/gfwlist +server=/visa.com.hk/127.0.0.1#5335 +ipset=/visa.com.hk/gfwlist +server=/webcamtubexxx.com/127.0.0.1#5335 +ipset=/webcamtubexxx.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=/czechvr.com/127.0.0.1#5335 +ipset=/czechvr.com/gfwlist +server=/licdn.cn.cdn20.com/127.0.0.1#5335 +ipset=/licdn.cn.cdn20.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=/gaypinoyporn.com/127.0.0.1#5335 +ipset=/gaypinoyporn.com/gfwlist +server=/blogspot.pt/127.0.0.1#5335 +ipset=/blogspot.pt/gfwlist +server=/xnxxsexmovies.com/127.0.0.1#5335 +ipset=/xnxxsexmovies.com/gfwlist +server=/ultimaonline.com/127.0.0.1#5335 +ipset=/ultimaonline.com/gfwlist +server=/paypal-latam.com/127.0.0.1#5335 +ipset=/paypal-latam.com/gfwlist +server=/echichimato.com/127.0.0.1#5335 +ipset=/echichimato.com/gfwlist +server=/escort24h.net/127.0.0.1#5335 +ipset=/escort24h.net/gfwlist +server=/apple.pk/127.0.0.1#5335 +ipset=/apple.pk/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=/pornmegaload.com/127.0.0.1#5335 +ipset=/pornmegaload.com/gfwlist +server=/facboo.com/127.0.0.1#5335 +ipset=/facboo.com/gfwlist +server=/jtube.space/127.0.0.1#5335 +ipset=/jtube.space/gfwlist +server=/pornomovies.mobi/127.0.0.1#5335 +ipset=/pornomovies.mobi/gfwlist +server=/facebookswagemea.com/127.0.0.1#5335 +ipset=/facebookswagemea.com/gfwlist +server=/mapbox.com/127.0.0.1#5335 +ipset=/mapbox.com/gfwlist +server=/eurosexscene.com/127.0.0.1#5335 +ipset=/eurosexscene.com/gfwlist +server=/kanzhongguo.com/127.0.0.1#5335 +ipset=/kanzhongguo.com/gfwlist +server=/directtv.net/127.0.0.1#5335 +ipset=/directtv.net/gfwlist +server=/swisssigngroup.ch/127.0.0.1#5335 +ipset=/swisssigngroup.ch/gfwlist +server=/muycerdas.xxx/127.0.0.1#5335 +ipset=/muycerdas.xxx/gfwlist +server=/facebuk.com/127.0.0.1#5335 +ipset=/facebuk.com/gfwlist +server=/monsterbeatsau.com/127.0.0.1#5335 +ipset=/monsterbeatsau.com/gfwlist +server=/yandex.com.am/127.0.0.1#5335 +ipset=/yandex.com.am/gfwlist +server=/softbankbb.com/127.0.0.1#5335 +ipset=/softbankbb.com/gfwlist +server=/finishinfo.nl/127.0.0.1#5335 +ipset=/finishinfo.nl/gfwlist +server=/webex.com.hk/127.0.0.1#5335 +ipset=/webex.com.hk/gfwlist +server=/pornzone.com/127.0.0.1#5335 +ipset=/pornzone.com/gfwlist +server=/microsoft.be/127.0.0.1#5335 +ipset=/microsoft.be/gfwlist +server=/bravoporn.com/127.0.0.1#5335 +ipset=/bravoporn.com/gfwlist +server=/mitao.bar/127.0.0.1#5335 +ipset=/mitao.bar/gfwlist +server=/illusionxz.com/127.0.0.1#5335 +ipset=/illusionxz.com/gfwlist +server=/paypal-qrshopping.org/127.0.0.1#5335 +ipset=/paypal-qrshopping.org/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=/sony.at/127.0.0.1#5335 +ipset=/sony.at/gfwlist +server=/openamt.com/127.0.0.1#5335 +ipset=/openamt.com/gfwlist +server=/applemusic.com.au/127.0.0.1#5335 +ipset=/applemusic.com.au/gfwlist +server=/manhub.com/127.0.0.1#5335 +ipset=/manhub.com/gfwlist +server=/hentaiz.mobi/127.0.0.1#5335 +ipset=/hentaiz.mobi/gfwlist +server=/covid19-rx.org/127.0.0.1#5335 +ipset=/covid19-rx.org/gfwlist +server=/sexcartoon.biz/127.0.0.1#5335 +ipset=/sexcartoon.biz/gfwlist +server=/hentai-ani.me/127.0.0.1#5335 +ipset=/hentai-ani.me/gfwlist +server=/gandi.net/127.0.0.1#5335 +ipset=/gandi.net/gfwlist +server=/ebaylisting.com/127.0.0.1#5335 +ipset=/ebaylisting.com/gfwlist +server=/xxxvideoamatoriali.com/127.0.0.1#5335 +ipset=/xxxvideoamatoriali.com/gfwlist +server=/persiankitty.com/127.0.0.1#5335 +ipset=/persiankitty.com/gfwlist +server=/i-book.com/127.0.0.1#5335 +ipset=/i-book.com/gfwlist +server=/spiedigitallibrary.org/127.0.0.1#5335 +ipset=/spiedigitallibrary.org/gfwlist +server=/hentaicomics.life/127.0.0.1#5335 +ipset=/hentaicomics.life/gfwlist +server=/icloud.ee/127.0.0.1#5335 +ipset=/icloud.ee/gfwlist +server=/muscdn.com/127.0.0.1#5335 +ipset=/muscdn.com/gfwlist +server=/xn--8uq428d76d.tokyo/127.0.0.1#5335 +ipset=/xn--8uq428d76d.tokyo/gfwlist +server=/mytving.com/127.0.0.1#5335 +ipset=/mytving.com/gfwlist +server=/topfreepornvideos.com/127.0.0.1#5335 +ipset=/topfreepornvideos.com/gfwlist +server=/yahoo.sh/127.0.0.1#5335 +ipset=/yahoo.sh/gfwlist +server=/stepfamilyporn.com/127.0.0.1#5335 +ipset=/stepfamilyporn.com/gfwlist +server=/vim.org/127.0.0.1#5335 +ipset=/vim.org/gfwlist +server=/nvidia.no/127.0.0.1#5335 +ipset=/nvidia.no/gfwlist +server=/seqingx.com/127.0.0.1#5335 +ipset=/seqingx.com/gfwlist +server=/liverail.tv/127.0.0.1#5335 +ipset=/liverail.tv/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=/dvdstudiopro.info/127.0.0.1#5335 +ipset=/dvdstudiopro.info/gfwlist +server=/khotruyentranhx.com/127.0.0.1#5335 +ipset=/khotruyentranhx.com/gfwlist +server=/gettyimages.co.jp/127.0.0.1#5335 +ipset=/gettyimages.co.jp/gfwlist +server=/avstar9.com/127.0.0.1#5335 +ipset=/avstar9.com/gfwlist +server=/javseen.tv/127.0.0.1#5335 +ipset=/javseen.tv/gfwlist +server=/amateur-gallery-post.com/127.0.0.1#5335 +ipset=/amateur-gallery-post.com/gfwlist +server=/movefreerewards.com/127.0.0.1#5335 +ipset=/movefreerewards.com/gfwlist +server=/ebayon.com/127.0.0.1#5335 +ipset=/ebayon.com/gfwlist +server=/live.com.au/127.0.0.1#5335 +ipset=/live.com.au/gfwlist +server=/easttouch.com.hk/127.0.0.1#5335 +ipset=/easttouch.com.hk/gfwlist +server=/neuralink.com/127.0.0.1#5335 +ipset=/neuralink.com/gfwlist +server=/europornstar.com/127.0.0.1#5335 +ipset=/europornstar.com/gfwlist +server=/realestatejournal.com/127.0.0.1#5335 +ipset=/realestatejournal.com/gfwlist +server=/ero-labs.net/127.0.0.1#5335 +ipset=/ero-labs.net/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=/youngtube.me/127.0.0.1#5335 +ipset=/youngtube.me/gfwlist +server=/xxxlucah.com/127.0.0.1#5335 +ipset=/xxxlucah.com/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=/disneychannelonstage.com/127.0.0.1#5335 +ipset=/disneychannelonstage.com/gfwlist +server=/filmesporno.net.br/127.0.0.1#5335 +ipset=/filmesporno.net.br/gfwlist +server=/iphonefc.com/127.0.0.1#5335 +ipset=/iphonefc.com/gfwlist +server=/arabxnxx.org/127.0.0.1#5335 +ipset=/arabxnxx.org/gfwlist +server=/google.bj/127.0.0.1#5335 +ipset=/google.bj/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=/nikegadgets.com/127.0.0.1#5335 +ipset=/nikegadgets.com/gfwlist +server=/turborepo.org/127.0.0.1#5335 +ipset=/turborepo.org/gfwlist +server=/mature.nl/127.0.0.1#5335 +ipset=/mature.nl/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=/paypal-status.com/127.0.0.1#5335 +ipset=/paypal-status.com/gfwlist +server=/volvotrucks.cl/127.0.0.1#5335 +ipset=/volvotrucks.cl/gfwlist +server=/periscope.tv/127.0.0.1#5335 +ipset=/periscope.tv/gfwlist +server=/interracial-sites.com/127.0.0.1#5335 +ipset=/interracial-sites.com/gfwlist +server=/mini-connected.lv/127.0.0.1#5335 +ipset=/mini-connected.lv/gfwlist +server=/vrfun18.com/127.0.0.1#5335 +ipset=/vrfun18.com/gfwlist +server=/twttr.net/127.0.0.1#5335 +ipset=/twttr.net/gfwlist +server=/yahoo.com.pa/127.0.0.1#5335 +ipset=/yahoo.com.pa/gfwlist +server=/omtrdc.net/127.0.0.1#5335 +ipset=/omtrdc.net/gfwlist +server=/pornoh.info/127.0.0.1#5335 +ipset=/pornoh.info/gfwlist +server=/paypal-luxury.com/127.0.0.1#5335 +ipset=/paypal-luxury.com/gfwlist +server=/theporndude.com/127.0.0.1#5335 +ipset=/theporndude.com/gfwlist +server=/hentaiaction.net/127.0.0.1#5335 +ipset=/hentaiaction.net/gfwlist +server=/pixnet.net/127.0.0.1#5335 +ipset=/pixnet.net/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=/rupress.org/127.0.0.1#5335 +ipset=/rupress.org/gfwlist +server=/eventsinfocus.org/127.0.0.1#5335 +ipset=/eventsinfocus.org/gfwlist +server=/xnxxarab.cc/127.0.0.1#5335 +ipset=/xnxxarab.cc/gfwlist +server=/chinatimes.com.tw/127.0.0.1#5335 +ipset=/chinatimes.com.tw/gfwlist +server=/hbo.com/127.0.0.1#5335 +ipset=/hbo.com/gfwlist +server=/shopee.es/127.0.0.1#5335 +ipset=/shopee.es/gfwlist +server=/akamaihd.com/127.0.0.1#5335 +ipset=/akamaihd.com/gfwlist +server=/hentaizap.com/127.0.0.1#5335 +ipset=/hentaizap.com/gfwlist +server=/windows.net/127.0.0.1#5335 +ipset=/windows.net/gfwlist +server=/machosaonatural.com.br/127.0.0.1#5335 +ipset=/machosaonatural.com.br/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=/fbjav.com/127.0.0.1#5335 +ipset=/fbjav.com/gfwlist +server=/docleradn.com/127.0.0.1#5335 +ipset=/docleradn.com/gfwlist +server=/airmax360.com/127.0.0.1#5335 +ipset=/airmax360.com/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=/18porno.tv/127.0.0.1#5335 +ipset=/18porno.tv/gfwlist +server=/r18.com/127.0.0.1#5335 +ipset=/r18.com/gfwlist +server=/starbucks.co.nz/127.0.0.1#5335 +ipset=/starbucks.co.nz/gfwlist +server=/justlesbianpussy.com/127.0.0.1#5335 +ipset=/justlesbianpussy.com/gfwlist +server=/noc.syosetu.com/127.0.0.1#5335 +ipset=/noc.syosetu.com/gfwlist +server=/certificate-transparency.org/127.0.0.1#5335 +ipset=/certificate-transparency.org/gfwlist +server=/snapads.com/127.0.0.1#5335 +ipset=/snapads.com/gfwlist +server=/txdirectv.com/127.0.0.1#5335 +ipset=/txdirectv.com/gfwlist +server=/youflix.is/127.0.0.1#5335 +ipset=/youflix.is/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=/rmbl.ws/127.0.0.1#5335 +ipset=/rmbl.ws/gfwlist +server=/myfoxla.com/127.0.0.1#5335 +ipset=/myfoxla.com/gfwlist +server=/microsoftteams.com/127.0.0.1#5335 +ipset=/microsoftteams.com/gfwlist +server=/harica.gr/127.0.0.1#5335 +ipset=/harica.gr/gfwlist +server=/visa.com.mx/127.0.0.1#5335 +ipset=/visa.com.mx/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=/redtube9.com/127.0.0.1#5335 +ipset=/redtube9.com/gfwlist +server=/mycardbenefits.com/127.0.0.1#5335 +ipset=/mycardbenefits.com/gfwlist +server=/leecountytimes.com/127.0.0.1#5335 +ipset=/leecountytimes.com/gfwlist +server=/sexasia.net/127.0.0.1#5335 +ipset=/sexasia.net/gfwlist +server=/mcrouter.net/127.0.0.1#5335 +ipset=/mcrouter.net/gfwlist +server=/bloomberg.tv/127.0.0.1#5335 +ipset=/bloomberg.tv/gfwlist +server=/lagranepoca.com/127.0.0.1#5335 +ipset=/lagranepoca.com/gfwlist +server=/ikea.es/127.0.0.1#5335 +ipset=/ikea.es/gfwlist +server=/n0vadesktop.com/127.0.0.1#5335 +ipset=/n0vadesktop.com/gfwlist +server=/google.tl/127.0.0.1#5335 +ipset=/google.tl/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=/webex.es/127.0.0.1#5335 +ipset=/webex.es/gfwlist +server=/intelemeastore.com/127.0.0.1#5335 +ipset=/intelemeastore.com/gfwlist +server=/nlt-media.com/127.0.0.1#5335 +ipset=/nlt-media.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=/sexmomsex.com/127.0.0.1#5335 +ipset=/sexmomsex.com/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=/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=/dongtaiwang.com/127.0.0.1#5335 +ipset=/dongtaiwang.com/gfwlist +server=/visualstudio.com/127.0.0.1#5335 +ipset=/visualstudio.com/gfwlist +server=/ikea.co.ph/127.0.0.1#5335 +ipset=/ikea.co.ph/gfwlist +server=/jiyou520.com/127.0.0.1#5335 +ipset=/jiyou520.com/gfwlist +server=/pocketcasts.com/127.0.0.1#5335 +ipset=/pocketcasts.com/gfwlist +server=/ero-labs.com/127.0.0.1#5335 +ipset=/ero-labs.com/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=/hooligapps.com/127.0.0.1#5335 +ipset=/hooligapps.com/gfwlist +server=/embase.com/127.0.0.1#5335 +ipset=/embase.com/gfwlist +server=/3dadultgames.net/127.0.0.1#5335 +ipset=/3dadultgames.net/gfwlist +server=/amazon.com/127.0.0.1#5335 +ipset=/amazon.com/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=/wwwfacebok.com/127.0.0.1#5335 +ipset=/wwwfacebok.com/gfwlist +server=/drebeats-singaporecheap.net/127.0.0.1#5335 +ipset=/drebeats-singaporecheap.net/gfwlist +server=/hcomic.net/127.0.0.1#5335 +ipset=/hcomic.net/gfwlist +server=/dlib.eastview.com/127.0.0.1#5335 +ipset=/dlib.eastview.com/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=/passion-hd.com/127.0.0.1#5335 +ipset=/passion-hd.com/gfwlist +server=/secret-flirt-hub.com/127.0.0.1#5335 +ipset=/secret-flirt-hub.com/gfwlist +server=/minirichmond.com/127.0.0.1#5335 +ipset=/minirichmond.com/gfwlist +server=/google.lu/127.0.0.1#5335 +ipset=/google.lu/gfwlist +server=/alibabacloud.com.my/127.0.0.1#5335 +ipset=/alibabacloud.com.my/gfwlist +server=/veet.be/127.0.0.1#5335 +ipset=/veet.be/gfwlist +server=/alteraforum.com/127.0.0.1#5335 +ipset=/alteraforum.com/gfwlist +server=/shahvatsaraa.com/127.0.0.1#5335 +ipset=/shahvatsaraa.com/gfwlist +server=/xxxcomics.org/127.0.0.1#5335 +ipset=/xxxcomics.org/gfwlist +server=/porzo.tv/127.0.0.1#5335 +ipset=/porzo.tv/gfwlist +server=/sovec.net/127.0.0.1#5335 +ipset=/sovec.net/gfwlist +server=/stupidcams.com/127.0.0.1#5335 +ipset=/stupidcams.com/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=/o2action.co.kr/127.0.0.1#5335 +ipset=/o2action.co.kr/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=/hentai2games.com/127.0.0.1#5335 +ipset=/hentai2games.com/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=/abellalist.com/127.0.0.1#5335 +ipset=/abellalist.com/gfwlist +server=/dkcloud.cc/127.0.0.1#5335 +ipset=/dkcloud.cc/gfwlist +server=/mudvod.tv/127.0.0.1#5335 +ipset=/mudvod.tv/gfwlist +server=/wasdj.com/127.0.0.1#5335 +ipset=/wasdj.com/gfwlist +server=/myhentaigallery.com/127.0.0.1#5335 +ipset=/myhentaigallery.com/gfwlist +server=/swingerpornfun.com/127.0.0.1#5335 +ipset=/swingerpornfun.com/gfwlist +server=/shahvani.site/127.0.0.1#5335 +ipset=/shahvani.site/gfwlist +server=/naughtysophie.com/127.0.0.1#5335 +ipset=/naughtysophie.com/gfwlist +server=/smartonesolutions.hk/127.0.0.1#5335 +ipset=/smartonesolutions.hk/gfwlist +server=/minihalifax.com/127.0.0.1#5335 +ipset=/minihalifax.com/gfwlist +server=/firestonecomercial.co.cr/127.0.0.1#5335 +ipset=/firestonecomercial.co.cr/gfwlist +server=/onlyfreelatinaporn.com/127.0.0.1#5335 +ipset=/onlyfreelatinaporn.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=/hugesex.tv/127.0.0.1#5335 +ipset=/hugesex.tv/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=/pornsoldiers.com/127.0.0.1#5335 +ipset=/pornsoldiers.com/gfwlist +server=/firestoneip.com/127.0.0.1#5335 +ipset=/firestoneip.com/gfwlist +server=/ocul.us/127.0.0.1#5335 +ipset=/ocul.us/gfwlist +server=/microsoftcloudsummit.com/127.0.0.1#5335 +ipset=/microsoftcloudsummit.com/gfwlist +server=/hplipopensource.com/127.0.0.1#5335 +ipset=/hplipopensource.com/gfwlist +server=/zoofilianet.com/127.0.0.1#5335 +ipset=/zoofilianet.com/gfwlist +server=/intel.ua/127.0.0.1#5335 +ipset=/intel.ua/gfwlist +server=/eroprofile.com/127.0.0.1#5335 +ipset=/eroprofile.com/gfwlist +server=/xn--xsq421m.com/127.0.0.1#5335 +ipset=/xn--xsq421m.com/gfwlist +server=/eromanga-mainichi.com/127.0.0.1#5335 +ipset=/eromanga-mainichi.com/gfwlist +server=/facebooksite.net/127.0.0.1#5335 +ipset=/facebooksite.net/gfwlist +server=/javcc.cc/127.0.0.1#5335 +ipset=/javcc.cc/gfwlist +server=/gimy.cc/127.0.0.1#5335 +ipset=/gimy.cc/gfwlist +server=/honkaiimpact3.com/127.0.0.1#5335 +ipset=/honkaiimpact3.com/gfwlist +server=/line.me/127.0.0.1#5335 +ipset=/line.me/gfwlist +server=/plumperpass.com/127.0.0.1#5335 +ipset=/plumperpass.com/gfwlist +server=/durex.no/127.0.0.1#5335 +ipset=/durex.no/gfwlist +server=/abema-tv.com/127.0.0.1#5335 +ipset=/abema-tv.com/gfwlist +server=/sony.cz/127.0.0.1#5335 +ipset=/sony.cz/gfwlist +server=/porndex.com/127.0.0.1#5335 +ipset=/porndex.com/gfwlist +server=/faecebok.com/127.0.0.1#5335 +ipset=/faecebok.com/gfwlist +server=/e-goods.ru/127.0.0.1#5335 +ipset=/e-goods.ru/gfwlist +server=/boslife.biz/127.0.0.1#5335 +ipset=/boslife.biz/gfwlist +server=/onepornlist.com/127.0.0.1#5335 +ipset=/onepornlist.com/gfwlist +server=/ntdtv-dc.com/127.0.0.1#5335 +ipset=/ntdtv-dc.com/gfwlist +server=/pornzog.com/127.0.0.1#5335 +ipset=/pornzog.com/gfwlist +server=/disneymagicmoments.co.uk/127.0.0.1#5335 +ipset=/disneymagicmoments.co.uk/gfwlist +server=/astm.org/127.0.0.1#5335 +ipset=/astm.org/gfwlist +server=/gofucker.com/127.0.0.1#5335 +ipset=/gofucker.com/gfwlist +server=/intramuscularinjection.info/127.0.0.1#5335 +ipset=/intramuscularinjection.info/gfwlist +server=/camerfirma.com/127.0.0.1#5335 +ipset=/camerfirma.com/gfwlist +server=/sony.com.hk/127.0.0.1#5335 +ipset=/sony.com.hk/gfwlist +server=/ebayinc.net/127.0.0.1#5335 +ipset=/ebayinc.net/gfwlist +server=/lesbiansubmission.com/127.0.0.1#5335 +ipset=/lesbiansubmission.com/gfwlist +server=/paypa1.com/127.0.0.1#5335 +ipset=/paypa1.com/gfwlist +server=/pctlwm.com/127.0.0.1#5335 +ipset=/pctlwm.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=/ifuckedmy.mom/127.0.0.1#5335 +ipset=/ifuckedmy.mom/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=/oneocsp.microsoft.com/127.0.0.1#5335 +ipset=/oneocsp.microsoft.com/gfwlist +server=/hilostripper.com/127.0.0.1#5335 +ipset=/hilostripper.com/gfwlist +server=/txxx1.com/127.0.0.1#5335 +ipset=/txxx1.com/gfwlist +server=/signalbar.com/127.0.0.1#5335 +ipset=/signalbar.com/gfwlist +server=/rule34.world/127.0.0.1#5335 +ipset=/rule34.world/gfwlist +server=/goodreads.com/127.0.0.1#5335 +ipset=/goodreads.com/gfwlist +server=/hairypornsite.com/127.0.0.1#5335 +ipset=/hairypornsite.com/gfwlist +server=/beatsincanada.com/127.0.0.1#5335 +ipset=/beatsincanada.com/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=/localizestatus.com/127.0.0.1#5335 +ipset=/localizestatus.com/gfwlist +server=/thotvids.com/127.0.0.1#5335 +ipset=/thotvids.com/gfwlist +server=/erogazo-jp.net/127.0.0.1#5335 +ipset=/erogazo-jp.net/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=/awetv.com/127.0.0.1#5335 +ipset=/awetv.com/gfwlist +server=/sensueel.net/127.0.0.1#5335 +ipset=/sensueel.net/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=/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=/xn--4vq475g.com/127.0.0.1#5335 +ipset=/xn--4vq475g.com/gfwlist +server=/ikea.sk/127.0.0.1#5335 +ipset=/ikea.sk/gfwlist +server=/xxxscenes.net/127.0.0.1#5335 +ipset=/xxxscenes.net/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=/yahoo.st/127.0.0.1#5335 +ipset=/yahoo.st/gfwlist +server=/starbuckssummergame.com/127.0.0.1#5335 +ipset=/starbuckssummergame.com/gfwlist +server=/adultfriendfinder.com/127.0.0.1#5335 +ipset=/adultfriendfinder.com/gfwlist +server=/showup.tv/127.0.0.1#5335 +ipset=/showup.tv/gfwlist +server=/daretoku-eromanga.info/127.0.0.1#5335 +ipset=/daretoku-eromanga.info/gfwlist +server=/wowpornlist.xyz/127.0.0.1#5335 +ipset=/wowpornlist.xyz/gfwlist +server=/justpicsplease.com/127.0.0.1#5335 +ipset=/justpicsplease.com/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=/vscode.blob.core.windows.net/127.0.0.1#5335 +ipset=/vscode.blob.core.windows.net/gfwlist +server=/ve-dash-uk-live.akamaized.net/127.0.0.1#5335 +ipset=/ve-dash-uk-live.akamaized.net/gfwlist +server=/qualcomm.sc.omtrdc.net/127.0.0.1#5335 +ipset=/qualcomm.sc.omtrdc.net/gfwlist +server=/teenagefucking.com/127.0.0.1#5335 +ipset=/teenagefucking.com/gfwlist +server=/intel.uz/127.0.0.1#5335 +ipset=/intel.uz/gfwlist +server=/facebook.shop/127.0.0.1#5335 +ipset=/facebook.shop/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=/nbys.tv/127.0.0.1#5335 +ipset=/nbys.tv/gfwlist +server=/youtubecisco.com/127.0.0.1#5335 +ipset=/youtubecisco.com/gfwlist +server=/animezilla.com/127.0.0.1#5335 +ipset=/animezilla.com/gfwlist +server=/fundinginstitutional.com/127.0.0.1#5335 +ipset=/fundinginstitutional.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=/icegay.tv/127.0.0.1#5335 +ipset=/icegay.tv/gfwlist +server=/animal-porn.net/127.0.0.1#5335 +ipset=/animal-porn.net/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=/orientalasianporn.com/127.0.0.1#5335 +ipset=/orientalasianporn.com/gfwlist +server=/av11.org/127.0.0.1#5335 +ipset=/av11.org/gfwlist +server=/alphabet.com.mx/127.0.0.1#5335 +ipset=/alphabet.com.mx/gfwlist +server=/goduckgo.com/127.0.0.1#5335 +ipset=/goduckgo.com/gfwlist +server=/18-teen-porn.com/127.0.0.1#5335 +ipset=/18-teen-porn.com/gfwlist +server=/pornofint.com/127.0.0.1#5335 +ipset=/pornofint.com/gfwlist +server=/gfjizz.com/127.0.0.1#5335 +ipset=/gfjizz.com/gfwlist +server=/monsterbeats-cheap.com/127.0.0.1#5335 +ipset=/monsterbeats-cheap.com/gfwlist +server=/pinterest.info/127.0.0.1#5335 +ipset=/pinterest.info/gfwlist +server=/azuredevopslaunch.com/127.0.0.1#5335 +ipset=/azuredevopslaunch.com/gfwlist +server=/volvotrucks.se/127.0.0.1#5335 +ipset=/volvotrucks.se/gfwlist +server=/otaku-168.com/127.0.0.1#5335 +ipset=/otaku-168.com/gfwlist +server=/mini.mu/127.0.0.1#5335 +ipset=/mini.mu/gfwlist +server=/bioone.org/127.0.0.1#5335 +ipset=/bioone.org/gfwlist +server=/cnnamador.com/127.0.0.1#5335 +ipset=/cnnamador.com/gfwlist +server=/hentai3dvideo.biz/127.0.0.1#5335 +ipset=/hentai3dvideo.biz/gfwlist +server=/biowarestore.com/127.0.0.1#5335 +ipset=/biowarestore.com/gfwlist +server=/veet.fr/127.0.0.1#5335 +ipset=/veet.fr/gfwlist +server=/lolibus.cc/127.0.0.1#5335 +ipset=/lolibus.cc/gfwlist +server=/fetishpapa.com/127.0.0.1#5335 +ipset=/fetishpapa.com/gfwlist +server=/linkjunkies.com/127.0.0.1#5335 +ipset=/linkjunkies.com/gfwlist +server=/inoreader.com/127.0.0.1#5335 +ipset=/inoreader.com/gfwlist +server=/go-gaytube.com/127.0.0.1#5335 +ipset=/go-gaytube.com/gfwlist +server=/kindle.in/127.0.0.1#5335 +ipset=/kindle.in/gfwlist +server=/dandalinvoa.com/127.0.0.1#5335 +ipset=/dandalinvoa.com/gfwlist +server=/cygames.jp/127.0.0.1#5335 +ipset=/cygames.jp/gfwlist +server=/alt3-mtalk.google.com/127.0.0.1#5335 +ipset=/alt3-mtalk.google.com/gfwlist +server=/hentai69.online/127.0.0.1#5335 +ipset=/hentai69.online/gfwlist +server=/metacloud.com/127.0.0.1#5335 +ipset=/metacloud.com/gfwlist +server=/weav.xyz/127.0.0.1#5335 +ipset=/weav.xyz/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=/xn--xsq605n.com/127.0.0.1#5335 +ipset=/xn--xsq605n.com/gfwlist +server=/beatsboxingdayuksale.com/127.0.0.1#5335 +ipset=/beatsboxingdayuksale.com/gfwlist +server=/apple.lk/127.0.0.1#5335 +ipset=/apple.lk/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=/sukebei.nyaa.si/127.0.0.1#5335 +ipset=/sukebei.nyaa.si/gfwlist +server=/youtube.ni/127.0.0.1#5335 +ipset=/youtube.ni/gfwlist +server=/femdomcc.net/127.0.0.1#5335 +ipset=/femdomcc.net/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=/eboobstore.com/127.0.0.1#5335 +ipset=/eboobstore.com/gfwlist +server=/vanish.com.br/127.0.0.1#5335 +ipset=/vanish.com.br/gfwlist +server=/swiftbank.us/127.0.0.1#5335 +ipset=/swiftbank.us/gfwlist +server=/naver.jp/127.0.0.1#5335 +ipset=/naver.jp/gfwlist +server=/google.se/127.0.0.1#5335 +ipset=/google.se/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=/illusionn4.com/127.0.0.1#5335 +ipset=/illusionn4.com/gfwlist +server=/pornmd.com/127.0.0.1#5335 +ipset=/pornmd.com/gfwlist +server=/stufferdb.com/127.0.0.1#5335 +ipset=/stufferdb.com/gfwlist +server=/ebaybank.com/127.0.0.1#5335 +ipset=/ebaybank.com/gfwlist +server=/porn-list.site/127.0.0.1#5335 +ipset=/porn-list.site/gfwlist +server=/foxbusiness.tv/127.0.0.1#5335 +ipset=/foxbusiness.tv/gfwlist +server=/quickiepage.com/127.0.0.1#5335 +ipset=/quickiepage.com/gfwlist +server=/gettyimages.co.nz/127.0.0.1#5335 +ipset=/gettyimages.co.nz/gfwlist +server=/doujin-freee.com/127.0.0.1#5335 +ipset=/doujin-freee.com/gfwlist +server=/illusionn5.com/127.0.0.1#5335 +ipset=/illusionn5.com/gfwlist +server=/sankei-ad-info.com/127.0.0.1#5335 +ipset=/sankei-ad-info.com/gfwlist +server=/applelink.com/127.0.0.1#5335 +ipset=/applelink.com/gfwlist +server=/nyahentai.re/127.0.0.1#5335 +ipset=/nyahentai.re/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=/nikebetterworld.info/127.0.0.1#5335 +ipset=/nikebetterworld.info/gfwlist +server=/bmwmontreal.ca/127.0.0.1#5335 +ipset=/bmwmontreal.ca/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=/volvotruckcenter.kz/127.0.0.1#5335 +ipset=/volvotruckcenter.kz/gfwlist +server=/bestbuybusinessadvantageaccount.com/127.0.0.1#5335 +ipset=/bestbuybusinessadvantageaccount.com/gfwlist +server=/lineshoppingseller.com/127.0.0.1#5335 +ipset=/lineshoppingseller.com/gfwlist +server=/kumo.com/127.0.0.1#5335 +ipset=/kumo.com/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=/jibemobile.com/127.0.0.1#5335 +ipset=/jibemobile.com/gfwlist +server=/wheelworks.net/127.0.0.1#5335 +ipset=/wheelworks.net/gfwlist +server=/businessinsider.jp/127.0.0.1#5335 +ipset=/businessinsider.jp/gfwlist +server=/boxofficemojo.com/127.0.0.1#5335 +ipset=/boxofficemojo.com/gfwlist +server=/m2m.com/127.0.0.1#5335 +ipset=/m2m.com/gfwlist +server=/lightbridge.com/127.0.0.1#5335 +ipset=/lightbridge.com/gfwlist +server=/momsexypics.com/127.0.0.1#5335 +ipset=/momsexypics.com/gfwlist +server=/fury.co/127.0.0.1#5335 +ipset=/fury.co/gfwlist +server=/topchats.com/127.0.0.1#5335 +ipset=/topchats.com/gfwlist +server=/xl-gaytube.com/127.0.0.1#5335 +ipset=/xl-gaytube.com/gfwlist +server=/szcheapmonsterheadphones.com/127.0.0.1#5335 +ipset=/szcheapmonsterheadphones.com/gfwlist +server=/visa.com.py/127.0.0.1#5335 +ipset=/visa.com.py/gfwlist +server=/dettol.com.hk/127.0.0.1#5335 +ipset=/dettol.com.hk/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=/bmw.vn/127.0.0.1#5335 +ipset=/bmw.vn/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=/topexhib.net/127.0.0.1#5335 +ipset=/topexhib.net/gfwlist +server=/hentaiera.com/127.0.0.1#5335 +ipset=/hentaiera.com/gfwlist +server=/svensksexfilm.com/127.0.0.1#5335 +ipset=/svensksexfilm.com/gfwlist +server=/citizenlab.ca/127.0.0.1#5335 +ipset=/citizenlab.ca/gfwlist +server=/pornacho.com/127.0.0.1#5335 +ipset=/pornacho.com/gfwlist +server=/doujinfree.com/127.0.0.1#5335 +ipset=/doujinfree.com/gfwlist +server=/xn--gogl-0nd52e.com/127.0.0.1#5335 +ipset=/xn--gogl-0nd52e.com/gfwlist +server=/ceicdata.com/127.0.0.1#5335 +ipset=/ceicdata.com/gfwlist +server=/thomsonreuters.cn/127.0.0.1#5335 +ipset=/thomsonreuters.cn/gfwlist +server=/lesboerotica.net/127.0.0.1#5335 +ipset=/lesboerotica.net/gfwlist +server=/youtube.sv/127.0.0.1#5335 +ipset=/youtube.sv/gfwlist +server=/pakistanporntube.net/127.0.0.1#5335 +ipset=/pakistanporntube.net/gfwlist +server=/alhs.link/127.0.0.1#5335 +ipset=/alhs.link/gfwlist +server=/ignites.com/127.0.0.1#5335 +ipset=/ignites.com/gfwlist +server=/ikea.ph/127.0.0.1#5335 +ipset=/ikea.ph/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=/hentai.pro/127.0.0.1#5335 +ipset=/hentai.pro/gfwlist +server=/bmw-corporate-sales.com/127.0.0.1#5335 +ipset=/bmw-corporate-sales.com/gfwlist +server=/amateursecrets.net/127.0.0.1#5335 +ipset=/amateursecrets.net/gfwlist +server=/shopfacebook.com/127.0.0.1#5335 +ipset=/shopfacebook.com/gfwlist +server=/mypornbookmarks.com/127.0.0.1#5335 +ipset=/mypornbookmarks.com/gfwlist +server=/bigboobsalert.com/127.0.0.1#5335 +ipset=/bigboobsalert.com/gfwlist +server=/nudeandhairy.com/127.0.0.1#5335 +ipset=/nudeandhairy.com/gfwlist +server=/githubpreview.dev/127.0.0.1#5335 +ipset=/githubpreview.dev/gfwlist +server=/pornopantry.com/127.0.0.1#5335 +ipset=/pornopantry.com/gfwlist +server=/baselinestudy.com/127.0.0.1#5335 +ipset=/baselinestudy.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=/xxvideoss.org/127.0.0.1#5335 +ipset=/xxvideoss.org/gfwlist +server=/conan.xxx/127.0.0.1#5335 +ipset=/conan.xxx/gfwlist +server=/findmyipad.com/127.0.0.1#5335 +ipset=/findmyipad.com/gfwlist +server=/flickr.com/127.0.0.1#5335 +ipset=/flickr.com/gfwlist +server=/ipod.co.za/127.0.0.1#5335 +ipset=/ipod.co.za/gfwlist +server=/iwantmature.com/127.0.0.1#5335 +ipset=/iwantmature.com/gfwlist +server=/hclips.com/127.0.0.1#5335 +ipset=/hclips.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=/wifesharingpics.com/127.0.0.1#5335 +ipset=/wifesharingpics.com/gfwlist +server=/google.com.np/127.0.0.1#5335 +ipset=/google.com.np/gfwlist +server=/googil.com/127.0.0.1#5335 +ipset=/googil.com/gfwlist +server=/cloudinary.com/127.0.0.1#5335 +ipset=/cloudinary.com/gfwlist +server=/canon.nl/127.0.0.1#5335 +ipset=/canon.nl/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=/braintreegateway.com/127.0.0.1#5335 +ipset=/braintreegateway.com/gfwlist +server=/zoopornmd.com/127.0.0.1#5335 +ipset=/zoopornmd.com/gfwlist +server=/fuckmatureporn.com/127.0.0.1#5335 +ipset=/fuckmatureporn.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=/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=/wvm0agb4.me/127.0.0.1#5335 +ipset=/wvm0agb4.me/gfwlist +server=/debian.org/127.0.0.1#5335 +ipset=/debian.org/gfwlist +server=/idol-sagasukun.com/127.0.0.1#5335 +ipset=/idol-sagasukun.com/gfwlist +server=/scpdb.org/127.0.0.1#5335 +ipset=/scpdb.org/gfwlist +server=/india.com/127.0.0.1#5335 +ipset=/india.com/gfwlist +server=/vanish.com.mx/127.0.0.1#5335 +ipset=/vanish.com.mx/gfwlist +server=/page3.com/127.0.0.1#5335 +ipset=/page3.com/gfwlist +server=/signalprocessingsociety.org/127.0.0.1#5335 +ipset=/signalprocessingsociety.org/gfwlist +server=/bmwgroupdirect.com/127.0.0.1#5335 +ipset=/bmwgroupdirect.com/gfwlist +server=/avcrempie.com/127.0.0.1#5335 +ipset=/avcrempie.com/gfwlist +server=/movefreeoffers.com/127.0.0.1#5335 +ipset=/movefreeoffers.com/gfwlist +server=/pearsonclinical.ca/127.0.0.1#5335 +ipset=/pearsonclinical.ca/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=/touhouwiki.net/127.0.0.1#5335 +ipset=/touhouwiki.net/gfwlist +server=/youtube.it/127.0.0.1#5335 +ipset=/youtube.it/gfwlist +server=/1lib.education/127.0.0.1#5335 +ipset=/1lib.education/gfwlist +server=/forbiddenmomsarchive.com/127.0.0.1#5335 +ipset=/forbiddenmomsarchive.com/gfwlist +server=/animalincum.com/127.0.0.1#5335 +ipset=/animalincum.com/gfwlist +server=/alphabet.pl/127.0.0.1#5335 +ipset=/alphabet.pl/gfwlist +server=/alteraforums.com/127.0.0.1#5335 +ipset=/alteraforums.com/gfwlist +server=/xxxstreams.org/127.0.0.1#5335 +ipset=/xxxstreams.org/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=/chubbypornonly.com/127.0.0.1#5335 +ipset=/chubbypornonly.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=/google.fm/127.0.0.1#5335 +ipset=/google.fm/gfwlist +server=/hqseek.com/127.0.0.1#5335 +ipset=/hqseek.com/gfwlist +server=/zeetv.com/127.0.0.1#5335 +ipset=/zeetv.com/gfwlist +server=/shadowcomplex.com/127.0.0.1#5335 +ipset=/shadowcomplex.com/gfwlist +server=/get.rsvp/127.0.0.1#5335 +ipset=/get.rsvp/gfwlist +server=/maturesinhd.com/127.0.0.1#5335 +ipset=/maturesinhd.com/gfwlist +server=/cheapbeats365.com/127.0.0.1#5335 +ipset=/cheapbeats365.com/gfwlist +server=/svc.ms/127.0.0.1#5335 +ipset=/svc.ms/gfwlist +server=/asextube.net/127.0.0.1#5335 +ipset=/asextube.net/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=/starbucks.ca/127.0.0.1#5335 +ipset=/starbucks.ca/gfwlist +server=/muryouav.net/127.0.0.1#5335 +ipset=/muryouav.net/gfwlist +server=/directvcrossvilletn.com/127.0.0.1#5335 +ipset=/directvcrossvilletn.com/gfwlist +server=/msft.net/127.0.0.1#5335 +ipset=/msft.net/gfwlist +server=/teensloveanal.com/127.0.0.1#5335 +ipset=/teensloveanal.com/gfwlist +server=/beats1.tv/127.0.0.1#5335 +ipset=/beats1.tv/gfwlist +server=/apple-pay.wang/127.0.0.1#5335 +ipset=/apple-pay.wang/gfwlist +server=/ocsp.microsoft.com/127.0.0.1#5335 +ipset=/ocsp.microsoft.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=/telegram-cdn.org/127.0.0.1#5335 +ipset=/telegram-cdn.org/gfwlist +server=/researchkit.hk/127.0.0.1#5335 +ipset=/researchkit.hk/gfwlist +server=/airport.eu/127.0.0.1#5335 +ipset=/airport.eu/gfwlist +server=/ieeer10.org/127.0.0.1#5335 +ipset=/ieeer10.org/gfwlist +server=/paramountplus.com/127.0.0.1#5335 +ipset=/paramountplus.com/gfwlist +server=/nuget.org/127.0.0.1#5335 +ipset=/nuget.org/gfwlist +server=/bbcpersian.com/127.0.0.1#5335 +ipset=/bbcpersian.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=/1lib.eu/127.0.0.1#5335 +ipset=/1lib.eu/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=/xxxpornmovs.com/127.0.0.1#5335 +ipset=/xxxpornmovs.com/gfwlist +server=/czechwifeswap.com/127.0.0.1#5335 +ipset=/czechwifeswap.com/gfwlist +server=/facebookmanager.info/127.0.0.1#5335 +ipset=/facebookmanager.info/gfwlist +server=/siska.video/127.0.0.1#5335 +ipset=/siska.video/gfwlist +server=/4tubefree.net/127.0.0.1#5335 +ipset=/4tubefree.net/gfwlist +server=/97dounai.top/127.0.0.1#5335 +ipset=/97dounai.top/gfwlist +server=/wmt.co/127.0.0.1#5335 +ipset=/wmt.co/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=/zingtruyen.net/127.0.0.1#5335 +ipset=/zingtruyen.net/gfwlist +server=/dctbeatsbydre.com/127.0.0.1#5335 +ipset=/dctbeatsbydre.com/gfwlist +server=/smm99999.com/127.0.0.1#5335 +ipset=/smm99999.com/gfwlist +server=/anonproxy.info/127.0.0.1#5335 +ipset=/anonproxy.info/gfwlist +server=/shopify.com/127.0.0.1#5335 +ipset=/shopify.com/gfwlist +server=/zndsk.com/127.0.0.1#5335 +ipset=/zndsk.com/gfwlist +server=/kingstagram.com/127.0.0.1#5335 +ipset=/kingstagram.com/gfwlist +server=/metaporn.com/127.0.0.1#5335 +ipset=/metaporn.com/gfwlist +server=/mini.ch/127.0.0.1#5335 +ipset=/mini.ch/gfwlist +server=/buyitnow.net/127.0.0.1#5335 +ipset=/buyitnow.net/gfwlist +server=/newsexwap.com/127.0.0.1#5335 +ipset=/newsexwap.com/gfwlist +server=/blogspot.nl/127.0.0.1#5335 +ipset=/blogspot.nl/gfwlist +server=/canon.co.za/127.0.0.1#5335 +ipset=/canon.co.za/gfwlist +server=/aesworkshops.com/127.0.0.1#5335 +ipset=/aesworkshops.com/gfwlist +server=/danemarket.com/127.0.0.1#5335 +ipset=/danemarket.com/gfwlist +server=/bmw-world.net/127.0.0.1#5335 +ipset=/bmw-world.net/gfwlist +server=/pornobrasileiro.tv/127.0.0.1#5335 +ipset=/pornobrasileiro.tv/gfwlist +server=/tabustudios.co/127.0.0.1#5335 +ipset=/tabustudios.co/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=/yahoo-news.com.hk/127.0.0.1#5335 +ipset=/yahoo-news.com.hk/gfwlist +server=/hotwifemovies.com/127.0.0.1#5335 +ipset=/hotwifemovies.com/gfwlist +server=/v2ex.com/127.0.0.1#5335 +ipset=/v2ex.com/gfwlist +server=/ikea.hr/127.0.0.1#5335 +ipset=/ikea.hr/gfwlist +server=/hk01.com/127.0.0.1#5335 +ipset=/hk01.com/gfwlist +server=/boy18tube.com/127.0.0.1#5335 +ipset=/boy18tube.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=/boodigogo.com/127.0.0.1#5335 +ipset=/boodigogo.com/gfwlist +server=/fsacebok.com/127.0.0.1#5335 +ipset=/fsacebok.com/gfwlist +server=/beats-bydrecheapsale.com/127.0.0.1#5335 +ipset=/beats-bydrecheapsale.com/gfwlist +server=/alt8-mtalk.google.com/127.0.0.1#5335 +ipset=/alt8-mtalk.google.com/gfwlist +server=/facebookpay.com/127.0.0.1#5335 +ipset=/facebookpay.com/gfwlist +server=/pearson.ch/127.0.0.1#5335 +ipset=/pearson.ch/gfwlist +server=/intel.ma/127.0.0.1#5335 +ipset=/intel.ma/gfwlist +server=/canon.ua/127.0.0.1#5335 +ipset=/canon.ua/gfwlist +server=/usaco.org/127.0.0.1#5335 +ipset=/usaco.org/gfwlist +server=/scopus.com/127.0.0.1#5335 +ipset=/scopus.com/gfwlist +server=/mortein.co.in/127.0.0.1#5335 +ipset=/mortein.co.in/gfwlist +server=/savitahd.net/127.0.0.1#5335 +ipset=/savitahd.net/gfwlist +server=/5i01.com/127.0.0.1#5335 +ipset=/5i01.com/gfwlist +server=/facebookemail.com/127.0.0.1#5335 +ipset=/facebookemail.com/gfwlist +server=/faproulette.co/127.0.0.1#5335 +ipset=/faproulette.co/gfwlist +server=/bmw-voli.me/127.0.0.1#5335 +ipset=/bmw-voli.me/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=/men.com/127.0.0.1#5335 +ipset=/men.com/gfwlist +server=/skypeassets.net/127.0.0.1#5335 +ipset=/skypeassets.net/gfwlist +server=/xxxfree.watch/127.0.0.1#5335 +ipset=/xxxfree.watch/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=/mobileporngames.com/127.0.0.1#5335 +ipset=/mobileporngames.com/gfwlist +server=/strip-poker.xxx/127.0.0.1#5335 +ipset=/strip-poker.xxx/gfwlist +server=/tytporno.online/127.0.0.1#5335 +ipset=/tytporno.online/gfwlist +server=/bestbuycharityclassic.com/127.0.0.1#5335 +ipset=/bestbuycharityclassic.com/gfwlist +server=/scholar.google.li/127.0.0.1#5335 +ipset=/scholar.google.li/gfwlist +server=/unwire.hk/127.0.0.1#5335 +ipset=/unwire.hk/gfwlist +server=/google.sr/127.0.0.1#5335 +ipset=/google.sr/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=/globalriskregulator.com/127.0.0.1#5335 +ipset=/globalriskregulator.com/gfwlist +server=/paofuyun.me/127.0.0.1#5335 +ipset=/paofuyun.me/gfwlist +server=/pornoisy.com/127.0.0.1#5335 +ipset=/pornoisy.com/gfwlist +server=/calgon.ch/127.0.0.1#5335 +ipset=/calgon.ch/gfwlist +server=/xxxporndig.com/127.0.0.1#5335 +ipset=/xxxporndig.com/gfwlist +server=/v2fly.org/127.0.0.1#5335 +ipset=/v2fly.org/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=/ikea.com.pt/127.0.0.1#5335 +ipset=/ikea.com.pt/gfwlist +server=/minirichmond.ca/127.0.0.1#5335 +ipset=/minirichmond.ca/gfwlist +server=/fxnetworks.com/127.0.0.1#5335 +ipset=/fxnetworks.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=/gayapatal.com/127.0.0.1#5335 +ipset=/gayapatal.com/gfwlist +server=/facebooktv.org/127.0.0.1#5335 +ipset=/facebooktv.org/gfwlist +server=/beatsbydrecolors.com/127.0.0.1#5335 +ipset=/beatsbydrecolors.com/gfwlist +server=/adultgames.me/127.0.0.1#5335 +ipset=/adultgames.me/gfwlist +server=/zoo-xvideo.com/127.0.0.1#5335 +ipset=/zoo-xvideo.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=/azurecomm.net/127.0.0.1#5335 +ipset=/azurecomm.net/gfwlist +server=/adult3dfantasycomics.com/127.0.0.1#5335 +ipset=/adult3dfantasycomics.com/gfwlist +server=/directvbundles.com/127.0.0.1#5335 +ipset=/directvbundles.com/gfwlist +server=/iijav.com/127.0.0.1#5335 +ipset=/iijav.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=/vixvids.to/127.0.0.1#5335 +ipset=/vixvids.to/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=/xn--uis17aj9kmuf.com/127.0.0.1#5335 +ipset=/xn--uis17aj9kmuf.com/gfwlist +server=/buycheapbeatsbus.com/127.0.0.1#5335 +ipset=/buycheapbeatsbus.com/gfwlist +server=/bmw-golfsport.com/127.0.0.1#5335 +ipset=/bmw-golfsport.com/gfwlist +server=/hbo.com.edgesuite.net/127.0.0.1#5335 +ipset=/hbo.com.edgesuite.net/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=/thottok.com/127.0.0.1#5335 +ipset=/thottok.com/gfwlist +server=/durexusa.com/127.0.0.1#5335 +ipset=/durexusa.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=/minibrossard.com/127.0.0.1#5335 +ipset=/minibrossard.com/gfwlist +server=/paypal-online.org/127.0.0.1#5335 +ipset=/paypal-online.org/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=/disney.ph/127.0.0.1#5335 +ipset=/disney.ph/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=/paypal-scoop.com/127.0.0.1#5335 +ipset=/paypal-scoop.com/gfwlist +server=/vs-cmaf-pushb-ww-live.akamaized.net/127.0.0.1#5335 +ipset=/vs-cmaf-pushb-ww-live.akamaized.net/gfwlist +server=/youngpornvideos.com/127.0.0.1#5335 +ipset=/youngpornvideos.com/gfwlist +server=/yandex.co.il/127.0.0.1#5335 +ipset=/yandex.co.il/gfwlist +server=/sexyseeker.com/127.0.0.1#5335 +ipset=/sexyseeker.com/gfwlist +server=/ggjav.com/127.0.0.1#5335 +ipset=/ggjav.com/gfwlist +server=/beatsbydreforyououtlet.com/127.0.0.1#5335 +ipset=/beatsbydreforyououtlet.com/gfwlist +server=/follasian.com/127.0.0.1#5335 +ipset=/follasian.com/gfwlist +server=/adultdvdmarketplace.com/127.0.0.1#5335 +ipset=/adultdvdmarketplace.com/gfwlist +server=/xxxmofo.com/127.0.0.1#5335 +ipset=/xxxmofo.com/gfwlist +server=/gitstar.com/127.0.0.1#5335 +ipset=/gitstar.com/gfwlist +server=/pixtronix.com/127.0.0.1#5335 +ipset=/pixtronix.com/gfwlist +server=/redfaptube.com/127.0.0.1#5335 +ipset=/redfaptube.com/gfwlist +server=/danskpornofilm.com/127.0.0.1#5335 +ipset=/danskpornofilm.com/gfwlist +server=/smutty.com/127.0.0.1#5335 +ipset=/smutty.com/gfwlist +server=/talksport.com/127.0.0.1#5335 +ipset=/talksport.com/gfwlist +server=/latintubeporn.com/127.0.0.1#5335 +ipset=/latintubeporn.com/gfwlist +server=/analhomeporn.com/127.0.0.1#5335 +ipset=/analhomeporn.com/gfwlist +server=/coedcherry.com/127.0.0.1#5335 +ipset=/coedcherry.com/gfwlist +server=/javbraze.com/127.0.0.1#5335 +ipset=/javbraze.com/gfwlist +server=/brazzer.com/127.0.0.1#5335 +ipset=/brazzer.com/gfwlist +server=/apple.co.hu/127.0.0.1#5335 +ipset=/apple.co.hu/gfwlist +server=/hkbn.com.hk/127.0.0.1#5335 +ipset=/hkbn.com.hk/gfwlist +server=/iphone-vip1.com/127.0.0.1#5335 +ipset=/iphone-vip1.com/gfwlist +server=/vmware.com/127.0.0.1#5335 +ipset=/vmware.com/gfwlist +server=/ypmate.com/127.0.0.1#5335 +ipset=/ypmate.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=/researchkit.org/127.0.0.1#5335 +ipset=/researchkit.org/gfwlist +server=/cloudlive.com/127.0.0.1#5335 +ipset=/cloudlive.com/gfwlist +server=/sexygloz.com/127.0.0.1#5335 +ipset=/sexygloz.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=/beatsfactoroutlets.com/127.0.0.1#5335 +ipset=/beatsfactoroutlets.com/gfwlist +server=/manhwahentai.me/127.0.0.1#5335 +ipset=/manhwahentai.me/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=/scholar.google.com.eg/127.0.0.1#5335 +ipset=/scholar.google.com.eg/gfwlist +server=/title.sh/127.0.0.1#5335 +ipset=/title.sh/gfwlist +server=/triokini.com/127.0.0.1#5335 +ipset=/triokini.com/gfwlist +server=/xxxyoungxxx.com/127.0.0.1#5335 +ipset=/xxxyoungxxx.com/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=/amateur-home-sex.com/127.0.0.1#5335 +ipset=/amateur-home-sex.com/gfwlist +server=/fixtracking.com/127.0.0.1#5335 +ipset=/fixtracking.com/gfwlist +server=/highwirepress.com/127.0.0.1#5335 +ipset=/highwirepress.com/gfwlist +server=/celebrityslips.com/127.0.0.1#5335 +ipset=/celebrityslips.com/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=/facebokk.com/127.0.0.1#5335 +ipset=/facebokk.com/gfwlist +server=/lezpoo.com/127.0.0.1#5335 +ipset=/lezpoo.com/gfwlist +server=/sportswomanoftheyear.co.uk/127.0.0.1#5335 +ipset=/sportswomanoftheyear.co.uk/gfwlist +server=/appbridge.io/127.0.0.1#5335 +ipset=/appbridge.io/gfwlist +server=/teamneedforspeed.com/127.0.0.1#5335 +ipset=/teamneedforspeed.com/gfwlist +server=/r-new-sale.blog.jp/127.0.0.1#5335 +ipset=/r-new-sale.blog.jp/gfwlist +server=/freehdinterracialporn.in/127.0.0.1#5335 +ipset=/freehdinterracialporn.in/gfwlist +server=/ffmpeg.org/127.0.0.1#5335 +ipset=/ffmpeg.org/gfwlist +server=/liveporngirls.com/127.0.0.1#5335 +ipset=/liveporngirls.com/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=/alphabetfinance.net/127.0.0.1#5335 +ipset=/alphabetfinance.net/gfwlist +server=/camrabbit.com/127.0.0.1#5335 +ipset=/camrabbit.com/gfwlist +server=/intel.nu/127.0.0.1#5335 +ipset=/intel.nu/gfwlist +server=/pornpaw.com/127.0.0.1#5335 +ipset=/pornpaw.com/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=/libgen.fun/127.0.0.1#5335 +ipset=/libgen.fun/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=/apple.xyz/127.0.0.1#5335 +ipset=/apple.xyz/gfwlist +server=/paypalnet.net/127.0.0.1#5335 +ipset=/paypalnet.net/gfwlist +server=/hentai.toys/127.0.0.1#5335 +ipset=/hentai.toys/gfwlist +server=/privatecasting-x.com/127.0.0.1#5335 +ipset=/privatecasting-x.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=/sgp1.fun/127.0.0.1#5335 +ipset=/sgp1.fun/gfwlist +server=/bellesa.co/127.0.0.1#5335 +ipset=/bellesa.co/gfwlist +server=/tropictube.com/127.0.0.1#5335 +ipset=/tropictube.com/gfwlist +server=/virsto.com/127.0.0.1#5335 +ipset=/virsto.com/gfwlist +server=/getboxer.com/127.0.0.1#5335 +ipset=/getboxer.com/gfwlist +server=/dirty.games/127.0.0.1#5335 +ipset=/dirty.games/gfwlist +server=/vfsco.nl/127.0.0.1#5335 +ipset=/vfsco.nl/gfwlist +server=/nudes7.com/127.0.0.1#5335 +ipset=/nudes7.com/gfwlist +server=/zeit-world.com/127.0.0.1#5335 +ipset=/zeit-world.com/gfwlist +server=/mixvintagesex.com/127.0.0.1#5335 +ipset=/mixvintagesex.com/gfwlist +server=/fansnudes.com/127.0.0.1#5335 +ipset=/fansnudes.com/gfwlist +server=/kijij.ca/127.0.0.1#5335 +ipset=/kijij.ca/gfwlist +server=/hotstar.com/127.0.0.1#5335 +ipset=/hotstar.com/gfwlist +server=/amateurs-fuck.com/127.0.0.1#5335 +ipset=/amateurs-fuck.com/gfwlist +server=/lin.ee/127.0.0.1#5335 +ipset=/lin.ee/gfwlist +server=/l-0005.dc-msedge.net/127.0.0.1#5335 +ipset=/l-0005.dc-msedge.net/gfwlist +server=/agag.tw/127.0.0.1#5335 +ipset=/agag.tw/gfwlist +server=/volvomerchandise.com/127.0.0.1#5335 +ipset=/volvomerchandise.com/gfwlist +server=/xmoviesforyou.com/127.0.0.1#5335 +ipset=/xmoviesforyou.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=/oculus3d.com/127.0.0.1#5335 +ipset=/oculus3d.com/gfwlist +server=/instagify.com/127.0.0.1#5335 +ipset=/instagify.com/gfwlist +server=/beatsbydreformall2013-nl.com/127.0.0.1#5335 +ipset=/beatsbydreformall2013-nl.com/gfwlist +server=/oyeloca.com/127.0.0.1#5335 +ipset=/oyeloca.com/gfwlist +server=/foofle.com/127.0.0.1#5335 +ipset=/foofle.com/gfwlist +server=/directvpomise.com/127.0.0.1#5335 +ipset=/directvpomise.com/gfwlist +server=/aliverewind.com/127.0.0.1#5335 +ipset=/aliverewind.com/gfwlist +server=/cbsi.video/127.0.0.1#5335 +ipset=/cbsi.video/gfwlist +server=/bmwmotorshowblog.com/127.0.0.1#5335 +ipset=/bmwmotorshowblog.com/gfwlist +server=/b-ok.org/127.0.0.1#5335 +ipset=/b-ok.org/gfwlist +server=/xsava.xyz/127.0.0.1#5335 +ipset=/xsava.xyz/gfwlist +server=/flow.org/127.0.0.1#5335 +ipset=/flow.org/gfwlist +server=/adultepic.com/127.0.0.1#5335 +ipset=/adultepic.com/gfwlist +server=/lysol.cl/127.0.0.1#5335 +ipset=/lysol.cl/gfwlist +server=/crr.com/127.0.0.1#5335 +ipset=/crr.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=/bigboobbundle.com/127.0.0.1#5335 +ipset=/bigboobbundle.com/gfwlist +server=/bmw.bs/127.0.0.1#5335 +ipset=/bmw.bs/gfwlist +server=/hentaihand.com/127.0.0.1#5335 +ipset=/hentaihand.com/gfwlist +server=/macbookair.com/127.0.0.1#5335 +ipset=/macbookair.com/gfwlist +server=/bloomberg.co.kr/127.0.0.1#5335 +ipset=/bloomberg.co.kr/gfwlist +server=/mrpornlive.com/127.0.0.1#5335 +ipset=/mrpornlive.com/gfwlist +server=/bigtitangelawhite.com/127.0.0.1#5335 +ipset=/bigtitangelawhite.com/gfwlist +server=/meridian.net/127.0.0.1#5335 +ipset=/meridian.net/gfwlist +server=/erome.it/127.0.0.1#5335 +ipset=/erome.it/gfwlist +server=/mediafiles-cisco.com/127.0.0.1#5335 +ipset=/mediafiles-cisco.com/gfwlist +server=/hentaibar.com/127.0.0.1#5335 +ipset=/hentaibar.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=/ikea.com.do/127.0.0.1#5335 +ipset=/ikea.com.do/gfwlist +server=/youtube.ph/127.0.0.1#5335 +ipset=/youtube.ph/gfwlist +server=/12diasderegalosdeitunes.com.co/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.com.co/gfwlist +server=/senzuritv.net/127.0.0.1#5335 +ipset=/senzuritv.net/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=/bdsm123.xyz/127.0.0.1#5335 +ipset=/bdsm123.xyz/gfwlist +server=/beastythumbs.com/127.0.0.1#5335 +ipset=/beastythumbs.com/gfwlist +server=/yourcolonic.com/127.0.0.1#5335 +ipset=/yourcolonic.com/gfwlist +server=/ebayshoesstore.com/127.0.0.1#5335 +ipset=/ebayshoesstore.com/gfwlist +server=/playno1.com/127.0.0.1#5335 +ipset=/playno1.com/gfwlist +server=/applestore.com.ro/127.0.0.1#5335 +ipset=/applestore.com.ro/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=/cheapcustombeatsbydre.com/127.0.0.1#5335 +ipset=/cheapcustombeatsbydre.com/gfwlist +server=/casquebeatsdocteurdre.com/127.0.0.1#5335 +ipset=/casquebeatsdocteurdre.com/gfwlist +server=/ikea.com.lv/127.0.0.1#5335 +ipset=/ikea.com.lv/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=/evilx.su/127.0.0.1#5335 +ipset=/evilx.su/gfwlist +server=/artstation.com/127.0.0.1#5335 +ipset=/artstation.com/gfwlist +server=/freshscat.com/127.0.0.1#5335 +ipset=/freshscat.com/gfwlist +server=/hpconnected.net/127.0.0.1#5335 +ipset=/hpconnected.net/gfwlist +server=/wbvm4s.com/127.0.0.1#5335 +ipset=/wbvm4s.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=/rea-asia.com/127.0.0.1#5335 +ipset=/rea-asia.com/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=/volvogroup.mx/127.0.0.1#5335 +ipset=/volvogroup.mx/gfwlist +server=/myavsuper.com/127.0.0.1#5335 +ipset=/myavsuper.com/gfwlist +server=/csakporno.hu/127.0.0.1#5335 +ipset=/csakporno.hu/gfwlist +server=/animeidhentai.com/127.0.0.1#5335 +ipset=/animeidhentai.com/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=/valuegb.com/127.0.0.1#5335 +ipset=/valuegb.com/gfwlist +server=/world3d.biz/127.0.0.1#5335 +ipset=/world3d.biz/gfwlist +server=/yuvutu.com/127.0.0.1#5335 +ipset=/yuvutu.com/gfwlist +server=/prettynubiles.com/127.0.0.1#5335 +ipset=/prettynubiles.com/gfwlist +server=/zooporn.shiksha/127.0.0.1#5335 +ipset=/zooporn.shiksha/gfwlist +server=/mastercard.com.ar/127.0.0.1#5335 +ipset=/mastercard.com.ar/gfwlist +server=/xinmeitulu.com/127.0.0.1#5335 +ipset=/xinmeitulu.com/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=/6parknews.com/127.0.0.1#5335 +ipset=/6parknews.com/gfwlist +server=/drebeatsbuy.com/127.0.0.1#5335 +ipset=/drebeatsbuy.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=/acgfabu.com/127.0.0.1#5335 +ipset=/acgfabu.com/gfwlist +server=/date2night.xyz/127.0.0.1#5335 +ipset=/date2night.xyz/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=/bandwagonhost.com/127.0.0.1#5335 +ipset=/bandwagonhost.com/gfwlist +server=/alpherafs.ca/127.0.0.1#5335 +ipset=/alpherafs.ca/gfwlist +server=/javcdn.cc/127.0.0.1#5335 +ipset=/javcdn.cc/gfwlist +server=/bridgestonecomercial.com.mx/127.0.0.1#5335 +ipset=/bridgestonecomercial.com.mx/gfwlist +server=/nijie.info/127.0.0.1#5335 +ipset=/nijie.info/gfwlist +server=/dkr.com/127.0.0.1#5335 +ipset=/dkr.com/gfwlist +server=/facdebook.com/127.0.0.1#5335 +ipset=/facdebook.com/gfwlist +server=/japanxxxfilms.com/127.0.0.1#5335 +ipset=/japanxxxfilms.com/gfwlist +server=/cms-twdigitalassets.com/127.0.0.1#5335 +ipset=/cms-twdigitalassets.com/gfwlist +server=/malaypornhub.com/127.0.0.1#5335 +ipset=/malaypornhub.com/gfwlist +server=/animehentaihub.com/127.0.0.1#5335 +ipset=/animehentaihub.com/gfwlist +server=/curvybbwwives.com/127.0.0.1#5335 +ipset=/curvybbwwives.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=/topcuckolds.com/127.0.0.1#5335 +ipset=/topcuckolds.com/gfwlist +server=/aspbjournals.org/127.0.0.1#5335 +ipset=/aspbjournals.org/gfwlist +server=/intel.com.br/127.0.0.1#5335 +ipset=/intel.com.br/gfwlist +server=/bloombergbriefs.com/127.0.0.1#5335 +ipset=/bloombergbriefs.com/gfwlist +server=/freebasics.net/127.0.0.1#5335 +ipset=/freebasics.net/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=/xvideosamadoras.com/127.0.0.1#5335 +ipset=/xvideosamadoras.com/gfwlist +server=/baeb.com/127.0.0.1#5335 +ipset=/baeb.com/gfwlist +server=/macos.com.au/127.0.0.1#5335 +ipset=/macos.com.au/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=/clitgames.com/127.0.0.1#5335 +ipset=/clitgames.com/gfwlist +server=/nikesnowboarding.com/127.0.0.1#5335 +ipset=/nikesnowboarding.com/gfwlist +server=/sexvid.xxx/127.0.0.1#5335 +ipset=/sexvid.xxx/gfwlist +server=/pornogrund.com/127.0.0.1#5335 +ipset=/pornogrund.com/gfwlist +server=/pornlulu.com/127.0.0.1#5335 +ipset=/pornlulu.com/gfwlist +server=/youtube.co.th/127.0.0.1#5335 +ipset=/youtube.co.th/gfwlist +server=/newscommercial.co.uk/127.0.0.1#5335 +ipset=/newscommercial.co.uk/gfwlist +server=/xxxvideor.com/127.0.0.1#5335 +ipset=/xxxvideor.com/gfwlist +server=/sexinsex.net/127.0.0.1#5335 +ipset=/sexinsex.net/gfwlist +server=/daftporn.com/127.0.0.1#5335 +ipset=/daftporn.com/gfwlist +server=/beatsbydreoutletscheap.com/127.0.0.1#5335 +ipset=/beatsbydreoutletscheap.com/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=/starbuckscard.ph/127.0.0.1#5335 +ipset=/starbuckscard.ph/gfwlist +server=/nike.xn--hxt814e/127.0.0.1#5335 +ipset=/nike.xn--hxt814e/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=/youtube.co.hu/127.0.0.1#5335 +ipset=/youtube.co.hu/gfwlist +server=/xmalay.com/127.0.0.1#5335 +ipset=/xmalay.com/gfwlist +server=/wowindianporn.com/127.0.0.1#5335 +ipset=/wowindianporn.com/gfwlist +server=/google.com.mx/127.0.0.1#5335 +ipset=/google.com.mx/gfwlist +server=/watchmygf.to/127.0.0.1#5335 +ipset=/watchmygf.to/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=/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=/playbar.biz/127.0.0.1#5335 +ipset=/playbar.biz/gfwlist +server=/youtube.tn/127.0.0.1#5335 +ipset=/youtube.tn/gfwlist +server=/tubepornclassic.com/127.0.0.1#5335 +ipset=/tubepornclassic.com/gfwlist +server=/amandalist.com/127.0.0.1#5335 +ipset=/amandalist.com/gfwlist +server=/allswingersclubs.org/127.0.0.1#5335 +ipset=/allswingersclubs.org/gfwlist +server=/macbook.hk/127.0.0.1#5335 +ipset=/macbook.hk/gfwlist +server=/50dh.app/127.0.0.1#5335 +ipset=/50dh.app/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=/pwnedpasswords.com/127.0.0.1#5335 +ipset=/pwnedpasswords.com/gfwlist +server=/intel.lk/127.0.0.1#5335 +ipset=/intel.lk/gfwlist +server=/apple.bs/127.0.0.1#5335 +ipset=/apple.bs/gfwlist +server=/go-lang.net/127.0.0.1#5335 +ipset=/go-lang.net/gfwlist +server=/banatfun.com/127.0.0.1#5335 +ipset=/banatfun.com/gfwlist +server=/johnpersons.com/127.0.0.1#5335 +ipset=/johnpersons.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=/thebankerdatabase.com/127.0.0.1#5335 +ipset=/thebankerdatabase.com/gfwlist +server=/animal-hentai.com/127.0.0.1#5335 +ipset=/animal-hentai.com/gfwlist +server=/samsungknox.com/127.0.0.1#5335 +ipset=/samsungknox.com/gfwlist +server=/veetclub.it/127.0.0.1#5335 +ipset=/veetclub.it/gfwlist +server=/bmw-connecteddrive.at/127.0.0.1#5335 +ipset=/bmw-connecteddrive.at/gfwlist +server=/hotstar-cdn.net/127.0.0.1#5335 +ipset=/hotstar-cdn.net/gfwlist +server=/l-0005.l-msedge.net/127.0.0.1#5335 +ipset=/l-0005.l-msedge.net/gfwlist +server=/fapster.xxx/127.0.0.1#5335 +ipset=/fapster.xxx/gfwlist +server=/d2pass.com/127.0.0.1#5335 +ipset=/d2pass.com/gfwlist +server=/magentomobile.com/127.0.0.1#5335 +ipset=/magentomobile.com/gfwlist +server=/gayvl.net/127.0.0.1#5335 +ipset=/gayvl.net/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=/ping.pe/127.0.0.1#5335 +ipset=/ping.pe/gfwlist +server=/camgirlstemple.com/127.0.0.1#5335 +ipset=/camgirlstemple.com/gfwlist +server=/beats-bydre-mall.com/127.0.0.1#5335 +ipset=/beats-bydre-mall.com/gfwlist +server=/milfsexstart.nl/127.0.0.1#5335 +ipset=/milfsexstart.nl/gfwlist +server=/machigoto.jp/127.0.0.1#5335 +ipset=/machigoto.jp/gfwlist +server=/monsterbeats365buy.com/127.0.0.1#5335 +ipset=/monsterbeats365buy.com/gfwlist +server=/newbienudes.com/127.0.0.1#5335 +ipset=/newbienudes.com/gfwlist +server=/studiofow.com/127.0.0.1#5335 +ipset=/studiofow.com/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=/befuck.com/127.0.0.1#5335 +ipset=/befuck.com/gfwlist +server=/bimbim.com/127.0.0.1#5335 +ipset=/bimbim.com/gfwlist +server=/yahoo.co.id/127.0.0.1#5335 +ipset=/yahoo.co.id/gfwlist +server=/minisaskatoon.ca/127.0.0.1#5335 +ipset=/minisaskatoon.ca/gfwlist +server=/macbookair.hk/127.0.0.1#5335 +ipset=/macbookair.hk/gfwlist +server=/wiivc.net/127.0.0.1#5335 +ipset=/wiivc.net/gfwlist +server=/bridgestone-korea.co.kr/127.0.0.1#5335 +ipset=/bridgestone-korea.co.kr/gfwlist +server=/bestbuy.com/127.0.0.1#5335 +ipset=/bestbuy.com/gfwlist +server=/trannyvideosxxx.com/127.0.0.1#5335 +ipset=/trannyvideosxxx.com/gfwlist +server=/catalina.hk/127.0.0.1#5335 +ipset=/catalina.hk/gfwlist +server=/lelavement.com/127.0.0.1#5335 +ipset=/lelavement.com/gfwlist +server=/udacity.com/127.0.0.1#5335 +ipset=/udacity.com/gfwlist +server=/sexzy4.com/127.0.0.1#5335 +ipset=/sexzy4.com/gfwlist +server=/spankbang1.com/127.0.0.1#5335 +ipset=/spankbang1.com/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=/youtube.com.pt/127.0.0.1#5335 +ipset=/youtube.com.pt/gfwlist +server=/uncams.com/127.0.0.1#5335 +ipset=/uncams.com/gfwlist +server=/salesforce.com/127.0.0.1#5335 +ipset=/salesforce.com/gfwlist +server=/travelex.co.nz/127.0.0.1#5335 +ipset=/travelex.co.nz/gfwlist +server=/vaultproject.io/127.0.0.1#5335 +ipset=/vaultproject.io/gfwlist +server=/cervical-exam.com/127.0.0.1#5335 +ipset=/cervical-exam.com/gfwlist +server=/microsoftnewsforkids.net/127.0.0.1#5335 +ipset=/microsoftnewsforkids.net/gfwlist +server=/brandporno.com/127.0.0.1#5335 +ipset=/brandporno.com/gfwlist +server=/anyhentai.com/127.0.0.1#5335 +ipset=/anyhentai.com/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=/rat.xxx/127.0.0.1#5335 +ipset=/rat.xxx/gfwlist +server=/tmdb.org/127.0.0.1#5335 +ipset=/tmdb.org/gfwlist +server=/playsexygame.com/127.0.0.1#5335 +ipset=/playsexygame.com/gfwlist +server=/akacrypto.net/127.0.0.1#5335 +ipset=/akacrypto.net/gfwlist +server=/atlassian.com/127.0.0.1#5335 +ipset=/atlassian.com/gfwlist +server=/cheapmonstersbeatsonsale.com/127.0.0.1#5335 +ipset=/cheapmonstersbeatsonsale.com/gfwlist +server=/semanticscholar.org/127.0.0.1#5335 +ipset=/semanticscholar.org/gfwlist +server=/vmware20mosaic.com/127.0.0.1#5335 +ipset=/vmware20mosaic.com/gfwlist +server=/iphonese.tv/127.0.0.1#5335 +ipset=/iphonese.tv/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=/eastbabes.com/127.0.0.1#5335 +ipset=/eastbabes.com/gfwlist +server=/google.sh/127.0.0.1#5335 +ipset=/google.sh/gfwlist +server=/facebook.ca/127.0.0.1#5335 +ipset=/facebook.ca/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=/nhncorp.jp/127.0.0.1#5335 +ipset=/nhncorp.jp/gfwlist +server=/pics.ee/127.0.0.1#5335 +ipset=/pics.ee/gfwlist +server=/blog.descargasgay.com/127.0.0.1#5335 +ipset=/blog.descargasgay.com/gfwlist +server=/smuttymoms.com/127.0.0.1#5335 +ipset=/smuttymoms.com/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=/getsexgames.com/127.0.0.1#5335 +ipset=/getsexgames.com/gfwlist +server=/investorschronicle.co.uk/127.0.0.1#5335 +ipset=/investorschronicle.co.uk/gfwlist +server=/connected-drive.com/127.0.0.1#5335 +ipset=/connected-drive.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=/nozomi.la/127.0.0.1#5335 +ipset=/nozomi.la/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=/steam.cdn.slingshot.co.nz/127.0.0.1#5335 +ipset=/steam.cdn.slingshot.co.nz/gfwlist +server=/g.dev/127.0.0.1#5335 +ipset=/g.dev/gfwlist +server=/videosection.com/127.0.0.1#5335 +ipset=/videosection.com/gfwlist +server=/mulheresafoder.com/127.0.0.1#5335 +ipset=/mulheresafoder.com/gfwlist +server=/woodmancastingx.com/127.0.0.1#5335 +ipset=/woodmancastingx.com/gfwlist +server=/imac.com/127.0.0.1#5335 +ipset=/imac.com/gfwlist +server=/cartoonporn.com/127.0.0.1#5335 +ipset=/cartoonporn.com/gfwlist +server=/bili2.cc/127.0.0.1#5335 +ipset=/bili2.cc/gfwlist +server=/beatsbydresold.com/127.0.0.1#5335 +ipset=/beatsbydresold.com/gfwlist +server=/kktv.me/127.0.0.1#5335 +ipset=/kktv.me/gfwlist +server=/phimsex47.club/127.0.0.1#5335 +ipset=/phimsex47.club/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=/wnacg.com/127.0.0.1#5335 +ipset=/wnacg.com/gfwlist +server=/ikea.pr/127.0.0.1#5335 +ipset=/ikea.pr/gfwlist +server=/minispace.com/127.0.0.1#5335 +ipset=/minispace.com/gfwlist +server=/cuckoldvideos.xxx/127.0.0.1#5335 +ipset=/cuckoldvideos.xxx/gfwlist +server=/opensourceinsights.dev/127.0.0.1#5335 +ipset=/opensourceinsights.dev/gfwlist +server=/connectcommerce.hk/127.0.0.1#5335 +ipset=/connectcommerce.hk/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=/pornohd.plus/127.0.0.1#5335 +ipset=/pornohd.plus/gfwlist +server=/battleforcecomix.com/127.0.0.1#5335 +ipset=/battleforcecomix.com/gfwlist +server=/imgur.com/127.0.0.1#5335 +ipset=/imgur.com/gfwlist +server=/pingguotv.xyz/127.0.0.1#5335 +ipset=/pingguotv.xyz/gfwlist +server=/ipod.com.sg/127.0.0.1#5335 +ipset=/ipod.com.sg/gfwlist +server=/avcens.xyz/127.0.0.1#5335 +ipset=/avcens.xyz/gfwlist +server=/pbabes.com/127.0.0.1#5335 +ipset=/pbabes.com/gfwlist +server=/paypal-cash.com/127.0.0.1#5335 +ipset=/paypal-cash.com/gfwlist +server=/pornguide.blog/127.0.0.1#5335 +ipset=/pornguide.blog/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=/massagerepublic.com/127.0.0.1#5335 +ipset=/massagerepublic.com/gfwlist +server=/worldcurrencycard.co.za/127.0.0.1#5335 +ipset=/worldcurrencycard.co.za/gfwlist +server=/myvisaluxuryhotels.com/127.0.0.1#5335 +ipset=/myvisaluxuryhotels.com/gfwlist +server=/erodougazo.com/127.0.0.1#5335 +ipset=/erodougazo.com/gfwlist +server=/mdlf.xyz/127.0.0.1#5335 +ipset=/mdlf.xyz/gfwlist +server=/weblive-hamivideo.cdn.hinet.net/127.0.0.1#5335 +ipset=/weblive-hamivideo.cdn.hinet.net/gfwlist +server=/bmw.bb/127.0.0.1#5335 +ipset=/bmw.bb/gfwlist +server=/pornhubs.video/127.0.0.1#5335 +ipset=/pornhubs.video/gfwlist +server=/fivestarpornsites.com/127.0.0.1#5335 +ipset=/fivestarpornsites.com/gfwlist +server=/avhd101.com/127.0.0.1#5335 +ipset=/avhd101.com/gfwlist +server=/tnaflix.com/127.0.0.1#5335 +ipset=/tnaflix.com/gfwlist +server=/google.nr/127.0.0.1#5335 +ipset=/google.nr/gfwlist +server=/applepay.hamburg/127.0.0.1#5335 +ipset=/applepay.hamburg/gfwlist +server=/kampalaexclusiveescorts.com/127.0.0.1#5335 +ipset=/kampalaexclusiveescorts.com/gfwlist +server=/pp-soc.com/127.0.0.1#5335 +ipset=/pp-soc.com/gfwlist +server=/steamdb.info/127.0.0.1#5335 +ipset=/steamdb.info/gfwlist +server=/apple.cz/127.0.0.1#5335 +ipset=/apple.cz/gfwlist +server=/visa.com.lc/127.0.0.1#5335 +ipset=/visa.com.lc/gfwlist +server=/certinomis.com/127.0.0.1#5335 +ipset=/certinomis.com/gfwlist +server=/awsbraket.com/127.0.0.1#5335 +ipset=/awsbraket.com/gfwlist +server=/animesexhq.com/127.0.0.1#5335 +ipset=/animesexhq.com/gfwlist +server=/monsterbeatstang.com/127.0.0.1#5335 +ipset=/monsterbeatstang.com/gfwlist +server=/hentai2w.com/127.0.0.1#5335 +ipset=/hentai2w.com/gfwlist +server=/evemodels.com/127.0.0.1#5335 +ipset=/evemodels.com/gfwlist +server=/porntea.com/127.0.0.1#5335 +ipset=/porntea.com/gfwlist +server=/cloudflare-quic.com/127.0.0.1#5335 +ipset=/cloudflare-quic.com/gfwlist +server=/disney-plus.net/127.0.0.1#5335 +ipset=/disney-plus.net/gfwlist +server=/line-apps-rc.com/127.0.0.1#5335 +ipset=/line-apps-rc.com/gfwlist +server=/cambridge.org/127.0.0.1#5335 +ipset=/cambridge.org/gfwlist +server=/inside.com.tw/127.0.0.1#5335 +ipset=/inside.com.tw/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=/alphabet.mx/127.0.0.1#5335 +ipset=/alphabet.mx/gfwlist +server=/cdkworkshop.com/127.0.0.1#5335 +ipset=/cdkworkshop.com/gfwlist +server=/5fang.cc/127.0.0.1#5335 +ipset=/5fang.cc/gfwlist +server=/tctsx28d.xyz/127.0.0.1#5335 +ipset=/tctsx28d.xyz/gfwlist +server=/escortdude.com/127.0.0.1#5335 +ipset=/escortdude.com/gfwlist +server=/ksyp10.com/127.0.0.1#5335 +ipset=/ksyp10.com/gfwlist +server=/mini.com.cy/127.0.0.1#5335 +ipset=/mini.com.cy/gfwlist +server=/volvobuses.om/127.0.0.1#5335 +ipset=/volvobuses.om/gfwlist +server=/enemanozzle.info/127.0.0.1#5335 +ipset=/enemanozzle.info/gfwlist +server=/alphera.com.es/127.0.0.1#5335 +ipset=/alphera.com.es/gfwlist +server=/hpcontinuum.com/127.0.0.1#5335 +ipset=/hpcontinuum.com/gfwlist +server=/audiencenetwork.tv/127.0.0.1#5335 +ipset=/audiencenetwork.tv/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=/bmw-art-journey.com/127.0.0.1#5335 +ipset=/bmw-art-journey.com/gfwlist +server=/omniroot.com/127.0.0.1#5335 +ipset=/omniroot.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=/jsbridgestone.com/127.0.0.1#5335 +ipset=/jsbridgestone.com/gfwlist +server=/mcdelivery.co.id/127.0.0.1#5335 +ipset=/mcdelivery.co.id/gfwlist +server=/thismon.ee/127.0.0.1#5335 +ipset=/thismon.ee/gfwlist +server=/quickoffice.com/127.0.0.1#5335 +ipset=/quickoffice.com/gfwlist +server=/facebook.wang/127.0.0.1#5335 +ipset=/facebook.wang/gfwlist +server=/free64all.com/127.0.0.1#5335 +ipset=/free64all.com/gfwlist +server=/ebaysocial.ru/127.0.0.1#5335 +ipset=/ebaysocial.ru/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=/pinterest.be/127.0.0.1#5335 +ipset=/pinterest.be/gfwlist +server=/filmesporno.com.br/127.0.0.1#5335 +ipset=/filmesporno.com.br/gfwlist +server=/hsprepack.akamaized.net/127.0.0.1#5335 +ipset=/hsprepack.akamaized.net/gfwlist +server=/verisign.net/127.0.0.1#5335 +ipset=/verisign.net/gfwlist +server=/mhhanman.xyz/127.0.0.1#5335 +ipset=/mhhanman.xyz/gfwlist +server=/bmwarchiv.at/127.0.0.1#5335 +ipset=/bmwarchiv.at/gfwlist +server=/hxc10.vip/127.0.0.1#5335 +ipset=/hxc10.vip/gfwlist +server=/famous-nudes.com/127.0.0.1#5335 +ipset=/famous-nudes.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=/escort.guide/127.0.0.1#5335 +ipset=/escort.guide/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=/apple.no/127.0.0.1#5335 +ipset=/apple.no/gfwlist +server=/ggoogle.com/127.0.0.1#5335 +ipset=/ggoogle.com/gfwlist +server=/applecard.tv/127.0.0.1#5335 +ipset=/applecard.tv/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=/xnxxhamster.net/127.0.0.1#5335 +ipset=/xnxxhamster.net/gfwlist +server=/blogspot.com.uy/127.0.0.1#5335 +ipset=/blogspot.com.uy/gfwlist +server=/xeon.com/127.0.0.1#5335 +ipset=/xeon.com/gfwlist +server=/101xxx.xyz/127.0.0.1#5335 +ipset=/101xxx.xyz/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=/topmanga.biz/127.0.0.1#5335 +ipset=/topmanga.biz/gfwlist +server=/efuckt.com/127.0.0.1#5335 +ipset=/efuckt.com/gfwlist +server=/blinkload.zone/127.0.0.1#5335 +ipset=/blinkload.zone/gfwlist +server=/mybabehotz.com/127.0.0.1#5335 +ipset=/mybabehotz.com/gfwlist +server=/apple.de/127.0.0.1#5335 +ipset=/apple.de/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=/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=/xn--80aaazx1an0a.lol/127.0.0.1#5335 +ipset=/xn--80aaazx1an0a.lol/gfwlist +server=/s-msn.com/127.0.0.1#5335 +ipset=/s-msn.com/gfwlist +server=/feet9.com/127.0.0.1#5335 +ipset=/feet9.com/gfwlist +server=/ioinformatics.org/127.0.0.1#5335 +ipset=/ioinformatics.org/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=/akamainewzealand.com/127.0.0.1#5335 +ipset=/akamainewzealand.com/gfwlist +server=/buzzardflapper.com/127.0.0.1#5335 +ipset=/buzzardflapper.com/gfwlist +server=/honestpornreviews.com/127.0.0.1#5335 +ipset=/honestpornreviews.com/gfwlist +server=/amateurporndump.com/127.0.0.1#5335 +ipset=/amateurporndump.com/gfwlist +server=/amebame.com/127.0.0.1#5335 +ipset=/amebame.com/gfwlist +server=/line-apps.com/127.0.0.1#5335 +ipset=/line-apps.com/gfwlist +server=/camelphat.com/127.0.0.1#5335 +ipset=/camelphat.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=/hotgirl.asia/127.0.0.1#5335 +ipset=/hotgirl.asia/gfwlist +server=/pvt.sexy/127.0.0.1#5335 +ipset=/pvt.sexy/gfwlist +server=/animestigma.com/127.0.0.1#5335 +ipset=/animestigma.com/gfwlist +server=/google.bt/127.0.0.1#5335 +ipset=/google.bt/gfwlist +server=/becomeindex.com/127.0.0.1#5335 +ipset=/becomeindex.com/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=/oculus.com/127.0.0.1#5335 +ipset=/oculus.com/gfwlist +server=/joyhentai.com/127.0.0.1#5335 +ipset=/joyhentai.com/gfwlist +server=/apple.at/127.0.0.1#5335 +ipset=/apple.at/gfwlist +server=/experience-vmware.com/127.0.0.1#5335 +ipset=/experience-vmware.com/gfwlist +server=/nvidiaforhp.com/127.0.0.1#5335 +ipset=/nvidiaforhp.com/gfwlist +server=/facebookphotos.com/127.0.0.1#5335 +ipset=/facebookphotos.com/gfwlist +server=/mini-connected.ie/127.0.0.1#5335 +ipset=/mini-connected.ie/gfwlist +server=/visacheckout.net/127.0.0.1#5335 +ipset=/visacheckout.net/gfwlist +server=/zweiporn.com/127.0.0.1#5335 +ipset=/zweiporn.com/gfwlist +server=/airport.com/127.0.0.1#5335 +ipset=/airport.com/gfwlist +server=/buyaapl.com/127.0.0.1#5335 +ipset=/buyaapl.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=/linefriends.com.tw/127.0.0.1#5335 +ipset=/linefriends.com.tw/gfwlist +server=/ebaytopratedseller.net/127.0.0.1#5335 +ipset=/ebaytopratedseller.net/gfwlist +server=/database.asahi.com/127.0.0.1#5335 +ipset=/database.asahi.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=/backroomcastingcouch.com/127.0.0.1#5335 +ipset=/backroomcastingcouch.com/gfwlist +server=/xknoop.com/127.0.0.1#5335 +ipset=/xknoop.com/gfwlist +server=/canon.lu/127.0.0.1#5335 +ipset=/canon.lu/gfwlist +server=/nikerunner.com/127.0.0.1#5335 +ipset=/nikerunner.com/gfwlist +server=/registerhulu.com/127.0.0.1#5335 +ipset=/registerhulu.com/gfwlist +server=/yandex.com.ge/127.0.0.1#5335 +ipset=/yandex.com.ge/gfwlist +server=/durex.ru/127.0.0.1#5335 +ipset=/durex.ru/gfwlist +server=/wisekey.com.hk/127.0.0.1#5335 +ipset=/wisekey.com.hk/gfwlist +server=/volvotrucks.ch/127.0.0.1#5335 +ipset=/volvotrucks.ch/gfwlist +server=/detaliczny.com/127.0.0.1#5335 +ipset=/detaliczny.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=/scoregroup.com/127.0.0.1#5335 +ipset=/scoregroup.com/gfwlist +server=/pypl.info/127.0.0.1#5335 +ipset=/pypl.info/gfwlist +server=/nlsexfilmpjes.com/127.0.0.1#5335 +ipset=/nlsexfilmpjes.com/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=/porndiscount.org/127.0.0.1#5335 +ipset=/porndiscount.org/gfwlist +server=/ds-vod-abematv.akamaized.net/127.0.0.1#5335 +ipset=/ds-vod-abematv.akamaized.net/gfwlist +server=/ikea.at/127.0.0.1#5335 +ipset=/ikea.at/gfwlist +server=/altera.com/127.0.0.1#5335 +ipset=/altera.com/gfwlist +server=/xhamster.desi/127.0.0.1#5335 +ipset=/xhamster.desi/gfwlist +server=/scholar.google.fr/127.0.0.1#5335 +ipset=/scholar.google.fr/gfwlist +server=/wolterskluwer.com/127.0.0.1#5335 +ipset=/wolterskluwer.com/gfwlist +server=/youskbe.com/127.0.0.1#5335 +ipset=/youskbe.com/gfwlist +server=/cameraboys.com/127.0.0.1#5335 +ipset=/cameraboys.com/gfwlist +server=/intel.ar/127.0.0.1#5335 +ipset=/intel.ar/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=/paypal-survey.org/127.0.0.1#5335 +ipset=/paypal-survey.org/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=/monstercockland.com/127.0.0.1#5335 +ipset=/monstercockland.com/gfwlist +server=/shopee.com.my/127.0.0.1#5335 +ipset=/shopee.com.my/gfwlist +server=/volvotrucks.com.kw/127.0.0.1#5335 +ipset=/volvotrucks.com.kw/gfwlist +server=/my-enema.com/127.0.0.1#5335 +ipset=/my-enema.com/gfwlist +server=/vanish.it/127.0.0.1#5335 +ipset=/vanish.it/gfwlist +server=/social.com/127.0.0.1#5335 +ipset=/social.com/gfwlist +server=/scholar.google.hu/127.0.0.1#5335 +ipset=/scholar.google.hu/gfwlist +server=/huluim.com/127.0.0.1#5335 +ipset=/huluim.com/gfwlist +server=/andygod.com/127.0.0.1#5335 +ipset=/andygod.com/gfwlist +server=/wikia.com/127.0.0.1#5335 +ipset=/wikia.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=/xxxfiles.com/127.0.0.1#5335 +ipset=/xxxfiles.com/gfwlist +server=/foxtube.com/127.0.0.1#5335 +ipset=/foxtube.com/gfwlist +server=/2ch.hk/127.0.0.1#5335 +ipset=/2ch.hk/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=/vxxsred.xyz/127.0.0.1#5335 +ipset=/vxxsred.xyz/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=/avizoone.com/127.0.0.1#5335 +ipset=/avizoone.com/gfwlist +server=/durexcanada.com/127.0.0.1#5335 +ipset=/durexcanada.com/gfwlist +server=/mypornwap.fun/127.0.0.1#5335 +ipset=/mypornwap.fun/gfwlist +server=/microsoftpartnersolutions.com/127.0.0.1#5335 +ipset=/microsoftpartnersolutions.com/gfwlist +server=/erogazo-ngo.com/127.0.0.1#5335 +ipset=/erogazo-ngo.com/gfwlist +server=/iebay.com/127.0.0.1#5335 +ipset=/iebay.com/gfwlist +server=/docker.com/127.0.0.1#5335 +ipset=/docker.com/gfwlist +server=/rumporn.com/127.0.0.1#5335 +ipset=/rumporn.com/gfwlist +server=/alphabet.us/127.0.0.1#5335 +ipset=/alphabet.us/gfwlist +server=/momsneversayno.com/127.0.0.1#5335 +ipset=/momsneversayno.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=/bestpornclip.com/127.0.0.1#5335 +ipset=/bestpornclip.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=/visa.fr/127.0.0.1#5335 +ipset=/visa.fr/gfwlist +server=/shequ8.cam/127.0.0.1#5335 +ipset=/shequ8.cam/gfwlist +server=/starbucks.ch/127.0.0.1#5335 +ipset=/starbucks.ch/gfwlist +server=/torrentkitty.tv/127.0.0.1#5335 +ipset=/torrentkitty.tv/gfwlist +server=/mini.dz/127.0.0.1#5335 +ipset=/mini.dz/gfwlist +server=/girlsongirlstube.com/127.0.0.1#5335 +ipset=/girlsongirlstube.com/gfwlist +server=/niuc2.com/127.0.0.1#5335 +ipset=/niuc2.com/gfwlist +server=/speedracegear.com/127.0.0.1#5335 +ipset=/speedracegear.com/gfwlist +server=/hpuae.com/127.0.0.1#5335 +ipset=/hpuae.com/gfwlist +server=/yahoo.com.tw/127.0.0.1#5335 +ipset=/yahoo.com.tw/gfwlist +server=/nikkan-gendai.com/127.0.0.1#5335 +ipset=/nikkan-gendai.com/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=/ichigocandy.com/127.0.0.1#5335 +ipset=/ichigocandy.com/gfwlist +server=/royalsocietypublishing.org/127.0.0.1#5335 +ipset=/royalsocietypublishing.org/gfwlist +server=/zoomingin.tv/127.0.0.1#5335 +ipset=/zoomingin.tv/gfwlist +server=/discordapp.io/127.0.0.1#5335 +ipset=/discordapp.io/gfwlist +server=/sndcdn.com/127.0.0.1#5335 +ipset=/sndcdn.com/gfwlist +server=/modelsfreecams.com/127.0.0.1#5335 +ipset=/modelsfreecams.com/gfwlist +server=/daytontrucktires.com/127.0.0.1#5335 +ipset=/daytontrucktires.com/gfwlist +server=/ero-kawa.com/127.0.0.1#5335 +ipset=/ero-kawa.com/gfwlist +server=/cabletvdirectv.com/127.0.0.1#5335 +ipset=/cabletvdirectv.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=/rm2029.com/127.0.0.1#5335 +ipset=/rm2029.com/gfwlist +server=/x1337x.ws/127.0.0.1#5335 +ipset=/x1337x.ws/gfwlist +server=/pinkcore.com/127.0.0.1#5335 +ipset=/pinkcore.com/gfwlist +server=/dirtyscat.org/127.0.0.1#5335 +ipset=/dirtyscat.org/gfwlist +server=/bisq.network/127.0.0.1#5335 +ipset=/bisq.network/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=/pullstring.net/127.0.0.1#5335 +ipset=/pullstring.net/gfwlist +server=/dmmapis.com/127.0.0.1#5335 +ipset=/dmmapis.com/gfwlist +server=/pornodebolivia.net/127.0.0.1#5335 +ipset=/pornodebolivia.net/gfwlist +server=/adultdvdtalk.com/127.0.0.1#5335 +ipset=/adultdvdtalk.com/gfwlist +server=/free-abbywinters.com/127.0.0.1#5335 +ipset=/free-abbywinters.com/gfwlist +server=/aflamsexhd.com/127.0.0.1#5335 +ipset=/aflamsexhd.com/gfwlist +server=/sexyculo.com/127.0.0.1#5335 +ipset=/sexyculo.com/gfwlist +server=/sony.it/127.0.0.1#5335 +ipset=/sony.it/gfwlist +server=/faronics.co.uk/127.0.0.1#5335 +ipset=/faronics.co.uk/gfwlist +server=/bridgestonerewards.com/127.0.0.1#5335 +ipset=/bridgestonerewards.com/gfwlist +server=/disney.com.tw/127.0.0.1#5335 +ipset=/disney.com.tw/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=/camwhores-tv.com/127.0.0.1#5335 +ipset=/camwhores-tv.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=/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=/findhername.net/127.0.0.1#5335 +ipset=/findhername.net/gfwlist +server=/thenipslip.com/127.0.0.1#5335 +ipset=/thenipslip.com/gfwlist +server=/bmw-antilles.fr/127.0.0.1#5335 +ipset=/bmw-antilles.fr/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=/inventorship.com.au/127.0.0.1#5335 +ipset=/inventorship.com.au/gfwlist +server=/ds-linear-abematv.akamaized.net/127.0.0.1#5335 +ipset=/ds-linear-abematv.akamaized.net/gfwlist +server=/recelebrity.com/127.0.0.1#5335 +ipset=/recelebrity.com/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=/beatsblackfridayretails.com/127.0.0.1#5335 +ipset=/beatsblackfridayretails.com/gfwlist +server=/whatsapp.com/127.0.0.1#5335 +ipset=/whatsapp.com/gfwlist +server=/durex.pl/127.0.0.1#5335 +ipset=/durex.pl/gfwlist +server=/na-att-idns.net/127.0.0.1#5335 +ipset=/na-att-idns.net/gfwlist +server=/babypink.to/127.0.0.1#5335 +ipset=/babypink.to/gfwlist +server=/xvideoscom.me/127.0.0.1#5335 +ipset=/xvideoscom.me/gfwlist +server=/ipod.ch/127.0.0.1#5335 +ipset=/ipod.ch/gfwlist +server=/veryladyboy.com/127.0.0.1#5335 +ipset=/veryladyboy.com/gfwlist +server=/bloombergquint.com/127.0.0.1#5335 +ipset=/bloombergquint.com/gfwlist +server=/animalsporn.tv/127.0.0.1#5335 +ipset=/animalsporn.tv/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=/firestonetire.com/127.0.0.1#5335 +ipset=/firestonetire.com/gfwlist +server=/thepornarea.com/127.0.0.1#5335 +ipset=/thepornarea.com/gfwlist +server=/asianporntrends.com/127.0.0.1#5335 +ipset=/asianporntrends.com/gfwlist +server=/mahajantech.com/127.0.0.1#5335 +ipset=/mahajantech.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=/fxnetwork.com/127.0.0.1#5335 +ipset=/fxnetwork.com/gfwlist +server=/google.net/127.0.0.1#5335 +ipset=/google.net/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=/drebeatsforsaleus.com/127.0.0.1#5335 +ipset=/drebeatsforsaleus.com/gfwlist +server=/c4slive.com/127.0.0.1#5335 +ipset=/c4slive.com/gfwlist +server=/youtube.is/127.0.0.1#5335 +ipset=/youtube.is/gfwlist +server=/mscrl.microsoft.com/127.0.0.1#5335 +ipset=/mscrl.microsoft.com/gfwlist +server=/facebboc.com/127.0.0.1#5335 +ipset=/facebboc.com/gfwlist +server=/macruby.net/127.0.0.1#5335 +ipset=/macruby.net/gfwlist +server=/txvlog.com/127.0.0.1#5335 +ipset=/txvlog.com/gfwlist +server=/itunesfestivals.com/127.0.0.1#5335 +ipset=/itunesfestivals.com/gfwlist +server=/vercel.events/127.0.0.1#5335 +ipset=/vercel.events/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=/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=/knowswho.co.jp/127.0.0.1#5335 +ipset=/knowswho.co.jp/gfwlist +server=/rarbgget.org/127.0.0.1#5335 +ipset=/rarbgget.org/gfwlist +server=/palcomix.com/127.0.0.1#5335 +ipset=/palcomix.com/gfwlist +server=/18jms.com/127.0.0.1#5335 +ipset=/18jms.com/gfwlist +server=/gratisvideokijken.nl/127.0.0.1#5335 +ipset=/gratisvideokijken.nl/gfwlist +server=/osm.org/127.0.0.1#5335 +ipset=/osm.org/gfwlist +server=/me-gay.com/127.0.0.1#5335 +ipset=/me-gay.com/gfwlist +server=/notion.site/127.0.0.1#5335 +ipset=/notion.site/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=/asm.org/127.0.0.1#5335 +ipset=/asm.org/gfwlist +server=/lushstories.com/127.0.0.1#5335 +ipset=/lushstories.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=/airhorn.solutions/127.0.0.1#5335 +ipset=/airhorn.solutions/gfwlist +server=/bittrex.com/127.0.0.1#5335 +ipset=/bittrex.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=/koubaibu.jp/127.0.0.1#5335 +ipset=/koubaibu.jp/gfwlist +server=/volvobuses.de/127.0.0.1#5335 +ipset=/volvobuses.de/gfwlist +server=/easymatureporn.com/127.0.0.1#5335 +ipset=/easymatureporn.com/gfwlist +server=/extremepornfilms.com/127.0.0.1#5335 +ipset=/extremepornfilms.com/gfwlist +server=/uun99.com/127.0.0.1#5335 +ipset=/uun99.com/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=/gmossp-sp.jp/127.0.0.1#5335 +ipset=/gmossp-sp.jp/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=/lululu.one/127.0.0.1#5335 +ipset=/lululu.one/gfwlist +server=/cinemax.com/127.0.0.1#5335 +ipset=/cinemax.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=/dlsitestudio.com/127.0.0.1#5335 +ipset=/dlsitestudio.com/gfwlist +server=/dettol.net/127.0.0.1#5335 +ipset=/dettol.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=/youtube.com.ua/127.0.0.1#5335 +ipset=/youtube.com.ua/gfwlist +server=/vsezoo.com/127.0.0.1#5335 +ipset=/vsezoo.com/gfwlist +server=/intunewiki.com/127.0.0.1#5335 +ipset=/intunewiki.com/gfwlist +server=/erotic-hentai.com/127.0.0.1#5335 +ipset=/erotic-hentai.com/gfwlist +server=/beatsdreforsale.com/127.0.0.1#5335 +ipset=/beatsdreforsale.com/gfwlist +server=/bmw-driving-center.co.kr/127.0.0.1#5335 +ipset=/bmw-driving-center.co.kr/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=/cloudyzgirl.com/127.0.0.1#5335 +ipset=/cloudyzgirl.com/gfwlist +server=/applewatch.tv/127.0.0.1#5335 +ipset=/applewatch.tv/gfwlist +server=/hkt-enterprise.com/127.0.0.1#5335 +ipset=/hkt-enterprise.com/gfwlist +server=/nvidia.it/127.0.0.1#5335 +ipset=/nvidia.it/gfwlist +server=/welcomix.com/127.0.0.1#5335 +ipset=/welcomix.com/gfwlist +server=/cispaletter.com/127.0.0.1#5335 +ipset=/cispaletter.com/gfwlist +server=/drdrebeatsuk.com/127.0.0.1#5335 +ipset=/drdrebeatsuk.com/gfwlist +server=/volvotrucks.tn/127.0.0.1#5335 +ipset=/volvotrucks.tn/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=/vfsco.bg/127.0.0.1#5335 +ipset=/vfsco.bg/gfwlist +server=/quiksee.com/127.0.0.1#5335 +ipset=/quiksee.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=/62fh1bnj.me/127.0.0.1#5335 +ipset=/62fh1bnj.me/gfwlist +server=/porngladiator.com/127.0.0.1#5335 +ipset=/porngladiator.com/gfwlist +server=/cfake.com/127.0.0.1#5335 +ipset=/cfake.com/gfwlist +server=/myxxgirl.com/127.0.0.1#5335 +ipset=/myxxgirl.com/gfwlist +server=/dmed.technology/127.0.0.1#5335 +ipset=/dmed.technology/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=/peoplenews.tw/127.0.0.1#5335 +ipset=/peoplenews.tw/gfwlist +server=/ikea.com.my/127.0.0.1#5335 +ipset=/ikea.com.my/gfwlist +server=/naturemag.org/127.0.0.1#5335 +ipset=/naturemag.org/gfwlist +server=/intel.tv/127.0.0.1#5335 +ipset=/intel.tv/gfwlist +server=/steamserver.net/127.0.0.1#5335 +ipset=/steamserver.net/gfwlist +server=/realcuckoldsex.com/127.0.0.1#5335 +ipset=/realcuckoldsex.com/gfwlist +server=/torproject.org/127.0.0.1#5335 +ipset=/torproject.org/gfwlist +server=/narumiya.xii.jp/127.0.0.1#5335 +ipset=/narumiya.xii.jp/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=/nude-pics.org/127.0.0.1#5335 +ipset=/nude-pics.org/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=/amateurcuckoldporn.com/127.0.0.1#5335 +ipset=/amateurcuckoldporn.com/gfwlist +server=/bareporno.com/127.0.0.1#5335 +ipset=/bareporno.com/gfwlist +server=/keyporntube.com/127.0.0.1#5335 +ipset=/keyporntube.com/gfwlist +server=/snap-dev.net/127.0.0.1#5335 +ipset=/snap-dev.net/gfwlist +server=/researchkit.net/127.0.0.1#5335 +ipset=/researchkit.net/gfwlist +server=/sokmil.com/127.0.0.1#5335 +ipset=/sokmil.com/gfwlist +server=/telesec.de/127.0.0.1#5335 +ipset=/telesec.de/gfwlist +server=/mastercard.com/127.0.0.1#5335 +ipset=/mastercard.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=/amatporn.com/127.0.0.1#5335 +ipset=/amatporn.com/gfwlist +server=/connectcommerce.info/127.0.0.1#5335 +ipset=/connectcommerce.info/gfwlist +server=/shit-porn.net/127.0.0.1#5335 +ipset=/shit-porn.net/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=/lolclub.org/127.0.0.1#5335 +ipset=/lolclub.org/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=/magicalmirai.com/127.0.0.1#5335 +ipset=/magicalmirai.com/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=/coolloud.org.tw/127.0.0.1#5335 +ipset=/coolloud.org.tw/gfwlist +server=/pittpatt.com/127.0.0.1#5335 +ipset=/pittpatt.com/gfwlist +server=/yourfreeporn.tv/127.0.0.1#5335 +ipset=/yourfreeporn.tv/gfwlist +server=/kmc-av.com/127.0.0.1#5335 +ipset=/kmc-av.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=/kindleoasis.info/127.0.0.1#5335 +ipset=/kindleoasis.info/gfwlist +server=/pornhat.com/127.0.0.1#5335 +ipset=/pornhat.com/gfwlist +server=/youtube.com.ng/127.0.0.1#5335 +ipset=/youtube.com.ng/gfwlist +server=/exxxtrasmall1.com/127.0.0.1#5335 +ipset=/exxxtrasmall1.com/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=/renderos.com/127.0.0.1#5335 +ipset=/renderos.com/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=/porndeepfake.net/127.0.0.1#5335 +ipset=/porndeepfake.net/gfwlist +server=/apple-mapkit.com/127.0.0.1#5335 +ipset=/apple-mapkit.com/gfwlist +server=/moxing.news/127.0.0.1#5335 +ipset=/moxing.news/gfwlist +server=/nekoxxx.com/127.0.0.1#5335 +ipset=/nekoxxx.com/gfwlist +server=/fei.ru/127.0.0.1#5335 +ipset=/fei.ru/gfwlist +server=/applecomputer.hu/127.0.0.1#5335 +ipset=/applecomputer.hu/gfwlist +server=/iphone.com/127.0.0.1#5335 +ipset=/iphone.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=/sexanime.net/127.0.0.1#5335 +ipset=/sexanime.net/gfwlist +server=/artstationmedia.com/127.0.0.1#5335 +ipset=/artstationmedia.com/gfwlist +server=/bridgestone.com.br/127.0.0.1#5335 +ipset=/bridgestone.com.br/gfwlist +server=/google.com.bn/127.0.0.1#5335 +ipset=/google.com.bn/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=/atwiki.jp/127.0.0.1#5335 +ipset=/atwiki.jp/gfwlist +server=/bmw-connecteddrive.pt/127.0.0.1#5335 +ipset=/bmw-connecteddrive.pt/gfwlist +server=/nikeonlinestore.com/127.0.0.1#5335 +ipset=/nikeonlinestore.com/gfwlist +server=/mastercard.com.sa/127.0.0.1#5335 +ipset=/mastercard.com.sa/gfwlist +server=/amateuralbum.net/127.0.0.1#5335 +ipset=/amateuralbum.net/gfwlist +server=/xvxxtube.com/127.0.0.1#5335 +ipset=/xvxxtube.com/gfwlist +server=/bucketeer.jp/127.0.0.1#5335 +ipset=/bucketeer.jp/gfwlist +server=/logitechio.com.cn/127.0.0.1#5335 +ipset=/logitechio.com.cn/gfwlist +server=/ikea.hu/127.0.0.1#5335 +ipset=/ikea.hu/gfwlist +server=/edge-skype-com.s-0001.s-msedge.net/127.0.0.1#5335 +ipset=/edge-skype-com.s-0001.s-msedge.net/gfwlist +server=/sexgalaxy.net/127.0.0.1#5335 +ipset=/sexgalaxy.net/gfwlist +server=/jstage.jst.go.jp/127.0.0.1#5335 +ipset=/jstage.jst.go.jp/gfwlist +server=/amateurblowjobporn.com/127.0.0.1#5335 +ipset=/amateurblowjobporn.com/gfwlist +server=/watchteencam.com/127.0.0.1#5335 +ipset=/watchteencam.com/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=/porngeek.com/127.0.0.1#5335 +ipset=/porngeek.com/gfwlist +server=/bmwgroup-posdigital.com/127.0.0.1#5335 +ipset=/bmwgroup-posdigital.com/gfwlist +server=/bridgestone.com.mx/127.0.0.1#5335 +ipset=/bridgestone.com.mx/gfwlist +server=/hqtube.xxx/127.0.0.1#5335 +ipset=/hqtube.xxx/gfwlist +server=/deutschsex.com/127.0.0.1#5335 +ipset=/deutschsex.com/gfwlist +server=/hidive.com/127.0.0.1#5335 +ipset=/hidive.com/gfwlist +server=/lolusercontent.com/127.0.0.1#5335 +ipset=/lolusercontent.com/gfwlist +server=/ikea.co.at/127.0.0.1#5335 +ipset=/ikea.co.at/gfwlist +server=/pinterest.co.uk/127.0.0.1#5335 +ipset=/pinterest.co.uk/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=/1337x.is/127.0.0.1#5335 +ipset=/1337x.is/gfwlist +server=/mariokart8.com/127.0.0.1#5335 +ipset=/mariokart8.com/gfwlist +server=/bangher.net/127.0.0.1#5335 +ipset=/bangher.net/gfwlist +server=/cnbetacdn.com/127.0.0.1#5335 +ipset=/cnbetacdn.com/gfwlist +server=/pearsonassessment.dk/127.0.0.1#5335 +ipset=/pearsonassessment.dk/gfwlist +server=/bloombergbeta.com/127.0.0.1#5335 +ipset=/bloombergbeta.com/gfwlist +server=/gittigidiyor.net/127.0.0.1#5335 +ipset=/gittigidiyor.net/gfwlist +server=/pricelessarabia.com/127.0.0.1#5335 +ipset=/pricelessarabia.com/gfwlist +server=/booksinprint.com/127.0.0.1#5335 +ipset=/booksinprint.com/gfwlist +server=/letsencrypt.org/127.0.0.1#5335 +ipset=/letsencrypt.org/gfwlist +server=/toppornsites.net/127.0.0.1#5335 +ipset=/toppornsites.net/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=/cordcloud.org/127.0.0.1#5335 +ipset=/cordcloud.org/gfwlist +server=/igkbroker.com/127.0.0.1#5335 +ipset=/igkbroker.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=/playwarcraft3.com/127.0.0.1#5335 +ipset=/playwarcraft3.com/gfwlist +server=/bbhub.io/127.0.0.1#5335 +ipset=/bbhub.io/gfwlist +server=/vercel.store/127.0.0.1#5335 +ipset=/vercel.store/gfwlist +server=/google.co.il/127.0.0.1#5335 +ipset=/google.co.il/gfwlist +server=/hegre.com/127.0.0.1#5335 +ipset=/hegre.com/gfwlist +server=/enfagrow.com.bn/127.0.0.1#5335 +ipset=/enfagrow.com.bn/gfwlist +server=/pornwild.to/127.0.0.1#5335 +ipset=/pornwild.to/gfwlist +server=/nicodic.jp/127.0.0.1#5335 +ipset=/nicodic.jp/gfwlist +server=/justporno.es/127.0.0.1#5335 +ipset=/justporno.es/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=/amazon.ae/127.0.0.1#5335 +ipset=/amazon.ae/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=/boylove1.cc/127.0.0.1#5335 +ipset=/boylove1.cc/gfwlist +server=/latencytop.com/127.0.0.1#5335 +ipset=/latencytop.com/gfwlist +server=/alexa.com/127.0.0.1#5335 +ipset=/alexa.com/gfwlist +server=/porncana.com/127.0.0.1#5335 +ipset=/porncana.com/gfwlist +server=/shopee.vn/127.0.0.1#5335 +ipset=/shopee.vn/gfwlist +server=/hentaistube.com/127.0.0.1#5335 +ipset=/hentaistube.com/gfwlist +server=/seniortgp.com/127.0.0.1#5335 +ipset=/seniortgp.com/gfwlist +server=/wikinews.org/127.0.0.1#5335 +ipset=/wikinews.org/gfwlist +server=/gettyimages.com.mx/127.0.0.1#5335 +ipset=/gettyimages.com.mx/gfwlist +server=/3movs.com/127.0.0.1#5335 +ipset=/3movs.com/gfwlist +server=/geeksquadonline.com/127.0.0.1#5335 +ipset=/geeksquadonline.com/gfwlist +server=/alphera-finance.com.hk/127.0.0.1#5335 +ipset=/alphera-finance.com.hk/gfwlist +server=/hustler.com/127.0.0.1#5335 +ipset=/hustler.com/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=/ikea.pt/127.0.0.1#5335 +ipset=/ikea.pt/gfwlist +server=/blacktowhite.net/127.0.0.1#5335 +ipset=/blacktowhite.net/gfwlist +server=/youtube.ee/127.0.0.1#5335 +ipset=/youtube.ee/gfwlist +server=/hddirectv.com/127.0.0.1#5335 +ipset=/hddirectv.com/gfwlist +server=/visa.com.jm/127.0.0.1#5335 +ipset=/visa.com.jm/gfwlist +server=/justporno.sex/127.0.0.1#5335 +ipset=/justporno.sex/gfwlist +server=/pornoweb.win/127.0.0.1#5335 +ipset=/pornoweb.win/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=/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=/ilove-movies.com/127.0.0.1#5335 +ipset=/ilove-movies.com/gfwlist +server=/applescreensavers.com/127.0.0.1#5335 +ipset=/applescreensavers.com/gfwlist +server=/hentailegendado.com/127.0.0.1#5335 +ipset=/hentailegendado.com/gfwlist +server=/xn--x-qeu1ji09tzlg.biz/127.0.0.1#5335 +ipset=/xn--x-qeu1ji09tzlg.biz/gfwlist +server=/instagramkusu.com/127.0.0.1#5335 +ipset=/instagramkusu.com/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=/qzav.tv/127.0.0.1#5335 +ipset=/qzav.tv/gfwlist +server=/hdtube1.com/127.0.0.1#5335 +ipset=/hdtube1.com/gfwlist +server=/bmw-connecteddrive.ro/127.0.0.1#5335 +ipset=/bmw-connecteddrive.ro/gfwlist +server=/mybeatsbydrestudio.com/127.0.0.1#5335 +ipset=/mybeatsbydrestudio.com/gfwlist +server=/beatsbydrdrecustom.com/127.0.0.1#5335 +ipset=/beatsbydrdrecustom.com/gfwlist +server=/metropolitana.tokyo/127.0.0.1#5335 +ipset=/metropolitana.tokyo/gfwlist +server=/gimy.co/127.0.0.1#5335 +ipset=/gimy.co/gfwlist +server=/e-bay.com/127.0.0.1#5335 +ipset=/e-bay.com/gfwlist +server=/gannett-cdn.com/127.0.0.1#5335 +ipset=/gannett-cdn.com/gfwlist +server=/vol.moe/127.0.0.1#5335 +ipset=/vol.moe/gfwlist +server=/razer.com/127.0.0.1#5335 +ipset=/razer.com/gfwlist +server=/nurofen.hr/127.0.0.1#5335 +ipset=/nurofen.hr/gfwlist +server=/xiaofu.me/127.0.0.1#5335 +ipset=/xiaofu.me/gfwlist +server=/jneurosci.org/127.0.0.1#5335 +ipset=/jneurosci.org/gfwlist +server=/paypal-gifts.com/127.0.0.1#5335 +ipset=/paypal-gifts.com/gfwlist +server=/yahoofinance.com/127.0.0.1#5335 +ipset=/yahoofinance.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=/teenporntube.xxx/127.0.0.1#5335 +ipset=/teenporntube.xxx/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=/iqq3.cc/127.0.0.1#5335 +ipset=/iqq3.cc/gfwlist +server=/extrajapaneseporn.com/127.0.0.1#5335 +ipset=/extrajapaneseporn.com/gfwlist +server=/bydrebeats.com/127.0.0.1#5335 +ipset=/bydrebeats.com/gfwlist +server=/pagecdn.io/127.0.0.1#5335 +ipset=/pagecdn.io/gfwlist +server=/facebookcareer.com/127.0.0.1#5335 +ipset=/facebookcareer.com/gfwlist +server=/mastercard.cl/127.0.0.1#5335 +ipset=/mastercard.cl/gfwlist +server=/componentkit.org/127.0.0.1#5335 +ipset=/componentkit.org/gfwlist +server=/mywife.cc/127.0.0.1#5335 +ipset=/mywife.cc/gfwlist +server=/facebook.nl/127.0.0.1#5335 +ipset=/facebook.nl/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=/amd.com/127.0.0.1#5335 +ipset=/amd.com/gfwlist +server=/japteenx.com/127.0.0.1#5335 +ipset=/japteenx.com/gfwlist +server=/hulucall.com/127.0.0.1#5335 +ipset=/hulucall.com/gfwlist +server=/microsoftonline.com/127.0.0.1#5335 +ipset=/microsoftonline.com/gfwlist +server=/graiasmovies.com/127.0.0.1#5335 +ipset=/graiasmovies.com/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=/myfoxny.com/127.0.0.1#5335 +ipset=/myfoxny.com/gfwlist +server=/xvideos.tv.br/127.0.0.1#5335 +ipset=/xvideos.tv.br/gfwlist +server=/foxnews.tv/127.0.0.1#5335 +ipset=/foxnews.tv/gfwlist +server=/hongmaodan100.com/127.0.0.1#5335 +ipset=/hongmaodan100.com/gfwlist +server=/topbeatsforsale.com/127.0.0.1#5335 +ipset=/topbeatsforsale.com/gfwlist +server=/pearsonperu.pe/127.0.0.1#5335 +ipset=/pearsonperu.pe/gfwlist +server=/gayrawclub.com/127.0.0.1#5335 +ipset=/gayrawclub.com/gfwlist +server=/chromebook.com/127.0.0.1#5335 +ipset=/chromebook.com/gfwlist +server=/newsconcierge.com.au/127.0.0.1#5335 +ipset=/newsconcierge.com.au/gfwlist +server=/velkaepocha.cz/127.0.0.1#5335 +ipset=/velkaepocha.cz/gfwlist +server=/homo.xxx/127.0.0.1#5335 +ipset=/homo.xxx/gfwlist +server=/mini.re/127.0.0.1#5335 +ipset=/mini.re/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=/outlook.com/127.0.0.1#5335 +ipset=/outlook.com/gfwlist +server=/filmeporno.blog/127.0.0.1#5335 +ipset=/filmeporno.blog/gfwlist +server=/xxbook.cc/127.0.0.1#5335 +ipset=/xxbook.cc/gfwlist +server=/huffingtonpost.gr/127.0.0.1#5335 +ipset=/huffingtonpost.gr/gfwlist +server=/592r.com/127.0.0.1#5335 +ipset=/592r.com/gfwlist +server=/beatsbydreauofficial.com/127.0.0.1#5335 +ipset=/beatsbydreauofficial.com/gfwlist +server=/cuckwatchingwife.com/127.0.0.1#5335 +ipset=/cuckwatchingwife.com/gfwlist +server=/cockofhorse.com/127.0.0.1#5335 +ipset=/cockofhorse.com/gfwlist +server=/nutaku.com/127.0.0.1#5335 +ipset=/nutaku.com/gfwlist +server=/mature-nl.eu/127.0.0.1#5335 +ipset=/mature-nl.eu/gfwlist +server=/paypalnetwork.info/127.0.0.1#5335 +ipset=/paypalnetwork.info/gfwlist +server=/azadiradio.com/127.0.0.1#5335 +ipset=/azadiradio.com/gfwlist +server=/anaconda.com/127.0.0.1#5335 +ipset=/anaconda.com/gfwlist +server=/affirmtrust.com/127.0.0.1#5335 +ipset=/affirmtrust.com/gfwlist +server=/microsoft.fi/127.0.0.1#5335 +ipset=/microsoft.fi/gfwlist +server=/iphone4.com.br/127.0.0.1#5335 +ipset=/iphone4.com.br/gfwlist +server=/tyler-brown.com/127.0.0.1#5335 +ipset=/tyler-brown.com/gfwlist +server=/buypass.com/127.0.0.1#5335 +ipset=/buypass.com/gfwlist +server=/uplust.com/127.0.0.1#5335 +ipset=/uplust.com/gfwlist +server=/nvidia.asia/127.0.0.1#5335 +ipset=/nvidia.asia/gfwlist +server=/teendreams.com/127.0.0.1#5335 +ipset=/teendreams.com/gfwlist +server=/longman.ch/127.0.0.1#5335 +ipset=/longman.ch/gfwlist +server=/starbucks.com.gr/127.0.0.1#5335 +ipset=/starbucks.com.gr/gfwlist +server=/fout.jp/127.0.0.1#5335 +ipset=/fout.jp/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=/strikingly.com/127.0.0.1#5335 +ipset=/strikingly.com/gfwlist +server=/yahoo.tl/127.0.0.1#5335 +ipset=/yahoo.tl/gfwlist +server=/xiaogirls.com/127.0.0.1#5335 +ipset=/xiaogirls.com/gfwlist +server=/cargigileads.com/127.0.0.1#5335 +ipset=/cargigileads.com/gfwlist +server=/google.com.kh/127.0.0.1#5335 +ipset=/google.com.kh/gfwlist +server=/coinonecorp.com/127.0.0.1#5335 +ipset=/coinonecorp.com/gfwlist +server=/javfuck.net/127.0.0.1#5335 +ipset=/javfuck.net/gfwlist +server=/iskoot.com/127.0.0.1#5335 +ipset=/iskoot.com/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=/comments.app/127.0.0.1#5335 +ipset=/comments.app/gfwlist +server=/thebanker.com/127.0.0.1#5335 +ipset=/thebanker.com/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=/mini.ru/127.0.0.1#5335 +ipset=/mini.ru/gfwlist +server=/1lib.cloud/127.0.0.1#5335 +ipset=/1lib.cloud/gfwlist +server=/supadou.blogism.jp/127.0.0.1#5335 +ipset=/supadou.blogism.jp/gfwlist +server=/maddenrewards.com/127.0.0.1#5335 +ipset=/maddenrewards.com/gfwlist +server=/freyalist.com/127.0.0.1#5335 +ipset=/freyalist.com/gfwlist +server=/naughty.com/127.0.0.1#5335 +ipset=/naughty.com/gfwlist +server=/sacduc.com/127.0.0.1#5335 +ipset=/sacduc.com/gfwlist +server=/nypost.help/127.0.0.1#5335 +ipset=/nypost.help/gfwlist +server=/17mimei.club/127.0.0.1#5335 +ipset=/17mimei.club/gfwlist +server=/pornotube69.nl/127.0.0.1#5335 +ipset=/pornotube69.nl/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=/gaytube.com/127.0.0.1#5335 +ipset=/gaytube.com/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=/naughtygamesource.com/127.0.0.1#5335 +ipset=/naughtygamesource.com/gfwlist +server=/blogspot.co.uk/127.0.0.1#5335 +ipset=/blogspot.co.uk/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=/bmw-motorrad.be/127.0.0.1#5335 +ipset=/bmw-motorrad.be/gfwlist +server=/vs-hls-push-uk-live.akamaized.net/127.0.0.1#5335 +ipset=/vs-hls-push-uk-live.akamaized.net/gfwlist +server=/foxsmallbusinesscenter.com/127.0.0.1#5335 +ipset=/foxsmallbusinesscenter.com/gfwlist +server=/nikesellorder.com/127.0.0.1#5335 +ipset=/nikesellorder.com/gfwlist +server=/asianscreens.com/127.0.0.1#5335 +ipset=/asianscreens.com/gfwlist +server=/jmcomic1.city/127.0.0.1#5335 +ipset=/jmcomic1.city/gfwlist +server=/twistys.com/127.0.0.1#5335 +ipset=/twistys.com/gfwlist +server=/deutschepornos-kostenlos.net/127.0.0.1#5335 +ipset=/deutschepornos-kostenlos.net/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=/heptio.com/127.0.0.1#5335 +ipset=/heptio.com/gfwlist +server=/visa.co.nz/127.0.0.1#5335 +ipset=/visa.co.nz/gfwlist +server=/libgen.me/127.0.0.1#5335 +ipset=/libgen.me/gfwlist +server=/bmw.hu/127.0.0.1#5335 +ipset=/bmw.hu/gfwlist +server=/xn--mtswd61ejxq.com/127.0.0.1#5335 +ipset=/xn--mtswd61ejxq.com/gfwlist +server=/terapeak.hk/127.0.0.1#5335 +ipset=/terapeak.hk/gfwlist +server=/favepornvids.com/127.0.0.1#5335 +ipset=/favepornvids.com/gfwlist +server=/ted.com/127.0.0.1#5335 +ipset=/ted.com/gfwlist +server=/nikebbn.com/127.0.0.1#5335 +ipset=/nikebbn.com/gfwlist +server=/oed.com/127.0.0.1#5335 +ipset=/oed.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=/povpornonly.com/127.0.0.1#5335 +ipset=/povpornonly.com/gfwlist +server=/mylust.com/127.0.0.1#5335 +ipset=/mylust.com/gfwlist +server=/reiporno.com/127.0.0.1#5335 +ipset=/reiporno.com/gfwlist +server=/asiansex.sexy/127.0.0.1#5335 +ipset=/asiansex.sexy/gfwlist +server=/vfsco.es/127.0.0.1#5335 +ipset=/vfsco.es/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=/brightcove.net/127.0.0.1#5335 +ipset=/brightcove.net/gfwlist +server=/boshancy.com/127.0.0.1#5335 +ipset=/boshancy.com/gfwlist +server=/facebookexchange.com/127.0.0.1#5335 +ipset=/facebookexchange.com/gfwlist +server=/xnxx.health/127.0.0.1#5335 +ipset=/xnxx.health/gfwlist +server=/adult-web-site.net/127.0.0.1#5335 +ipset=/adult-web-site.net/gfwlist +server=/zzgays.com/127.0.0.1#5335 +ipset=/zzgays.com/gfwlist +server=/beatsbydreirelandonlines.com/127.0.0.1#5335 +ipset=/beatsbydreirelandonlines.com/gfwlist +server=/hentaia.net/127.0.0.1#5335 +ipset=/hentaia.net/gfwlist +server=/google.co.th/127.0.0.1#5335 +ipset=/google.co.th/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=/teenporngallery.net/127.0.0.1#5335 +ipset=/teenporngallery.net/gfwlist +server=/bigblackdicklover.com/127.0.0.1#5335 +ipset=/bigblackdicklover.com/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=/erofus.com/127.0.0.1#5335 +ipset=/erofus.com/gfwlist +server=/novinhagostosa10.com/127.0.0.1#5335 +ipset=/novinhagostosa10.com/gfwlist +server=/mirrormedia.mg/127.0.0.1#5335 +ipset=/mirrormedia.mg/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-motorrad.bh/127.0.0.1#5335 +ipset=/bmw-motorrad.bh/gfwlist +server=/pantswalker.net/127.0.0.1#5335 +ipset=/pantswalker.net/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=/ve-uhd-push-uk-live.akamaized.net/127.0.0.1#5335 +ipset=/ve-uhd-push-uk-live.akamaized.net/gfwlist +server=/glam0ur.com/127.0.0.1#5335 +ipset=/glam0ur.com/gfwlist +server=/ccav691api.com/127.0.0.1#5335 +ipset=/ccav691api.com/gfwlist +server=/bbycloud.com/127.0.0.1#5335 +ipset=/bbycloud.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=/abema.io/127.0.0.1#5335 +ipset=/abema.io/gfwlist +server=/netvigator.com/127.0.0.1#5335 +ipset=/netvigator.com/gfwlist +server=/fli8.xyz/127.0.0.1#5335 +ipset=/fli8.xyz/gfwlist +server=/erogazou-pinkline.com/127.0.0.1#5335 +ipset=/erogazou-pinkline.com/gfwlist +server=/jpg4.info/127.0.0.1#5335 +ipset=/jpg4.info/gfwlist +server=/virtualtaboo.com/127.0.0.1#5335 +ipset=/virtualtaboo.com/gfwlist +server=/netflix.com/127.0.0.1#5335 +ipset=/netflix.com/gfwlist +server=/pstorage.space/127.0.0.1#5335 +ipset=/pstorage.space/gfwlist +server=/applestoreonline.com/127.0.0.1#5335 +ipset=/applestoreonline.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=/eroyakuba.com/127.0.0.1#5335 +ipset=/eroyakuba.com/gfwlist +server=/encoretvb.com/127.0.0.1#5335 +ipset=/encoretvb.com/gfwlist +server=/grannytube.net/127.0.0.1#5335 +ipset=/grannytube.net/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=/porndigger.me/127.0.0.1#5335 +ipset=/porndigger.me/gfwlist +server=/slackdemo.com/127.0.0.1#5335 +ipset=/slackdemo.com/gfwlist +server=/bmw-connecteddrive.tw/127.0.0.1#5335 +ipset=/bmw-connecteddrive.tw/gfwlist +server=/charticulator.com/127.0.0.1#5335 +ipset=/charticulator.com/gfwlist +server=/7mmtv.sx/127.0.0.1#5335 +ipset=/7mmtv.sx/gfwlist +server=/yahoo.by/127.0.0.1#5335 +ipset=/yahoo.by/gfwlist +server=/cutt.ly/127.0.0.1#5335 +ipset=/cutt.ly/gfwlist +server=/mycartoonsexgames.com/127.0.0.1#5335 +ipset=/mycartoonsexgames.com/gfwlist +server=/google.com.qa/127.0.0.1#5335 +ipset=/google.com.qa/gfwlist +server=/analpornosex.com/127.0.0.1#5335 +ipset=/analpornosex.com/gfwlist +server=/asianporn.rest/127.0.0.1#5335 +ipset=/asianporn.rest/gfwlist +server=/exposedlatinas.com/127.0.0.1#5335 +ipset=/exposedlatinas.com/gfwlist +server=/swissid.ch/127.0.0.1#5335 +ipset=/swissid.ch/gfwlist +server=/ksescortclub.com/127.0.0.1#5335 +ipset=/ksescortclub.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=/drebeatsheadphones-nz.com/127.0.0.1#5335 +ipset=/drebeatsheadphones-nz.com/gfwlist +server=/ftvmilfs.com/127.0.0.1#5335 +ipset=/ftvmilfs.com/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=/openweather.co.uk/127.0.0.1#5335 +ipset=/openweather.co.uk/gfwlist +server=/loveparents.org/127.0.0.1#5335 +ipset=/loveparents.org/gfwlist +server=/google.tg/127.0.0.1#5335 +ipset=/google.tg/gfwlist +server=/brasiltudoliberado.com/127.0.0.1#5335 +ipset=/brasiltudoliberado.com/gfwlist +server=/beatspascher-fr.net/127.0.0.1#5335 +ipset=/beatspascher-fr.net/gfwlist +server=/theporntoplist.com/127.0.0.1#5335 +ipset=/theporntoplist.com/gfwlist +server=/vintagemedicalpictures.com/127.0.0.1#5335 +ipset=/vintagemedicalpictures.com/gfwlist +server=/nikemarketing.com/127.0.0.1#5335 +ipset=/nikemarketing.com/gfwlist +server=/youpornru.com/127.0.0.1#5335 +ipset=/youpornru.com/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=/termius.com/127.0.0.1#5335 +ipset=/termius.com/gfwlist +server=/hypnoporn.net/127.0.0.1#5335 +ipset=/hypnoporn.net/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=/seedmov18.com/127.0.0.1#5335 +ipset=/seedmov18.com/gfwlist +server=/tourporno.com/127.0.0.1#5335 +ipset=/tourporno.com/gfwlist +server=/mini-coupe.ca/127.0.0.1#5335 +ipset=/mini-coupe.ca/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=/singlelogin.app/127.0.0.1#5335 +ipset=/singlelogin.app/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=/facebokbook.com/127.0.0.1#5335 +ipset=/facebokbook.com/gfwlist +server=/pornogayphy.com/127.0.0.1#5335 +ipset=/pornogayphy.com/gfwlist +server=/hotporntubes.com/127.0.0.1#5335 +ipset=/hotporntubes.com/gfwlist +server=/mastercard.us/127.0.0.1#5335 +ipset=/mastercard.us/gfwlist +server=/spiritofecstasy.com/127.0.0.1#5335 +ipset=/spiritofecstasy.com/gfwlist +server=/freepornq.com/127.0.0.1#5335 +ipset=/freepornq.com/gfwlist +server=/ravm.tv/127.0.0.1#5335 +ipset=/ravm.tv/gfwlist +server=/2kgames.com/127.0.0.1#5335 +ipset=/2kgames.com/gfwlist +server=/bluefootcms.com/127.0.0.1#5335 +ipset=/bluefootcms.com/gfwlist +server=/eastore.com/127.0.0.1#5335 +ipset=/eastore.com/gfwlist +server=/2013beatsbydrdreonline.com/127.0.0.1#5335 +ipset=/2013beatsbydrdreonline.com/gfwlist +server=/enfamama.com.ar/127.0.0.1#5335 +ipset=/enfamama.com.ar/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=/akamah.com/127.0.0.1#5335 +ipset=/akamah.com/gfwlist +server=/fandom.com/127.0.0.1#5335 +ipset=/fandom.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=/javsin.tv/127.0.0.1#5335 +ipset=/javsin.tv/gfwlist +server=/exxxtrasmall.com/127.0.0.1#5335 +ipset=/exxxtrasmall.com/gfwlist +server=/financialsoccer.ca/127.0.0.1#5335 +ipset=/financialsoccer.ca/gfwlist +server=/zatrahal.online/127.0.0.1#5335 +ipset=/zatrahal.online/gfwlist +server=/fbinnovation.com/127.0.0.1#5335 +ipset=/fbinnovation.com/gfwlist +server=/gfarchive.com/127.0.0.1#5335 +ipset=/gfarchive.com/gfwlist +server=/az764295.vo.msecnd.net/127.0.0.1#5335 +ipset=/az764295.vo.msecnd.net/gfwlist +server=/firestonecomercial.cl/127.0.0.1#5335 +ipset=/firestonecomercial.cl/gfwlist +server=/impact-ad.jp/127.0.0.1#5335 +ipset=/impact-ad.jp/gfwlist +server=/volvotruckcenter.it/127.0.0.1#5335 +ipset=/volvotruckcenter.it/gfwlist +server=/pornoelena.net/127.0.0.1#5335 +ipset=/pornoelena.net/gfwlist +server=/ignitesasia.com/127.0.0.1#5335 +ipset=/ignitesasia.com/gfwlist +server=/evanottyvideos.com/127.0.0.1#5335 +ipset=/evanottyvideos.com/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=/idelreal.org/127.0.0.1#5335 +ipset=/idelreal.org/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=/nu-bay.com/127.0.0.1#5335 +ipset=/nu-bay.com/gfwlist +server=/mastercard.co.in/127.0.0.1#5335 +ipset=/mastercard.co.in/gfwlist +server=/amateuranalvideos.com/127.0.0.1#5335 +ipset=/amateuranalvideos.com/gfwlist +server=/asiansmaster.com/127.0.0.1#5335 +ipset=/asiansmaster.com/gfwlist +server=/facebook.net/127.0.0.1#5335 +ipset=/facebook.net/gfwlist +server=/minisojordan.com/127.0.0.1#5335 +ipset=/minisojordan.com/gfwlist +server=/youtube.com.tn/127.0.0.1#5335 +ipset=/youtube.com.tn/gfwlist +server=/finlitsummit.org/127.0.0.1#5335 +ipset=/finlitsummit.org/gfwlist +server=/bookfi.net/127.0.0.1#5335 +ipset=/bookfi.net/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=/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=/sexguide.ro/127.0.0.1#5335 +ipset=/sexguide.ro/gfwlist +server=/travelexch.com/127.0.0.1#5335 +ipset=/travelexch.com/gfwlist +server=/creativecommons.engineering/127.0.0.1#5335 +ipset=/creativecommons.engineering/gfwlist +server=/londonreal.tv/127.0.0.1#5335 +ipset=/londonreal.tv/gfwlist +server=/ipad3.com/127.0.0.1#5335 +ipset=/ipad3.com/gfwlist +server=/azadliq.org/127.0.0.1#5335 +ipset=/azadliq.org/gfwlist +server=/visualstudio.eu/127.0.0.1#5335 +ipset=/visualstudio.eu/gfwlist +server=/bookclubgirl.com/127.0.0.1#5335 +ipset=/bookclubgirl.com/gfwlist +server=/sluttyrat.com/127.0.0.1#5335 +ipset=/sluttyrat.com/gfwlist +server=/headlinejobs.hk/127.0.0.1#5335 +ipset=/headlinejobs.hk/gfwlist +server=/ie8.co/127.0.0.1#5335 +ipset=/ie8.co/gfwlist +server=/sexygirlfriendtube.com/127.0.0.1#5335 +ipset=/sexygirlfriendtube.com/gfwlist +server=/netlify.app/127.0.0.1#5335 +ipset=/netlify.app/gfwlist +server=/mini.co.kr/127.0.0.1#5335 +ipset=/mini.co.kr/gfwlist +server=/creampiehomevideos.com/127.0.0.1#5335 +ipset=/creampiehomevideos.com/gfwlist +server=/appledaily.com.tw/127.0.0.1#5335 +ipset=/appledaily.com.tw/gfwlist +server=/sci-hub.mksa.top/127.0.0.1#5335 +ipset=/sci-hub.mksa.top/gfwlist +server=/domywife.com/127.0.0.1#5335 +ipset=/domywife.com/gfwlist +server=/dreamworks.com/127.0.0.1#5335 +ipset=/dreamworks.com/gfwlist +server=/dirtyshack.com/127.0.0.1#5335 +ipset=/dirtyshack.com/gfwlist +server=/canonical.com/127.0.0.1#5335 +ipset=/canonical.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=/weltweitwachsen.de/127.0.0.1#5335 +ipset=/weltweitwachsen.de/gfwlist +server=/visa.sx/127.0.0.1#5335 +ipset=/visa.sx/gfwlist +server=/ebonywebcamhub.com/127.0.0.1#5335 +ipset=/ebonywebcamhub.com/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=/facebookmarketingpartners.com/127.0.0.1#5335 +ipset=/facebookmarketingpartners.com/gfwlist +server=/scc.ott.hinet.net/127.0.0.1#5335 +ipset=/scc.ott.hinet.net/gfwlist +server=/jetfuelapps.com/127.0.0.1#5335 +ipset=/jetfuelapps.com/gfwlist +server=/jambotube.com/127.0.0.1#5335 +ipset=/jambotube.com/gfwlist +server=/gtvmediagroupfairfund.com/127.0.0.1#5335 +ipset=/gtvmediagroupfairfund.com/gfwlist +server=/tbr.tangbr.net/127.0.0.1#5335 +ipset=/tbr.tangbr.net/gfwlist +server=/apple.ru/127.0.0.1#5335 +ipset=/apple.ru/gfwlist +server=/zdassets.com/127.0.0.1#5335 +ipset=/zdassets.com/gfwlist +server=/derpibooru.org/127.0.0.1#5335 +ipset=/derpibooru.org/gfwlist +server=/shopee.com.mx/127.0.0.1#5335 +ipset=/shopee.com.mx/gfwlist +server=/stripparadise.com/127.0.0.1#5335 +ipset=/stripparadise.com/gfwlist +server=/54647.global/127.0.0.1#5335 +ipset=/54647.global/gfwlist +server=/businessinsider.mx/127.0.0.1#5335 +ipset=/businessinsider.mx/gfwlist +server=/supanimegames.com/127.0.0.1#5335 +ipset=/supanimegames.com/gfwlist +server=/paypal.us/127.0.0.1#5335 +ipset=/paypal.us/gfwlist +server=/ntd.com/127.0.0.1#5335 +ipset=/ntd.com/gfwlist +server=/scholar.google.com.pa/127.0.0.1#5335 +ipset=/scholar.google.com.pa/gfwlist +server=/okazudouga.tokyo/127.0.0.1#5335 +ipset=/okazudouga.tokyo/gfwlist +server=/cloudflareinsights.com/127.0.0.1#5335 +ipset=/cloudflareinsights.com/gfwlist +server=/facebookpoke.org/127.0.0.1#5335 +ipset=/facebookpoke.org/gfwlist +server=/messytube.com/127.0.0.1#5335 +ipset=/messytube.com/gfwlist +server=/arirangmeari.com/127.0.0.1#5335 +ipset=/arirangmeari.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=/xvidios.xxx/127.0.0.1#5335 +ipset=/xvidios.xxx/gfwlist +server=/8muses.xxx/127.0.0.1#5335 +ipset=/8muses.xxx/gfwlist +server=/facebook.cc/127.0.0.1#5335 +ipset=/facebook.cc/gfwlist +server=/softbank-robotics.com/127.0.0.1#5335 +ipset=/softbank-robotics.com/gfwlist +server=/bmwgroup-gaad.com/127.0.0.1#5335 +ipset=/bmwgroup-gaad.com/gfwlist +server=/amaaozn.com/127.0.0.1#5335 +ipset=/amaaozn.com/gfwlist +server=/microsoftiotinsiderlabs.com/127.0.0.1#5335 +ipset=/microsoftiotinsiderlabs.com/gfwlist +server=/wwe9.com/127.0.0.1#5335 +ipset=/wwe9.com/gfwlist +server=/akamii.com/127.0.0.1#5335 +ipset=/akamii.com/gfwlist +server=/yahoodns.net/127.0.0.1#5335 +ipset=/yahoodns.net/gfwlist +server=/fansta.me/127.0.0.1#5335 +ipset=/fansta.me/gfwlist +server=/mastercard.co.uk/127.0.0.1#5335 +ipset=/mastercard.co.uk/gfwlist +server=/pussy-pics.net/127.0.0.1#5335 +ipset=/pussy-pics.net/gfwlist +server=/adidas.com.tw/127.0.0.1#5335 +ipset=/adidas.com.tw/gfwlist +server=/meendo.com/127.0.0.1#5335 +ipset=/meendo.com/gfwlist +server=/kyodonews.jp/127.0.0.1#5335 +ipset=/kyodonews.jp/gfwlist +server=/pornoboliviaxxx.com/127.0.0.1#5335 +ipset=/pornoboliviaxxx.com/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=/tamilsexvideos.cc/127.0.0.1#5335 +ipset=/tamilsexvideos.cc/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=/steamdeck.com/127.0.0.1#5335 +ipset=/steamdeck.com/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=/beatsdrdre2014.com/127.0.0.1#5335 +ipset=/beatsdrdre2014.com/gfwlist +server=/swingerporntube.com/127.0.0.1#5335 +ipset=/swingerporntube.com/gfwlist +server=/garena.vn/127.0.0.1#5335 +ipset=/garena.vn/gfwlist +server=/genshinh.com/127.0.0.1#5335 +ipset=/genshinh.com/gfwlist +server=/trendyporn.com/127.0.0.1#5335 +ipset=/trendyporn.com/gfwlist +server=/pornhdtube.tv/127.0.0.1#5335 +ipset=/pornhdtube.tv/gfwlist +server=/zoom.us/127.0.0.1#5335 +ipset=/zoom.us/gfwlist +server=/moviepost.com/127.0.0.1#5335 +ipset=/moviepost.com/gfwlist +server=/avxde.org/127.0.0.1#5335 +ipset=/avxde.org/gfwlist +server=/milfnut.com/127.0.0.1#5335 +ipset=/milfnut.com/gfwlist +server=/googletagservices.com/127.0.0.1#5335 +ipset=/googletagservices.com/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=/xbnat.com/127.0.0.1#5335 +ipset=/xbnat.com/gfwlist +server=/nudistsexvideos.com/127.0.0.1#5335 +ipset=/nudistsexvideos.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=/crazyxxxworld.com/127.0.0.1#5335 +ipset=/crazyxxxworld.com/gfwlist +server=/hp-invent.com/127.0.0.1#5335 +ipset=/hp-invent.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=/atos.net/127.0.0.1#5335 +ipset=/atos.net/gfwlist +server=/disney.gr/127.0.0.1#5335 +ipset=/disney.gr/gfwlist +server=/gogoanime.wiki/127.0.0.1#5335 +ipset=/gogoanime.wiki/gfwlist +server=/youtube.com.lb/127.0.0.1#5335 +ipset=/youtube.com.lb/gfwlist +server=/tvnaviweb.jp/127.0.0.1#5335 +ipset=/tvnaviweb.jp/gfwlist +server=/david-laserscanner.com/127.0.0.1#5335 +ipset=/david-laserscanner.com/gfwlist +server=/sweetmlif.net/127.0.0.1#5335 +ipset=/sweetmlif.net/gfwlist +server=/vod-dash-uk-live.akamaized.net/127.0.0.1#5335 +ipset=/vod-dash-uk-live.akamaized.net/gfwlist +server=/reastatic.net/127.0.0.1#5335 +ipset=/reastatic.net/gfwlist +server=/tubemogul.com/127.0.0.1#5335 +ipset=/tubemogul.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=/skinstrip.net/127.0.0.1#5335 +ipset=/skinstrip.net/gfwlist +server=/whisolutions.com/127.0.0.1#5335 +ipset=/whisolutions.com/gfwlist +server=/500caocao.com/127.0.0.1#5335 +ipset=/500caocao.com/gfwlist +server=/lysol.com.mx/127.0.0.1#5335 +ipset=/lysol.com.mx/gfwlist +server=/clincha.cn/127.0.0.1#5335 +ipset=/clincha.cn/gfwlist +server=/yahoo.co.th/127.0.0.1#5335 +ipset=/yahoo.co.th/gfwlist +server=/ctitv.com.tw/127.0.0.1#5335 +ipset=/ctitv.com.tw/gfwlist +server=/punishbang.com/127.0.0.1#5335 +ipset=/punishbang.com/gfwlist +server=/bit.ly/127.0.0.1#5335 +ipset=/bit.ly/gfwlist +server=/chedteb.eu/127.0.0.1#5335 +ipset=/chedteb.eu/gfwlist +server=/bwin.com/127.0.0.1#5335 +ipset=/bwin.com/gfwlist +server=/visiontimes.it/127.0.0.1#5335 +ipset=/visiontimes.it/gfwlist +server=/mature-tube.sexy/127.0.0.1#5335 +ipset=/mature-tube.sexy/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=/themathsfactor.com/127.0.0.1#5335 +ipset=/themathsfactor.com/gfwlist +server=/bodyfluids-jav.com/127.0.0.1#5335 +ipset=/bodyfluids-jav.com/gfwlist +server=/bestrecipes.com.au/127.0.0.1#5335 +ipset=/bestrecipes.com.au/gfwlist +server=/videosporno.com.br/127.0.0.1#5335 +ipset=/videosporno.com.br/gfwlist +server=/kompoz.com/127.0.0.1#5335 +ipset=/kompoz.com/gfwlist +server=/canon.ba/127.0.0.1#5335 +ipset=/canon.ba/gfwlist +server=/ozodlik.org/127.0.0.1#5335 +ipset=/ozodlik.org/gfwlist +server=/garena.ph/127.0.0.1#5335 +ipset=/garena.ph/gfwlist +server=/blogspot.hr/127.0.0.1#5335 +ipset=/blogspot.hr/gfwlist +server=/tranny.one/127.0.0.1#5335 +ipset=/tranny.one/gfwlist +server=/hentai44.com/127.0.0.1#5335 +ipset=/hentai44.com/gfwlist +server=/ikea.sg/127.0.0.1#5335 +ipset=/ikea.sg/gfwlist +server=/lihkg.com/127.0.0.1#5335 +ipset=/lihkg.com/gfwlist +server=/flash-xxx.com/127.0.0.1#5335 +ipset=/flash-xxx.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=/cloudflareclient.com/127.0.0.1#5335 +ipset=/cloudflareclient.com/gfwlist +server=/campuslondon.com/127.0.0.1#5335 +ipset=/campuslondon.com/gfwlist +server=/tryfuckmenow.com/127.0.0.1#5335 +ipset=/tryfuckmenow.com/gfwlist +server=/nesaporn.com/127.0.0.1#5335 +ipset=/nesaporn.com/gfwlist +server=/xnxx2.org/127.0.0.1#5335 +ipset=/xnxx2.org/gfwlist +server=/zenodo.org/127.0.0.1#5335 +ipset=/zenodo.org/gfwlist +server=/lsj2.shop/127.0.0.1#5335 +ipset=/lsj2.shop/gfwlist +server=/ajsjx.com/127.0.0.1#5335 +ipset=/ajsjx.com/gfwlist +server=/fakehub.com/127.0.0.1#5335 +ipset=/fakehub.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=/dopaminegirl.com/127.0.0.1#5335 +ipset=/dopaminegirl.com/gfwlist +server=/freexxx.win/127.0.0.1#5335 +ipset=/freexxx.win/gfwlist +server=/tdesktop.com/127.0.0.1#5335 +ipset=/tdesktop.com/gfwlist +server=/himalaya.exchange/127.0.0.1#5335 +ipset=/himalaya.exchange/gfwlist +server=/acgfbw.com/127.0.0.1#5335 +ipset=/acgfbw.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=/playvids.com/127.0.0.1#5335 +ipset=/playvids.com/gfwlist +server=/uninhibitedcomix.com/127.0.0.1#5335 +ipset=/uninhibitedcomix.com/gfwlist +server=/moms-sex-videos.com/127.0.0.1#5335 +ipset=/moms-sex-videos.com/gfwlist +server=/rukoebxx.com/127.0.0.1#5335 +ipset=/rukoebxx.com/gfwlist +server=/msinnovationchallenge.com/127.0.0.1#5335 +ipset=/msinnovationchallenge.com/gfwlist +server=/xnxx-com.cfd/127.0.0.1#5335 +ipset=/xnxx-com.cfd/gfwlist +server=/alibabacloud.com.tw/127.0.0.1#5335 +ipset=/alibabacloud.com.tw/gfwlist +server=/levelsex.com/127.0.0.1#5335 +ipset=/levelsex.com/gfwlist +server=/tantaly.com/127.0.0.1#5335 +ipset=/tantaly.com/gfwlist +server=/nvidia.eu/127.0.0.1#5335 +ipset=/nvidia.eu/gfwlist +server=/z-lib.org/127.0.0.1#5335 +ipset=/z-lib.org/gfwlist +server=/vipbeatsbydre.com/127.0.0.1#5335 +ipset=/vipbeatsbydre.com/gfwlist +server=/dogmovie.net/127.0.0.1#5335 +ipset=/dogmovie.net/gfwlist +server=/dettol.com.my/127.0.0.1#5335 +ipset=/dettol.com.my/gfwlist +server=/teenpornvideo.xxx/127.0.0.1#5335 +ipset=/teenpornvideo.xxx/gfwlist +server=/yomiuri-shimbun.pressreader.com/127.0.0.1#5335 +ipset=/yomiuri-shimbun.pressreader.com/gfwlist +server=/pornhubpremium.com/127.0.0.1#5335 +ipset=/pornhubpremium.com/gfwlist +server=/internationalconnectionsacademy.com/127.0.0.1#5335 +ipset=/internationalconnectionsacademy.com/gfwlist +server=/bigassporn.tv/127.0.0.1#5335 +ipset=/bigassporn.tv/gfwlist +server=/xxxreal.com/127.0.0.1#5335 +ipset=/xxxreal.com/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=/free-wap-tube.com/127.0.0.1#5335 +ipset=/free-wap-tube.com/gfwlist +server=/covid19rx.org/127.0.0.1#5335 +ipset=/covid19rx.org/gfwlist +server=/xxxbullet.com/127.0.0.1#5335 +ipset=/xxxbullet.com/gfwlist +server=/nike23.com/127.0.0.1#5335 +ipset=/nike23.com/gfwlist +server=/facxebook.com/127.0.0.1#5335 +ipset=/facxebook.com/gfwlist +server=/yusjb.com/127.0.0.1#5335 +ipset=/yusjb.com/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=/disney.my.sentry.io/127.0.0.1#5335 +ipset=/disney.my.sentry.io/gfwlist +server=/instagrampartners.com/127.0.0.1#5335 +ipset=/instagrampartners.com/gfwlist +server=/truyen-hentai.ru/127.0.0.1#5335 +ipset=/truyen-hentai.ru/gfwlist +server=/cumlouder.com/127.0.0.1#5335 +ipset=/cumlouder.com/gfwlist +server=/hentaizilla.com/127.0.0.1#5335 +ipset=/hentaizilla.com/gfwlist +server=/mini.co.il/127.0.0.1#5335 +ipset=/mini.co.il/gfwlist +server=/thothub.ru/127.0.0.1#5335 +ipset=/thothub.ru/gfwlist +server=/diamondgirls.co.uk/127.0.0.1#5335 +ipset=/diamondgirls.co.uk/gfwlist +server=/shitjav.com/127.0.0.1#5335 +ipset=/shitjav.com/gfwlist +server=/dtlgalleryint.cloudapp.net/127.0.0.1#5335 +ipset=/dtlgalleryint.cloudapp.net/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=/badaas.com/127.0.0.1#5335 +ipset=/badaas.com/gfwlist +server=/ebaycafe.com/127.0.0.1#5335 +ipset=/ebaycafe.com/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=/bmw.co.il/127.0.0.1#5335 +ipset=/bmw.co.il/gfwlist +server=/cloudc.one/127.0.0.1#5335 +ipset=/cloudc.one/gfwlist +server=/voyeurporntapes.com/127.0.0.1#5335 +ipset=/voyeurporntapes.com/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=/webcam-teen.net/127.0.0.1#5335 +ipset=/webcam-teen.net/gfwlist +server=/dcard.cc/127.0.0.1#5335 +ipset=/dcard.cc/gfwlist +server=/youtube.ug/127.0.0.1#5335 +ipset=/youtube.ug/gfwlist +server=/shuziyimin.org/127.0.0.1#5335 +ipset=/shuziyimin.org/gfwlist +server=/islamiccenterofnewlondon.com/127.0.0.1#5335 +ipset=/islamiccenterofnewlondon.com/gfwlist +server=/who.int/127.0.0.1#5335 +ipset=/who.int/gfwlist +server=/shemaletubevideos.com/127.0.0.1#5335 +ipset=/shemaletubevideos.com/gfwlist +server=/incezt.net/127.0.0.1#5335 +ipset=/incezt.net/gfwlist +server=/girlfuckshorse.net/127.0.0.1#5335 +ipset=/girlfuckshorse.net/gfwlist +server=/facebook-login.com/127.0.0.1#5335 +ipset=/facebook-login.com/gfwlist +server=/luckyissue.com/127.0.0.1#5335 +ipset=/luckyissue.com/gfwlist +server=/amerikayidzayn.com/127.0.0.1#5335 +ipset=/amerikayidzayn.com/gfwlist +server=/ipod.cm/127.0.0.1#5335 +ipset=/ipod.cm/gfwlist +server=/sonystoragemedia.co.jp/127.0.0.1#5335 +ipset=/sonystoragemedia.co.jp/gfwlist +server=/blz-contentstack.com/127.0.0.1#5335 +ipset=/blz-contentstack.com/gfwlist +server=/myq2.com/127.0.0.1#5335 +ipset=/myq2.com/gfwlist +server=/fapvid.com/127.0.0.1#5335 +ipset=/fapvid.com/gfwlist +server=/postgresql.org/127.0.0.1#5335 +ipset=/postgresql.org/gfwlist +server=/mytrannycams.com/127.0.0.1#5335 +ipset=/mytrannycams.com/gfwlist +server=/cheapbeatsbydreshop.com/127.0.0.1#5335 +ipset=/cheapbeatsbydreshop.com/gfwlist +server=/bmw-motorrad.nl/127.0.0.1#5335 +ipset=/bmw-motorrad.nl/gfwlist +server=/braveux.com/127.0.0.1#5335 +ipset=/braveux.com/gfwlist +server=/dazndn.com/127.0.0.1#5335 +ipset=/dazndn.com/gfwlist +server=/deepfakeporn.net/127.0.0.1#5335 +ipset=/deepfakeporn.net/gfwlist +server=/thesexbible.com/127.0.0.1#5335 +ipset=/thesexbible.com/gfwlist +server=/jizzhut.com/127.0.0.1#5335 +ipset=/jizzhut.com/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=/ccna5.net/127.0.0.1#5335 +ipset=/ccna5.net/gfwlist +server=/canon.ru/127.0.0.1#5335 +ipset=/canon.ru/gfwlist +server=/huashundg.com/127.0.0.1#5335 +ipset=/huashundg.com/gfwlist +server=/monsterbeatsbydre-nz.com/127.0.0.1#5335 +ipset=/monsterbeatsbydre-nz.com/gfwlist +server=/ohpornocasero.com/127.0.0.1#5335 +ipset=/ohpornocasero.com/gfwlist +server=/porncomics.com/127.0.0.1#5335 +ipset=/porncomics.com/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=/pornxs.com/127.0.0.1#5335 +ipset=/pornxs.com/gfwlist +server=/youx.xxx/127.0.0.1#5335 +ipset=/youx.xxx/gfwlist +server=/compose-spec.io/127.0.0.1#5335 +ipset=/compose-spec.io/gfwlist +server=/radiomango.fm/127.0.0.1#5335 +ipset=/radiomango.fm/gfwlist +server=/scat-shop.net/127.0.0.1#5335 +ipset=/scat-shop.net/gfwlist +server=/npmjs.org/127.0.0.1#5335 +ipset=/npmjs.org/gfwlist +server=/gdansk-amazon.com/127.0.0.1#5335 +ipset=/gdansk-amazon.com/gfwlist +server=/hyperdreams.com/127.0.0.1#5335 +ipset=/hyperdreams.com/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=/nudography.com/127.0.0.1#5335 +ipset=/nudography.com/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=/chwr7s8u.com/127.0.0.1#5335 +ipset=/chwr7s8u.com/gfwlist +server=/cartoonsexfantazy.com/127.0.0.1#5335 +ipset=/cartoonsexfantazy.com/gfwlist +server=/road-crew.com/127.0.0.1#5335 +ipset=/road-crew.com/gfwlist +server=/ieeedeis.org/127.0.0.1#5335 +ipset=/ieeedeis.org/gfwlist +server=/rbmavericks.com/127.0.0.1#5335 +ipset=/rbmavericks.com/gfwlist +server=/senpaiheat.com/127.0.0.1#5335 +ipset=/senpaiheat.com/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=/homealonemilfs.com/127.0.0.1#5335 +ipset=/homealonemilfs.com/gfwlist +server=/wikiquote.org/127.0.0.1#5335 +ipset=/wikiquote.org/gfwlist +server=/110xnxx.com/127.0.0.1#5335 +ipset=/110xnxx.com/gfwlist +server=/xgaytube.com/127.0.0.1#5335 +ipset=/xgaytube.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=/studywatchbyverily.org/127.0.0.1#5335 +ipset=/studywatchbyverily.org/gfwlist +server=/svobodnaevropa.bg/127.0.0.1#5335 +ipset=/svobodnaevropa.bg/gfwlist +server=/metrotoons.com/127.0.0.1#5335 +ipset=/metrotoons.com/gfwlist +server=/amourangels.com/127.0.0.1#5335 +ipset=/amourangels.com/gfwlist +server=/directvsports.com/127.0.0.1#5335 +ipset=/directvsports.com/gfwlist +server=/niconico.com/127.0.0.1#5335 +ipset=/niconico.com/gfwlist +server=/comdotgame.com/127.0.0.1#5335 +ipset=/comdotgame.com/gfwlist +server=/iknowthatgirl.com/127.0.0.1#5335 +ipset=/iknowthatgirl.com/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=/paypal-notice.com/127.0.0.1#5335 +ipset=/paypal-notice.com/gfwlist +server=/foxsoccerplus.com/127.0.0.1#5335 +ipset=/foxsoccerplus.com/gfwlist +server=/cna.com.tw/127.0.0.1#5335 +ipset=/cna.com.tw/gfwlist +server=/aboutamazon.fr/127.0.0.1#5335 +ipset=/aboutamazon.fr/gfwlist +server=/discord-activities.com/127.0.0.1#5335 +ipset=/discord-activities.com/gfwlist +server=/i-o-u.info/127.0.0.1#5335 +ipset=/i-o-u.info/gfwlist +server=/slideshare.net/127.0.0.1#5335 +ipset=/slideshare.net/gfwlist +server=/nintendo.co.kr/127.0.0.1#5335 +ipset=/nintendo.co.kr/gfwlist +server=/canon.ro/127.0.0.1#5335 +ipset=/canon.ro/gfwlist +server=/intimateinvasions.com/127.0.0.1#5335 +ipset=/intimateinvasions.com/gfwlist +server=/visafintechfasttrack.com/127.0.0.1#5335 +ipset=/visafintechfasttrack.com/gfwlist +server=/svsgames.org/127.0.0.1#5335 +ipset=/svsgames.org/gfwlist +server=/hpconnected.com/127.0.0.1#5335 +ipset=/hpconnected.com/gfwlist +server=/bmw.lu/127.0.0.1#5335 +ipset=/bmw.lu/gfwlist +server=/xn--gtvz22d.xn--hxt814e/127.0.0.1#5335 +ipset=/xn--gtvz22d.xn--hxt814e/gfwlist +server=/pornov1080.name/127.0.0.1#5335 +ipset=/pornov1080.name/gfwlist +server=/hotcuckoldwife.com/127.0.0.1#5335 +ipset=/hotcuckoldwife.com/gfwlist +server=/smplace.com/127.0.0.1#5335 +ipset=/smplace.com/gfwlist +server=/moefuns.co/127.0.0.1#5335 +ipset=/moefuns.co/gfwlist +server=/deadspacegame.com/127.0.0.1#5335 +ipset=/deadspacegame.com/gfwlist +server=/pornogram.xxx/127.0.0.1#5335 +ipset=/pornogram.xxx/gfwlist +server=/beatsbydreireland-sales.com/127.0.0.1#5335 +ipset=/beatsbydreireland-sales.com/gfwlist +server=/waranlov.com/127.0.0.1#5335 +ipset=/waranlov.com/gfwlist +server=/glamourtits.com/127.0.0.1#5335 +ipset=/glamourtits.com/gfwlist +server=/personaltrainermath.com/127.0.0.1#5335 +ipset=/personaltrainermath.com/gfwlist +server=/boswp.com/127.0.0.1#5335 +ipset=/boswp.com/gfwlist +server=/harvard.xxx/127.0.0.1#5335 +ipset=/harvard.xxx/gfwlist +server=/naughtymachinima.com/127.0.0.1#5335 +ipset=/naughtymachinima.com/gfwlist +server=/chinaclothesstore.com/127.0.0.1#5335 +ipset=/chinaclothesstore.com/gfwlist +server=/av-baron.com/127.0.0.1#5335 +ipset=/av-baron.com/gfwlist +server=/economist.com/127.0.0.1#5335 +ipset=/economist.com/gfwlist +server=/amdigital.co.uk/127.0.0.1#5335 +ipset=/amdigital.co.uk/gfwlist +server=/facebpook.com/127.0.0.1#5335 +ipset=/facebpook.com/gfwlist +server=/lpsg.com/127.0.0.1#5335 +ipset=/lpsg.com/gfwlist +server=/dicela.net/127.0.0.1#5335 +ipset=/dicela.net/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=/hashicorp.com/127.0.0.1#5335 +ipset=/hashicorp.com/gfwlist +server=/hp-ww.com/127.0.0.1#5335 +ipset=/hp-ww.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=/enfabebe.com.do/127.0.0.1#5335 +ipset=/enfabebe.com.do/gfwlist +server=/vjav.com/127.0.0.1#5335 +ipset=/vjav.com/gfwlist +server=/akamaihd.net/127.0.0.1#5335 +ipset=/akamaihd.net/gfwlist +server=/porngames.games/127.0.0.1#5335 +ipset=/porngames.games/gfwlist +server=/veet.com.mx/127.0.0.1#5335 +ipset=/veet.com.mx/gfwlist +server=/sexy-photos.net/127.0.0.1#5335 +ipset=/sexy-photos.net/gfwlist +server=/wantblogger.com/127.0.0.1#5335 +ipset=/wantblogger.com/gfwlist +server=/vkuservideo.net/127.0.0.1#5335 +ipset=/vkuservideo.net/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=/pornkind.net/127.0.0.1#5335 +ipset=/pornkind.net/gfwlist +server=/nikkei-cnbc.co.jp/127.0.0.1#5335 +ipset=/nikkei-cnbc.co.jp/gfwlist +server=/ebaytradingassistant.com/127.0.0.1#5335 +ipset=/ebaytradingassistant.com/gfwlist +server=/porndr.com/127.0.0.1#5335 +ipset=/porndr.com/gfwlist +server=/debug.com/127.0.0.1#5335 +ipset=/debug.com/gfwlist +server=/stin31.ru/127.0.0.1#5335 +ipset=/stin31.ru/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=/watchmygf.me/127.0.0.1#5335 +ipset=/watchmygf.me/gfwlist +server=/facebomok.com/127.0.0.1#5335 +ipset=/facebomok.com/gfwlist +server=/shoping.com/127.0.0.1#5335 +ipset=/shoping.com/gfwlist +server=/scholar.google.bg/127.0.0.1#5335 +ipset=/scholar.google.bg/gfwlist +server=/hotmail.co/127.0.0.1#5335 +ipset=/hotmail.co/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=/netvideogirls.com/127.0.0.1#5335 +ipset=/netvideogirls.com/gfwlist +server=/innovations-i.com/127.0.0.1#5335 +ipset=/innovations-i.com/gfwlist +server=/bitfinex.com/127.0.0.1#5335 +ipset=/bitfinex.com/gfwlist +server=/godaddy.com/127.0.0.1#5335 +ipset=/godaddy.com/gfwlist +server=/verisign.sg/127.0.0.1#5335 +ipset=/verisign.sg/gfwlist +server=/3dsexvilla.com/127.0.0.1#5335 +ipset=/3dsexvilla.com/gfwlist +server=/static.fun/127.0.0.1#5335 +ipset=/static.fun/gfwlist +server=/bmw-connecteddrive.se/127.0.0.1#5335 +ipset=/bmw-connecteddrive.se/gfwlist +server=/ssl-lvlt.cdn.ea.com/127.0.0.1#5335 +ipset=/ssl-lvlt.cdn.ea.com/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=/muchohentai.com/127.0.0.1#5335 +ipset=/muchohentai.com/gfwlist +server=/freechatnow.com/127.0.0.1#5335 +ipset=/freechatnow.com/gfwlist +server=/binancezh.link/127.0.0.1#5335 +ipset=/binancezh.link/gfwlist +server=/fap18.net/127.0.0.1#5335 +ipset=/fap18.net/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=/cooliphonecasesstore.com/127.0.0.1#5335 +ipset=/cooliphonecasesstore.com/gfwlist +server=/xvedo.net/127.0.0.1#5335 +ipset=/xvedo.net/gfwlist +server=/faphouse.com/127.0.0.1#5335 +ipset=/faphouse.com/gfwlist +server=/businessinsider.nl/127.0.0.1#5335 +ipset=/businessinsider.nl/gfwlist +server=/mini-connected.de/127.0.0.1#5335 +ipset=/mini-connected.de/gfwlist +server=/johren.games/127.0.0.1#5335 +ipset=/johren.games/gfwlist +server=/gouri.xyz/127.0.0.1#5335 +ipset=/gouri.xyz/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=/porner.tv/127.0.0.1#5335 +ipset=/porner.tv/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=/ctfassets.net/127.0.0.1#5335 +ipset=/ctfassets.net/gfwlist +server=/cloupia.net/127.0.0.1#5335 +ipset=/cloupia.net/gfwlist +server=/google.com.kw/127.0.0.1#5335 +ipset=/google.com.kw/gfwlist +server=/yaeby.info/127.0.0.1#5335 +ipset=/yaeby.info/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=/minimotorsport.com/127.0.0.1#5335 +ipset=/minimotorsport.com/gfwlist +server=/travelex.be/127.0.0.1#5335 +ipset=/travelex.be/gfwlist +server=/viewgals.com/127.0.0.1#5335 +ipset=/viewgals.com/gfwlist +server=/falundafa.org/127.0.0.1#5335 +ipset=/falundafa.org/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=/findtubes.com/127.0.0.1#5335 +ipset=/findtubes.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=/wnacg.org/127.0.0.1#5335 +ipset=/wnacg.org/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=/mortein.com.ng/127.0.0.1#5335 +ipset=/mortein.com.ng/gfwlist +server=/disneyenconcert.com/127.0.0.1#5335 +ipset=/disneyenconcert.com/gfwlist +server=/llnw.net/127.0.0.1#5335 +ipset=/llnw.net/gfwlist +server=/bestbuyrewardzone.ca/127.0.0.1#5335 +ipset=/bestbuyrewardzone.ca/gfwlist +server=/xxx-porn.info/127.0.0.1#5335 +ipset=/xxx-porn.info/gfwlist +server=/careersatfb.com/127.0.0.1#5335 +ipset=/careersatfb.com/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=/amateur-porn-clips.com/127.0.0.1#5335 +ipset=/amateur-porn-clips.com/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=/whatsapp.cc/127.0.0.1#5335 +ipset=/whatsapp.cc/gfwlist +server=/fotolia.com/127.0.0.1#5335 +ipset=/fotolia.com/gfwlist +server=/megapornfreehd.com/127.0.0.1#5335 +ipset=/megapornfreehd.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=/handjobtube4free.com/127.0.0.1#5335 +ipset=/handjobtube4free.com/gfwlist +server=/nikefootballjersey.com/127.0.0.1#5335 +ipset=/nikefootballjersey.com/gfwlist +server=/galleryarchives.com/127.0.0.1#5335 +ipset=/galleryarchives.com/gfwlist +server=/mytimesplus.co.uk/127.0.0.1#5335 +ipset=/mytimesplus.co.uk/gfwlist +server=/v8.dev/127.0.0.1#5335 +ipset=/v8.dev/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=/sexmex.xxx/127.0.0.1#5335 +ipset=/sexmex.xxx/gfwlist +server=/paypal-integration.com/127.0.0.1#5335 +ipset=/paypal-integration.com/gfwlist +server=/pccwsolutions.com/127.0.0.1#5335 +ipset=/pccwsolutions.com/gfwlist +server=/yourflashporn.com/127.0.0.1#5335 +ipset=/yourflashporn.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=/disney.co.jp/127.0.0.1#5335 +ipset=/disney.co.jp/gfwlist +server=/1monsterbeatsbydreus.com/127.0.0.1#5335 +ipset=/1monsterbeatsbydreus.com/gfwlist +server=/ebayopensource.net/127.0.0.1#5335 +ipset=/ebayopensource.net/gfwlist +server=/alphera.com/127.0.0.1#5335 +ipset=/alphera.com/gfwlist +server=/line-beta.me/127.0.0.1#5335 +ipset=/line-beta.me/gfwlist +server=/hbogoasia.id/127.0.0.1#5335 +ipset=/hbogoasia.id/gfwlist +server=/linux.org/127.0.0.1#5335 +ipset=/linux.org/gfwlist +server=/thefappening.pro/127.0.0.1#5335 +ipset=/thefappening.pro/gfwlist +server=/localpresshk.com/127.0.0.1#5335 +ipset=/localpresshk.com/gfwlist +server=/regex101.com/127.0.0.1#5335 +ipset=/regex101.com/gfwlist +server=/snapvolumes.com/127.0.0.1#5335 +ipset=/snapvolumes.com/gfwlist +server=/sarennasworld.com/127.0.0.1#5335 +ipset=/sarennasworld.com/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=/freehulu.com/127.0.0.1#5335 +ipset=/freehulu.com/gfwlist +server=/shinhangmc.com/127.0.0.1#5335 +ipset=/shinhangmc.com/gfwlist +server=/beatsbydre.jp/127.0.0.1#5335 +ipset=/beatsbydre.jp/gfwlist +server=/swpr.livedoor.blog/127.0.0.1#5335 +ipset=/swpr.livedoor.blog/gfwlist +server=/amateurthreesomeporn.com/127.0.0.1#5335 +ipset=/amateurthreesomeporn.com/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=/acpica.com/127.0.0.1#5335 +ipset=/acpica.com/gfwlist +server=/xshr.online/127.0.0.1#5335 +ipset=/xshr.online/gfwlist +server=/scifisex.net/127.0.0.1#5335 +ipset=/scifisex.net/gfwlist +server=/nudeteenladies.com/127.0.0.1#5335 +ipset=/nudeteenladies.com/gfwlist +server=/microsoft.by/127.0.0.1#5335 +ipset=/microsoft.by/gfwlist +server=/mingw.org/127.0.0.1#5335 +ipset=/mingw.org/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=/xnxxpornvid.com/127.0.0.1#5335 +ipset=/xnxxpornvid.com/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=/appe-store.com/127.0.0.1#5335 +ipset=/appe-store.com/gfwlist +server=/bvfce6wz.xyz/127.0.0.1#5335 +ipset=/bvfce6wz.xyz/gfwlist +server=/bmwclassic.com/127.0.0.1#5335 +ipset=/bmwclassic.com/gfwlist +server=/theguardiandns.com/127.0.0.1#5335 +ipset=/theguardiandns.com/gfwlist +server=/eduplus.hk/127.0.0.1#5335 +ipset=/eduplus.hk/gfwlist +server=/manurefetish.com/127.0.0.1#5335 +ipset=/manurefetish.com/gfwlist +server=/pinterest.nz/127.0.0.1#5335 +ipset=/pinterest.nz/gfwlist +server=/wldfnjh.com/127.0.0.1#5335 +ipset=/wldfnjh.com/gfwlist +server=/bmw-motorrad.gt/127.0.0.1#5335 +ipset=/bmw-motorrad.gt/gfwlist +server=/visa.com.sg/127.0.0.1#5335 +ipset=/visa.com.sg/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=/leakxxx.com/127.0.0.1#5335 +ipset=/leakxxx.com/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=/respawnbyrazer.com/127.0.0.1#5335 +ipset=/respawnbyrazer.com/gfwlist +server=/quip.com/127.0.0.1#5335 +ipset=/quip.com/gfwlist +server=/mepn.com/127.0.0.1#5335 +ipset=/mepn.com/gfwlist +server=/go.dev/127.0.0.1#5335 +ipset=/go.dev/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=/huluasks.com/127.0.0.1#5335 +ipset=/huluasks.com/gfwlist +server=/babushky.club/127.0.0.1#5335 +ipset=/babushky.club/gfwlist +server=/rust-lang.org/127.0.0.1#5335 +ipset=/rust-lang.org/gfwlist +server=/facebookfacebook.com/127.0.0.1#5335 +ipset=/facebookfacebook.com/gfwlist +server=/apple.cl/127.0.0.1#5335 +ipset=/apple.cl/gfwlist +server=/dynacw.com.tw/127.0.0.1#5335 +ipset=/dynacw.com.tw/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=/51luoli.info/127.0.0.1#5335 +ipset=/51luoli.info/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=/jokerlu1.cc/127.0.0.1#5335 +ipset=/jokerlu1.cc/gfwlist +server=/audio4-ak-spotify-com.akamaized.net/127.0.0.1#5335 +ipset=/audio4-ak-spotify-com.akamaized.net/gfwlist +server=/beatsbydreforsalesonline.com/127.0.0.1#5335 +ipset=/beatsbydreforsalesonline.com/gfwlist +server=/vrpornranked.com/127.0.0.1#5335 +ipset=/vrpornranked.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=/okaapps.com/127.0.0.1#5335 +ipset=/okaapps.com/gfwlist +server=/heraldsun.com.au/127.0.0.1#5335 +ipset=/heraldsun.com.au/gfwlist +server=/bustydanniashe.com/127.0.0.1#5335 +ipset=/bustydanniashe.com/gfwlist +server=/mujikorea.net/127.0.0.1#5335 +ipset=/mujikorea.net/gfwlist +server=/wogx.com/127.0.0.1#5335 +ipset=/wogx.com/gfwlist +server=/streamporn.pw/127.0.0.1#5335 +ipset=/streamporn.pw/gfwlist +server=/fapdude.com/127.0.0.1#5335 +ipset=/fapdude.com/gfwlist +server=/fbboostyourbusiness.com/127.0.0.1#5335 +ipset=/fbboostyourbusiness.com/gfwlist +server=/codeish.co/127.0.0.1#5335 +ipset=/codeish.co/gfwlist +server=/patentgold.net/127.0.0.1#5335 +ipset=/patentgold.net/gfwlist +server=/uun87.com/127.0.0.1#5335 +ipset=/uun87.com/gfwlist +server=/kyodonews.net/127.0.0.1#5335 +ipset=/kyodonews.net/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=/contentful.com/127.0.0.1#5335 +ipset=/contentful.com/gfwlist +server=/gaybubble.com/127.0.0.1#5335 +ipset=/gaybubble.com/gfwlist +server=/dnaindia.com/127.0.0.1#5335 +ipset=/dnaindia.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=/hdb1.app/127.0.0.1#5335 +ipset=/hdb1.app/gfwlist +server=/plug.game/127.0.0.1#5335 +ipset=/plug.game/gfwlist +server=/chinaeconomicreview.com/127.0.0.1#5335 +ipset=/chinaeconomicreview.com/gfwlist +server=/vercel.live/127.0.0.1#5335 +ipset=/vercel.live/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=/lenkino.xxx/127.0.0.1#5335 +ipset=/lenkino.xxx/gfwlist +server=/sankei-ad.net/127.0.0.1#5335 +ipset=/sankei-ad.net/gfwlist +server=/fuskator.com/127.0.0.1#5335 +ipset=/fuskator.com/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=/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=/jmcomic2.moe/127.0.0.1#5335 +ipset=/jmcomic2.moe/gfwlist +server=/reut.rs/127.0.0.1#5335 +ipset=/reut.rs/gfwlist +server=/myfreeporngames.com/127.0.0.1#5335 +ipset=/myfreeporngames.com/gfwlist +server=/makesenseofdata.com/127.0.0.1#5335 +ipset=/makesenseofdata.com/gfwlist +server=/letsjerk.cc/127.0.0.1#5335 +ipset=/letsjerk.cc/gfwlist +server=/svscomics.asia/127.0.0.1#5335 +ipset=/svscomics.asia/gfwlist +server=/mini.se/127.0.0.1#5335 +ipset=/mini.se/gfwlist +server=/ikea.com.om/127.0.0.1#5335 +ipset=/ikea.com.om/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=/katestube.com/127.0.0.1#5335 +ipset=/katestube.com/gfwlist +server=/yahoosandbox.com/127.0.0.1#5335 +ipset=/yahoosandbox.com/gfwlist +server=/spacely.com.au/127.0.0.1#5335 +ipset=/spacely.com.au/gfwlist +server=/assistirhentai.com/127.0.0.1#5335 +ipset=/assistirhentai.com/gfwlist +server=/bmw-motorrad.ee/127.0.0.1#5335 +ipset=/bmw-motorrad.ee/gfwlist +server=/attwirelessinternet.com/127.0.0.1#5335 +ipset=/attwirelessinternet.com/gfwlist +server=/gazounabi.com/127.0.0.1#5335 +ipset=/gazounabi.com/gfwlist +server=/jerk-porn.com/127.0.0.1#5335 +ipset=/jerk-porn.com/gfwlist +server=/fakku.net/127.0.0.1#5335 +ipset=/fakku.net/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=/porngo.tube/127.0.0.1#5335 +ipset=/porngo.tube/gfwlist +server=/wetpussygames.com/127.0.0.1#5335 +ipset=/wetpussygames.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=/feceboox.com/127.0.0.1#5335 +ipset=/feceboox.com/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=/pali.ltd/127.0.0.1#5335 +ipset=/pali.ltd/gfwlist +server=/livrariart.com.br/127.0.0.1#5335 +ipset=/livrariart.com.br/gfwlist +server=/imlive.com/127.0.0.1#5335 +ipset=/imlive.com/gfwlist +server=/mvk.com/127.0.0.1#5335 +ipset=/mvk.com/gfwlist +server=/mrcong.com/127.0.0.1#5335 +ipset=/mrcong.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=/fuqqt.com/127.0.0.1#5335 +ipset=/fuqqt.com/gfwlist +server=/csnjcbnxdnb.com/127.0.0.1#5335 +ipset=/csnjcbnxdnb.com/gfwlist +server=/porn7.net/127.0.0.1#5335 +ipset=/porn7.net/gfwlist +server=/onindiansex.com/127.0.0.1#5335 +ipset=/onindiansex.com/gfwlist +server=/youtube.com.br/127.0.0.1#5335 +ipset=/youtube.com.br/gfwlist +server=/xbrasilporno.com/127.0.0.1#5335 +ipset=/xbrasilporno.com/gfwlist +server=/beatsbydreforstore.com/127.0.0.1#5335 +ipset=/beatsbydreforstore.com/gfwlist +server=/fapteencam.com/127.0.0.1#5335 +ipset=/fapteencam.com/gfwlist +server=/connectedcommerce.tv/127.0.0.1#5335 +ipset=/connectedcommerce.tv/gfwlist +server=/siteripz.net/127.0.0.1#5335 +ipset=/siteripz.net/gfwlist +server=/twinkspornos.com/127.0.0.1#5335 +ipset=/twinkspornos.com/gfwlist +server=/ctyun.online/127.0.0.1#5335 +ipset=/ctyun.online/gfwlist +server=/18eighteen.com/127.0.0.1#5335 +ipset=/18eighteen.com/gfwlist +server=/msn.com/127.0.0.1#5335 +ipset=/msn.com/gfwlist +server=/bigtitsextapes.com/127.0.0.1#5335 +ipset=/bigtitsextapes.com/gfwlist +server=/javspanking.com/127.0.0.1#5335 +ipset=/javspanking.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=/riot.im/127.0.0.1#5335 +ipset=/riot.im/gfwlist +server=/animalforsex.com/127.0.0.1#5335 +ipset=/animalforsex.com/gfwlist +server=/maturepornonly.com/127.0.0.1#5335 +ipset=/maturepornonly.com/gfwlist +server=/youtube.ge/127.0.0.1#5335 +ipset=/youtube.ge/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=/erodouga.8sp.biz/127.0.0.1#5335 +ipset=/erodouga.8sp.biz/gfwlist +server=/chatango.com/127.0.0.1#5335 +ipset=/chatango.com/gfwlist +server=/findbare.com/127.0.0.1#5335 +ipset=/findbare.com/gfwlist +server=/thelancet.com/127.0.0.1#5335 +ipset=/thelancet.com/gfwlist +server=/ebenporno.com/127.0.0.1#5335 +ipset=/ebenporno.com/gfwlist +server=/moystoys.com/127.0.0.1#5335 +ipset=/moystoys.com/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=/firestonecomercial.com.br/127.0.0.1#5335 +ipset=/firestonecomercial.com.br/gfwlist +server=/hongkongpost.gov.hk/127.0.0.1#5335 +ipset=/hongkongpost.gov.hk/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=/twlegs.com/127.0.0.1#5335 +ipset=/twlegs.com/gfwlist +server=/dettol.com.br/127.0.0.1#5335 +ipset=/dettol.com.br/gfwlist +server=/mansurfer.com/127.0.0.1#5335 +ipset=/mansurfer.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=/nugettest.org/127.0.0.1#5335 +ipset=/nugettest.org/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=/mygaysites.com/127.0.0.1#5335 +ipset=/mygaysites.com/gfwlist +server=/twitch.tv/127.0.0.1#5335 +ipset=/twitch.tv/gfwlist +server=/beatssaleus.com/127.0.0.1#5335 +ipset=/beatssaleus.com/gfwlist +server=/gayharem.com/127.0.0.1#5335 +ipset=/gayharem.com/gfwlist +server=/strepsils.es/127.0.0.1#5335 +ipset=/strepsils.es/gfwlist +server=/porntsunami.com/127.0.0.1#5335 +ipset=/porntsunami.com/gfwlist +server=/d-upp.com/127.0.0.1#5335 +ipset=/d-upp.com/gfwlist +server=/pornxxx.bid/127.0.0.1#5335 +ipset=/pornxxx.bid/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=/favepornmovs.com/127.0.0.1#5335 +ipset=/favepornmovs.com/gfwlist +server=/jdbimgs.com/127.0.0.1#5335 +ipset=/jdbimgs.com/gfwlist +server=/tubev.sex/127.0.0.1#5335 +ipset=/tubev.sex/gfwlist +server=/beatsbydreforshop2013-nl.com/127.0.0.1#5335 +ipset=/beatsbydreforshop2013-nl.com/gfwlist +server=/pussyshine.info/127.0.0.1#5335 +ipset=/pussyshine.info/gfwlist +server=/alphabet.com/127.0.0.1#5335 +ipset=/alphabet.com/gfwlist +server=/twoo.com/127.0.0.1#5335 +ipset=/twoo.com/gfwlist +server=/lss55.com/127.0.0.1#5335 +ipset=/lss55.com/gfwlist +server=/ninecommentaries.com/127.0.0.1#5335 +ipset=/ninecommentaries.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=/pinkpussy.tv/127.0.0.1#5335 +ipset=/pinkpussy.tv/gfwlist +server=/norsk.mobi/127.0.0.1#5335 +ipset=/norsk.mobi/gfwlist +server=/cheapwirelessbeats.com/127.0.0.1#5335 +ipset=/cheapwirelessbeats.com/gfwlist +server=/cultura-kolomna.ru/127.0.0.1#5335 +ipset=/cultura-kolomna.ru/gfwlist +server=/bestamateurcumshots.com/127.0.0.1#5335 +ipset=/bestamateurcumshots.com/gfwlist +server=/elsevier.io/127.0.0.1#5335 +ipset=/elsevier.io/gfwlist +server=/voatibetan.com/127.0.0.1#5335 +ipset=/voatibetan.com/gfwlist +server=/erogazoufactory.com/127.0.0.1#5335 +ipset=/erogazoufactory.com/gfwlist +server=/av-top.com/127.0.0.1#5335 +ipset=/av-top.com/gfwlist +server=/sankakucomplex.com/127.0.0.1#5335 +ipset=/sankakucomplex.com/gfwlist +server=/paypal-engineering.com/127.0.0.1#5335 +ipset=/paypal-engineering.com/gfwlist +server=/beatspascher.net/127.0.0.1#5335 +ipset=/beatspascher.net/gfwlist +server=/alt7-mtalk.google.com/127.0.0.1#5335 +ipset=/alt7-mtalk.google.com/gfwlist +server=/hentaixxx.vip/127.0.0.1#5335 +ipset=/hentaixxx.vip/gfwlist +server=/efukt.com/127.0.0.1#5335 +ipset=/efukt.com/gfwlist +server=/xxxgirls88.com/127.0.0.1#5335 +ipset=/xxxgirls88.com/gfwlist +server=/gettyimages.ie/127.0.0.1#5335 +ipset=/gettyimages.ie/gfwlist +server=/myporno.photos/127.0.0.1#5335 +ipset=/myporno.photos/gfwlist +server=/isexomega.tw/127.0.0.1#5335 +ipset=/isexomega.tw/gfwlist +server=/fse.tv/127.0.0.1#5335 +ipset=/fse.tv/gfwlist +server=/5mb48g.com/127.0.0.1#5335 +ipset=/5mb48g.com/gfwlist +server=/sun.com/127.0.0.1#5335 +ipset=/sun.com/gfwlist +server=/beatsaudiobydre.net/127.0.0.1#5335 +ipset=/beatsaudiobydre.net/gfwlist +server=/gandhara.ru/127.0.0.1#5335 +ipset=/gandhara.ru/gfwlist +server=/azureplanetscale.info/127.0.0.1#5335 +ipset=/azureplanetscale.info/gfwlist +server=/pornrox.com/127.0.0.1#5335 +ipset=/pornrox.com/gfwlist +server=/bigsex.tv/127.0.0.1#5335 +ipset=/bigsex.tv/gfwlist +server=/asianboygay.com/127.0.0.1#5335 +ipset=/asianboygay.com/gfwlist +server=/amateurhomevids.com/127.0.0.1#5335 +ipset=/amateurhomevids.com/gfwlist +server=/inkchoice.com/127.0.0.1#5335 +ipset=/inkchoice.com/gfwlist +server=/amapornofilme.com/127.0.0.1#5335 +ipset=/amapornofilme.com/gfwlist +server=/activeteachonline.com/127.0.0.1#5335 +ipset=/activeteachonline.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=/171xx.com/127.0.0.1#5335 +ipset=/171xx.com/gfwlist +server=/anyporn.com/127.0.0.1#5335 +ipset=/anyporn.com/gfwlist +server=/sexy-more.com/127.0.0.1#5335 +ipset=/sexy-more.com/gfwlist +server=/momentumms.com/127.0.0.1#5335 +ipset=/momentumms.com/gfwlist +server=/sexxxtape.net/127.0.0.1#5335 +ipset=/sexxxtape.net/gfwlist +server=/ebayadvertising.com/127.0.0.1#5335 +ipset=/ebayadvertising.com/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=/infinitetoons.com/127.0.0.1#5335 +ipset=/infinitetoons.com/gfwlist +server=/mini.co.th/127.0.0.1#5335 +ipset=/mini.co.th/gfwlist +server=/cuckporn.com/127.0.0.1#5335 +ipset=/cuckporn.com/gfwlist +server=/tokyoporns.com/127.0.0.1#5335 +ipset=/tokyoporns.com/gfwlist +server=/vfsco.com/127.0.0.1#5335 +ipset=/vfsco.com/gfwlist +server=/navercorp.com/127.0.0.1#5335 +ipset=/navercorp.com/gfwlist +server=/tandf.co.uk/127.0.0.1#5335 +ipset=/tandf.co.uk/gfwlist +server=/microsoft.ge/127.0.0.1#5335 +ipset=/microsoft.ge/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=/seneporno.com/127.0.0.1#5335 +ipset=/seneporno.com/gfwlist +server=/adventuresbydisney.com/127.0.0.1#5335 +ipset=/adventuresbydisney.com/gfwlist +server=/asiamoviepass.com/127.0.0.1#5335 +ipset=/asiamoviepass.com/gfwlist +server=/tianbiav10.com/127.0.0.1#5335 +ipset=/tianbiav10.com/gfwlist +server=/damplips.com/127.0.0.1#5335 +ipset=/damplips.com/gfwlist +server=/volvotrucks.lt/127.0.0.1#5335 +ipset=/volvotrucks.lt/gfwlist +server=/boycall.com/127.0.0.1#5335 +ipset=/boycall.com/gfwlist +server=/mcstories.com/127.0.0.1#5335 +ipset=/mcstories.com/gfwlist +server=/akamai-access.net/127.0.0.1#5335 +ipset=/akamai-access.net/gfwlist +server=/bumptop.org/127.0.0.1#5335 +ipset=/bumptop.org/gfwlist +server=/fuck.sc/127.0.0.1#5335 +ipset=/fuck.sc/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=/pnas.org/127.0.0.1#5335 +ipset=/pnas.org/gfwlist +server=/boringcompany.com/127.0.0.1#5335 +ipset=/boringcompany.com/gfwlist +server=/apkcombo.com/127.0.0.1#5335 +ipset=/apkcombo.com/gfwlist +server=/infotimes.com.tw/127.0.0.1#5335 +ipset=/infotimes.com.tw/gfwlist +server=/lingeriepornonly.com/127.0.0.1#5335 +ipset=/lingeriepornonly.com/gfwlist +server=/orgasmlist.com/127.0.0.1#5335 +ipset=/orgasmlist.com/gfwlist +server=/uplay-istrip.com/127.0.0.1#5335 +ipset=/uplay-istrip.com/gfwlist +server=/smartline.com.au/127.0.0.1#5335 +ipset=/smartline.com.au/gfwlist +server=/wide-youtube.l.google.com/127.0.0.1#5335 +ipset=/wide-youtube.l.google.com/gfwlist +server=/xhub.tv/127.0.0.1#5335 +ipset=/xhub.tv/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=/superpapermario.com/127.0.0.1#5335 +ipset=/superpapermario.com/gfwlist +server=/qdmomentum.com/127.0.0.1#5335 +ipset=/qdmomentum.com/gfwlist +server=/blogspot.cl/127.0.0.1#5335 +ipset=/blogspot.cl/gfwlist +server=/practicalmoneyskills.jp/127.0.0.1#5335 +ipset=/practicalmoneyskills.jp/gfwlist +server=/realclearfoundation.org/127.0.0.1#5335 +ipset=/realclearfoundation.org/gfwlist +server=/feedburner.com/127.0.0.1#5335 +ipset=/feedburner.com/gfwlist +server=/airwick.com.br/127.0.0.1#5335 +ipset=/airwick.com.br/gfwlist +server=/techtimes.com/127.0.0.1#5335 +ipset=/techtimes.com/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=/ikea.com.pl/127.0.0.1#5335 +ipset=/ikea.com.pl/gfwlist +server=/acjj.net/127.0.0.1#5335 +ipset=/acjj.net/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=/ituneas.com/127.0.0.1#5335 +ipset=/ituneas.com/gfwlist +server=/kyodo-d.jp/127.0.0.1#5335 +ipset=/kyodo-d.jp/gfwlist +server=/blogspot.cz/127.0.0.1#5335 +ipset=/blogspot.cz/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=/thai-xxx.com/127.0.0.1#5335 +ipset=/thai-xxx.com/gfwlist +server=/facebook-inc.com/127.0.0.1#5335 +ipset=/facebook-inc.com/gfwlist +server=/cloudsync-prod.s3.amazonaws.com/127.0.0.1#5335 +ipset=/cloudsync-prod.s3.amazonaws.com/gfwlist +server=/waplog.com/127.0.0.1#5335 +ipset=/waplog.com/gfwlist +server=/nvidia.dk/127.0.0.1#5335 +ipset=/nvidia.dk/gfwlist +server=/xgsp.tv/127.0.0.1#5335 +ipset=/xgsp.tv/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=/disneyturkiye.com.tr/127.0.0.1#5335 +ipset=/disneyturkiye.com.tr/gfwlist +server=/iphone.ru/127.0.0.1#5335 +ipset=/iphone.ru/gfwlist +server=/pics.vc/127.0.0.1#5335 +ipset=/pics.vc/gfwlist +server=/redwap.pro/127.0.0.1#5335 +ipset=/redwap.pro/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=/ccievoicelabs.com/127.0.0.1#5335 +ipset=/ccievoicelabs.com/gfwlist +server=/mini-stjohns.ca/127.0.0.1#5335 +ipset=/mini-stjohns.ca/gfwlist +server=/xkorean.cam/127.0.0.1#5335 +ipset=/xkorean.cam/gfwlist +server=/yomiuri-ryokou.co.jp/127.0.0.1#5335 +ipset=/yomiuri-ryokou.co.jp/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=/geek-squad.net/127.0.0.1#5335 +ipset=/geek-squad.net/gfwlist +server=/pornvideotop.com/127.0.0.1#5335 +ipset=/pornvideotop.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=/headphoneshome.com/127.0.0.1#5335 +ipset=/headphoneshome.com/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=/streamhentaimovies.com/127.0.0.1#5335 +ipset=/streamhentaimovies.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=/teengirlfriendtube.com/127.0.0.1#5335 +ipset=/teengirlfriendtube.com/gfwlist +server=/adult-list.com/127.0.0.1#5335 +ipset=/adult-list.com/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=/yomiuri.co.jp/127.0.0.1#5335 +ipset=/yomiuri.co.jp/gfwlist +server=/finishinfo.cl/127.0.0.1#5335 +ipset=/finishinfo.cl/gfwlist +server=/volvotrucks.uy/127.0.0.1#5335 +ipset=/volvotrucks.uy/gfwlist +server=/viet69.news/127.0.0.1#5335 +ipset=/viet69.news/gfwlist +server=/suxib.com/127.0.0.1#5335 +ipset=/suxib.com/gfwlist +server=/theclubprive.com/127.0.0.1#5335 +ipset=/theclubprive.com/gfwlist +server=/thelittleslush.com/127.0.0.1#5335 +ipset=/thelittleslush.com/gfwlist +server=/starbuckscoffeegear.com/127.0.0.1#5335 +ipset=/starbuckscoffeegear.com/gfwlist +server=/indiangfvideos.com/127.0.0.1#5335 +ipset=/indiangfvideos.com/gfwlist +server=/leporno.org/127.0.0.1#5335 +ipset=/leporno.org/gfwlist +server=/thebestfetishsites.com/127.0.0.1#5335 +ipset=/thebestfetishsites.com/gfwlist +server=/family-sex.me/127.0.0.1#5335 +ipset=/family-sex.me/gfwlist +server=/bitchmomporn.com/127.0.0.1#5335 +ipset=/bitchmomporn.com/gfwlist +server=/creamlemon.info/127.0.0.1#5335 +ipset=/creamlemon.info/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=/zohomerchandise.com/127.0.0.1#5335 +ipset=/zohomerchandise.com/gfwlist +server=/youtube.com.ro/127.0.0.1#5335 +ipset=/youtube.com.ro/gfwlist +server=/fulib711.shop/127.0.0.1#5335 +ipset=/fulib711.shop/gfwlist +server=/sexsaoy.com/127.0.0.1#5335 +ipset=/sexsaoy.com/gfwlist +server=/uhtube.me/127.0.0.1#5335 +ipset=/uhtube.me/gfwlist +server=/beatscheap-uk.com/127.0.0.1#5335 +ipset=/beatscheap-uk.com/gfwlist +server=/kjj05.cn/127.0.0.1#5335 +ipset=/kjj05.cn/gfwlist +server=/ie11.com/127.0.0.1#5335 +ipset=/ie11.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=/roku.com/127.0.0.1#5335 +ipset=/roku.com/gfwlist +server=/bmw.it/127.0.0.1#5335 +ipset=/bmw.it/gfwlist +server=/xn--urs05q.jp/127.0.0.1#5335 +ipset=/xn--urs05q.jp/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=/epochtimes.nl/127.0.0.1#5335 +ipset=/epochtimes.nl/gfwlist +server=/trmini.com/127.0.0.1#5335 +ipset=/trmini.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=/jwpsrv.com/127.0.0.1#5335 +ipset=/jwpsrv.com/gfwlist +server=/vkgo.app/127.0.0.1#5335 +ipset=/vkgo.app/gfwlist +server=/gamesfuckgirls.com/127.0.0.1#5335 +ipset=/gamesfuckgirls.com/gfwlist +server=/nudecelebforum.com/127.0.0.1#5335 +ipset=/nudecelebforum.com/gfwlist +server=/pornwebmasters.com/127.0.0.1#5335 +ipset=/pornwebmasters.com/gfwlist +server=/disneyme.com/127.0.0.1#5335 +ipset=/disneyme.com/gfwlist +server=/vanitha.in/127.0.0.1#5335 +ipset=/vanitha.in/gfwlist +server=/babesandgirls.com/127.0.0.1#5335 +ipset=/babesandgirls.com/gfwlist +server=/thawte.fr/127.0.0.1#5335 +ipset=/thawte.fr/gfwlist +server=/site.com/127.0.0.1#5335 +ipset=/site.com/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=/amerikaninsesi.com/127.0.0.1#5335 +ipset=/amerikaninsesi.com/gfwlist +server=/bbci.co.uk/127.0.0.1#5335 +ipset=/bbci.co.uk/gfwlist +server=/madpeople.net/127.0.0.1#5335 +ipset=/madpeople.net/gfwlist +server=/chatwhores.net/127.0.0.1#5335 +ipset=/chatwhores.net/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=/monsterbeatstienda.com/127.0.0.1#5335 +ipset=/monsterbeatstienda.com/gfwlist +server=/ginmoe.com/127.0.0.1#5335 +ipset=/ginmoe.com/gfwlist +server=/sapphicpornonly.com/127.0.0.1#5335 +ipset=/sapphicpornonly.com/gfwlist +server=/foxcincy.com/127.0.0.1#5335 +ipset=/foxcincy.com/gfwlist +server=/darknun.com/127.0.0.1#5335 +ipset=/darknun.com/gfwlist +server=/bloombergforeducation.com/127.0.0.1#5335 +ipset=/bloombergforeducation.com/gfwlist +server=/free-xxx-porn.org/127.0.0.1#5335 +ipset=/free-xxx-porn.org/gfwlist +server=/mindmeld.com/127.0.0.1#5335 +ipset=/mindmeld.com/gfwlist +server=/mobilevrxxx.com/127.0.0.1#5335 +ipset=/mobilevrxxx.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=/tonicmovies.com/127.0.0.1#5335 +ipset=/tonicmovies.com/gfwlist +server=/asian-max.com/127.0.0.1#5335 +ipset=/asian-max.com/gfwlist +server=/shemalestube.com/127.0.0.1#5335 +ipset=/shemalestube.com/gfwlist +server=/ancensored.com/127.0.0.1#5335 +ipset=/ancensored.com/gfwlist +server=/clubtubes.com/127.0.0.1#5335 +ipset=/clubtubes.com/gfwlist +server=/nikefuelband.com/127.0.0.1#5335 +ipset=/nikefuelband.com/gfwlist +server=/zunked.com/127.0.0.1#5335 +ipset=/zunked.com/gfwlist +server=/xvideoporno.tv/127.0.0.1#5335 +ipset=/xvideoporno.tv/gfwlist +server=/wnacg.link/127.0.0.1#5335 +ipset=/wnacg.link/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=/cuebic.biz/127.0.0.1#5335 +ipset=/cuebic.biz/gfwlist +server=/foxtv.com/127.0.0.1#5335 +ipset=/foxtv.com/gfwlist +server=/anal.casa/127.0.0.1#5335 +ipset=/anal.casa/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=/fi11.com/127.0.0.1#5335 +ipset=/fi11.com/gfwlist +server=/best3dhere.com/127.0.0.1#5335 +ipset=/best3dhere.com/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=/perfectsexnow.com/127.0.0.1#5335 +ipset=/perfectsexnow.com/gfwlist +server=/trendmicro.com/127.0.0.1#5335 +ipset=/trendmicro.com/gfwlist +server=/toptoonsites.com/127.0.0.1#5335 +ipset=/toptoonsites.com/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=/japan-whores.com/127.0.0.1#5335 +ipset=/japan-whores.com/gfwlist +server=/opte.org/127.0.0.1#5335 +ipset=/opte.org/gfwlist +server=/wetchicks.org/127.0.0.1#5335 +ipset=/wetchicks.org/gfwlist +server=/vscode-sync.trafficmanager.net/127.0.0.1#5335 +ipset=/vscode-sync.trafficmanager.net/gfwlist +server=/fotoiia.com/127.0.0.1#5335 +ipset=/fotoiia.com/gfwlist +server=/myvodafone.com.ws/127.0.0.1#5335 +ipset=/myvodafone.com.ws/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=/chikiporn.com/127.0.0.1#5335 +ipset=/chikiporn.com/gfwlist +server=/cumasianporn.com/127.0.0.1#5335 +ipset=/cumasianporn.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=/sony-asia.com/127.0.0.1#5335 +ipset=/sony-asia.com/gfwlist +server=/mingpaocanada.com/127.0.0.1#5335 +ipset=/mingpaocanada.com/gfwlist +server=/gwins.org/127.0.0.1#5335 +ipset=/gwins.org/gfwlist +server=/buyingfacebooklikes.com/127.0.0.1#5335 +ipset=/buyingfacebooklikes.com/gfwlist +server=/yahoosportsbook.com/127.0.0.1#5335 +ipset=/yahoosportsbook.com/gfwlist +server=/pornv.org/127.0.0.1#5335 +ipset=/pornv.org/gfwlist +server=/gayporn.com/127.0.0.1#5335 +ipset=/gayporn.com/gfwlist +server=/poopeegirls.com/127.0.0.1#5335 +ipset=/poopeegirls.com/gfwlist +server=/coursera.help/127.0.0.1#5335 +ipset=/coursera.help/gfwlist +server=/smart-edge.com/127.0.0.1#5335 +ipset=/smart-edge.com/gfwlist +server=/everydayporn.co/127.0.0.1#5335 +ipset=/everydayporn.co/gfwlist +server=/thecleversense.com/127.0.0.1#5335 +ipset=/thecleversense.com/gfwlist +server=/hentaigasm.com/127.0.0.1#5335 +ipset=/hentaigasm.com/gfwlist +server=/pornid.xxx/127.0.0.1#5335 +ipset=/pornid.xxx/gfwlist +server=/bigbeans.solutions/127.0.0.1#5335 +ipset=/bigbeans.solutions/gfwlist +server=/overthumbs.com/127.0.0.1#5335 +ipset=/overthumbs.com/gfwlist +server=/purenudism.com/127.0.0.1#5335 +ipset=/purenudism.com/gfwlist +server=/steambroadcast.akamaized.net/127.0.0.1#5335 +ipset=/steambroadcast.akamaized.net/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=/xpee.com/127.0.0.1#5335 +ipset=/xpee.com/gfwlist +server=/creamasia.com/127.0.0.1#5335 +ipset=/creamasia.com/gfwlist +server=/iphone-vip5.com/127.0.0.1#5335 +ipset=/iphone-vip5.com/gfwlist +server=/google.com.pg/127.0.0.1#5335 +ipset=/google.com.pg/gfwlist +server=/kindnudist.com/127.0.0.1#5335 +ipset=/kindnudist.com/gfwlist +server=/xn--ngstr-lra8j.com/127.0.0.1#5335 +ipset=/xn--ngstr-lra8j.com/gfwlist +server=/anatomy.tv/127.0.0.1#5335 +ipset=/anatomy.tv/gfwlist +server=/blogspot.my/127.0.0.1#5335 +ipset=/blogspot.my/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=/youtube.se/127.0.0.1#5335 +ipset=/youtube.se/gfwlist +server=/fetish-bb.com/127.0.0.1#5335 +ipset=/fetish-bb.com/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=/sigmoidoscopeexam.com/127.0.0.1#5335 +ipset=/sigmoidoscopeexam.com/gfwlist +server=/yahoo.ie/127.0.0.1#5335 +ipset=/yahoo.ie/gfwlist +server=/voanews.eu/127.0.0.1#5335 +ipset=/voanews.eu/gfwlist +server=/facebookstudios.net/127.0.0.1#5335 +ipset=/facebookstudios.net/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=/sexgamefun.com/127.0.0.1#5335 +ipset=/sexgamefun.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=/applemusicconnect.com/127.0.0.1#5335 +ipset=/applemusicconnect.com/gfwlist +server=/badoinkvr.com/127.0.0.1#5335 +ipset=/badoinkvr.com/gfwlist +server=/foxsports.info/127.0.0.1#5335 +ipset=/foxsports.info/gfwlist +server=/foxsuper6.com/127.0.0.1#5335 +ipset=/foxsuper6.com/gfwlist +server=/microsoftinternetsafety.net/127.0.0.1#5335 +ipset=/microsoftinternetsafety.net/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=/miaomwu.com/127.0.0.1#5335 +ipset=/miaomwu.com/gfwlist +server=/qmttqg3k.me/127.0.0.1#5335 +ipset=/qmttqg3k.me/gfwlist +server=/hqcollect.net/127.0.0.1#5335 +ipset=/hqcollect.net/gfwlist +server=/bmw.co.cr/127.0.0.1#5335 +ipset=/bmw.co.cr/gfwlist +server=/imageshack.com/127.0.0.1#5335 +ipset=/imageshack.com/gfwlist +server=/cherrybrady.com/127.0.0.1#5335 +ipset=/cherrybrady.com/gfwlist +server=/photoshop.com/127.0.0.1#5335 +ipset=/photoshop.com/gfwlist +server=/rarbgmirror.com/127.0.0.1#5335 +ipset=/rarbgmirror.com/gfwlist +server=/storiesonline.net/127.0.0.1#5335 +ipset=/storiesonline.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=/hpsignage.com/127.0.0.1#5335 +ipset=/hpsignage.com/gfwlist +server=/javlands.net/127.0.0.1#5335 +ipset=/javlands.net/gfwlist +server=/ubisoftconnect.com/127.0.0.1#5335 +ipset=/ubisoftconnect.com/gfwlist +server=/coolinet.net/127.0.0.1#5335 +ipset=/coolinet.net/gfwlist +server=/azure-devices.net/127.0.0.1#5335 +ipset=/azure-devices.net/gfwlist +server=/imperiodefamosas.com/127.0.0.1#5335 +ipset=/imperiodefamosas.com/gfwlist +server=/voyeurstyle.com/127.0.0.1#5335 +ipset=/voyeurstyle.com/gfwlist +server=/shopee.cl/127.0.0.1#5335 +ipset=/shopee.cl/gfwlist +server=/shopdrebeats.com/127.0.0.1#5335 +ipset=/shopdrebeats.com/gfwlist +server=/theyxxx.com/127.0.0.1#5335 +ipset=/theyxxx.com/gfwlist +server=/ipodshop.com.au/127.0.0.1#5335 +ipset=/ipodshop.com.au/gfwlist +server=/horsecock.guru/127.0.0.1#5335 +ipset=/horsecock.guru/gfwlist +server=/heroku-charge.com/127.0.0.1#5335 +ipset=/heroku-charge.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=/matureporner.com/127.0.0.1#5335 +ipset=/matureporner.com/gfwlist +server=/vmwarehorizon.com/127.0.0.1#5335 +ipset=/vmwarehorizon.com/gfwlist +server=/hornywhores.net/127.0.0.1#5335 +ipset=/hornywhores.net/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=/porno365.net/127.0.0.1#5335 +ipset=/porno365.net/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=/volvotrucks.hr/127.0.0.1#5335 +ipset=/volvotrucks.hr/gfwlist +server=/alivevmax.com/127.0.0.1#5335 +ipset=/alivevmax.com/gfwlist +server=/geeksquad.net/127.0.0.1#5335 +ipset=/geeksquad.net/gfwlist +server=/instagramcn.com/127.0.0.1#5335 +ipset=/instagramcn.com/gfwlist +server=/itunes.org/127.0.0.1#5335 +ipset=/itunes.org/gfwlist +server=/mrssiren.com/127.0.0.1#5335 +ipset=/mrssiren.com/gfwlist +server=/reachtheworldonfacebook.com/127.0.0.1#5335 +ipset=/reachtheworldonfacebook.com/gfwlist +server=/pornburst.xxx/127.0.0.1#5335 +ipset=/pornburst.xxx/gfwlist +server=/nintendo.co.za/127.0.0.1#5335 +ipset=/nintendo.co.za/gfwlist +server=/whvuxtub.com/127.0.0.1#5335 +ipset=/whvuxtub.com/gfwlist +server=/fb.gg/127.0.0.1#5335 +ipset=/fb.gg/gfwlist +server=/720video.tv/127.0.0.1#5335 +ipset=/720video.tv/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=/gaysheaven.blogspot.com/127.0.0.1#5335 +ipset=/gaysheaven.blogspot.com/gfwlist +server=/poop-pee.online/127.0.0.1#5335 +ipset=/poop-pee.online/gfwlist +server=/minilondon.ca/127.0.0.1#5335 +ipset=/minilondon.ca/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=/ippstatic.com/127.0.0.1#5335 +ipset=/ippstatic.com/gfwlist +server=/cisco.mobi/127.0.0.1#5335 +ipset=/cisco.mobi/gfwlist +server=/girl-secret.com/127.0.0.1#5335 +ipset=/girl-secret.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=/ciscosoftware.com/127.0.0.1#5335 +ipset=/ciscosoftware.com/gfwlist +server=/muyzorras.com/127.0.0.1#5335 +ipset=/muyzorras.com/gfwlist +server=/healthreach.hk/127.0.0.1#5335 +ipset=/healthreach.hk/gfwlist +server=/overleaf.com/127.0.0.1#5335 +ipset=/overleaf.com/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=/ikea.co.id/127.0.0.1#5335 +ipset=/ikea.co.id/gfwlist +server=/runnike.com/127.0.0.1#5335 +ipset=/runnike.com/gfwlist +server=/wildcamporn.com/127.0.0.1#5335 +ipset=/wildcamporn.com/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=/plusporn.net/127.0.0.1#5335 +ipset=/plusporn.net/gfwlist +server=/gridaware.app/127.0.0.1#5335 +ipset=/gridaware.app/gfwlist +server=/divas.com.uy/127.0.0.1#5335 +ipset=/divas.com.uy/gfwlist +server=/primepornlist.com/127.0.0.1#5335 +ipset=/primepornlist.com/gfwlist +server=/geeksquadprotectionplan.org/127.0.0.1#5335 +ipset=/geeksquadprotectionplan.org/gfwlist +server=/mcdelivery.com.my/127.0.0.1#5335 +ipset=/mcdelivery.com.my/gfwlist +server=/zooxxxsexporn.red/127.0.0.1#5335 +ipset=/zooxxxsexporn.red/gfwlist +server=/pornhdvideos.tv/127.0.0.1#5335 +ipset=/pornhdvideos.tv/gfwlist +server=/bongacams.com/127.0.0.1#5335 +ipset=/bongacams.com/gfwlist +server=/thomsonreuters.com.sg/127.0.0.1#5335 +ipset=/thomsonreuters.com.sg/gfwlist +server=/beatsbydrediscountonline.net/127.0.0.1#5335 +ipset=/beatsbydrediscountonline.net/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=/fareastpornhub.com/127.0.0.1#5335 +ipset=/fareastpornhub.com/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=/verizon.com/127.0.0.1#5335 +ipset=/verizon.com/gfwlist +server=/judeporn.com/127.0.0.1#5335 +ipset=/judeporn.com/gfwlist +server=/monsterbeatsheadphones.net/127.0.0.1#5335 +ipset=/monsterbeatsheadphones.net/gfwlist +server=/miniso-bh.com/127.0.0.1#5335 +ipset=/miniso-bh.com/gfwlist +server=/cultoferotica.com/127.0.0.1#5335 +ipset=/cultoferotica.com/gfwlist +server=/pornoid.com/127.0.0.1#5335 +ipset=/pornoid.com/gfwlist +server=/datalore.io/127.0.0.1#5335 +ipset=/datalore.io/gfwlist +server=/fnmt.es/127.0.0.1#5335 +ipset=/fnmt.es/gfwlist +server=/thefacebook.com/127.0.0.1#5335 +ipset=/thefacebook.com/gfwlist +server=/newcastlenewslocal.com.au/127.0.0.1#5335 +ipset=/newcastlenewslocal.com.au/gfwlist +server=/enemas4fun.com/127.0.0.1#5335 +ipset=/enemas4fun.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=/stripskunk.com/127.0.0.1#5335 +ipset=/stripskunk.com/gfwlist +server=/intel.sv/127.0.0.1#5335 +ipset=/intel.sv/gfwlist +server=/geolytics.com/127.0.0.1#5335 +ipset=/geolytics.com/gfwlist +server=/dowjones.com/127.0.0.1#5335 +ipset=/dowjones.com/gfwlist +server=/herexxx.com/127.0.0.1#5335 +ipset=/herexxx.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=/nikeasia.com/127.0.0.1#5335 +ipset=/nikeasia.com/gfwlist +server=/gigaxvideos.com/127.0.0.1#5335 +ipset=/gigaxvideos.com/gfwlist +server=/inxporn.com/127.0.0.1#5335 +ipset=/inxporn.com/gfwlist +server=/vnware.net/127.0.0.1#5335 +ipset=/vnware.net/gfwlist +server=/20thcenturystudios.com.au/127.0.0.1#5335 +ipset=/20thcenturystudios.com.au/gfwlist +server=/classicnike.com/127.0.0.1#5335 +ipset=/classicnike.com/gfwlist +server=/flatpak.org/127.0.0.1#5335 +ipset=/flatpak.org/gfwlist +server=/photo-image.monster/127.0.0.1#5335 +ipset=/photo-image.monster/gfwlist +server=/xxx-hentai.blogspot.com/127.0.0.1#5335 +ipset=/xxx-hentai.blogspot.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=/clasporno.org/127.0.0.1#5335 +ipset=/clasporno.org/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=/ibookpartner.com/127.0.0.1#5335 +ipset=/ibookpartner.com/gfwlist +server=/fox29.com/127.0.0.1#5335 +ipset=/fox29.com/gfwlist +server=/yahoo.gl/127.0.0.1#5335 +ipset=/yahoo.gl/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=/hentaiathome.net/127.0.0.1#5335 +ipset=/hentaiathome.net/gfwlist +server=/bmw-me.com/127.0.0.1#5335 +ipset=/bmw-me.com/gfwlist +server=/nvidia.co.in/127.0.0.1#5335 +ipset=/nvidia.co.in/gfwlist +server=/nbcsports.com/127.0.0.1#5335 +ipset=/nbcsports.com/gfwlist +server=/paypal-online.net/127.0.0.1#5335 +ipset=/paypal-online.net/gfwlist +server=/situero.com/127.0.0.1#5335 +ipset=/situero.com/gfwlist +server=/tubevintageporn.com/127.0.0.1#5335 +ipset=/tubevintageporn.com/gfwlist +server=/mom-gfs.com/127.0.0.1#5335 +ipset=/mom-gfs.com/gfwlist +server=/steam.apac.qtlglb.com/127.0.0.1#5335 +ipset=/steam.apac.qtlglb.com/gfwlist +server=/xpoleuno.com/127.0.0.1#5335 +ipset=/xpoleuno.com/gfwlist +server=/cashpassportglobe.com/127.0.0.1#5335 +ipset=/cashpassportglobe.com/gfwlist +server=/nudistlog.com/127.0.0.1#5335 +ipset=/nudistlog.com/gfwlist +server=/globalsign.fr/127.0.0.1#5335 +ipset=/globalsign.fr/gfwlist +server=/titsandtugs.com/127.0.0.1#5335 +ipset=/titsandtugs.com/gfwlist +server=/porn300.com/127.0.0.1#5335 +ipset=/porn300.com/gfwlist +server=/paypal-biz.com/127.0.0.1#5335 +ipset=/paypal-biz.com/gfwlist +server=/google.mn/127.0.0.1#5335 +ipset=/google.mn/gfwlist +server=/pinkvelvetvault.com/127.0.0.1#5335 +ipset=/pinkvelvetvault.com/gfwlist +server=/minitakesthestates.com/127.0.0.1#5335 +ipset=/minitakesthestates.com/gfwlist +server=/cenkei.com/127.0.0.1#5335 +ipset=/cenkei.com/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=/bigtithitomi.com/127.0.0.1#5335 +ipset=/bigtithitomi.com/gfwlist +server=/vanish.ru/127.0.0.1#5335 +ipset=/vanish.ru/gfwlist +server=/hsex.tv/127.0.0.1#5335 +ipset=/hsex.tv/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=/dev.to/127.0.0.1#5335 +ipset=/dev.to/gfwlist +server=/teentube.pro/127.0.0.1#5335 +ipset=/teentube.pro/gfwlist +server=/intel.cr/127.0.0.1#5335 +ipset=/intel.cr/gfwlist +server=/roloflix.com/127.0.0.1#5335 +ipset=/roloflix.com/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=/mangoporn.net/127.0.0.1#5335 +ipset=/mangoporn.net/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=/rfa.org/127.0.0.1#5335 +ipset=/rfa.org/gfwlist +server=/blackhomeporn.com/127.0.0.1#5335 +ipset=/blackhomeporn.com/gfwlist +server=/interactive-examples.mdn.mozilla.net/127.0.0.1#5335 +ipset=/interactive-examples.mdn.mozilla.net/gfwlist +server=/amateursexpussy.com/127.0.0.1#5335 +ipset=/amateursexpussy.com/gfwlist +server=/aalah.me/127.0.0.1#5335 +ipset=/aalah.me/gfwlist +server=/1lib.tw/127.0.0.1#5335 +ipset=/1lib.tw/gfwlist +server=/mimei.store/127.0.0.1#5335 +ipset=/mimei.store/gfwlist +server=/leaksmodels.com/127.0.0.1#5335 +ipset=/leaksmodels.com/gfwlist +server=/google.me/127.0.0.1#5335 +ipset=/google.me/gfwlist +server=/momsgiveass.com/127.0.0.1#5335 +ipset=/momsgiveass.com/gfwlist +server=/cdn77.org/127.0.0.1#5335 +ipset=/cdn77.org/gfwlist +server=/sankie.net/127.0.0.1#5335 +ipset=/sankie.net/gfwlist +server=/vk.me/127.0.0.1#5335 +ipset=/vk.me/gfwlist +server=/asiansexdiary.com/127.0.0.1#5335 +ipset=/asiansexdiary.com/gfwlist +server=/ioe.com/127.0.0.1#5335 +ipset=/ioe.com/gfwlist +server=/needgayporn.com/127.0.0.1#5335 +ipset=/needgayporn.com/gfwlist +server=/google.com.do/127.0.0.1#5335 +ipset=/google.com.do/gfwlist +server=/babeimpact.com/127.0.0.1#5335 +ipset=/babeimpact.com/gfwlist +server=/sexxx.cfd/127.0.0.1#5335 +ipset=/sexxx.cfd/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=/antarvasnaclips.com/127.0.0.1#5335 +ipset=/antarvasnaclips.com/gfwlist +server=/tube2011.com/127.0.0.1#5335 +ipset=/tube2011.com/gfwlist +server=/beck-online.beck.de/127.0.0.1#5335 +ipset=/beck-online.beck.de/gfwlist +server=/applepaymerchantsupplies.info/127.0.0.1#5335 +ipset=/applepaymerchantsupplies.info/gfwlist +server=/dreamamateurs.com/127.0.0.1#5335 +ipset=/dreamamateurs.com/gfwlist +server=/tophd.xxx/127.0.0.1#5335 +ipset=/tophd.xxx/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=/sankei-shougakukai.jp/127.0.0.1#5335 +ipset=/sankei-shougakukai.jp/gfwlist +server=/sexyhomewives.com/127.0.0.1#5335 +ipset=/sexyhomewives.com/gfwlist +server=/truyentranh86.com/127.0.0.1#5335 +ipset=/truyentranh86.com/gfwlist +server=/tsescortsdirectory.com/127.0.0.1#5335 +ipset=/tsescortsdirectory.com/gfwlist +server=/attwirelesssolutions.com/127.0.0.1#5335 +ipset=/attwirelesssolutions.com/gfwlist +server=/highporn.net/127.0.0.1#5335 +ipset=/highporn.net/gfwlist +server=/babycondom.com/127.0.0.1#5335 +ipset=/babycondom.com/gfwlist +server=/factwire.org/127.0.0.1#5335 +ipset=/factwire.org/gfwlist +server=/cambro.tv/127.0.0.1#5335 +ipset=/cambro.tv/gfwlist +server=/o365weve.com/127.0.0.1#5335 +ipset=/o365weve.com/gfwlist +server=/momhomeporn.com/127.0.0.1#5335 +ipset=/momhomeporn.com/gfwlist +server=/payppal.com/127.0.0.1#5335 +ipset=/payppal.com/gfwlist +server=/hqbabes.com/127.0.0.1#5335 +ipset=/hqbabes.com/gfwlist +server=/b-ok.cc/127.0.0.1#5335 +ipset=/b-ok.cc/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=/skyoceanrescue.com/127.0.0.1#5335 +ipset=/skyoceanrescue.com/gfwlist +server=/xiuren.org/127.0.0.1#5335 +ipset=/xiuren.org/gfwlist +server=/nurofen.com/127.0.0.1#5335 +ipset=/nurofen.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=/durexloveclub.com/127.0.0.1#5335 +ipset=/durexloveclub.com/gfwlist +server=/woolitecarpet.com/127.0.0.1#5335 +ipset=/woolitecarpet.com/gfwlist +server=/dump.xxx/127.0.0.1#5335 +ipset=/dump.xxx/gfwlist +server=/bmw-motorrad-service-inclusive.com/127.0.0.1#5335 +ipset=/bmw-motorrad-service-inclusive.com/gfwlist +server=/bingsandbox.com/127.0.0.1#5335 +ipset=/bingsandbox.com/gfwlist +server=/amateurwifetits.com/127.0.0.1#5335 +ipset=/amateurwifetits.com/gfwlist +server=/youtube.ro/127.0.0.1#5335 +ipset=/youtube.ro/gfwlist +server=/thieme-connect.de/127.0.0.1#5335 +ipset=/thieme-connect.de/gfwlist +server=/bestfreetube.xxx/127.0.0.1#5335 +ipset=/bestfreetube.xxx/gfwlist +server=/hothomemade.com/127.0.0.1#5335 +ipset=/hothomemade.com/gfwlist +server=/medone-education.thieme.com/127.0.0.1#5335 +ipset=/medone-education.thieme.com/gfwlist +server=/thomsonreuters.ru/127.0.0.1#5335 +ipset=/thomsonreuters.ru/gfwlist +server=/pearsonenespanol.com/127.0.0.1#5335 +ipset=/pearsonenespanol.com/gfwlist +server=/inasian.club/127.0.0.1#5335 +ipset=/inasian.club/gfwlist +server=/asianpornjav.com/127.0.0.1#5335 +ipset=/asianpornjav.com/gfwlist +server=/ebay.nl/127.0.0.1#5335 +ipset=/ebay.nl/gfwlist +server=/directtvdeals.tv/127.0.0.1#5335 +ipset=/directtvdeals.tv/gfwlist +server=/blogspot.si/127.0.0.1#5335 +ipset=/blogspot.si/gfwlist +server=/ed21.cc/127.0.0.1#5335 +ipset=/ed21.cc/gfwlist +server=/softether.org/127.0.0.1#5335 +ipset=/softether.org/gfwlist +server=/awseducate.org/127.0.0.1#5335 +ipset=/awseducate.org/gfwlist +server=/facebookmarketing.info/127.0.0.1#5335 +ipset=/facebookmarketing.info/gfwlist +server=/youtube.nl/127.0.0.1#5335 +ipset=/youtube.nl/gfwlist +server=/iqq2.cc/127.0.0.1#5335 +ipset=/iqq2.cc/gfwlist +server=/googlee.com/127.0.0.1#5335 +ipset=/googlee.com/gfwlist +server=/yahoo.me/127.0.0.1#5335 +ipset=/yahoo.me/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=/lobstertube.com/127.0.0.1#5335 +ipset=/lobstertube.com/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=/fuxporn.com/127.0.0.1#5335 +ipset=/fuxporn.com/gfwlist +server=/youtube.lu/127.0.0.1#5335 +ipset=/youtube.lu/gfwlist +server=/currently.com/127.0.0.1#5335 +ipset=/currently.com/gfwlist +server=/veetarabia.com/127.0.0.1#5335 +ipset=/veetarabia.com/gfwlist +server=/akamaietpphishingtest.com/127.0.0.1#5335 +ipset=/akamaietpphishingtest.com/gfwlist +server=/free-strip-games.com/127.0.0.1#5335 +ipset=/free-strip-games.com/gfwlist +server=/businessinsider.com.au/127.0.0.1#5335 +ipset=/businessinsider.com.au/gfwlist +server=/babesandstars.com/127.0.0.1#5335 +ipset=/babesandstars.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=/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=/nintendo.ch/127.0.0.1#5335 +ipset=/nintendo.ch/gfwlist +server=/lge.com/127.0.0.1#5335 +ipset=/lge.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=/visa.com.bo/127.0.0.1#5335 +ipset=/visa.com.bo/gfwlist +server=/nudevietnam.com/127.0.0.1#5335 +ipset=/nudevietnam.com/gfwlist +server=/alt1-mtalk.google.com/127.0.0.1#5335 +ipset=/alt1-mtalk.google.com/gfwlist +server=/wikifeet.com/127.0.0.1#5335 +ipset=/wikifeet.com/gfwlist +server=/exec-appointments.com/127.0.0.1#5335 +ipset=/exec-appointments.com/gfwlist +server=/ladies.com/127.0.0.1#5335 +ipset=/ladies.com/gfwlist +server=/strepsilsarabia.com/127.0.0.1#5335 +ipset=/strepsilsarabia.com/gfwlist +server=/fuckup.xxx/127.0.0.1#5335 +ipset=/fuckup.xxx/gfwlist +server=/sexhubhd.com/127.0.0.1#5335 +ipset=/sexhubhd.com/gfwlist +server=/sexo123.net/127.0.0.1#5335 +ipset=/sexo123.net/gfwlist +server=/pankwire.com/127.0.0.1#5335 +ipset=/pankwire.com/gfwlist +server=/foxuv.com/127.0.0.1#5335 +ipset=/foxuv.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=/ikea.com.ua/127.0.0.1#5335 +ipset=/ikea.com.ua/gfwlist +server=/isheppc.com/127.0.0.1#5335 +ipset=/isheppc.com/gfwlist +server=/handjobcumvideos.com/127.0.0.1#5335 +ipset=/handjobcumvideos.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=/myrimmingporn.com/127.0.0.1#5335 +ipset=/myrimmingporn.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=/anybunny.tv/127.0.0.1#5335 +ipset=/anybunny.tv/gfwlist +server=/gfashion.com/127.0.0.1#5335 +ipset=/gfashion.com/gfwlist +server=/fanhaodian.com/127.0.0.1#5335 +ipset=/fanhaodian.com/gfwlist +server=/seqing.one/127.0.0.1#5335 +ipset=/seqing.one/gfwlist +server=/mypornstarbook.net/127.0.0.1#5335 +ipset=/mypornstarbook.net/gfwlist +server=/corepublishingsolutions.com/127.0.0.1#5335 +ipset=/corepublishingsolutions.com/gfwlist +server=/exgfvideos.xxx/127.0.0.1#5335 +ipset=/exgfvideos.xxx/gfwlist +server=/buycheapbeatsbydreshop.com/127.0.0.1#5335 +ipset=/buycheapbeatsbydreshop.com/gfwlist +server=/shopee.com.co/127.0.0.1#5335 +ipset=/shopee.com.co/gfwlist +server=/oxyporn.com/127.0.0.1#5335 +ipset=/oxyporn.com/gfwlist +server=/ebay-online.com/127.0.0.1#5335 +ipset=/ebay-online.com/gfwlist +server=/allover30.com/127.0.0.1#5335 +ipset=/allover30.com/gfwlist +server=/ieee-tems.org/127.0.0.1#5335 +ipset=/ieee-tems.org/gfwlist +server=/auntymaza.com/127.0.0.1#5335 +ipset=/auntymaza.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=/un.org/127.0.0.1#5335 +ipset=/un.org/gfwlist +server=/itunesmatch.com/127.0.0.1#5335 +ipset=/itunesmatch.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=/xdir.vip/127.0.0.1#5335 +ipset=/xdir.vip/gfwlist +server=/paypalinc.com/127.0.0.1#5335 +ipset=/paypalinc.com/gfwlist +server=/mastercard.ae/127.0.0.1#5335 +ipset=/mastercard.ae/gfwlist +server=/mcd.com/127.0.0.1#5335 +ipset=/mcd.com/gfwlist +server=/babesmachine.com/127.0.0.1#5335 +ipset=/babesmachine.com/gfwlist +server=/xgroovy.com/127.0.0.1#5335 +ipset=/xgroovy.com/gfwlist +server=/hairydivas.com/127.0.0.1#5335 +ipset=/hairydivas.com/gfwlist +server=/applescript.info/127.0.0.1#5335 +ipset=/applescript.info/gfwlist +server=/pixhost.to/127.0.0.1#5335 +ipset=/pixhost.to/gfwlist +server=/yomilogi.com/127.0.0.1#5335 +ipset=/yomilogi.com/gfwlist +server=/polymer-project.org/127.0.0.1#5335 +ipset=/polymer-project.org/gfwlist +server=/crystalgunnsworld.com/127.0.0.1#5335 +ipset=/crystalgunnsworld.com/gfwlist +server=/xxgasm.com/127.0.0.1#5335 +ipset=/xxgasm.com/gfwlist +server=/indiancolleges.com/127.0.0.1#5335 +ipset=/indiancolleges.com/gfwlist +server=/clubsweethearts.com/127.0.0.1#5335 +ipset=/clubsweethearts.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=/frontiersin.org/127.0.0.1#5335 +ipset=/frontiersin.org/gfwlist +server=/seiron-sankei.com/127.0.0.1#5335 +ipset=/seiron-sankei.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=/coupangcdn.com/127.0.0.1#5335 +ipset=/coupangcdn.com/gfwlist +server=/translatewiki.net/127.0.0.1#5335 +ipset=/translatewiki.net/gfwlist +server=/minimarkham.ca/127.0.0.1#5335 +ipset=/minimarkham.ca/gfwlist +server=/initproducts.com/127.0.0.1#5335 +ipset=/initproducts.com/gfwlist +server=/windowsphone-int.com/127.0.0.1#5335 +ipset=/windowsphone-int.com/gfwlist +server=/wish.com/127.0.0.1#5335 +ipset=/wish.com/gfwlist +server=/babes34.pro/127.0.0.1#5335 +ipset=/babes34.pro/gfwlist +server=/visualstudio-staging.com/127.0.0.1#5335 +ipset=/visualstudio-staging.com/gfwlist +server=/omg.blog/127.0.0.1#5335 +ipset=/omg.blog/gfwlist +server=/pornexpress.net/127.0.0.1#5335 +ipset=/pornexpress.net/gfwlist +server=/whatisworkspaceone.com/127.0.0.1#5335 +ipset=/whatisworkspaceone.com/gfwlist +server=/monsterbeats-solo.com/127.0.0.1#5335 +ipset=/monsterbeats-solo.com/gfwlist +server=/vercel.blog/127.0.0.1#5335 +ipset=/vercel.blog/gfwlist +server=/alpherafinancialservices.es/127.0.0.1#5335 +ipset=/alpherafinancialservices.es/gfwlist +server=/tig-ol-bitties.live/127.0.0.1#5335 +ipset=/tig-ol-bitties.live/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=/modeloswebcambogota.com/127.0.0.1#5335 +ipset=/modeloswebcambogota.com/gfwlist +server=/drebeatshome.com/127.0.0.1#5335 +ipset=/drebeatshome.com/gfwlist +server=/babesaround.com/127.0.0.1#5335 +ipset=/babesaround.com/gfwlist +server=/jav2be.com/127.0.0.1#5335 +ipset=/jav2be.com/gfwlist +server=/tiava.com/127.0.0.1#5335 +ipset=/tiava.com/gfwlist +server=/scholar.google.co.cr/127.0.0.1#5335 +ipset=/scholar.google.co.cr/gfwlist +server=/erolabs.com/127.0.0.1#5335 +ipset=/erolabs.com/gfwlist +server=/handbagsoutletebay.com/127.0.0.1#5335 +ipset=/handbagsoutletebay.com/gfwlist +server=/ebay-stories.com/127.0.0.1#5335 +ipset=/ebay-stories.com/gfwlist +server=/bestbuygsm.com/127.0.0.1#5335 +ipset=/bestbuygsm.com/gfwlist +server=/builtfromebay.com/127.0.0.1#5335 +ipset=/builtfromebay.com/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=/monotypeimaging.com/127.0.0.1#5335 +ipset=/monotypeimaging.com/gfwlist +server=/freepornvideos.life/127.0.0.1#5335 +ipset=/freepornvideos.life/gfwlist +server=/godoc.org/127.0.0.1#5335 +ipset=/godoc.org/gfwlist +server=/chromecast.com/127.0.0.1#5335 +ipset=/chromecast.com/gfwlist +server=/instachecker.com/127.0.0.1#5335 +ipset=/instachecker.com/gfwlist +server=/crazyxxx3dworld.com/127.0.0.1#5335 +ipset=/crazyxxx3dworld.com/gfwlist +server=/coqnu.com/127.0.0.1#5335 +ipset=/coqnu.com/gfwlist +server=/ebscohost.com/127.0.0.1#5335 +ipset=/ebscohost.com/gfwlist +server=/cuckvideos.com/127.0.0.1#5335 +ipset=/cuckvideos.com/gfwlist +server=/asn-online.org/127.0.0.1#5335 +ipset=/asn-online.org/gfwlist +server=/appleone.website/127.0.0.1#5335 +ipset=/appleone.website/gfwlist +server=/theweek.in/127.0.0.1#5335 +ipset=/theweek.in/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=/intel.lt/127.0.0.1#5335 +ipset=/intel.lt/gfwlist +server=/voalingala.com/127.0.0.1#5335 +ipset=/voalingala.com/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=/adult3dcomics.com/127.0.0.1#5335 +ipset=/adult3dcomics.com/gfwlist +server=/bridgestone.com.tw/127.0.0.1#5335 +ipset=/bridgestone.com.tw/gfwlist +server=/ww9094.com/127.0.0.1#5335 +ipset=/ww9094.com/gfwlist +server=/needforspeeddriftkings.com/127.0.0.1#5335 +ipset=/needforspeeddriftkings.com/gfwlist +server=/tubegalore.com/127.0.0.1#5335 +ipset=/tubegalore.com/gfwlist +server=/svoboda.org/127.0.0.1#5335 +ipset=/svoboda.org/gfwlist +server=/video-one.com/127.0.0.1#5335 +ipset=/video-one.com/gfwlist +server=/javout.co/127.0.0.1#5335 +ipset=/javout.co/gfwlist +server=/mdn.mozit.cloud/127.0.0.1#5335 +ipset=/mdn.mozit.cloud/gfwlist +server=/fljmh1.com/127.0.0.1#5335 +ipset=/fljmh1.com/gfwlist +server=/huloo.tv/127.0.0.1#5335 +ipset=/huloo.tv/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=/dubaihotties.org/127.0.0.1#5335 +ipset=/dubaihotties.org/gfwlist +server=/wixanswers.com/127.0.0.1#5335 +ipset=/wixanswers.com/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=/myporno.cz/127.0.0.1#5335 +ipset=/myporno.cz/gfwlist +server=/nvidia.es/127.0.0.1#5335 +ipset=/nvidia.es/gfwlist +server=/ikea.mx/127.0.0.1#5335 +ipset=/ikea.mx/gfwlist +server=/xnxxcom.club/127.0.0.1#5335 +ipset=/xnxxcom.club/gfwlist +server=/cuckfilmswifefuck.com/127.0.0.1#5335 +ipset=/cuckfilmswifefuck.com/gfwlist +server=/sarajevopodopsadom.com/127.0.0.1#5335 +ipset=/sarajevopodopsadom.com/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=/pp6.info/127.0.0.1#5335 +ipset=/pp6.info/gfwlist +server=/bodgirls.com/127.0.0.1#5335 +ipset=/bodgirls.com/gfwlist +server=/xvideosjingxiang.com/127.0.0.1#5335 +ipset=/xvideosjingxiang.com/gfwlist +server=/intel.sn/127.0.0.1#5335 +ipset=/intel.sn/gfwlist +server=/desiresecrets.com/127.0.0.1#5335 +ipset=/desiresecrets.com/gfwlist +server=/ebayvakantiehuizen.com/127.0.0.1#5335 +ipset=/ebayvakantiehuizen.com/gfwlist +server=/binance.info/127.0.0.1#5335 +ipset=/binance.info/gfwlist +server=/nodejs.org/127.0.0.1#5335 +ipset=/nodejs.org/gfwlist +server=/celebsroulette.com/127.0.0.1#5335 +ipset=/celebsroulette.com/gfwlist +server=/daboja18.com/127.0.0.1#5335 +ipset=/daboja18.com/gfwlist +server=/scholar.google.com.pk/127.0.0.1#5335 +ipset=/scholar.google.com.pk/gfwlist +server=/hentaipornonly.com/127.0.0.1#5335 +ipset=/hentaipornonly.com/gfwlist +server=/miniso.co.tz/127.0.0.1#5335 +ipset=/miniso.co.tz/gfwlist +server=/sex-amateur-clips.com/127.0.0.1#5335 +ipset=/sex-amateur-clips.com/gfwlist +server=/microsoft.com/127.0.0.1#5335 +ipset=/microsoft.com/gfwlist +server=/erolabs.net/127.0.0.1#5335 +ipset=/erolabs.net/gfwlist +server=/the-m-festival.com/127.0.0.1#5335 +ipset=/the-m-festival.com/gfwlist +server=/osmfoundation.org/127.0.0.1#5335 +ipset=/osmfoundation.org/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=/9hentaiz.com/127.0.0.1#5335 +ipset=/9hentaiz.com/gfwlist +server=/sankei-digital.co.jp/127.0.0.1#5335 +ipset=/sankei-digital.co.jp/gfwlist +server=/ap.org/127.0.0.1#5335 +ipset=/ap.org/gfwlist +server=/nijioma.blog/127.0.0.1#5335 +ipset=/nijioma.blog/gfwlist +server=/xxx-porn-tube.com/127.0.0.1#5335 +ipset=/xxx-porn-tube.com/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=/homemadeamateur.com/127.0.0.1#5335 +ipset=/homemadeamateur.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=/youtube.com.om/127.0.0.1#5335 +ipset=/youtube.com.om/gfwlist +server=/monsterbeatsdrdrecheap.com/127.0.0.1#5335 +ipset=/monsterbeatsdrdrecheap.com/gfwlist +server=/mobilefacebook.com/127.0.0.1#5335 +ipset=/mobilefacebook.com/gfwlist +server=/intel.dk/127.0.0.1#5335 +ipset=/intel.dk/gfwlist +server=/pururin.to/127.0.0.1#5335 +ipset=/pururin.to/gfwlist +server=/javmodel.com/127.0.0.1#5335 +ipset=/javmodel.com/gfwlist +server=/doceapower.com/127.0.0.1#5335 +ipset=/doceapower.com/gfwlist +server=/eroticart-top100.com/127.0.0.1#5335 +ipset=/eroticart-top100.com/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=/alibabacloud.com.hk/127.0.0.1#5335 +ipset=/alibabacloud.com.hk/gfwlist +server=/ahpornogratuit.com/127.0.0.1#5335 +ipset=/ahpornogratuit.com/gfwlist +server=/applefinalcutproworld.org/127.0.0.1#5335 +ipset=/applefinalcutproworld.org/gfwlist +server=/tubebdsm.com/127.0.0.1#5335 +ipset=/tubebdsm.com/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=/moapi1.club/127.0.0.1#5335 +ipset=/moapi1.club/gfwlist +server=/ieeecss.org/127.0.0.1#5335 +ipset=/ieeecss.org/gfwlist +server=/xujan.com/127.0.0.1#5335 +ipset=/xujan.com/gfwlist +server=/wwe.com/127.0.0.1#5335 +ipset=/wwe.com/gfwlist +server=/cbsig.net/127.0.0.1#5335 +ipset=/cbsig.net/gfwlist +server=/fusker.xxx/127.0.0.1#5335 +ipset=/fusker.xxx/gfwlist +server=/neurology.org/127.0.0.1#5335 +ipset=/neurology.org/gfwlist +server=/0dzn.com/127.0.0.1#5335 +ipset=/0dzn.com/gfwlist +server=/thinkwithgoogle.com/127.0.0.1#5335 +ipset=/thinkwithgoogle.com/gfwlist +server=/friendfeed-api.com/127.0.0.1#5335 +ipset=/friendfeed-api.com/gfwlist +server=/masalaseen.net/127.0.0.1#5335 +ipset=/masalaseen.net/gfwlist +server=/thegay.com/127.0.0.1#5335 +ipset=/thegay.com/gfwlist +server=/careerjournal.com/127.0.0.1#5335 +ipset=/careerjournal.com/gfwlist +server=/sensualmothers.com/127.0.0.1#5335 +ipset=/sensualmothers.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=/duckduckgo.co.uk/127.0.0.1#5335 +ipset=/duckduckgo.co.uk/gfwlist +server=/gettyimages.co.uk/127.0.0.1#5335 +ipset=/gettyimages.co.uk/gfwlist +server=/h528.com/127.0.0.1#5335 +ipset=/h528.com/gfwlist +server=/skebetter.com/127.0.0.1#5335 +ipset=/skebetter.com/gfwlist +server=/beatsbydremall2013.com/127.0.0.1#5335 +ipset=/beatsbydremall2013.com/gfwlist +server=/link69.com/127.0.0.1#5335 +ipset=/link69.com/gfwlist +server=/freenetproject.org/127.0.0.1#5335 +ipset=/freenetproject.org/gfwlist +server=/certsign.ro/127.0.0.1#5335 +ipset=/certsign.ro/gfwlist +server=/asakonet.co.jp/127.0.0.1#5335 +ipset=/asakonet.co.jp/gfwlist +server=/blogspot.jp/127.0.0.1#5335 +ipset=/blogspot.jp/gfwlist +server=/desire-xx.supertop-100.com/127.0.0.1#5335 +ipset=/desire-xx.supertop-100.com/gfwlist +server=/sshs.xyz/127.0.0.1#5335 +ipset=/sshs.xyz/gfwlist +server=/porm.club/127.0.0.1#5335 +ipset=/porm.club/gfwlist +server=/cheap-beatsbydre.com/127.0.0.1#5335 +ipset=/cheap-beatsbydre.com/gfwlist +server=/2lib.org/127.0.0.1#5335 +ipset=/2lib.org/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=/actalis.com/127.0.0.1#5335 +ipset=/actalis.com/gfwlist +server=/bootysource.com/127.0.0.1#5335 +ipset=/bootysource.com/gfwlist +server=/teen-sexy.com/127.0.0.1#5335 +ipset=/teen-sexy.com/gfwlist +server=/dettol.be/127.0.0.1#5335 +ipset=/dettol.be/gfwlist +server=/doujins.com/127.0.0.1#5335 +ipset=/doujins.com/gfwlist +server=/midentsolutions.com/127.0.0.1#5335 +ipset=/midentsolutions.com/gfwlist +server=/bmw.co.ke/127.0.0.1#5335 +ipset=/bmw.co.ke/gfwlist +server=/xvideos-xxxx.com/127.0.0.1#5335 +ipset=/xvideos-xxxx.com/gfwlist +server=/sharpdaily.tw/127.0.0.1#5335 +ipset=/sharpdaily.tw/gfwlist +server=/thekarups.com/127.0.0.1#5335 +ipset=/thekarups.com/gfwlist +server=/4gtv.tv/127.0.0.1#5335 +ipset=/4gtv.tv/gfwlist +server=/amateurhousewifefuck.com/127.0.0.1#5335 +ipset=/amateurhousewifefuck.com/gfwlist +server=/beatsbydrefr.com/127.0.0.1#5335 +ipset=/beatsbydrefr.com/gfwlist +server=/8kpornvids.com/127.0.0.1#5335 +ipset=/8kpornvids.com/gfwlist +server=/theebayshop.com/127.0.0.1#5335 +ipset=/theebayshop.com/gfwlist +server=/visa.com.az/127.0.0.1#5335 +ipset=/visa.com.az/gfwlist +server=/nanonamad.com/127.0.0.1#5335 +ipset=/nanonamad.com/gfwlist +server=/onlineapplestore.com/127.0.0.1#5335 +ipset=/onlineapplestore.com/gfwlist +server=/amateurswingersmovies.com/127.0.0.1#5335 +ipset=/amateurswingersmovies.com/gfwlist +server=/paygonline.com/127.0.0.1#5335 +ipset=/paygonline.com/gfwlist +server=/rbdigitallab.com/127.0.0.1#5335 +ipset=/rbdigitallab.com/gfwlist +server=/yahoo.pl/127.0.0.1#5335 +ipset=/yahoo.pl/gfwlist +server=/adidas.com.sa/127.0.0.1#5335 +ipset=/adidas.com.sa/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=/thepornbest.com/127.0.0.1#5335 +ipset=/thepornbest.com/gfwlist +server=/disneymagicmoments.de/127.0.0.1#5335 +ipset=/disneymagicmoments.de/gfwlist +server=/bbycontent.com/127.0.0.1#5335 +ipset=/bbycontent.com/gfwlist +server=/bethesdagamestudios.com/127.0.0.1#5335 +ipset=/bethesdagamestudios.com/gfwlist +server=/uflash.tv/127.0.0.1#5335 +ipset=/uflash.tv/gfwlist +server=/slack-msgs.com/127.0.0.1#5335 +ipset=/slack-msgs.com/gfwlist +server=/youtube.sn/127.0.0.1#5335 +ipset=/youtube.sn/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=/av69.us/127.0.0.1#5335 +ipset=/av69.us/gfwlist +server=/trustdoc.ch/127.0.0.1#5335 +ipset=/trustdoc.ch/gfwlist +server=/nvidia.ru/127.0.0.1#5335 +ipset=/nvidia.ru/gfwlist +server=/likeseiyu.com/127.0.0.1#5335 +ipset=/likeseiyu.com/gfwlist +server=/libgen.rs/127.0.0.1#5335 +ipset=/libgen.rs/gfwlist +server=/peachy18.com/127.0.0.1#5335 +ipset=/peachy18.com/gfwlist +server=/selfloversworld.com/127.0.0.1#5335 +ipset=/selfloversworld.com/gfwlist +server=/videos4sale.com/127.0.0.1#5335 +ipset=/videos4sale.com/gfwlist +server=/minioakville.com/127.0.0.1#5335 +ipset=/minioakville.com/gfwlist +server=/bili888.com/127.0.0.1#5335 +ipset=/bili888.com/gfwlist +server=/ieee-ecce.org/127.0.0.1#5335 +ipset=/ieee-ecce.org/gfwlist +server=/dettol.co.nz/127.0.0.1#5335 +ipset=/dettol.co.nz/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=/faceboom.com/127.0.0.1#5335 +ipset=/faceboom.com/gfwlist +server=/cartoonregistry.com/127.0.0.1#5335 +ipset=/cartoonregistry.com/gfwlist +server=/nintendo.ru/127.0.0.1#5335 +ipset=/nintendo.ru/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=/fox6now.com/127.0.0.1#5335 +ipset=/fox6now.com/gfwlist +server=/archivx.to/127.0.0.1#5335 +ipset=/archivx.to/gfwlist +server=/thegayoffice.com/127.0.0.1#5335 +ipset=/thegayoffice.com/gfwlist +server=/aaagradeheadphones.com/127.0.0.1#5335 +ipset=/aaagradeheadphones.com/gfwlist +server=/discordmerch.com/127.0.0.1#5335 +ipset=/discordmerch.com/gfwlist +server=/blogspot.kr/127.0.0.1#5335 +ipset=/blogspot.kr/gfwlist +server=/truyenhentai.xyz/127.0.0.1#5335 +ipset=/truyenhentai.xyz/gfwlist +server=/vk.cc/127.0.0.1#5335 +ipset=/vk.cc/gfwlist +server=/dailyporn.club/127.0.0.1#5335 +ipset=/dailyporn.club/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=/amateurpornsexvideos.com/127.0.0.1#5335 +ipset=/amateurpornsexvideos.com/gfwlist +server=/blogspot.se/127.0.0.1#5335 +ipset=/blogspot.se/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=/bmwstep.com/127.0.0.1#5335 +ipset=/bmwstep.com/gfwlist +server=/greatretroporn.com/127.0.0.1#5335 +ipset=/greatretroporn.com/gfwlist +server=/bravotube.net/127.0.0.1#5335 +ipset=/bravotube.net/gfwlist +server=/hanime.me/127.0.0.1#5335 +ipset=/hanime.me/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=/visa.hu/127.0.0.1#5335 +ipset=/visa.hu/gfwlist +server=/videoskaseros.com/127.0.0.1#5335 +ipset=/videoskaseros.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=/newdrediscount.com/127.0.0.1#5335 +ipset=/newdrediscount.com/gfwlist +server=/pchomeonline.com.tw/127.0.0.1#5335 +ipset=/pchomeonline.com.tw/gfwlist +server=/gog.com/127.0.0.1#5335 +ipset=/gog.com/gfwlist +server=/akamaietpmalwaretest.com/127.0.0.1#5335 +ipset=/akamaietpmalwaretest.com/gfwlist +server=/volvotrucks.hu/127.0.0.1#5335 +ipset=/volvotrucks.hu/gfwlist +server=/blogspot.cv/127.0.0.1#5335 +ipset=/blogspot.cv/gfwlist +server=/festinhasbrasil.com/127.0.0.1#5335 +ipset=/festinhasbrasil.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=/bestpornsites.guide/127.0.0.1#5335 +ipset=/bestpornsites.guide/gfwlist +server=/internet.org/127.0.0.1#5335 +ipset=/internet.org/gfwlist +server=/besthandjobporn.com/127.0.0.1#5335 +ipset=/besthandjobporn.com/gfwlist +server=/ikea.sa/127.0.0.1#5335 +ipset=/ikea.sa/gfwlist +server=/housing.com/127.0.0.1#5335 +ipset=/housing.com/gfwlist +server=/nudebeachpussy.com/127.0.0.1#5335 +ipset=/nudebeachpussy.com/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=/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=/ebay.in/127.0.0.1#5335 +ipset=/ebay.in/gfwlist +server=/s8ds5gfm.xyz/127.0.0.1#5335 +ipset=/s8ds5gfm.xyz/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=/xxxv.mobi/127.0.0.1#5335 +ipset=/xxxv.mobi/gfwlist +server=/enteentegeh.de/127.0.0.1#5335 +ipset=/enteentegeh.de/gfwlist +server=/homefuckingmovies.com/127.0.0.1#5335 +ipset=/homefuckingmovies.com/gfwlist +server=/casquebeatsenligne.com/127.0.0.1#5335 +ipset=/casquebeatsenligne.com/gfwlist +server=/playcover.io/127.0.0.1#5335 +ipset=/playcover.io/gfwlist +server=/battlebreakers.com/127.0.0.1#5335 +ipset=/battlebreakers.com/gfwlist +server=/pornos.live/127.0.0.1#5335 +ipset=/pornos.live/gfwlist +server=/vrsexgames.biz/127.0.0.1#5335 +ipset=/vrsexgames.biz/gfwlist +server=/onenote.net/127.0.0.1#5335 +ipset=/onenote.net/gfwlist +server=/oldhornymilfs.com/127.0.0.1#5335 +ipset=/oldhornymilfs.com/gfwlist +server=/ok.xxx/127.0.0.1#5335 +ipset=/ok.xxx/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=/nab.com.au/127.0.0.1#5335 +ipset=/nab.com.au/gfwlist +server=/applestore.me/127.0.0.1#5335 +ipset=/applestore.me/gfwlist +server=/gravatar.com/127.0.0.1#5335 +ipset=/gravatar.com/gfwlist +server=/farfetch.com/127.0.0.1#5335 +ipset=/farfetch.com/gfwlist +server=/giantessbooru.com/127.0.0.1#5335 +ipset=/giantessbooru.com/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=/persianepochtimes.com/127.0.0.1#5335 +ipset=/persianepochtimes.com/gfwlist +server=/ync.ne.jp/127.0.0.1#5335 +ipset=/ync.ne.jp/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=/paypalnetwork.net/127.0.0.1#5335 +ipset=/paypalnetwork.net/gfwlist +server=/intel.ng/127.0.0.1#5335 +ipset=/intel.ng/gfwlist +server=/powerbi.com/127.0.0.1#5335 +ipset=/powerbi.com/gfwlist +server=/httpfacebook.com/127.0.0.1#5335 +ipset=/httpfacebook.com/gfwlist +server=/beatsbydresale-uk.com/127.0.0.1#5335 +ipset=/beatsbydresale-uk.com/gfwlist +server=/lolita.bet/127.0.0.1#5335 +ipset=/lolita.bet/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=/pornmovies2.me/127.0.0.1#5335 +ipset=/pornmovies2.me/gfwlist +server=/youtube.com.ve/127.0.0.1#5335 +ipset=/youtube.com.ve/gfwlist +server=/a-teenz.com/127.0.0.1#5335 +ipset=/a-teenz.com/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=/scat-japan.com/127.0.0.1#5335 +ipset=/scat-japan.com/gfwlist +server=/nvidia.ro/127.0.0.1#5335 +ipset=/nvidia.ro/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=/puretaboo.com/127.0.0.1#5335 +ipset=/puretaboo.com/gfwlist +server=/bustyarianna.com/127.0.0.1#5335 +ipset=/bustyarianna.com/gfwlist +server=/freindfeed.com/127.0.0.1#5335 +ipset=/freindfeed.com/gfwlist +server=/avstar1.com/127.0.0.1#5335 +ipset=/avstar1.com/gfwlist +server=/ieee-npss.org/127.0.0.1#5335 +ipset=/ieee-npss.org/gfwlist +server=/intel.co.uk/127.0.0.1#5335 +ipset=/intel.co.uk/gfwlist +server=/intel.ec/127.0.0.1#5335 +ipset=/intel.ec/gfwlist +server=/pornocd.ru/127.0.0.1#5335 +ipset=/pornocd.ru/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=/hentairules.net/127.0.0.1#5335 +ipset=/hentairules.net/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=/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=/ftadviser.com/127.0.0.1#5335 +ipset=/ftadviser.com/gfwlist +server=/mini.sk/127.0.0.1#5335 +ipset=/mini.sk/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=/microsoftlatamaitour.com/127.0.0.1#5335 +ipset=/microsoftlatamaitour.com/gfwlist +server=/bmwsfl.net/127.0.0.1#5335 +ipset=/bmwsfl.net/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=/older.tube/127.0.0.1#5335 +ipset=/older.tube/gfwlist +server=/52hyse.com/127.0.0.1#5335 +ipset=/52hyse.com/gfwlist +server=/youtube.dk/127.0.0.1#5335 +ipset=/youtube.dk/gfwlist +server=/azure-sphere.com/127.0.0.1#5335 +ipset=/azure-sphere.com/gfwlist +server=/twca.com.tw/127.0.0.1#5335 +ipset=/twca.com.tw/gfwlist +server=/hotporn.today/127.0.0.1#5335 +ipset=/hotporn.today/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=/sankei.jp/127.0.0.1#5335 +ipset=/sankei.jp/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=/cuckoldinterracialwife.com/127.0.0.1#5335 +ipset=/cuckoldinterracialwife.com/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=/interactivesex.xxx/127.0.0.1#5335 +ipset=/interactivesex.xxx/gfwlist +server=/durex.com.pe/127.0.0.1#5335 +ipset=/durex.com.pe/gfwlist +server=/manporn.xxx/127.0.0.1#5335 +ipset=/manporn.xxx/gfwlist +server=/bustyinescudna.com/127.0.0.1#5335 +ipset=/bustyinescudna.com/gfwlist +server=/youtubeeducation.com/127.0.0.1#5335 +ipset=/youtubeeducation.com/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=/amsterdamluxescort.com/127.0.0.1#5335 +ipset=/amsterdamluxescort.com/gfwlist +server=/youtubefanfest.com/127.0.0.1#5335 +ipset=/youtubefanfest.com/gfwlist +server=/bloomberglabs.com/127.0.0.1#5335 +ipset=/bloomberglabs.com/gfwlist +server=/visadigitalconcierge.com/127.0.0.1#5335 +ipset=/visadigitalconcierge.com/gfwlist +server=/bestbuy-int.com/127.0.0.1#5335 +ipset=/bestbuy-int.com/gfwlist +server=/pinterest.co.at/127.0.0.1#5335 +ipset=/pinterest.co.at/gfwlist +server=/hpinkjet.com/127.0.0.1#5335 +ipset=/hpinkjet.com/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=/quip-cdn.com/127.0.0.1#5335 +ipset=/quip-cdn.com/gfwlist +server=/beth.games/127.0.0.1#5335 +ipset=/beth.games/gfwlist +server=/xn--r8jwklh769hk43amcfoyl3z3a.com/127.0.0.1#5335 +ipset=/xn--r8jwklh769hk43amcfoyl3z3a.com/gfwlist +server=/ipfs.eternum.io/127.0.0.1#5335 +ipset=/ipfs.eternum.io/gfwlist +server=/pornhail.com/127.0.0.1#5335 +ipset=/pornhail.com/gfwlist +server=/xbx.lv/127.0.0.1#5335 +ipset=/xbx.lv/gfwlist +server=/faceobook.com/127.0.0.1#5335 +ipset=/faceobook.com/gfwlist +server=/newsxtend.com.au/127.0.0.1#5335 +ipset=/newsxtend.com.au/gfwlist +server=/brave.com/127.0.0.1#5335 +ipset=/brave.com/gfwlist +server=/friendfeed-media.com/127.0.0.1#5335 +ipset=/friendfeed-media.com/gfwlist +server=/ikea.fr/127.0.0.1#5335 +ipset=/ikea.fr/gfwlist +server=/whichav.video/127.0.0.1#5335 +ipset=/whichav.video/gfwlist +server=/beatssbyaustralia.com/127.0.0.1#5335 +ipset=/beatssbyaustralia.com/gfwlist +server=/xnxx3.com/127.0.0.1#5335 +ipset=/xnxx3.com/gfwlist +server=/qualcomm.de/127.0.0.1#5335 +ipset=/qualcomm.de/gfwlist +server=/managed-pki.ch/127.0.0.1#5335 +ipset=/managed-pki.ch/gfwlist +server=/newsfeed.com/127.0.0.1#5335 +ipset=/newsfeed.com/gfwlist +server=/xxxpornozinho.blog.br/127.0.0.1#5335 +ipset=/xxxpornozinho.blog.br/gfwlist +server=/freeadultgames.tv/127.0.0.1#5335 +ipset=/freeadultgames.tv/gfwlist +server=/onbeatsbydresale.com/127.0.0.1#5335 +ipset=/onbeatsbydresale.com/gfwlist +server=/nikkei4946.com/127.0.0.1#5335 +ipset=/nikkei4946.com/gfwlist +server=/firestonecomercial.com.ar/127.0.0.1#5335 +ipset=/firestonecomercial.com.ar/gfwlist +server=/telekom.com/127.0.0.1#5335 +ipset=/telekom.com/gfwlist +server=/twitterflightschool.com/127.0.0.1#5335 +ipset=/twitterflightschool.com/gfwlist +server=/certificat2.com/127.0.0.1#5335 +ipset=/certificat2.com/gfwlist +server=/geilegratisporno.com/127.0.0.1#5335 +ipset=/geilegratisporno.com/gfwlist +server=/amazon.de/127.0.0.1#5335 +ipset=/amazon.de/gfwlist +server=/faceboak.com/127.0.0.1#5335 +ipset=/faceboak.com/gfwlist +server=/limelight.com/127.0.0.1#5335 +ipset=/limelight.com/gfwlist +server=/nikefirm.com/127.0.0.1#5335 +ipset=/nikefirm.com/gfwlist +server=/airsextube.com/127.0.0.1#5335 +ipset=/airsextube.com/gfwlist +server=/appspot.com/127.0.0.1#5335 +ipset=/appspot.com/gfwlist +server=/pornxvideos.tv/127.0.0.1#5335 +ipset=/pornxvideos.tv/gfwlist +server=/videos6.com/127.0.0.1#5335 +ipset=/videos6.com/gfwlist +server=/748av.com/127.0.0.1#5335 +ipset=/748av.com/gfwlist +server=/disney.sg/127.0.0.1#5335 +ipset=/disney.sg/gfwlist +server=/intellinuxwireless.net/127.0.0.1#5335 +ipset=/intellinuxwireless.net/gfwlist +server=/1drv.ms/127.0.0.1#5335 +ipset=/1drv.ms/gfwlist +server=/h-top.supertop-100.com/127.0.0.1#5335 +ipset=/h-top.supertop-100.com/gfwlist +server=/typography.com/127.0.0.1#5335 +ipset=/typography.com/gfwlist +server=/peepholecam.com/127.0.0.1#5335 +ipset=/peepholecam.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=/intellinuxgraphics.com/127.0.0.1#5335 +ipset=/intellinuxgraphics.com/gfwlist +server=/ikea.com.tr/127.0.0.1#5335 +ipset=/ikea.com.tr/gfwlist +server=/findsav.com/127.0.0.1#5335 +ipset=/findsav.com/gfwlist +server=/alotporn.com/127.0.0.1#5335 +ipset=/alotporn.com/gfwlist +server=/bmw-museum.net/127.0.0.1#5335 +ipset=/bmw-museum.net/gfwlist +server=/alphera.es/127.0.0.1#5335 +ipset=/alphera.es/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=/sexdollsshow.com/127.0.0.1#5335 +ipset=/sexdollsshow.com/gfwlist +server=/jav4you.org/127.0.0.1#5335 +ipset=/jav4you.org/gfwlist +server=/panoramio.com/127.0.0.1#5335 +ipset=/panoramio.com/gfwlist +server=/fasttrackreadysupport.com/127.0.0.1#5335 +ipset=/fasttrackreadysupport.com/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=/reconjet.com/127.0.0.1#5335 +ipset=/reconjet.com/gfwlist +server=/mini-connected.no/127.0.0.1#5335 +ipset=/mini-connected.no/gfwlist +server=/ebay.com.my/127.0.0.1#5335 +ipset=/ebay.com.my/gfwlist +server=/drdrebeats-chen.com/127.0.0.1#5335 +ipset=/drdrebeats-chen.com/gfwlist +server=/hot-sex-photos.com/127.0.0.1#5335 +ipset=/hot-sex-photos.com/gfwlist +server=/yahoo.tg/127.0.0.1#5335 +ipset=/yahoo.tg/gfwlist +server=/fine-art-nude.org/127.0.0.1#5335 +ipset=/fine-art-nude.org/gfwlist +server=/gayroom.com/127.0.0.1#5335 +ipset=/gayroom.com/gfwlist +server=/fuckingawesome.com/127.0.0.1#5335 +ipset=/fuckingawesome.com/gfwlist +server=/darknaija.com/127.0.0.1#5335 +ipset=/darknaija.com/gfwlist +server=/fappeningbook.com/127.0.0.1#5335 +ipset=/fappeningbook.com/gfwlist +server=/gamboporn.com/127.0.0.1#5335 +ipset=/gamboporn.com/gfwlist +server=/bmwwholesaleconnect.com/127.0.0.1#5335 +ipset=/bmwwholesaleconnect.com/gfwlist +server=/nyaa.net/127.0.0.1#5335 +ipset=/nyaa.net/gfwlist +server=/b3boos.com/127.0.0.1#5335 +ipset=/b3boos.com/gfwlist +server=/xvidios.blog/127.0.0.1#5335 +ipset=/xvidios.blog/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=/u9a9.com/127.0.0.1#5335 +ipset=/u9a9.com/gfwlist +server=/elifesciences.org/127.0.0.1#5335 +ipset=/elifesciences.org/gfwlist +server=/volvobuses.no/127.0.0.1#5335 +ipset=/volvobuses.no/gfwlist +server=/nike-air-max.com/127.0.0.1#5335 +ipset=/nike-air-max.com/gfwlist +server=/vod-abematv.akamaized.net/127.0.0.1#5335 +ipset=/vod-abematv.akamaized.net/gfwlist +server=/evropaelire.org/127.0.0.1#5335 +ipset=/evropaelire.org/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=/sony.cl/127.0.0.1#5335 +ipset=/sony.cl/gfwlist +server=/pikabu.monster/127.0.0.1#5335 +ipset=/pikabu.monster/gfwlist +server=/nikkei.com/127.0.0.1#5335 +ipset=/nikkei.com/gfwlist +server=/mature-amateur-sex.com/127.0.0.1#5335 +ipset=/mature-amateur-sex.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=/youngteenhomeporn.com/127.0.0.1#5335 +ipset=/youngteenhomeporn.com/gfwlist +server=/bmw-connecteddrive.lu/127.0.0.1#5335 +ipset=/bmw-connecteddrive.lu/gfwlist +server=/flirtmoms.com/127.0.0.1#5335 +ipset=/flirtmoms.com/gfwlist +server=/my9nj.com/127.0.0.1#5335 +ipset=/my9nj.com/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=/scholar.google.no/127.0.0.1#5335 +ipset=/scholar.google.no/gfwlist +server=/r18av.com/127.0.0.1#5335 +ipset=/r18av.com/gfwlist +server=/vanish.com.pe/127.0.0.1#5335 +ipset=/vanish.com.pe/gfwlist +server=/orgasm.com/127.0.0.1#5335 +ipset=/orgasm.com/gfwlist +server=/youtube.ba/127.0.0.1#5335 +ipset=/youtube.ba/gfwlist +server=/elpube-scat-movies.blogspot.com/127.0.0.1#5335 +ipset=/elpube-scat-movies.blogspot.com/gfwlist +server=/hulutv.com/127.0.0.1#5335 +ipset=/hulutv.com/gfwlist +server=/gnom-cham.com/127.0.0.1#5335 +ipset=/gnom-cham.com/gfwlist +server=/ibonedyourmom.com/127.0.0.1#5335 +ipset=/ibonedyourmom.com/gfwlist +server=/pornocarioca.com/127.0.0.1#5335 +ipset=/pornocarioca.com/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=/manga-mill.com/127.0.0.1#5335 +ipset=/manga-mill.com/gfwlist +server=/nvidia.co.at/127.0.0.1#5335 +ipset=/nvidia.co.at/gfwlist +server=/andysparis.com/127.0.0.1#5335 +ipset=/andysparis.com/gfwlist +server=/alpherafs.my/127.0.0.1#5335 +ipset=/alpherafs.my/gfwlist +server=/imac.co/127.0.0.1#5335 +ipset=/imac.co/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=/netarabic.com/127.0.0.1#5335 +ipset=/netarabic.com/gfwlist +server=/rootsigning.com/127.0.0.1#5335 +ipset=/rootsigning.com/gfwlist +server=/lovesexbody.com/127.0.0.1#5335 +ipset=/lovesexbody.com/gfwlist +server=/airmay.com/127.0.0.1#5335 +ipset=/airmay.com/gfwlist +server=/avstar8.com/127.0.0.1#5335 +ipset=/avstar8.com/gfwlist +server=/firmaprofesional.com/127.0.0.1#5335 +ipset=/firmaprofesional.com/gfwlist +server=/arxiv.org/127.0.0.1#5335 +ipset=/arxiv.org/gfwlist +server=/arabianchicks.com/127.0.0.1#5335 +ipset=/arabianchicks.com/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=/pornotree.com/127.0.0.1#5335 +ipset=/pornotree.com/gfwlist +server=/1xbet.co.ke/127.0.0.1#5335 +ipset=/1xbet.co.ke/gfwlist +server=/bmw.co.za/127.0.0.1#5335 +ipset=/bmw.co.za/gfwlist +server=/khayannpyar.blogspot.com/127.0.0.1#5335 +ipset=/khayannpyar.blogspot.com/gfwlist +server=/ptt.cc/127.0.0.1#5335 +ipset=/ptt.cc/gfwlist +server=/heroku.co/127.0.0.1#5335 +ipset=/heroku.co/gfwlist +server=/da3dsoul.dev/127.0.0.1#5335 +ipset=/da3dsoul.dev/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=/cartoonscity.com/127.0.0.1#5335 +ipset=/cartoonscity.com/gfwlist +server=/vanish.se/127.0.0.1#5335 +ipset=/vanish.se/gfwlist +server=/faronics.kayako.com/127.0.0.1#5335 +ipset=/faronics.kayako.com/gfwlist +server=/xn--p8j9a0d9c9a.xn--q9jyb4c/127.0.0.1#5335 +ipset=/xn--p8j9a0d9c9a.xn--q9jyb4c/gfwlist +server=/bestporntube.me/127.0.0.1#5335 +ipset=/bestporntube.me/gfwlist +server=/javfull.net/127.0.0.1#5335 +ipset=/javfull.net/gfwlist +server=/topcoder.com/127.0.0.1#5335 +ipset=/topcoder.com/gfwlist +server=/miniusaservice.com/127.0.0.1#5335 +ipset=/miniusaservice.com/gfwlist +server=/recoiljs.org/127.0.0.1#5335 +ipset=/recoiljs.org/gfwlist +server=/meraki-go.com/127.0.0.1#5335 +ipset=/meraki-go.com/gfwlist +server=/faceebok.com/127.0.0.1#5335 +ipset=/faceebok.com/gfwlist +server=/steamstatic.com/127.0.0.1#5335 +ipset=/steamstatic.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=/foxsports.com.py/127.0.0.1#5335 +ipset=/foxsports.com.py/gfwlist +server=/api.news/127.0.0.1#5335 +ipset=/api.news/gfwlist +server=/mendeley.com/127.0.0.1#5335 +ipset=/mendeley.com/gfwlist +server=/wixmp.com/127.0.0.1#5335 +ipset=/wixmp.com/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=/futanarihq.com/127.0.0.1#5335 +ipset=/futanarihq.com/gfwlist +server=/jmcomic.moe/127.0.0.1#5335 +ipset=/jmcomic.moe/gfwlist +server=/ipleadership.org/127.0.0.1#5335 +ipset=/ipleadership.org/gfwlist +server=/babepedia.com/127.0.0.1#5335 +ipset=/babepedia.com/gfwlist +server=/slotbitches.com/127.0.0.1#5335 +ipset=/slotbitches.com/gfwlist +server=/ikea.com.ro/127.0.0.1#5335 +ipset=/ikea.com.ro/gfwlist +server=/112263.com/127.0.0.1#5335 +ipset=/112263.com/gfwlist +server=/volvotruckcenter.be/127.0.0.1#5335 +ipset=/volvotruckcenter.be/gfwlist +server=/ura-akiba.jp/127.0.0.1#5335 +ipset=/ura-akiba.jp/gfwlist +server=/tfhub.dev/127.0.0.1#5335 +ipset=/tfhub.dev/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=/jinmantiankong.com/127.0.0.1#5335 +ipset=/jinmantiankong.com/gfwlist +server=/xxxsexzoo.com/127.0.0.1#5335 +ipset=/xxxsexzoo.com/gfwlist +server=/venmo.s3.amazonaws.com/127.0.0.1#5335 +ipset=/venmo.s3.amazonaws.com/gfwlist +server=/xnxxsexclips.com/127.0.0.1#5335 +ipset=/xnxxsexclips.com/gfwlist +server=/dojindb.net/127.0.0.1#5335 +ipset=/dojindb.net/gfwlist +server=/tbib.org/127.0.0.1#5335 +ipset=/tbib.org/gfwlist +server=/mobile.de/127.0.0.1#5335 +ipset=/mobile.de/gfwlist +server=/blogspot.ie/127.0.0.1#5335 +ipset=/blogspot.ie/gfwlist +server=/freehdvideos.xxx/127.0.0.1#5335 +ipset=/freehdvideos.xxx/gfwlist +server=/alphabet.co.za/127.0.0.1#5335 +ipset=/alphabet.co.za/gfwlist +server=/xxxvideo.world/127.0.0.1#5335 +ipset=/xxxvideo.world/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=/3d-comics.com/127.0.0.1#5335 +ipset=/3d-comics.com/gfwlist +server=/camgirlvideos.org/127.0.0.1#5335 +ipset=/camgirlvideos.org/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=/watchmyexgf.net/127.0.0.1#5335 +ipset=/watchmyexgf.net/gfwlist +server=/heinonline.org/127.0.0.1#5335 +ipset=/heinonline.org/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=/ixnxx.tv/127.0.0.1#5335 +ipset=/ixnxx.tv/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=/onsaletrend.com/127.0.0.1#5335 +ipset=/onsaletrend.com/gfwlist +server=/hmd.site/127.0.0.1#5335 +ipset=/hmd.site/gfwlist +server=/dgwav.com/127.0.0.1#5335 +ipset=/dgwav.com/gfwlist +server=/facebookland.com/127.0.0.1#5335 +ipset=/facebookland.com/gfwlist +server=/db.tt/127.0.0.1#5335 +ipset=/db.tt/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=/sego8.xyz/127.0.0.1#5335 +ipset=/sego8.xyz/gfwlist +server=/airwick.si/127.0.0.1#5335 +ipset=/airwick.si/gfwlist +server=/bmwjamaica.com/127.0.0.1#5335 +ipset=/bmwjamaica.com/gfwlist +server=/pornozona.tv/127.0.0.1#5335 +ipset=/pornozona.tv/gfwlist +server=/comodo.net/127.0.0.1#5335 +ipset=/comodo.net/gfwlist +server=/githubapp.com/127.0.0.1#5335 +ipset=/githubapp.com/gfwlist +server=/usatodaynetworkservice.com/127.0.0.1#5335 +ipset=/usatodaynetworkservice.com/gfwlist +server=/apple.co.th/127.0.0.1#5335 +ipset=/apple.co.th/gfwlist +server=/javwide.tv/127.0.0.1#5335 +ipset=/javwide.tv/gfwlist +server=/haitenjp.com/127.0.0.1#5335 +ipset=/haitenjp.com/gfwlist +server=/visaluxuryhotelcollection.com.br/127.0.0.1#5335 +ipset=/visaluxuryhotelcollection.com.br/gfwlist +server=/volvobuses.mx/127.0.0.1#5335 +ipset=/volvobuses.mx/gfwlist +server=/topyoungporn.com/127.0.0.1#5335 +ipset=/topyoungporn.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=/thepornlinks.com/127.0.0.1#5335 +ipset=/thepornlinks.com/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=/volvotrucks.mn/127.0.0.1#5335 +ipset=/volvotrucks.mn/gfwlist +server=/gogocdn.net/127.0.0.1#5335 +ipset=/gogocdn.net/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=/bmw-mountains.com/127.0.0.1#5335 +ipset=/bmw-mountains.com/gfwlist +server=/google.com.sl/127.0.0.1#5335 +ipset=/google.com.sl/gfwlist +server=/wwwfacebook.com/127.0.0.1#5335 +ipset=/wwwfacebook.com/gfwlist +server=/adultgameson.com/127.0.0.1#5335 +ipset=/adultgameson.com/gfwlist +server=/myfoxatlanta.com/127.0.0.1#5335 +ipset=/myfoxatlanta.com/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=/spankwire.com/127.0.0.1#5335 +ipset=/spankwire.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=/spankmonster.com/127.0.0.1#5335 +ipset=/spankmonster.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=/brazzers-porno.online/127.0.0.1#5335 +ipset=/brazzers-porno.online/gfwlist +server=/sportstream.com/127.0.0.1#5335 +ipset=/sportstream.com/gfwlist +server=/yourdailypornvideos.ws/127.0.0.1#5335 +ipset=/yourdailypornvideos.ws/gfwlist +server=/facebook-hardware.com/127.0.0.1#5335 +ipset=/facebook-hardware.com/gfwlist +server=/sexandsplash.com/127.0.0.1#5335 +ipset=/sexandsplash.com/gfwlist +server=/realcleareducation.com/127.0.0.1#5335 +ipset=/realcleareducation.com/gfwlist +server=/shopee.co.id/127.0.0.1#5335 +ipset=/shopee.co.id/gfwlist +server=/fishmpegs.com/127.0.0.1#5335 +ipset=/fishmpegs.com/gfwlist +server=/submityourflicks.com/127.0.0.1#5335 +ipset=/submityourflicks.com/gfwlist +server=/ieee-edusociety.org/127.0.0.1#5335 +ipset=/ieee-edusociety.org/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=/clearlinux.org/127.0.0.1#5335 +ipset=/clearlinux.org/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=/picacn.xyz/127.0.0.1#5335 +ipset=/picacn.xyz/gfwlist +server=/yibaochina.com/127.0.0.1#5335 +ipset=/yibaochina.com/gfwlist +server=/hentaidude.com/127.0.0.1#5335 +ipset=/hentaidude.com/gfwlist +server=/gostorego.com/127.0.0.1#5335 +ipset=/gostorego.com/gfwlist +server=/intel.com.pe/127.0.0.1#5335 +ipset=/intel.com.pe/gfwlist +server=/waskucity.com/127.0.0.1#5335 +ipset=/waskucity.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=/discoveryplus.com/127.0.0.1#5335 +ipset=/discoveryplus.com/gfwlist +server=/paypal-sptam.com/127.0.0.1#5335 +ipset=/paypal-sptam.com/gfwlist +server=/feacbook.com/127.0.0.1#5335 +ipset=/feacbook.com/gfwlist +server=/amp.dev/127.0.0.1#5335 +ipset=/amp.dev/gfwlist +server=/xxxifuck.com/127.0.0.1#5335 +ipset=/xxxifuck.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=/hentaixxxvids.com/127.0.0.1#5335 +ipset=/hentaixxxvids.com/gfwlist +server=/spreadprivacy.com/127.0.0.1#5335 +ipset=/spreadprivacy.com/gfwlist +server=/shadbase.com/127.0.0.1#5335 +ipset=/shadbase.com/gfwlist +server=/zishy.com/127.0.0.1#5335 +ipset=/zishy.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=/hqtrannytube.com/127.0.0.1#5335 +ipset=/hqtrannytube.com/gfwlist +server=/41maonn.com/127.0.0.1#5335 +ipset=/41maonn.com/gfwlist +server=/furaffinity.net/127.0.0.1#5335 +ipset=/furaffinity.net/gfwlist +server=/hentai.game/127.0.0.1#5335 +ipset=/hentai.game/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=/yahoo.bt/127.0.0.1#5335 +ipset=/yahoo.bt/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=/naughtytugs.com/127.0.0.1#5335 +ipset=/naughtytugs.com/gfwlist +server=/perverttube.com/127.0.0.1#5335 +ipset=/perverttube.com/gfwlist +server=/pearsonclinical.no/127.0.0.1#5335 +ipset=/pearsonclinical.no/gfwlist +server=/instagda.com/127.0.0.1#5335 +ipset=/instagda.com/gfwlist +server=/thestandard.com.hk/127.0.0.1#5335 +ipset=/thestandard.com.hk/gfwlist +server=/twittercommunity.com/127.0.0.1#5335 +ipset=/twittercommunity.com/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=/amazon-adsystem.com/127.0.0.1#5335 +ipset=/amazon-adsystem.com/gfwlist +server=/penisbot.com/127.0.0.1#5335 +ipset=/penisbot.com/gfwlist +server=/uverse.com/127.0.0.1#5335 +ipset=/uverse.com/gfwlist +server=/nataliefiore.com/127.0.0.1#5335 +ipset=/nataliefiore.com/gfwlist +server=/bmw.com.bd/127.0.0.1#5335 +ipset=/bmw.com.bd/gfwlist +server=/shemalebestlabel.com/127.0.0.1#5335 +ipset=/shemalebestlabel.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=/oraclefoundation.org/127.0.0.1#5335 +ipset=/oraclefoundation.org/gfwlist +server=/amateurgalore.net/127.0.0.1#5335 +ipset=/amateurgalore.net/gfwlist +server=/epochtimes.com.sg/127.0.0.1#5335 +ipset=/epochtimes.com.sg/gfwlist +server=/minivictoria.com/127.0.0.1#5335 +ipset=/minivictoria.com/gfwlist +server=/shopifycloud.com/127.0.0.1#5335 +ipset=/shopifycloud.com/gfwlist +server=/icloud.ro/127.0.0.1#5335 +ipset=/icloud.ro/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=/xvideosbrasileiro.net/127.0.0.1#5335 +ipset=/xvideosbrasileiro.net/gfwlist +server=/ebaytrading.com/127.0.0.1#5335 +ipset=/ebaytrading.com/gfwlist +server=/pornolaba.mobi/127.0.0.1#5335 +ipset=/pornolaba.mobi/gfwlist +server=/calgon.fr/127.0.0.1#5335 +ipset=/calgon.fr/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=/bidorbuyindia.com/127.0.0.1#5335 +ipset=/bidorbuyindia.com/gfwlist +server=/vanishstains.com/127.0.0.1#5335 +ipset=/vanishstains.com/gfwlist +server=/sportswomenoftheyear.co.uk/127.0.0.1#5335 +ipset=/sportswomenoftheyear.co.uk/gfwlist +server=/dyncdn.me/127.0.0.1#5335 +ipset=/dyncdn.me/gfwlist +server=/holdemstripem.com/127.0.0.1#5335 +ipset=/holdemstripem.com/gfwlist +server=/material.io/127.0.0.1#5335 +ipset=/material.io/gfwlist +server=/vagina.nl/127.0.0.1#5335 +ipset=/vagina.nl/gfwlist +server=/camwhoria.com/127.0.0.1#5335 +ipset=/camwhoria.com/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=/jizzbunker.com/127.0.0.1#5335 +ipset=/jizzbunker.com/gfwlist +server=/superstation.com.tw/127.0.0.1#5335 +ipset=/superstation.com.tw/gfwlist +server=/newmonsterbeatsheadphones.com/127.0.0.1#5335 +ipset=/newmonsterbeatsheadphones.com/gfwlist +server=/acgwr.com/127.0.0.1#5335 +ipset=/acgwr.com/gfwlist +server=/intel.gl/127.0.0.1#5335 +ipset=/intel.gl/gfwlist +server=/canon.ch/127.0.0.1#5335 +ipset=/canon.ch/gfwlist +server=/piapp.com.tw/127.0.0.1#5335 +ipset=/piapp.com.tw/gfwlist +server=/redporn.xxx/127.0.0.1#5335 +ipset=/redporn.xxx/gfwlist +server=/sex-for-work.com/127.0.0.1#5335 +ipset=/sex-for-work.com/gfwlist +server=/mastercardconnect.com/127.0.0.1#5335 +ipset=/mastercardconnect.com/gfwlist +server=/getporn.tv/127.0.0.1#5335 +ipset=/getporn.tv/gfwlist +server=/scholar.google.com.ec/127.0.0.1#5335 +ipset=/scholar.google.com.ec/gfwlist +server=/gotblop.com/127.0.0.1#5335 +ipset=/gotblop.com/gfwlist +server=/freesexyindians.org/127.0.0.1#5335 +ipset=/freesexyindians.org/gfwlist +server=/playboy.com/127.0.0.1#5335 +ipset=/playboy.com/gfwlist +server=/nimg.jp/127.0.0.1#5335 +ipset=/nimg.jp/gfwlist +server=/thieme-connect.com/127.0.0.1#5335 +ipset=/thieme-connect.com/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=/osiri-suki-club.com/127.0.0.1#5335 +ipset=/osiri-suki-club.com/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=/kindle4rss.com/127.0.0.1#5335 +ipset=/kindle4rss.com/gfwlist +server=/yourbrain.com/127.0.0.1#5335 +ipset=/yourbrain.com/gfwlist +server=/cloudfunctions.net/127.0.0.1#5335 +ipset=/cloudfunctions.net/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=/cgkate.jinvod.com/127.0.0.1#5335 +ipset=/cgkate.jinvod.com/gfwlist +server=/nikeairmaxshoes.com/127.0.0.1#5335 +ipset=/nikeairmaxshoes.com/gfwlist +server=/opentgc.com/127.0.0.1#5335 +ipset=/opentgc.com/gfwlist +server=/slackhq.com/127.0.0.1#5335 +ipset=/slackhq.com/gfwlist +server=/wowstars.com/127.0.0.1#5335 +ipset=/wowstars.com/gfwlist +server=/steamunlocked.net/127.0.0.1#5335 +ipset=/steamunlocked.net/gfwlist +server=/beatsone.net/127.0.0.1#5335 +ipset=/beatsone.net/gfwlist +server=/sexy-older-women.com/127.0.0.1#5335 +ipset=/sexy-older-women.com/gfwlist +server=/joiasmr.com/127.0.0.1#5335 +ipset=/joiasmr.com/gfwlist +server=/dailymail.com/127.0.0.1#5335 +ipset=/dailymail.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=/stimorolsex.com/127.0.0.1#5335 +ipset=/stimorolsex.com/gfwlist +server=/xxxvirtualworld.com/127.0.0.1#5335 +ipset=/xxxvirtualworld.com/gfwlist +server=/whyfacebook.com/127.0.0.1#5335 +ipset=/whyfacebook.com/gfwlist +server=/facebookphonenumber.net/127.0.0.1#5335 +ipset=/facebookphonenumber.net/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=/besttube4you.com/127.0.0.1#5335 +ipset=/besttube4you.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=/bitbucket.io/127.0.0.1#5335 +ipset=/bitbucket.io/gfwlist +server=/ebay68.com/127.0.0.1#5335 +ipset=/ebay68.com/gfwlist +server=/blogspot.co.il/127.0.0.1#5335 +ipset=/blogspot.co.il/gfwlist +server=/scorevideos.com/127.0.0.1#5335 +ipset=/scorevideos.com/gfwlist +server=/3dsexy.net/127.0.0.1#5335 +ipset=/3dsexy.net/gfwlist +server=/softbank.jp/127.0.0.1#5335 +ipset=/softbank.jp/gfwlist +server=/adultbay.org/127.0.0.1#5335 +ipset=/adultbay.org/gfwlist +server=/google.ws/127.0.0.1#5335 +ipset=/google.ws/gfwlist +server=/xxbay.com/127.0.0.1#5335 +ipset=/xxbay.com/gfwlist +server=/meetsmartbook.com/127.0.0.1#5335 +ipset=/meetsmartbook.com/gfwlist +server=/vhxqa3.com/127.0.0.1#5335 +ipset=/vhxqa3.com/gfwlist +server=/gateway.dev/127.0.0.1#5335 +ipset=/gateway.dev/gfwlist +server=/foxsports2.com/127.0.0.1#5335 +ipset=/foxsports2.com/gfwlist +server=/recode.net/127.0.0.1#5335 +ipset=/recode.net/gfwlist +server=/dexterhorn.com/127.0.0.1#5335 +ipset=/dexterhorn.com/gfwlist +server=/nfsworld.com/127.0.0.1#5335 +ipset=/nfsworld.com/gfwlist +server=/volvotrucks.ru/127.0.0.1#5335 +ipset=/volvotrucks.ru/gfwlist +server=/ecchinohentai.ru/127.0.0.1#5335 +ipset=/ecchinohentai.ru/gfwlist +server=/lldns.net/127.0.0.1#5335 +ipset=/lldns.net/gfwlist +server=/cosplay-jav.com/127.0.0.1#5335 +ipset=/cosplay-jav.com/gfwlist +server=/sublimedirectory.com/127.0.0.1#5335 +ipset=/sublimedirectory.com/gfwlist +server=/starbucks.com.kz/127.0.0.1#5335 +ipset=/starbucks.com.kz/gfwlist +server=/mastercard.bg/127.0.0.1#5335 +ipset=/mastercard.bg/gfwlist +server=/dubai-escort-list.com/127.0.0.1#5335 +ipset=/dubai-escort-list.com/gfwlist +server=/thenewporn.com/127.0.0.1#5335 +ipset=/thenewporn.com/gfwlist +server=/windowscommunity.net/127.0.0.1#5335 +ipset=/windowscommunity.net/gfwlist +server=/logitechg.com.cn/127.0.0.1#5335 +ipset=/logitechg.com.cn/gfwlist +server=/woflthenewsstation.com/127.0.0.1#5335 +ipset=/woflthenewsstation.com/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=/bmw.ly/127.0.0.1#5335 +ipset=/bmw.ly/gfwlist +server=/vintageamateurporn.com/127.0.0.1#5335 +ipset=/vintageamateurporn.com/gfwlist +server=/jsdelivr.com/127.0.0.1#5335 +ipset=/jsdelivr.com/gfwlist +server=/sexvr.com/127.0.0.1#5335 +ipset=/sexvr.com/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=/blogspot.pe/127.0.0.1#5335 +ipset=/blogspot.pe/gfwlist +server=/vod360.net/127.0.0.1#5335 +ipset=/vod360.net/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=/linuxfromscratch.org/127.0.0.1#5335 +ipset=/linuxfromscratch.org/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=/buypass.no/127.0.0.1#5335 +ipset=/buypass.no/gfwlist +server=/4greedy.com/127.0.0.1#5335 +ipset=/4greedy.com/gfwlist +server=/device-manager.us/127.0.0.1#5335 +ipset=/device-manager.us/gfwlist +server=/abema.tv/127.0.0.1#5335 +ipset=/abema.tv/gfwlist +server=/biggggg.com/127.0.0.1#5335 +ipset=/biggggg.com/gfwlist +server=/poopee-puke.com/127.0.0.1#5335 +ipset=/poopee-puke.com/gfwlist +server=/hackfacebookid.com/127.0.0.1#5335 +ipset=/hackfacebookid.com/gfwlist +server=/sony.com.hn/127.0.0.1#5335 +ipset=/sony.com.hn/gfwlist +server=/amateurwivesvideos.com/127.0.0.1#5335 +ipset=/amateurwivesvideos.com/gfwlist +server=/cios.org/127.0.0.1#5335 +ipset=/cios.org/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=/zohopublic.com/127.0.0.1#5335 +ipset=/zohopublic.com/gfwlist +server=/transarmuito.com/127.0.0.1#5335 +ipset=/transarmuito.com/gfwlist +server=/javmost.xyz/127.0.0.1#5335 +ipset=/javmost.xyz/gfwlist +server=/pornimg.xyz/127.0.0.1#5335 +ipset=/pornimg.xyz/gfwlist +server=/bandag.com/127.0.0.1#5335 +ipset=/bandag.com/gfwlist +server=/rbsgr.com/127.0.0.1#5335 +ipset=/rbsgr.com/gfwlist +server=/nailedhard.com/127.0.0.1#5335 +ipset=/nailedhard.com/gfwlist +server=/itcanwait.com/127.0.0.1#5335 +ipset=/itcanwait.com/gfwlist +server=/bmw.com.mx/127.0.0.1#5335 +ipset=/bmw.com.mx/gfwlist +server=/bridgestonewx.com/127.0.0.1#5335 +ipset=/bridgestonewx.com/gfwlist +server=/questvisual.com/127.0.0.1#5335 +ipset=/questvisual.com/gfwlist +server=/avmoo.com/127.0.0.1#5335 +ipset=/avmoo.com/gfwlist +server=/thevirtualsexreview.com/127.0.0.1#5335 +ipset=/thevirtualsexreview.com/gfwlist +server=/paypal-gpplus.com/127.0.0.1#5335 +ipset=/paypal-gpplus.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=/technics.com/127.0.0.1#5335 +ipset=/technics.com/gfwlist +server=/azuredns-prd.org/127.0.0.1#5335 +ipset=/azuredns-prd.org/gfwlist +server=/spicybigtits.com/127.0.0.1#5335 +ipset=/spicybigtits.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=/netflixinvestor.com/127.0.0.1#5335 +ipset=/netflixinvestor.com/gfwlist +server=/hentainhaven.com/127.0.0.1#5335 +ipset=/hentainhaven.com/gfwlist +server=/scatolo-guromania.com/127.0.0.1#5335 +ipset=/scatolo-guromania.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=/adwords-community.com/127.0.0.1#5335 +ipset=/adwords-community.com/gfwlist +server=/redtubepremium.com/127.0.0.1#5335 +ipset=/redtubepremium.com/gfwlist +server=/fuckcuck.com/127.0.0.1#5335 +ipset=/fuckcuck.com/gfwlist +server=/scholar.google.com.br/127.0.0.1#5335 +ipset=/scholar.google.com.br/gfwlist +server=/nicovideo.jp/127.0.0.1#5335 +ipset=/nicovideo.jp/gfwlist +server=/facebooki.com/127.0.0.1#5335 +ipset=/facebooki.com/gfwlist +server=/ikea.eg/127.0.0.1#5335 +ipset=/ikea.eg/gfwlist +server=/scoretv.tv/127.0.0.1#5335 +ipset=/scoretv.tv/gfwlist +server=/bmw-connecteddrive.ca/127.0.0.1#5335 +ipset=/bmw-connecteddrive.ca/gfwlist +server=/bmw-motorrad.com.au/127.0.0.1#5335 +ipset=/bmw-motorrad.com.au/gfwlist +server=/kinkyfamily.com/127.0.0.1#5335 +ipset=/kinkyfamily.com/gfwlist +server=/crazylivecams.com/127.0.0.1#5335 +ipset=/crazylivecams.com/gfwlist +server=/streamingdisney.net/127.0.0.1#5335 +ipset=/streamingdisney.net/gfwlist +server=/hentaiprno.com/127.0.0.1#5335 +ipset=/hentaiprno.com/gfwlist +server=/nextdigital.com.tw/127.0.0.1#5335 +ipset=/nextdigital.com.tw/gfwlist +server=/fuckingfreemovies.com/127.0.0.1#5335 +ipset=/fuckingfreemovies.com/gfwlist +server=/uber-assets.com/127.0.0.1#5335 +ipset=/uber-assets.com/gfwlist +server=/adultdeepfakes.com/127.0.0.1#5335 +ipset=/adultdeepfakes.com/gfwlist +server=/mingkyaa.com/127.0.0.1#5335 +ipset=/mingkyaa.com/gfwlist +server=/dropboxmail.com/127.0.0.1#5335 +ipset=/dropboxmail.com/gfwlist +server=/topface.com/127.0.0.1#5335 +ipset=/topface.com/gfwlist +server=/ftchinese.com/127.0.0.1#5335 +ipset=/ftchinese.com/gfwlist +server=/intel.bs/127.0.0.1#5335 +ipset=/intel.bs/gfwlist +server=/cosmosdb.info/127.0.0.1#5335 +ipset=/cosmosdb.info/gfwlist +server=/inteliotmarketplace.com/127.0.0.1#5335 +ipset=/inteliotmarketplace.com/gfwlist +server=/xxxhub123.com/127.0.0.1#5335 +ipset=/xxxhub123.com/gfwlist +server=/eighteen-store18x.jp/127.0.0.1#5335 +ipset=/eighteen-store18x.jp/gfwlist +server=/adsenseformobileapps.com/127.0.0.1#5335 +ipset=/adsenseformobileapps.com/gfwlist +server=/hoge.7jp.info/127.0.0.1#5335 +ipset=/hoge.7jp.info/gfwlist +server=/pa9pal.com/127.0.0.1#5335 +ipset=/pa9pal.com/gfwlist +server=/paypalhere.com/127.0.0.1#5335 +ipset=/paypalhere.com/gfwlist +server=/estudiopenthouse.com/127.0.0.1#5335 +ipset=/estudiopenthouse.com/gfwlist +server=/nudevista.link/127.0.0.1#5335 +ipset=/nudevista.link/gfwlist +server=/sexy-torrents.com/127.0.0.1#5335 +ipset=/sexy-torrents.com/gfwlist +server=/pornkro.com/127.0.0.1#5335 +ipset=/pornkro.com/gfwlist +server=/ninpu.cyou/127.0.0.1#5335 +ipset=/ninpu.cyou/gfwlist +server=/animedao-tv.com/127.0.0.1#5335 +ipset=/animedao-tv.com/gfwlist +server=/asiangfvideos.com/127.0.0.1#5335 +ipset=/asiangfvideos.com/gfwlist +server=/tophdsex.com/127.0.0.1#5335 +ipset=/tophdsex.com/gfwlist +server=/mini.it/127.0.0.1#5335 +ipset=/mini.it/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=/arcgisonline.com/127.0.0.1#5335 +ipset=/arcgisonline.com/gfwlist +server=/doctor-videos.com/127.0.0.1#5335 +ipset=/doctor-videos.com/gfwlist +server=/pornsearchengine.com/127.0.0.1#5335 +ipset=/pornsearchengine.com/gfwlist +server=/steam.ru.qtlglb.com/127.0.0.1#5335 +ipset=/steam.ru.qtlglb.com/gfwlist +server=/onlycartoonsex.com/127.0.0.1#5335 +ipset=/onlycartoonsex.com/gfwlist +server=/ntdvn.com/127.0.0.1#5335 +ipset=/ntdvn.com/gfwlist +server=/raspbian.org/127.0.0.1#5335 +ipset=/raspbian.org/gfwlist +server=/playoverwatch.com/127.0.0.1#5335 +ipset=/playoverwatch.com/gfwlist +server=/tsuradou.noonvob.com/127.0.0.1#5335 +ipset=/tsuradou.noonvob.com/gfwlist +server=/mini-dubai.com/127.0.0.1#5335 +ipset=/mini-dubai.com/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=/ilife.eu/127.0.0.1#5335 +ipset=/ilife.eu/gfwlist +server=/pornxp.com/127.0.0.1#5335 +ipset=/pornxp.com/gfwlist +server=/google.co.mz/127.0.0.1#5335 +ipset=/google.co.mz/gfwlist +server=/pretty-ass.xyz/127.0.0.1#5335 +ipset=/pretty-ass.xyz/gfwlist +server=/bmwbikes.com/127.0.0.1#5335 +ipset=/bmwbikes.com/gfwlist +server=/sling.com/127.0.0.1#5335 +ipset=/sling.com/gfwlist +server=/monstershopcheapbeats.net/127.0.0.1#5335 +ipset=/monstershopcheapbeats.net/gfwlist +server=/shopee.in/127.0.0.1#5335 +ipset=/shopee.in/gfwlist +server=/quicktake.video/127.0.0.1#5335 +ipset=/quicktake.video/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=/akamaietpcompromisedmalwaretest.com/127.0.0.1#5335 +ipset=/akamaietpcompromisedmalwaretest.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=/garena.co.id/127.0.0.1#5335 +ipset=/garena.co.id/gfwlist +server=/sex4arabxxx.com/127.0.0.1#5335 +ipset=/sex4arabxxx.com/gfwlist +server=/ebsco.com/127.0.0.1#5335 +ipset=/ebsco.com/gfwlist +server=/whatsapp-plus.info/127.0.0.1#5335 +ipset=/whatsapp-plus.info/gfwlist +server=/itools.info/127.0.0.1#5335 +ipset=/itools.info/gfwlist +server=/trannytube.tv/127.0.0.1#5335 +ipset=/trannytube.tv/gfwlist +server=/pornicom.com/127.0.0.1#5335 +ipset=/pornicom.com/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=/theporndude.cc/127.0.0.1#5335 +ipset=/theporndude.cc/gfwlist +server=/cilk.com/127.0.0.1#5335 +ipset=/cilk.com/gfwlist +server=/cuckoldinterracialporn.com/127.0.0.1#5335 +ipset=/cuckoldinterracialporn.com/gfwlist +server=/clinicalkey.com/127.0.0.1#5335 +ipset=/clinicalkey.com/gfwlist +server=/nurxxx.mobi/127.0.0.1#5335 +ipset=/nurxxx.mobi/gfwlist +server=/volvotrucks.cz/127.0.0.1#5335 +ipset=/volvotrucks.cz/gfwlist +server=/intel.mp/127.0.0.1#5335 +ipset=/intel.mp/gfwlist +server=/starbucks.vn/127.0.0.1#5335 +ipset=/starbucks.vn/gfwlist +server=/freexxx.best/127.0.0.1#5335 +ipset=/freexxx.best/gfwlist +server=/edge.steam-dns.top.comcast.net/127.0.0.1#5335 +ipset=/edge.steam-dns.top.comcast.net/gfwlist +server=/sony.co.kr/127.0.0.1#5335 +ipset=/sony.co.kr/gfwlist +server=/nenitas.club/127.0.0.1#5335 +ipset=/nenitas.club/gfwlist +server=/roshy.tv/127.0.0.1#5335 +ipset=/roshy.tv/gfwlist +server=/vkuserlive.net/127.0.0.1#5335 +ipset=/vkuserlive.net/gfwlist +server=/moviesneek.com/127.0.0.1#5335 +ipset=/moviesneek.com/gfwlist +server=/zoohun.com/127.0.0.1#5335 +ipset=/zoohun.com/gfwlist +server=/lsawards.com/127.0.0.1#5335 +ipset=/lsawards.com/gfwlist +server=/z5.app/127.0.0.1#5335 +ipset=/z5.app/gfwlist +server=/bejeweledstars.com/127.0.0.1#5335 +ipset=/bejeweledstars.com/gfwlist +server=/momomall.com.tw/127.0.0.1#5335 +ipset=/momomall.com.tw/gfwlist +server=/grannygetsafacial.com/127.0.0.1#5335 +ipset=/grannygetsafacial.com/gfwlist +server=/binancezh.cc/127.0.0.1#5335 +ipset=/binancezh.cc/gfwlist +server=/newlineporn.com/127.0.0.1#5335 +ipset=/newlineporn.com/gfwlist +server=/plos.org/127.0.0.1#5335 +ipset=/plos.org/gfwlist +server=/3lib.net/127.0.0.1#5335 +ipset=/3lib.net/gfwlist +server=/scholar.google.com.uy/127.0.0.1#5335 +ipset=/scholar.google.com.uy/gfwlist +server=/hackday.com.au/127.0.0.1#5335 +ipset=/hackday.com.au/gfwlist +server=/miniso.ie/127.0.0.1#5335 +ipset=/miniso.ie/gfwlist +server=/volvopenta.fr/127.0.0.1#5335 +ipset=/volvopenta.fr/gfwlist +server=/hanime.xxx/127.0.0.1#5335 +ipset=/hanime.xxx/gfwlist +server=/aoaou.iillii.net/127.0.0.1#5335 +ipset=/aoaou.iillii.net/gfwlist +server=/picasaweb.org/127.0.0.1#5335 +ipset=/picasaweb.org/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=/vanish.com.hr/127.0.0.1#5335 +ipset=/vanish.com.hr/gfwlist +server=/intel.rw/127.0.0.1#5335 +ipset=/intel.rw/gfwlist +server=/marketwatch.com/127.0.0.1#5335 +ipset=/marketwatch.com/gfwlist +server=/bmwmass.net/127.0.0.1#5335 +ipset=/bmwmass.net/gfwlist +server=/hotcandyland.com/127.0.0.1#5335 +ipset=/hotcandyland.com/gfwlist +server=/oculus-china.com/127.0.0.1#5335 +ipset=/oculus-china.com/gfwlist +server=/twitpic.com/127.0.0.1#5335 +ipset=/twitpic.com/gfwlist +server=/ebaybenefits.com/127.0.0.1#5335 +ipset=/ebaybenefits.com/gfwlist +server=/google.vu/127.0.0.1#5335 +ipset=/google.vu/gfwlist +server=/casimages.com/127.0.0.1#5335 +ipset=/casimages.com/gfwlist +server=/xcams.com/127.0.0.1#5335 +ipset=/xcams.com/gfwlist +server=/webhosting.com/127.0.0.1#5335 +ipset=/webhosting.com/gfwlist +server=/pubmatic.com/127.0.0.1#5335 +ipset=/pubmatic.com/gfwlist +server=/xvideo.run/127.0.0.1#5335 +ipset=/xvideo.run/gfwlist +server=/myavok.com/127.0.0.1#5335 +ipset=/myavok.com/gfwlist +server=/erothots.co/127.0.0.1#5335 +ipset=/erothots.co/gfwlist +server=/cartoonpornonly.com/127.0.0.1#5335 +ipset=/cartoonpornonly.com/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=/sissy.eu.org/127.0.0.1#5335 +ipset=/sissy.eu.org/gfwlist +server=/scholar.google.co.za/127.0.0.1#5335 +ipset=/scholar.google.co.za/gfwlist +server=/gaystream.pw/127.0.0.1#5335 +ipset=/gaystream.pw/gfwlist +server=/indienudes.com/127.0.0.1#5335 +ipset=/indienudes.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=/nflxvideo.net/127.0.0.1#5335 +ipset=/nflxvideo.net/gfwlist +server=/myhulu.com/127.0.0.1#5335 +ipset=/myhulu.com/gfwlist +server=/bmwchampionship.com/127.0.0.1#5335 +ipset=/bmwchampionship.com/gfwlist +server=/nuuporn.com/127.0.0.1#5335 +ipset=/nuuporn.com/gfwlist +server=/pornspark.com/127.0.0.1#5335 +ipset=/pornspark.com/gfwlist +server=/wsj.com/127.0.0.1#5335 +ipset=/wsj.com/gfwlist +server=/facebookflow.com/127.0.0.1#5335 +ipset=/facebookflow.com/gfwlist +server=/volvotrucks.my/127.0.0.1#5335 +ipset=/volvotrucks.my/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=/aventertainments.com/127.0.0.1#5335 +ipset=/aventertainments.com/gfwlist +server=/12diasderegalosdeitunes.co/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.co/gfwlist +server=/fleshlyx.com/127.0.0.1#5335 +ipset=/fleshlyx.com/gfwlist +server=/sora6.com/127.0.0.1#5335 +ipset=/sora6.com/gfwlist +server=/bmw-ottawa.ca/127.0.0.1#5335 +ipset=/bmw-ottawa.ca/gfwlist +server=/draftjs.org/127.0.0.1#5335 +ipset=/draftjs.org/gfwlist +server=/youtube.com.jm/127.0.0.1#5335 +ipset=/youtube.com.jm/gfwlist +server=/hbogo.eu/127.0.0.1#5335 +ipset=/hbogo.eu/gfwlist +server=/gogo-load.com/127.0.0.1#5335 +ipset=/gogo-load.com/gfwlist +server=/mcdindonesia.com/127.0.0.1#5335 +ipset=/mcdindonesia.com/gfwlist +server=/icegaytube.tv/127.0.0.1#5335 +ipset=/icegaytube.tv/gfwlist +server=/mailonsunday.co.uk/127.0.0.1#5335 +ipset=/mailonsunday.co.uk/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=/nikey.com/127.0.0.1#5335 +ipset=/nikey.com/gfwlist +server=/sciencemag.org/127.0.0.1#5335 +ipset=/sciencemag.org/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=/faketaxi.com/127.0.0.1#5335 +ipset=/faketaxi.com/gfwlist +server=/home-made-porn-movies.com/127.0.0.1#5335 +ipset=/home-made-porn-movies.com/gfwlist +server=/firestone.com.co/127.0.0.1#5335 +ipset=/firestone.com.co/gfwlist +server=/tesla.services/127.0.0.1#5335 +ipset=/tesla.services/gfwlist +server=/epochshop.com/127.0.0.1#5335 +ipset=/epochshop.com/gfwlist +server=/easypic.com/127.0.0.1#5335 +ipset=/easypic.com/gfwlist +server=/ebaystyle.com/127.0.0.1#5335 +ipset=/ebaystyle.com/gfwlist +server=/mansionglobal.com/127.0.0.1#5335 +ipset=/mansionglobal.com/gfwlist +server=/pridetube.com/127.0.0.1#5335 +ipset=/pridetube.com/gfwlist +server=/livemodels.co/127.0.0.1#5335 +ipset=/livemodels.co/gfwlist +server=/veet.com.ar/127.0.0.1#5335 +ipset=/veet.com.ar/gfwlist +server=/hentai.io/127.0.0.1#5335 +ipset=/hentai.io/gfwlist +server=/ceskeporno.cz/127.0.0.1#5335 +ipset=/ceskeporno.cz/gfwlist +server=/youtube.be/127.0.0.1#5335 +ipset=/youtube.be/gfwlist +server=/prostate-exam-info.com/127.0.0.1#5335 +ipset=/prostate-exam-info.com/gfwlist +server=/vfsco.fr/127.0.0.1#5335 +ipset=/vfsco.fr/gfwlist +server=/gemini.yahoo.com/127.0.0.1#5335 +ipset=/gemini.yahoo.com/gfwlist +server=/aadmv.com/127.0.0.1#5335 +ipset=/aadmv.com/gfwlist +server=/youtube.hr/127.0.0.1#5335 +ipset=/youtube.hr/gfwlist +server=/pornlist18.com/127.0.0.1#5335 +ipset=/pornlist18.com/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=/xgirls.webcam/127.0.0.1#5335 +ipset=/xgirls.webcam/gfwlist +server=/dogfartnetwork.com/127.0.0.1#5335 +ipset=/dogfartnetwork.com/gfwlist +server=/kutjeporno.com/127.0.0.1#5335 +ipset=/kutjeporno.com/gfwlist +server=/sexmummy.com/127.0.0.1#5335 +ipset=/sexmummy.com/gfwlist +server=/secure-paypal.info/127.0.0.1#5335 +ipset=/secure-paypal.info/gfwlist +server=/fast.com/127.0.0.1#5335 +ipset=/fast.com/gfwlist +server=/hkgpao.com/127.0.0.1#5335 +ipset=/hkgpao.com/gfwlist +server=/instanttelegram.com/127.0.0.1#5335 +ipset=/instanttelegram.com/gfwlist +server=/xvideos.co/127.0.0.1#5335 +ipset=/xvideos.co/gfwlist +server=/yiqilai99.cn/127.0.0.1#5335 +ipset=/yiqilai99.cn/gfwlist +server=/igcdn.com/127.0.0.1#5335 +ipset=/igcdn.com/gfwlist +server=/vanitaonline.com/127.0.0.1#5335 +ipset=/vanitaonline.com/gfwlist +server=/avday.tv/127.0.0.1#5335 +ipset=/avday.tv/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=/yt.be/127.0.0.1#5335 +ipset=/yt.be/gfwlist +server=/stepmom.one/127.0.0.1#5335 +ipset=/stepmom.one/gfwlist +server=/vanish.pl/127.0.0.1#5335 +ipset=/vanish.pl/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=/blogspot.ca/127.0.0.1#5335 +ipset=/blogspot.ca/gfwlist +server=/sponichi.co.jp/127.0.0.1#5335 +ipset=/sponichi.co.jp/gfwlist +server=/musclegirlflix.com/127.0.0.1#5335 +ipset=/musclegirlflix.com/gfwlist +server=/seagroup.com/127.0.0.1#5335 +ipset=/seagroup.com/gfwlist +server=/nikekid.com/127.0.0.1#5335 +ipset=/nikekid.com/gfwlist +server=/bmwsports.com/127.0.0.1#5335 +ipset=/bmwsports.com/gfwlist +server=/czechlesbians.com/127.0.0.1#5335 +ipset=/czechlesbians.com/gfwlist +server=/amazon.com.mx/127.0.0.1#5335 +ipset=/amazon.com.mx/gfwlist +server=/catcert.cat/127.0.0.1#5335 +ipset=/catcert.cat/gfwlist +server=/nextjs.org/127.0.0.1#5335 +ipset=/nextjs.org/gfwlist +server=/jerkofftocelebs.com/127.0.0.1#5335 +ipset=/jerkofftocelebs.com/gfwlist +server=/topartporn.com/127.0.0.1#5335 +ipset=/topartporn.com/gfwlist +server=/rbe996.com/127.0.0.1#5335 +ipset=/rbe996.com/gfwlist +server=/e-szigno.hu/127.0.0.1#5335 +ipset=/e-szigno.hu/gfwlist +server=/lustylist.com/127.0.0.1#5335 +ipset=/lustylist.com/gfwlist +server=/cuckoldwifesex.com/127.0.0.1#5335 +ipset=/cuckoldwifesex.com/gfwlist +server=/beatbydreuk2014.com/127.0.0.1#5335 +ipset=/beatbydreuk2014.com/gfwlist +server=/visa.com.ar/127.0.0.1#5335 +ipset=/visa.com.ar/gfwlist +server=/twavking.com/127.0.0.1#5335 +ipset=/twavking.com/gfwlist +server=/bmj.com/127.0.0.1#5335 +ipset=/bmj.com/gfwlist +server=/alfera.com.hk/127.0.0.1#5335 +ipset=/alfera.com.hk/gfwlist +server=/tube-sex-videos.com/127.0.0.1#5335 +ipset=/tube-sex-videos.com/gfwlist +server=/helixstudios.net/127.0.0.1#5335 +ipset=/helixstudios.net/gfwlist +server=/heroero.com/127.0.0.1#5335 +ipset=/heroero.com/gfwlist +server=/oxfordclinicalpsych.com/127.0.0.1#5335 +ipset=/oxfordclinicalpsych.com/gfwlist +server=/meilleurpornos.com/127.0.0.1#5335 +ipset=/meilleurpornos.com/gfwlist +server=/ikea.com.tw/127.0.0.1#5335 +ipset=/ikea.com.tw/gfwlist +server=/pearson.co.in/127.0.0.1#5335 +ipset=/pearson.co.in/gfwlist +server=/sucksex.com/127.0.0.1#5335 +ipset=/sucksex.com/gfwlist +server=/pppds.com/127.0.0.1#5335 +ipset=/pppds.com/gfwlist +server=/bcicdn.com/127.0.0.1#5335 +ipset=/bcicdn.com/gfwlist +server=/brandelectronic.com/127.0.0.1#5335 +ipset=/brandelectronic.com/gfwlist +server=/pearsonvue.net/127.0.0.1#5335 +ipset=/pearsonvue.net/gfwlist +server=/nurumassage.net/127.0.0.1#5335 +ipset=/nurumassage.net/gfwlist +server=/mingshengbao.com/127.0.0.1#5335 +ipset=/mingshengbao.com/gfwlist +server=/transcamslive.com/127.0.0.1#5335 +ipset=/transcamslive.com/gfwlist +server=/2013beatsbydrdreshop.com/127.0.0.1#5335 +ipset=/2013beatsbydrdreshop.com/gfwlist +server=/onedrive.co/127.0.0.1#5335 +ipset=/onedrive.co/gfwlist +server=/tubepornlist.com/127.0.0.1#5335 +ipset=/tubepornlist.com/gfwlist +server=/instamgram.com/127.0.0.1#5335 +ipset=/instamgram.com/gfwlist +server=/spankingtube.com/127.0.0.1#5335 +ipset=/spankingtube.com/gfwlist +server=/myamateurgirls.net/127.0.0.1#5335 +ipset=/myamateurgirls.net/gfwlist +server=/google.sk/127.0.0.1#5335 +ipset=/google.sk/gfwlist +server=/cartoonporno.xxx/127.0.0.1#5335 +ipset=/cartoonporno.xxx/gfwlist +server=/hentaiz.cc/127.0.0.1#5335 +ipset=/hentaiz.cc/gfwlist +server=/fbcdn-a.akamaihd.net/127.0.0.1#5335 +ipset=/fbcdn-a.akamaihd.net/gfwlist +server=/simply-hentai.com/127.0.0.1#5335 +ipset=/simply-hentai.com/gfwlist +server=/krymr.com/127.0.0.1#5335 +ipset=/krymr.com/gfwlist +server=/youtube.gr/127.0.0.1#5335 +ipset=/youtube.gr/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=/pobl-content.com/127.0.0.1#5335 +ipset=/pobl-content.com/gfwlist +server=/volvotrucks.kr/127.0.0.1#5335 +ipset=/volvotrucks.kr/gfwlist +server=/mini-windsor.com/127.0.0.1#5335 +ipset=/mini-windsor.com/gfwlist +server=/hoes.com/127.0.0.1#5335 +ipset=/hoes.com/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=/niceporn.tv/127.0.0.1#5335 +ipset=/niceporn.tv/gfwlist +server=/ubnw.net/127.0.0.1#5335 +ipset=/ubnw.net/gfwlist +server=/vfsco.cl/127.0.0.1#5335 +ipset=/vfsco.cl/gfwlist +server=/sekswebsite.nl/127.0.0.1#5335 +ipset=/sekswebsite.nl/gfwlist +server=/cloudproxy.app/127.0.0.1#5335 +ipset=/cloudproxy.app/gfwlist +server=/daftsex-hd.com/127.0.0.1#5335 +ipset=/daftsex-hd.com/gfwlist +server=/mjv-art.org/127.0.0.1#5335 +ipset=/mjv-art.org/gfwlist +server=/marketing-cloud.com/127.0.0.1#5335 +ipset=/marketing-cloud.com/gfwlist +server=/yahoo.ro/127.0.0.1#5335 +ipset=/yahoo.ro/gfwlist +server=/netsolssl.com/127.0.0.1#5335 +ipset=/netsolssl.com/gfwlist +server=/motherporn.ovh/127.0.0.1#5335 +ipset=/motherporn.ovh/gfwlist +server=/malayalamanorama.com/127.0.0.1#5335 +ipset=/malayalamanorama.com/gfwlist +server=/apple.co.jp/127.0.0.1#5335 +ipset=/apple.co.jp/gfwlist +server=/ebayinc.com/127.0.0.1#5335 +ipset=/ebayinc.com/gfwlist +server=/licdn.com/127.0.0.1#5335 +ipset=/licdn.com/gfwlist +server=/yourwifemymeat.com/127.0.0.1#5335 +ipset=/yourwifemymeat.com/gfwlist +server=/vanish.co.id/127.0.0.1#5335 +ipset=/vanish.co.id/gfwlist +server=/alldrawingshere.com/127.0.0.1#5335 +ipset=/alldrawingshere.com/gfwlist +server=/ckcdn.com/127.0.0.1#5335 +ipset=/ckcdn.com/gfwlist +server=/ppe.lawyer/127.0.0.1#5335 +ipset=/ppe.lawyer/gfwlist +server=/gradeuptube.com/127.0.0.1#5335 +ipset=/gradeuptube.com/gfwlist +server=/xvideosnovinhas.com/127.0.0.1#5335 +ipset=/xvideosnovinhas.com/gfwlist +server=/cryptocompare.com/127.0.0.1#5335 +ipset=/cryptocompare.com/gfwlist +server=/18-teen-xxx.com/127.0.0.1#5335 +ipset=/18-teen-xxx.com/gfwlist +server=/avstar.me/127.0.0.1#5335 +ipset=/avstar.me/gfwlist +server=/zhengjian.org/127.0.0.1#5335 +ipset=/zhengjian.org/gfwlist +server=/fuck6teen.com/127.0.0.1#5335 +ipset=/fuck6teen.com/gfwlist +server=/40somethingmag.com/127.0.0.1#5335 +ipset=/40somethingmag.com/gfwlist +server=/yahoo.com.ag/127.0.0.1#5335 +ipset=/yahoo.com.ag/gfwlist +server=/brazzfan.com/127.0.0.1#5335 +ipset=/brazzfan.com/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=/myatos.net/127.0.0.1#5335 +ipset=/myatos.net/gfwlist +server=/getpocket.com/127.0.0.1#5335 +ipset=/getpocket.com/gfwlist +server=/landofhope.tv/127.0.0.1#5335 +ipset=/landofhope.tv/gfwlist +server=/pornktube.com/127.0.0.1#5335 +ipset=/pornktube.com/gfwlist +server=/mininanaimo.com/127.0.0.1#5335 +ipset=/mininanaimo.com/gfwlist +server=/freecartoons.biz/127.0.0.1#5335 +ipset=/freecartoons.biz/gfwlist +server=/rarbgto.org/127.0.0.1#5335 +ipset=/rarbgto.org/gfwlist +server=/pinksporn.com/127.0.0.1#5335 +ipset=/pinksporn.com/gfwlist +server=/sexjk.com/127.0.0.1#5335 +ipset=/sexjk.com/gfwlist +server=/xnxx-sex-tube.com/127.0.0.1#5335 +ipset=/xnxx-sex-tube.com/gfwlist +server=/volvobuses.co.nz/127.0.0.1#5335 +ipset=/volvobuses.co.nz/gfwlist +server=/aboutyourmini.com/127.0.0.1#5335 +ipset=/aboutyourmini.com/gfwlist +server=/wetnhorny.com/127.0.0.1#5335 +ipset=/wetnhorny.com/gfwlist +server=/vrporncat.com/127.0.0.1#5335 +ipset=/vrporncat.com/gfwlist +server=/ubisoft-uplay-savegames.s3.amazonaws.com/127.0.0.1#5335 +ipset=/ubisoft-uplay-savegames.s3.amazonaws.com/gfwlist +server=/xsvod.xyz/127.0.0.1#5335 +ipset=/xsvod.xyz/gfwlist +server=/disco-api.com/127.0.0.1#5335 +ipset=/disco-api.com/gfwlist +server=/nikestore.com.au/127.0.0.1#5335 +ipset=/nikestore.com.au/gfwlist +server=/pageview.mobi/127.0.0.1#5335 +ipset=/pageview.mobi/gfwlist +server=/ptt3.cc/127.0.0.1#5335 +ipset=/ptt3.cc/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=/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=/sexgamesbox.com/127.0.0.1#5335 +ipset=/sexgamesbox.com/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=/xn--czrs0t4phtr3a.cn/127.0.0.1#5335 +ipset=/xn--czrs0t4phtr3a.cn/gfwlist +server=/fbworkmail.com/127.0.0.1#5335 +ipset=/fbworkmail.com/gfwlist +server=/sb.sb/127.0.0.1#5335 +ipset=/sb.sb/gfwlist +server=/cheapbeatsbydreoutlet-nz.com/127.0.0.1#5335 +ipset=/cheapbeatsbydreoutlet-nz.com/gfwlist +server=/azurecomcdn.net/127.0.0.1#5335 +ipset=/azurecomcdn.net/gfwlist +server=/ebaynyc.com/127.0.0.1#5335 +ipset=/ebaynyc.com/gfwlist +server=/japanesebeauties.net/127.0.0.1#5335 +ipset=/japanesebeauties.net/gfwlist +server=/staxus.com/127.0.0.1#5335 +ipset=/staxus.com/gfwlist +server=/volvotrucks.hk/127.0.0.1#5335 +ipset=/volvotrucks.hk/gfwlist +server=/discord.design/127.0.0.1#5335 +ipset=/discord.design/gfwlist +server=/pinterest.de/127.0.0.1#5335 +ipset=/pinterest.de/gfwlist +server=/stacyvandenbergboobs.com/127.0.0.1#5335 +ipset=/stacyvandenbergboobs.com/gfwlist +server=/ikea.in/127.0.0.1#5335 +ipset=/ikea.in/gfwlist +server=/ip.sb/127.0.0.1#5335 +ipset=/ip.sb/gfwlist +server=/codeberg.org/127.0.0.1#5335 +ipset=/codeberg.org/gfwlist +server=/westlaw.com/127.0.0.1#5335 +ipset=/westlaw.com/gfwlist +server=/phun.org/127.0.0.1#5335 +ipset=/phun.org/gfwlist +server=/atdmt2.com/127.0.0.1#5335 +ipset=/atdmt2.com/gfwlist +server=/visaeurope.si/127.0.0.1#5335 +ipset=/visaeurope.si/gfwlist +server=/girlsway.com/127.0.0.1#5335 +ipset=/girlsway.com/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=/mplstudios.com/127.0.0.1#5335 +ipset=/mplstudios.com/gfwlist +server=/mgo-images.com/127.0.0.1#5335 +ipset=/mgo-images.com/gfwlist +server=/lettherebeporn.com/127.0.0.1#5335 +ipset=/lettherebeporn.com/gfwlist +server=/theshoppingexpresslane.net/127.0.0.1#5335 +ipset=/theshoppingexpresslane.net/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=/paypal-referral.com/127.0.0.1#5335 +ipset=/paypal-referral.com/gfwlist +server=/badjojo.com/127.0.0.1#5335 +ipset=/badjojo.com/gfwlist +server=/binancezh.be/127.0.0.1#5335 +ipset=/binancezh.be/gfwlist +server=/moviesfree4u.xyz/127.0.0.1#5335 +ipset=/moviesfree4u.xyz/gfwlist +server=/bbycastatic.ca/127.0.0.1#5335 +ipset=/bbycastatic.ca/gfwlist +server=/app-dynamics.com/127.0.0.1#5335 +ipset=/app-dynamics.com/gfwlist +server=/freepornhentaigames.com/127.0.0.1#5335 +ipset=/freepornhentaigames.com/gfwlist +server=/bmwgroup-classic-heart.com/127.0.0.1#5335 +ipset=/bmwgroup-classic-heart.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=/cuckoldporntube.com/127.0.0.1#5335 +ipset=/cuckoldporntube.com/gfwlist +server=/agzy1.com/127.0.0.1#5335 +ipset=/agzy1.com/gfwlist +server=/thenextweb.com/127.0.0.1#5335 +ipset=/thenextweb.com/gfwlist +server=/bridgestonetyre.com.my/127.0.0.1#5335 +ipset=/bridgestonetyre.com.my/gfwlist +server=/milfslesbian.com/127.0.0.1#5335 +ipset=/milfslesbian.com/gfwlist +server=/pornoboard.net/127.0.0.1#5335 +ipset=/pornoboard.net/gfwlist +server=/ibradome.com/127.0.0.1#5335 +ipset=/ibradome.com/gfwlist +server=/fuckthathussy.com/127.0.0.1#5335 +ipset=/fuckthathussy.com/gfwlist +server=/sexmerci.com/127.0.0.1#5335 +ipset=/sexmerci.com/gfwlist +server=/opentranslatorstothings.org/127.0.0.1#5335 +ipset=/opentranslatorstothings.org/gfwlist +server=/collective99.com/127.0.0.1#5335 +ipset=/collective99.com/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=/huffingtonpost.co.uk/127.0.0.1#5335 +ipset=/huffingtonpost.co.uk/gfwlist +server=/adultsexgame.biz/127.0.0.1#5335 +ipset=/adultsexgame.biz/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=/horse-cum.net/127.0.0.1#5335 +ipset=/horse-cum.net/gfwlist +server=/visa.nl/127.0.0.1#5335 +ipset=/visa.nl/gfwlist +server=/fox38corpuschristi.com/127.0.0.1#5335 +ipset=/fox38corpuschristi.com/gfwlist +server=/bwh8.net/127.0.0.1#5335 +ipset=/bwh8.net/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=/hentaifc.com/127.0.0.1#5335 +ipset=/hentaifc.com/gfwlist +server=/crececonebay.com/127.0.0.1#5335 +ipset=/crececonebay.com/gfwlist +server=/zteman.net/127.0.0.1#5335 +ipset=/zteman.net/gfwlist +server=/javplatform.com/127.0.0.1#5335 +ipset=/javplatform.com/gfwlist +server=/instafollower.com/127.0.0.1#5335 +ipset=/instafollower.com/gfwlist +server=/beastiegals.com/127.0.0.1#5335 +ipset=/beastiegals.com/gfwlist +server=/intel.cz/127.0.0.1#5335 +ipset=/intel.cz/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=/applestore.ph/127.0.0.1#5335 +ipset=/applestore.ph/gfwlist +server=/pages.dev/127.0.0.1#5335 +ipset=/pages.dev/gfwlist +server=/paypal-apac.com/127.0.0.1#5335 +ipset=/paypal-apac.com/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=/pornshare.biz/127.0.0.1#5335 +ipset=/pornshare.biz/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=/ubuntu.net/127.0.0.1#5335 +ipset=/ubuntu.net/gfwlist +server=/etheadphones.com/127.0.0.1#5335 +ipset=/etheadphones.com/gfwlist +server=/fbfeedback.com/127.0.0.1#5335 +ipset=/fbfeedback.com/gfwlist +server=/langsuirs.com/127.0.0.1#5335 +ipset=/langsuirs.com/gfwlist +server=/microsoft.tv/127.0.0.1#5335 +ipset=/microsoft.tv/gfwlist +server=/faseboox.com/127.0.0.1#5335 +ipset=/faseboox.com/gfwlist +server=/img4.uk/127.0.0.1#5335 +ipset=/img4.uk/gfwlist +server=/pictoa.com/127.0.0.1#5335 +ipset=/pictoa.com/gfwlist +server=/jav24.com/127.0.0.1#5335 +ipset=/jav24.com/gfwlist +server=/beastysexlinks.com/127.0.0.1#5335 +ipset=/beastysexlinks.com/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=/sexykittenporn.com/127.0.0.1#5335 +ipset=/sexykittenporn.com/gfwlist +server=/hentai.name/127.0.0.1#5335 +ipset=/hentai.name/gfwlist +server=/latinaabuse.com/127.0.0.1#5335 +ipset=/latinaabuse.com/gfwlist +server=/onlysiterip.com/127.0.0.1#5335 +ipset=/onlysiterip.com/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=/bmw-konzernarchiv.de/127.0.0.1#5335 +ipset=/bmw-konzernarchiv.de/gfwlist +server=/ashemaletv.com/127.0.0.1#5335 +ipset=/ashemaletv.com/gfwlist +server=/4porn.com/127.0.0.1#5335 +ipset=/4porn.com/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=/cixp.net/127.0.0.1#5335 +ipset=/cixp.net/gfwlist +server=/htyj-bj.com/127.0.0.1#5335 +ipset=/htyj-bj.com/gfwlist +server=/wikidot.com/127.0.0.1#5335 +ipset=/wikidot.com/gfwlist +server=/sshs.club/127.0.0.1#5335 +ipset=/sshs.club/gfwlist +server=/x1337x.eu/127.0.0.1#5335 +ipset=/x1337x.eu/gfwlist +server=/firestone.co.cr/127.0.0.1#5335 +ipset=/firestone.co.cr/gfwlist +server=/intel.nz/127.0.0.1#5335 +ipset=/intel.nz/gfwlist +server=/atube.xxx/127.0.0.1#5335 +ipset=/atube.xxx/gfwlist +server=/intel.com.ec/127.0.0.1#5335 +ipset=/intel.com.ec/gfwlist +server=/pascherbeatsmonster.com/127.0.0.1#5335 +ipset=/pascherbeatsmonster.com/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=/organicmaps.app/127.0.0.1#5335 +ipset=/organicmaps.app/gfwlist +server=/doeda.com/127.0.0.1#5335 +ipset=/doeda.com/gfwlist +server=/instastyle.tv/127.0.0.1#5335 +ipset=/instastyle.tv/gfwlist +server=/ruby-lang.org/127.0.0.1#5335 +ipset=/ruby-lang.org/gfwlist +server=/cmmedia.com.tw/127.0.0.1#5335 +ipset=/cmmedia.com.tw/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=/fetishbank.net/127.0.0.1#5335 +ipset=/fetishbank.net/gfwlist +server=/fightforux.com/127.0.0.1#5335 +ipset=/fightforux.com/gfwlist +server=/pwmnet.com/127.0.0.1#5335 +ipset=/pwmnet.com/gfwlist +server=/jerkmate.com/127.0.0.1#5335 +ipset=/jerkmate.com/gfwlist +server=/fox7austin.com/127.0.0.1#5335 +ipset=/fox7austin.com/gfwlist +server=/scala-lang.org/127.0.0.1#5335 +ipset=/scala-lang.org/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=/tiberiumalliances.com/127.0.0.1#5335 +ipset=/tiberiumalliances.com/gfwlist +server=/kaamuu.com/127.0.0.1#5335 +ipset=/kaamuu.com/gfwlist +server=/commandandconquer.com/127.0.0.1#5335 +ipset=/commandandconquer.com/gfwlist +server=/finish.bg/127.0.0.1#5335 +ipset=/finish.bg/gfwlist +server=/vporn.com/127.0.0.1#5335 +ipset=/vporn.com/gfwlist +server=/bmw.com.ar/127.0.0.1#5335 +ipset=/bmw.com.ar/gfwlist +server=/intel.co.cr/127.0.0.1#5335 +ipset=/intel.co.cr/gfwlist +server=/kechtube.com/127.0.0.1#5335 +ipset=/kechtube.com/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=/2beeg.me/127.0.0.1#5335 +ipset=/2beeg.me/gfwlist +server=/google.com/127.0.0.1#5335 +ipset=/google.com/gfwlist +server=/imzog.com/127.0.0.1#5335 +ipset=/imzog.com/gfwlist +server=/swegold.com/127.0.0.1#5335 +ipset=/swegold.com/gfwlist +server=/sexyfucking.ru/127.0.0.1#5335 +ipset=/sexyfucking.ru/gfwlist +server=/sensualgirls.org/127.0.0.1#5335 +ipset=/sensualgirls.org/gfwlist +server=/bululusexdoll.com/127.0.0.1#5335 +ipset=/bululusexdoll.com/gfwlist +server=/ebaycourse.com/127.0.0.1#5335 +ipset=/ebaycourse.com/gfwlist +server=/intel.sx/127.0.0.1#5335 +ipset=/intel.sx/gfwlist +server=/12diasderegalosdeitunes.co.ni/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.co.ni/gfwlist +server=/vanish.co.za/127.0.0.1#5335 +ipset=/vanish.co.za/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=/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=/huobitoken.com/127.0.0.1#5335 +ipset=/huobitoken.com/gfwlist +server=/thepornmap.com/127.0.0.1#5335 +ipset=/thepornmap.com/gfwlist +server=/pokemonhome.com/127.0.0.1#5335 +ipset=/pokemonhome.com/gfwlist +server=/77maott.com/127.0.0.1#5335 +ipset=/77maott.com/gfwlist +server=/volvotrucks.lv/127.0.0.1#5335 +ipset=/volvotrucks.lv/gfwlist +server=/modeltv.com/127.0.0.1#5335 +ipset=/modeltv.com/gfwlist +server=/jpg4.pw/127.0.0.1#5335 +ipset=/jpg4.pw/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=/appleone.film/127.0.0.1#5335 +ipset=/appleone.film/gfwlist +server=/mini-georgia.com/127.0.0.1#5335 +ipset=/mini-georgia.com/gfwlist +server=/fundraisingwithfacebook.com/127.0.0.1#5335 +ipset=/fundraisingwithfacebook.com/gfwlist +server=/hpfeedback.com/127.0.0.1#5335 +ipset=/hpfeedback.com/gfwlist +server=/leagueoflegends.net/127.0.0.1#5335 +ipset=/leagueoflegends.net/gfwlist +server=/xxx-ways.com/127.0.0.1#5335 +ipset=/xxx-ways.com/gfwlist +server=/youtube.al/127.0.0.1#5335 +ipset=/youtube.al/gfwlist +server=/fetishes.cam/127.0.0.1#5335 +ipset=/fetishes.cam/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=/streamporn.cc/127.0.0.1#5335 +ipset=/streamporn.cc/gfwlist +server=/lecoin.cc/127.0.0.1#5335 +ipset=/lecoin.cc/gfwlist +server=/ebay.de/127.0.0.1#5335 +ipset=/ebay.de/gfwlist +server=/ameblo.jp/127.0.0.1#5335 +ipset=/ameblo.jp/gfwlist +server=/miniso.pe/127.0.0.1#5335 +ipset=/miniso.pe/gfwlist +server=/servicetalk.io/127.0.0.1#5335 +ipset=/servicetalk.io/gfwlist +server=/facebooklogin.com/127.0.0.1#5335 +ipset=/facebooklogin.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=/ikea.com.de/127.0.0.1#5335 +ipset=/ikea.com.de/gfwlist +server=/2bit8.com/127.0.0.1#5335 +ipset=/2bit8.com/gfwlist +server=/rb-crisis.com/127.0.0.1#5335 +ipset=/rb-crisis.com/gfwlist +server=/uug25.com/127.0.0.1#5335 +ipset=/uug25.com/gfwlist +server=/alphabet.eu/127.0.0.1#5335 +ipset=/alphabet.eu/gfwlist +server=/porn.to/127.0.0.1#5335 +ipset=/porn.to/gfwlist +server=/vpornvideos.com/127.0.0.1#5335 +ipset=/vpornvideos.com/gfwlist +server=/drunk6.com/127.0.0.1#5335 +ipset=/drunk6.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=/pinterest.kr/127.0.0.1#5335 +ipset=/pinterest.kr/gfwlist +server=/vjmedia.com.hk/127.0.0.1#5335 +ipset=/vjmedia.com.hk/gfwlist +server=/taose.tv/127.0.0.1#5335 +ipset=/taose.tv/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=/dirtyleague.com/127.0.0.1#5335 +ipset=/dirtyleague.com/gfwlist +server=/javmenu.com/127.0.0.1#5335 +ipset=/javmenu.com/gfwlist +server=/getdirect.tv/127.0.0.1#5335 +ipset=/getdirect.tv/gfwlist +server=/steampipe-kr.akamaized.net/127.0.0.1#5335 +ipset=/steampipe-kr.akamaized.net/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=/crosswalk-project.net/127.0.0.1#5335 +ipset=/crosswalk-project.net/gfwlist +server=/nikecloud.com/127.0.0.1#5335 +ipset=/nikecloud.com/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=/binancezh.mobi/127.0.0.1#5335 +ipset=/binancezh.mobi/gfwlist +server=/twinprime.com/127.0.0.1#5335 +ipset=/twinprime.com/gfwlist +server=/179na.com/127.0.0.1#5335 +ipset=/179na.com/gfwlist +server=/adidas.be/127.0.0.1#5335 +ipset=/adidas.be/gfwlist +server=/googleventures.com/127.0.0.1#5335 +ipset=/googleventures.com/gfwlist +server=/camvideos.org/127.0.0.1#5335 +ipset=/camvideos.org/gfwlist +server=/beatsheadphonesforcheap.net/127.0.0.1#5335 +ipset=/beatsheadphonesforcheap.net/gfwlist +server=/tubetop69.com/127.0.0.1#5335 +ipset=/tubetop69.com/gfwlist +server=/cloudinsights.com/127.0.0.1#5335 +ipset=/cloudinsights.com/gfwlist +server=/joysporn.com/127.0.0.1#5335 +ipset=/joysporn.com/gfwlist +server=/bmwvalueservice.com/127.0.0.1#5335 +ipset=/bmwvalueservice.com/gfwlist +server=/visa.com.vc/127.0.0.1#5335 +ipset=/visa.com.vc/gfwlist +server=/finish.co.za/127.0.0.1#5335 +ipset=/finish.co.za/gfwlist +server=/incestvidz.com/127.0.0.1#5335 +ipset=/incestvidz.com/gfwlist +server=/beatsbydresales.us/127.0.0.1#5335 +ipset=/beatsbydresales.us/gfwlist +server=/openresty.org/127.0.0.1#5335 +ipset=/openresty.org/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=/artstor.org/127.0.0.1#5335 +ipset=/artstor.org/gfwlist +server=/thefoxnation.com/127.0.0.1#5335 +ipset=/thefoxnation.com/gfwlist +server=/3pornstarmovies.com/127.0.0.1#5335 +ipset=/3pornstarmovies.com/gfwlist +server=/jmcomic1.me/127.0.0.1#5335 +ipset=/jmcomic1.me/gfwlist +server=/ieeefoundation.org/127.0.0.1#5335 +ipset=/ieeefoundation.org/gfwlist +server=/pornjk.com/127.0.0.1#5335 +ipset=/pornjk.com/gfwlist +server=/baterias-hp.com/127.0.0.1#5335 +ipset=/baterias-hp.com/gfwlist +server=/ipad.de/127.0.0.1#5335 +ipset=/ipad.de/gfwlist +server=/xn--x-qeu1ji09tzlg.net/127.0.0.1#5335 +ipset=/xn--x-qeu1ji09tzlg.net/gfwlist +server=/porno.org.in/127.0.0.1#5335 +ipset=/porno.org.in/gfwlist +server=/miniso-nz.com/127.0.0.1#5335 +ipset=/miniso-nz.com/gfwlist +server=/worldscientific.com/127.0.0.1#5335 +ipset=/worldscientific.com/gfwlist +server=/mypornadviser.com/127.0.0.1#5335 +ipset=/mypornadviser.com/gfwlist +server=/bmw-motorrad.rs/127.0.0.1#5335 +ipset=/bmw-motorrad.rs/gfwlist +server=/bestbuycanadaltd.ca/127.0.0.1#5335 +ipset=/bestbuycanadaltd.ca/gfwlist +server=/ebay.jp/127.0.0.1#5335 +ipset=/ebay.jp/gfwlist +server=/momon-ga.com/127.0.0.1#5335 +ipset=/momon-ga.com/gfwlist +server=/x.co/127.0.0.1#5335 +ipset=/x.co/gfwlist +server=/pornultras.com/127.0.0.1#5335 +ipset=/pornultras.com/gfwlist +server=/t.co/127.0.0.1#5335 +ipset=/t.co/gfwlist +server=/uun98.com/127.0.0.1#5335 +ipset=/uun98.com/gfwlist +server=/netacad.net/127.0.0.1#5335 +ipset=/netacad.net/gfwlist +server=/couplecam.co.uk/127.0.0.1#5335 +ipset=/couplecam.co.uk/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=/dropboxforums.com/127.0.0.1#5335 +ipset=/dropboxforums.com/gfwlist +server=/g.co/127.0.0.1#5335 +ipset=/g.co/gfwlist +server=/lolfanart.net/127.0.0.1#5335 +ipset=/lolfanart.net/gfwlist +server=/pixiv.me/127.0.0.1#5335 +ipset=/pixiv.me/gfwlist +server=/iphoto.wang/127.0.0.1#5335 +ipset=/iphoto.wang/gfwlist +server=/nasty.singles/127.0.0.1#5335 +ipset=/nasty.singles/gfwlist +server=/bmw.az/127.0.0.1#5335 +ipset=/bmw.az/gfwlist +server=/lihksnap.com/127.0.0.1#5335 +ipset=/lihksnap.com/gfwlist +server=/ck101.com/127.0.0.1#5335 +ipset=/ck101.com/gfwlist +server=/bestbuytradein.com/127.0.0.1#5335 +ipset=/bestbuytradein.com/gfwlist +server=/paypalcorp.com/127.0.0.1#5335 +ipset=/paypalcorp.com/gfwlist +server=/wtfpeople.com/127.0.0.1#5335 +ipset=/wtfpeople.com/gfwlist +server=/developer.microsoft.com/127.0.0.1#5335 +ipset=/developer.microsoft.com/gfwlist +server=/selectanescort.com/127.0.0.1#5335 +ipset=/selectanescort.com/gfwlist +server=/vector.im/127.0.0.1#5335 +ipset=/vector.im/gfwlist +server=/dgg.gg/127.0.0.1#5335 +ipset=/dgg.gg/gfwlist +server=/adgoogle.net/127.0.0.1#5335 +ipset=/adgoogle.net/gfwlist +server=/oath.com/127.0.0.1#5335 +ipset=/oath.com/gfwlist +server=/thepornbin.com/127.0.0.1#5335 +ipset=/thepornbin.com/gfwlist +server=/thetranny.com/127.0.0.1#5335 +ipset=/thetranny.com/gfwlist +server=/alphabet.co.uk/127.0.0.1#5335 +ipset=/alphabet.co.uk/gfwlist +server=/thesun.ie/127.0.0.1#5335 +ipset=/thesun.ie/gfwlist +server=/frprn.com/127.0.0.1#5335 +ipset=/frprn.com/gfwlist +server=/tufos.com.br/127.0.0.1#5335 +ipset=/tufos.com.br/gfwlist +server=/hdporncomics.com/127.0.0.1#5335 +ipset=/hdporncomics.com/gfwlist +server=/intel.gs/127.0.0.1#5335 +ipset=/intel.gs/gfwlist +server=/cups.org/127.0.0.1#5335 +ipset=/cups.org/gfwlist +server=/opera.com/127.0.0.1#5335 +ipset=/opera.com/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=/freessl.com/127.0.0.1#5335 +ipset=/freessl.com/gfwlist +server=/postegro.it/127.0.0.1#5335 +ipset=/postegro.it/gfwlist +server=/75m.co/127.0.0.1#5335 +ipset=/75m.co/gfwlist +server=/freewechat.com/127.0.0.1#5335 +ipset=/freewechat.com/gfwlist +server=/atubex.com/127.0.0.1#5335 +ipset=/atubex.com/gfwlist +server=/thehentaiworld.com/127.0.0.1#5335 +ipset=/thehentaiworld.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=/hdzog.com/127.0.0.1#5335 +ipset=/hdzog.com/gfwlist +server=/fqcebook.com/127.0.0.1#5335 +ipset=/fqcebook.com/gfwlist +server=/edgedatg.com/127.0.0.1#5335 +ipset=/edgedatg.com/gfwlist +server=/freepornhdonlinegay.com/127.0.0.1#5335 +ipset=/freepornhdonlinegay.com/gfwlist +server=/dealtree.org/127.0.0.1#5335 +ipset=/dealtree.org/gfwlist +server=/ohgratisporrfilm.com/127.0.0.1#5335 +ipset=/ohgratisporrfilm.com/gfwlist +server=/manhuntdaily.com/127.0.0.1#5335 +ipset=/manhuntdaily.com/gfwlist +server=/att-rsvp.com/127.0.0.1#5335 +ipset=/att-rsvp.com/gfwlist +server=/bmw-connecteddrive.jp/127.0.0.1#5335 +ipset=/bmw-connecteddrive.jp/gfwlist +server=/v2ph.com/127.0.0.1#5335 +ipset=/v2ph.com/gfwlist +server=/porzo.com/127.0.0.1#5335 +ipset=/porzo.com/gfwlist +server=/app-measurement.com/127.0.0.1#5335 +ipset=/app-measurement.com/gfwlist +server=/beatsforme.com/127.0.0.1#5335 +ipset=/beatsforme.com/gfwlist +server=/typesquare.com/127.0.0.1#5335 +ipset=/typesquare.com/gfwlist +server=/ashemaletube.com/127.0.0.1#5335 +ipset=/ashemaletube.com/gfwlist +server=/azureiotsolutions.com/127.0.0.1#5335 +ipset=/azureiotsolutions.com/gfwlist +server=/shywifeswap.com/127.0.0.1#5335 +ipset=/shywifeswap.com/gfwlist +server=/applw.com/127.0.0.1#5335 +ipset=/applw.com/gfwlist +server=/airwick.pt/127.0.0.1#5335 +ipset=/airwick.pt/gfwlist +server=/snapstore.io/127.0.0.1#5335 +ipset=/snapstore.io/gfwlist +server=/clickedu.co.uk/127.0.0.1#5335 +ipset=/clickedu.co.uk/gfwlist +server=/firebaseio.com/127.0.0.1#5335 +ipset=/firebaseio.com/gfwlist +server=/mastercard.com.ng/127.0.0.1#5335 +ipset=/mastercard.com.ng/gfwlist +server=/hpwsn.com/127.0.0.1#5335 +ipset=/hpwsn.com/gfwlist +server=/acgdv.com/127.0.0.1#5335 +ipset=/acgdv.com/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=/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=/realclearreligion.org/127.0.0.1#5335 +ipset=/realclearreligion.org/gfwlist +server=/eroelog.com/127.0.0.1#5335 +ipset=/eroelog.com/gfwlist +server=/publichealthdepartment.info/127.0.0.1#5335 +ipset=/publichealthdepartment.info/gfwlist +server=/ebayrtm.com/127.0.0.1#5335 +ipset=/ebayrtm.com/gfwlist +server=/guccimuseo.com/127.0.0.1#5335 +ipset=/guccimuseo.com/gfwlist +server=/businessweekly.com.tw/127.0.0.1#5335 +ipset=/businessweekly.com.tw/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=/passion.com/127.0.0.1#5335 +ipset=/passion.com/gfwlist +server=/good-gay.com/127.0.0.1#5335 +ipset=/good-gay.com/gfwlist +server=/google.hn/127.0.0.1#5335 +ipset=/google.hn/gfwlist +server=/news.com.au/127.0.0.1#5335 +ipset=/news.com.au/gfwlist +server=/hongkongfp.com/127.0.0.1#5335 +ipset=/hongkongfp.com/gfwlist +server=/geeksquadwebroot.org/127.0.0.1#5335 +ipset=/geeksquadwebroot.org/gfwlist +server=/imagefap.com/127.0.0.1#5335 +ipset=/imagefap.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=/mikuexpo.com/127.0.0.1#5335 +ipset=/mikuexpo.com/gfwlist +server=/intel.ph/127.0.0.1#5335 +ipset=/intel.ph/gfwlist +server=/matrix.to/127.0.0.1#5335 +ipset=/matrix.to/gfwlist +server=/alhs.xyz/127.0.0.1#5335 +ipset=/alhs.xyz/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=/tubelombia.net/127.0.0.1#5335 +ipset=/tubelombia.net/gfwlist +server=/thecandidbay.com/127.0.0.1#5335 +ipset=/thecandidbay.com/gfwlist +server=/igaychat.com/127.0.0.1#5335 +ipset=/igaychat.com/gfwlist +server=/epochweek.com/127.0.0.1#5335 +ipset=/epochweek.com/gfwlist +server=/mingpao.com/127.0.0.1#5335 +ipset=/mingpao.com/gfwlist +server=/comicsporno.es/127.0.0.1#5335 +ipset=/comicsporno.es/gfwlist +server=/awflapp.top/127.0.0.1#5335 +ipset=/awflapp.top/gfwlist +server=/hentaidude.xxx/127.0.0.1#5335 +ipset=/hentaidude.xxx/gfwlist +server=/aspnetcdn.com/127.0.0.1#5335 +ipset=/aspnetcdn.com/gfwlist +server=/faronics.tech/127.0.0.1#5335 +ipset=/faronics.tech/gfwlist +server=/12diasderegalosdeitunes.com.ve/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.com.ve/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=/gettyimages.no/127.0.0.1#5335 +ipset=/gettyimages.no/gfwlist +server=/acrobat.com/127.0.0.1#5335 +ipset=/acrobat.com/gfwlist +server=/czechstreets.com/127.0.0.1#5335 +ipset=/czechstreets.com/gfwlist +server=/tmsnrt.rs/127.0.0.1#5335 +ipset=/tmsnrt.rs/gfwlist +server=/hotmovs.com/127.0.0.1#5335 +ipset=/hotmovs.com/gfwlist +server=/ashleysageellison.com/127.0.0.1#5335 +ipset=/ashleysageellison.com/gfwlist +server=/ocsp-responder.com/127.0.0.1#5335 +ipset=/ocsp-responder.com/gfwlist +server=/myanmar-porn.com/127.0.0.1#5335 +ipset=/myanmar-porn.com/gfwlist +server=/sexmutant.com/127.0.0.1#5335 +ipset=/sexmutant.com/gfwlist +server=/pokemonbw.com/127.0.0.1#5335 +ipset=/pokemonbw.com/gfwlist +server=/sexbq.com/127.0.0.1#5335 +ipset=/sexbq.com/gfwlist +server=/vmwarestuff.com/127.0.0.1#5335 +ipset=/vmwarestuff.com/gfwlist +server=/bmwcharitygolf.com/127.0.0.1#5335 +ipset=/bmwcharitygolf.com/gfwlist +server=/men18.net/127.0.0.1#5335 +ipset=/men18.net/gfwlist +server=/machotube.tv/127.0.0.1#5335 +ipset=/machotube.tv/gfwlist +server=/dellcdn.com/127.0.0.1#5335 +ipset=/dellcdn.com/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=/putinho.net/127.0.0.1#5335 +ipset=/putinho.net/gfwlist +server=/itsbetterwhenyouwinit.com/127.0.0.1#5335 +ipset=/itsbetterwhenyouwinit.com/gfwlist +server=/51mh.app/127.0.0.1#5335 +ipset=/51mh.app/gfwlist +server=/porn91.org/127.0.0.1#5335 +ipset=/porn91.org/gfwlist +server=/appleappstore.net/127.0.0.1#5335 +ipset=/appleappstore.net/gfwlist +server=/corbinfisher.com/127.0.0.1#5335 +ipset=/corbinfisher.com/gfwlist +server=/incestflix.com/127.0.0.1#5335 +ipset=/incestflix.com/gfwlist +server=/bighead.group/127.0.0.1#5335 +ipset=/bighead.group/gfwlist +server=/trixhentai.com/127.0.0.1#5335 +ipset=/trixhentai.com/gfwlist +server=/xnalgas.com/127.0.0.1#5335 +ipset=/xnalgas.com/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=/google.li/127.0.0.1#5335 +ipset=/google.li/gfwlist +server=/adobesigncdn.com/127.0.0.1#5335 +ipset=/adobesigncdn.com/gfwlist +server=/verisign.se/127.0.0.1#5335 +ipset=/verisign.se/gfwlist +server=/ideal-teens.com/127.0.0.1#5335 +ipset=/ideal-teens.com/gfwlist +server=/monsterbeatsbydrdrestudio.com/127.0.0.1#5335 +ipset=/monsterbeatsbydrdrestudio.com/gfwlist +server=/javscatsex.com/127.0.0.1#5335 +ipset=/javscatsex.com/gfwlist +server=/dtvce.com/127.0.0.1#5335 +ipset=/dtvce.com/gfwlist +server=/cs4hs.com/127.0.0.1#5335 +ipset=/cs4hs.com/gfwlist +server=/mm9c63ae.xyz/127.0.0.1#5335 +ipset=/mm9c63ae.xyz/gfwlist +server=/microsoftstore.com/127.0.0.1#5335 +ipset=/microsoftstore.com/gfwlist +server=/bandpage.com/127.0.0.1#5335 +ipset=/bandpage.com/gfwlist +server=/prothots.com/127.0.0.1#5335 +ipset=/prothots.com/gfwlist +server=/heroesofdragonage.com/127.0.0.1#5335 +ipset=/heroesofdragonage.com/gfwlist +server=/chengjuanseo.com/127.0.0.1#5335 +ipset=/chengjuanseo.com/gfwlist +server=/pornjav.org/127.0.0.1#5335 +ipset=/pornjav.org/gfwlist +server=/darivoa.com/127.0.0.1#5335 +ipset=/darivoa.com/gfwlist +server=/myhomemadesex.com/127.0.0.1#5335 +ipset=/myhomemadesex.com/gfwlist +server=/foxsports-newyork.com/127.0.0.1#5335 +ipset=/foxsports-newyork.com/gfwlist +server=/18qt.com/127.0.0.1#5335 +ipset=/18qt.com/gfwlist +server=/bmw-motorrad-motorsport.com/127.0.0.1#5335 +ipset=/bmw-motorrad-motorsport.com/gfwlist +server=/nature.com/127.0.0.1#5335 +ipset=/nature.com/gfwlist +server=/huluspain.com/127.0.0.1#5335 +ipset=/huluspain.com/gfwlist +server=/golang.com/127.0.0.1#5335 +ipset=/golang.com/gfwlist +server=/ebayenterprise.tv/127.0.0.1#5335 +ipset=/ebayenterprise.tv/gfwlist +server=/sankei.co.jp/127.0.0.1#5335 +ipset=/sankei.co.jp/gfwlist +server=/emojipedia.org/127.0.0.1#5335 +ipset=/emojipedia.org/gfwlist +server=/facebool.info/127.0.0.1#5335 +ipset=/facebool.info/gfwlist +server=/privacytools.io/127.0.0.1#5335 +ipset=/privacytools.io/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=/ebaysweden.com/127.0.0.1#5335 +ipset=/ebaysweden.com/gfwlist +server=/pearsonclinical.be/127.0.0.1#5335 +ipset=/pearsonclinical.be/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=/blackshemalevideo.com/127.0.0.1#5335 +ipset=/blackshemalevideo.com/gfwlist +server=/xbooru.com/127.0.0.1#5335 +ipset=/xbooru.com/gfwlist +server=/globalsign.es/127.0.0.1#5335 +ipset=/globalsign.es/gfwlist +server=/directvatlantaga.com/127.0.0.1#5335 +ipset=/directvatlantaga.com/gfwlist +server=/enemarotica.com/127.0.0.1#5335 +ipset=/enemarotica.com/gfwlist +server=/hbomax.com/127.0.0.1#5335 +ipset=/hbomax.com/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=/riotcdn.net/127.0.0.1#5335 +ipset=/riotcdn.net/gfwlist +server=/sankei-call.jp/127.0.0.1#5335 +ipset=/sankei-call.jp/gfwlist +server=/drebeatssite.com/127.0.0.1#5335 +ipset=/drebeatssite.com/gfwlist +server=/pleasuremore.com/127.0.0.1#5335 +ipset=/pleasuremore.com/gfwlist +server=/3789av.com/127.0.0.1#5335 +ipset=/3789av.com/gfwlist +server=/2789av.com/127.0.0.1#5335 +ipset=/2789av.com/gfwlist +server=/britsexcash.com/127.0.0.1#5335 +ipset=/britsexcash.com/gfwlist +server=/pornreactor.cc/127.0.0.1#5335 +ipset=/pornreactor.cc/gfwlist +server=/veet.tv/127.0.0.1#5335 +ipset=/veet.tv/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=/feedherfuckher.com/127.0.0.1#5335 +ipset=/feedherfuckher.com/gfwlist +server=/fgirl.ch/127.0.0.1#5335 +ipset=/fgirl.ch/gfwlist +server=/softbankhawksstore.jp/127.0.0.1#5335 +ipset=/softbankhawksstore.jp/gfwlist +server=/pearsonclinical.se/127.0.0.1#5335 +ipset=/pearsonclinical.se/gfwlist +server=/heartbreakers.info/127.0.0.1#5335 +ipset=/heartbreakers.info/gfwlist +server=/ikea.bg/127.0.0.1#5335 +ipset=/ikea.bg/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=/bzazi.com/127.0.0.1#5335 +ipset=/bzazi.com/gfwlist +server=/x-artvideo.net/127.0.0.1#5335 +ipset=/x-artvideo.net/gfwlist +server=/yandex.pl/127.0.0.1#5335 +ipset=/yandex.pl/gfwlist +server=/wikia.org/127.0.0.1#5335 +ipset=/wikia.org/gfwlist +server=/bidong9.com/127.0.0.1#5335 +ipset=/bidong9.com/gfwlist +server=/sandisk.co.kr/127.0.0.1#5335 +ipset=/sandisk.co.kr/gfwlist +server=/veporno.net/127.0.0.1#5335 +ipset=/veporno.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=/avmoo.click/127.0.0.1#5335 +ipset=/avmoo.click/gfwlist +server=/sae.org/127.0.0.1#5335 +ipset=/sae.org/gfwlist +server=/chatwhores.com/127.0.0.1#5335 +ipset=/chatwhores.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=/mini.com.bn/127.0.0.1#5335 +ipset=/mini.com.bn/gfwlist +server=/facebookphoto.com/127.0.0.1#5335 +ipset=/facebookphoto.com/gfwlist +server=/mywaytopay.net/127.0.0.1#5335 +ipset=/mywaytopay.net/gfwlist +server=/jpav.us/127.0.0.1#5335 +ipset=/jpav.us/gfwlist +server=/clearasil.us/127.0.0.1#5335 +ipset=/clearasil.us/gfwlist +server=/just.xxx/127.0.0.1#5335 +ipset=/just.xxx/gfwlist +server=/naturalvoices.com/127.0.0.1#5335 +ipset=/naturalvoices.com/gfwlist +server=/freegaypornhdtube.com/127.0.0.1#5335 +ipset=/freegaypornhdtube.com/gfwlist +server=/google.sm/127.0.0.1#5335 +ipset=/google.sm/gfwlist +server=/vilavpn6.xyz/127.0.0.1#5335 +ipset=/vilavpn6.xyz/gfwlist +server=/xxbb9.com/127.0.0.1#5335 +ipset=/xxbb9.com/gfwlist +server=/youtube.com.gt/127.0.0.1#5335 +ipset=/youtube.com.gt/gfwlist +server=/applepodcasts.com/127.0.0.1#5335 +ipset=/applepodcasts.com/gfwlist +server=/google.com.eg/127.0.0.1#5335 +ipset=/google.com.eg/gfwlist +server=/ebalovo.com/127.0.0.1#5335 +ipset=/ebalovo.com/gfwlist +server=/thieme.de/127.0.0.1#5335 +ipset=/thieme.de/gfwlist +server=/openjsf.org/127.0.0.1#5335 +ipset=/openjsf.org/gfwlist +server=/youassporn.com/127.0.0.1#5335 +ipset=/youassporn.com/gfwlist +server=/85st.com/127.0.0.1#5335 +ipset=/85st.com/gfwlist +server=/binance.net/127.0.0.1#5335 +ipset=/binance.net/gfwlist +server=/projectmurphy.net/127.0.0.1#5335 +ipset=/projectmurphy.net/gfwlist +server=/paypal-mobilemoney.com/127.0.0.1#5335 +ipset=/paypal-mobilemoney.com/gfwlist +server=/goldgay.tv/127.0.0.1#5335 +ipset=/goldgay.tv/gfwlist +server=/google.ci/127.0.0.1#5335 +ipset=/google.ci/gfwlist +server=/duckduckgo.uk/127.0.0.1#5335 +ipset=/duckduckgo.uk/gfwlist +server=/bdsm.com/127.0.0.1#5335 +ipset=/bdsm.com/gfwlist +server=/frostbite.com/127.0.0.1#5335 +ipset=/frostbite.com/gfwlist +server=/justporno.tv/127.0.0.1#5335 +ipset=/justporno.tv/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=/thecuckold.com/127.0.0.1#5335 +ipset=/thecuckold.com/gfwlist +server=/bmw-i-pure-impulse.com/127.0.0.1#5335 +ipset=/bmw-i-pure-impulse.com/gfwlist +server=/simonsgirls.com/127.0.0.1#5335 +ipset=/simonsgirls.com/gfwlist +server=/mysdn.net/127.0.0.1#5335 +ipset=/mysdn.net/gfwlist +server=/mailhealth.com/127.0.0.1#5335 +ipset=/mailhealth.com/gfwlist +server=/gacebook.com/127.0.0.1#5335 +ipset=/gacebook.com/gfwlist +server=/facebook.com/127.0.0.1#5335 +ipset=/facebook.com/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=/nichepornsite.com/127.0.0.1#5335 +ipset=/nichepornsite.com/gfwlist +server=/bmw.co.nz/127.0.0.1#5335 +ipset=/bmw.co.nz/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=/bmw-motorrad.lu/127.0.0.1#5335 +ipset=/bmw-motorrad.lu/gfwlist +server=/redditmedia.com/127.0.0.1#5335 +ipset=/redditmedia.com/gfwlist +server=/nationalgeographicpartners.com/127.0.0.1#5335 +ipset=/nationalgeographicpartners.com/gfwlist +server=/applestore.com.pl/127.0.0.1#5335 +ipset=/applestore.com.pl/gfwlist +server=/foxla.com/127.0.0.1#5335 +ipset=/foxla.com/gfwlist +server=/paypal-labs.com/127.0.0.1#5335 +ipset=/paypal-labs.com/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=/guruofporn.com/127.0.0.1#5335 +ipset=/guruofporn.com/gfwlist +server=/sony.com.ec/127.0.0.1#5335 +ipset=/sony.com.ec/gfwlist +server=/pimg.tw/127.0.0.1#5335 +ipset=/pimg.tw/gfwlist +server=/pornuj.cz/127.0.0.1#5335 +ipset=/pornuj.cz/gfwlist +server=/hipaa6020.com/127.0.0.1#5335 +ipset=/hipaa6020.com/gfwlist +server=/xxvids.net/127.0.0.1#5335 +ipset=/xxvids.net/gfwlist +server=/dot-mac.de/127.0.0.1#5335 +ipset=/dot-mac.de/gfwlist +server=/nytcn.me/127.0.0.1#5335 +ipset=/nytcn.me/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=/rbc007.com/127.0.0.1#5335 +ipset=/rbc007.com/gfwlist +server=/directtv-dish.com/127.0.0.1#5335 +ipset=/directtv-dish.com/gfwlist +server=/hentaivn.la/127.0.0.1#5335 +ipset=/hentaivn.la/gfwlist +server=/dl-iphone.com/127.0.0.1#5335 +ipset=/dl-iphone.com/gfwlist +server=/thefind.com/127.0.0.1#5335 +ipset=/thefind.com/gfwlist +server=/gamcore.com/127.0.0.1#5335 +ipset=/gamcore.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=/gogoanime.vc/127.0.0.1#5335 +ipset=/gogoanime.vc/gfwlist +server=/vfsco.de/127.0.0.1#5335 +ipset=/vfsco.de/gfwlist +server=/hentai4manga.com/127.0.0.1#5335 +ipset=/hentai4manga.com/gfwlist +server=/freebsd.org/127.0.0.1#5335 +ipset=/freebsd.org/gfwlist +server=/sonorousporn.com/127.0.0.1#5335 +ipset=/sonorousporn.com/gfwlist +server=/qualcomm.co.jp/127.0.0.1#5335 +ipset=/qualcomm.co.jp/gfwlist +server=/ruten.com.tw/127.0.0.1#5335 +ipset=/ruten.com.tw/gfwlist +server=/factograph.info/127.0.0.1#5335 +ipset=/factograph.info/gfwlist +server=/verisign.com.tw/127.0.0.1#5335 +ipset=/verisign.com.tw/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=/bmw.nl/127.0.0.1#5335 +ipset=/bmw.nl/gfwlist +server=/bloombergarcade.com/127.0.0.1#5335 +ipset=/bloombergarcade.com/gfwlist +server=/google.cv/127.0.0.1#5335 +ipset=/google.cv/gfwlist +server=/minisoindia.com/127.0.0.1#5335 +ipset=/minisoindia.com/gfwlist +server=/vaultify.com/127.0.0.1#5335 +ipset=/vaultify.com/gfwlist +server=/appdynamics.fr/127.0.0.1#5335 +ipset=/appdynamics.fr/gfwlist +server=/mastercard.ua/127.0.0.1#5335 +ipset=/mastercard.ua/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=/grannylovesbbc.com/127.0.0.1#5335 +ipset=/grannylovesbbc.com/gfwlist +server=/volvo.com/127.0.0.1#5335 +ipset=/volvo.com/gfwlist +server=/xfuckonline.com/127.0.0.1#5335 +ipset=/xfuckonline.com/gfwlist +server=/bmw.ee/127.0.0.1#5335 +ipset=/bmw.ee/gfwlist +server=/inhumanity.com/127.0.0.1#5335 +ipset=/inhumanity.com/gfwlist +server=/click-url.com/127.0.0.1#5335 +ipset=/click-url.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=/firstanalvideos.com/127.0.0.1#5335 +ipset=/firstanalvideos.com/gfwlist +server=/beatsbydrecheaponlinesales.com/127.0.0.1#5335 +ipset=/beatsbydrecheaponlinesales.com/gfwlist +server=/pinterest.mx/127.0.0.1#5335 +ipset=/pinterest.mx/gfwlist +server=/justdoit.us/127.0.0.1#5335 +ipset=/justdoit.us/gfwlist +server=/rentaride.de/127.0.0.1#5335 +ipset=/rentaride.de/gfwlist +server=/m-power.com/127.0.0.1#5335 +ipset=/m-power.com/gfwlist +server=/dowjoneson.com/127.0.0.1#5335 +ipset=/dowjoneson.com/gfwlist +server=/seehorsepenis.com/127.0.0.1#5335 +ipset=/seehorsepenis.com/gfwlist +server=/foxtel.com/127.0.0.1#5335 +ipset=/foxtel.com/gfwlist +server=/zapper.fi/127.0.0.1#5335 +ipset=/zapper.fi/gfwlist +server=/pros.ee/127.0.0.1#5335 +ipset=/pros.ee/gfwlist +server=/strepsils.ch/127.0.0.1#5335 +ipset=/strepsils.ch/gfwlist +server=/nudedxxx.com/127.0.0.1#5335 +ipset=/nudedxxx.com/gfwlist +server=/hotstarext.com/127.0.0.1#5335 +ipset=/hotstarext.com/gfwlist +server=/realclearmarkets.com/127.0.0.1#5335 +ipset=/realclearmarkets.com/gfwlist +server=/lnkd.in/127.0.0.1#5335 +ipset=/lnkd.in/gfwlist +server=/paylike.com/127.0.0.1#5335 +ipset=/paylike.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=/lolibus.top/127.0.0.1#5335 +ipset=/lolibus.top/gfwlist +server=/videopress.com/127.0.0.1#5335 +ipset=/videopress.com/gfwlist +server=/fanfox.net/127.0.0.1#5335 +ipset=/fanfox.net/gfwlist +server=/bmwofannapolis.com/127.0.0.1#5335 +ipset=/bmwofannapolis.com/gfwlist +server=/powersunitedvr.com/127.0.0.1#5335 +ipset=/powersunitedvr.com/gfwlist +server=/ieee-cas.org/127.0.0.1#5335 +ipset=/ieee-cas.org/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=/terk.nl/127.0.0.1#5335 +ipset=/terk.nl/gfwlist +server=/netflav1.com/127.0.0.1#5335 +ipset=/netflav1.com/gfwlist +server=/panasonic.jp/127.0.0.1#5335 +ipset=/panasonic.jp/gfwlist +server=/yahoo.ge/127.0.0.1#5335 +ipset=/yahoo.ge/gfwlist +server=/petardas.xxx/127.0.0.1#5335 +ipset=/petardas.xxx/gfwlist +server=/telegram.space/127.0.0.1#5335 +ipset=/telegram.space/gfwlist +server=/youtube.com.sv/127.0.0.1#5335 +ipset=/youtube.com.sv/gfwlist +server=/ahsexfilme.com/127.0.0.1#5335 +ipset=/ahsexfilme.com/gfwlist +server=/beatsbydresalesonline-australia.com/127.0.0.1#5335 +ipset=/beatsbydresalesonline-australia.com/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=/microsoftlatamholiday.com/127.0.0.1#5335 +ipset=/microsoftlatamholiday.com/gfwlist +server=/visa.ro/127.0.0.1#5335 +ipset=/visa.ro/gfwlist +server=/adultgamesportal.com/127.0.0.1#5335 +ipset=/adultgamesportal.com/gfwlist +server=/tubeshemales.com/127.0.0.1#5335 +ipset=/tubeshemales.com/gfwlist +server=/apple.hr/127.0.0.1#5335 +ipset=/apple.hr/gfwlist +server=/google.mu/127.0.0.1#5335 +ipset=/google.mu/gfwlist +server=/hdabla.net/127.0.0.1#5335 +ipset=/hdabla.net/gfwlist +server=/playhearthstone.com/127.0.0.1#5335 +ipset=/playhearthstone.com/gfwlist +server=/howtohackfacebook-account.com/127.0.0.1#5335 +ipset=/howtohackfacebook-account.com/gfwlist +server=/bmw.com.mt/127.0.0.1#5335 +ipset=/bmw.com.mt/gfwlist +server=/hamsterfucktube.com/127.0.0.1#5335 +ipset=/hamsterfucktube.com/gfwlist +server=/beatscustomblackfriday.com/127.0.0.1#5335 +ipset=/beatscustomblackfriday.com/gfwlist +server=/17mimei.com/127.0.0.1#5335 +ipset=/17mimei.com/gfwlist +server=/aoc.cat/127.0.0.1#5335 +ipset=/aoc.cat/gfwlist +server=/777tv.net/127.0.0.1#5335 +ipset=/777tv.net/gfwlist +server=/beatsbydre-studio.com/127.0.0.1#5335 +ipset=/beatsbydre-studio.com/gfwlist +server=/bitly.com/127.0.0.1#5335 +ipset=/bitly.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=/collectionofbestporn.com/127.0.0.1#5335 +ipset=/collectionofbestporn.com/gfwlist +server=/yahoo.vg/127.0.0.1#5335 +ipset=/yahoo.vg/gfwlist +server=/avstar09.me/127.0.0.1#5335 +ipset=/avstar09.me/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=/hentaiero.net/127.0.0.1#5335 +ipset=/hentaiero.net/gfwlist +server=/carebay.com/127.0.0.1#5335 +ipset=/carebay.com/gfwlist +server=/speedtest.com.hk/127.0.0.1#5335 +ipset=/speedtest.com.hk/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=/javjack.com/127.0.0.1#5335 +ipset=/javjack.com/gfwlist +server=/linkshit.com/127.0.0.1#5335 +ipset=/linkshit.com/gfwlist +server=/do.co/127.0.0.1#5335 +ipset=/do.co/gfwlist +server=/ethereum.org/127.0.0.1#5335 +ipset=/ethereum.org/gfwlist +server=/whatsappbrand.com/127.0.0.1#5335 +ipset=/whatsappbrand.com/gfwlist +server=/nativeincolour.com.au/127.0.0.1#5335 +ipset=/nativeincolour.com.au/gfwlist +server=/nbcuniversal.com/127.0.0.1#5335 +ipset=/nbcuniversal.com/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=/trustcor.com/127.0.0.1#5335 +ipset=/trustcor.com/gfwlist +server=/dinotube.com/127.0.0.1#5335 +ipset=/dinotube.com/gfwlist +server=/freefacebookads.net/127.0.0.1#5335 +ipset=/freefacebookads.net/gfwlist +server=/icloud.se/127.0.0.1#5335 +ipset=/icloud.se/gfwlist +server=/surface.com/127.0.0.1#5335 +ipset=/surface.com/gfwlist +server=/applepaycash.net/127.0.0.1#5335 +ipset=/applepaycash.net/gfwlist +server=/freebs.com/127.0.0.1#5335 +ipset=/freebs.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=/gaybf.com/127.0.0.1#5335 +ipset=/gaybf.com/gfwlist +server=/rabbitscams.com/127.0.0.1#5335 +ipset=/rabbitscams.com/gfwlist +server=/telegram-porn.com/127.0.0.1#5335 +ipset=/telegram-porn.com/gfwlist +server=/hentai69.life/127.0.0.1#5335 +ipset=/hentai69.life/gfwlist +server=/nextmag.com.tw/127.0.0.1#5335 +ipset=/nextmag.com.tw/gfwlist +server=/xxxnxx.me/127.0.0.1#5335 +ipset=/xxxnxx.me/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=/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=/drmgmggyi-mm.blogspot.com/127.0.0.1#5335 +ipset=/drmgmggyi-mm.blogspot.com/gfwlist +server=/mysimsracing.com/127.0.0.1#5335 +ipset=/mysimsracing.com/gfwlist +server=/gr-assets.com/127.0.0.1#5335 +ipset=/gr-assets.com/gfwlist +server=/ehtracker.org/127.0.0.1#5335 +ipset=/ehtracker.org/gfwlist +server=/hpdreamcolor.com/127.0.0.1#5335 +ipset=/hpdreamcolor.com/gfwlist +server=/googlecode.com/127.0.0.1#5335 +ipset=/googlecode.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=/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=/nan-net.com/127.0.0.1#5335 +ipset=/nan-net.com/gfwlist +server=/hentaiz.co/127.0.0.1#5335 +ipset=/hentaiz.co/gfwlist +server=/termux.dev/127.0.0.1#5335 +ipset=/termux.dev/gfwlist +server=/pingxiangpuer.com/127.0.0.1#5335 +ipset=/pingxiangpuer.com/gfwlist +server=/amazonpay.in/127.0.0.1#5335 +ipset=/amazonpay.in/gfwlist +server=/truebeachporn.com/127.0.0.1#5335 +ipset=/truebeachporn.com/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=/youjizz.sex/127.0.0.1#5335 +ipset=/youjizz.sex/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=/bbgwatch.com/127.0.0.1#5335 +ipset=/bbgwatch.com/gfwlist +server=/billpoint.info/127.0.0.1#5335 +ipset=/billpoint.info/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=/ohentai.org/127.0.0.1#5335 +ipset=/ohentai.org/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=/mastercard.es/127.0.0.1#5335 +ipset=/mastercard.es/gfwlist +server=/login-paypal.info/127.0.0.1#5335 +ipset=/login-paypal.info/gfwlist +server=/nudistic.com/127.0.0.1#5335 +ipset=/nudistic.com/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=/turbogvideos.com/127.0.0.1#5335 +ipset=/turbogvideos.com/gfwlist +server=/elgaronline.com/127.0.0.1#5335 +ipset=/elgaronline.com/gfwlist +server=/ikea.com.sg/127.0.0.1#5335 +ipset=/ikea.com.sg/gfwlist +server=/erovizor.ru/127.0.0.1#5335 +ipset=/erovizor.ru/gfwlist +server=/141hongkong.com/127.0.0.1#5335 +ipset=/141hongkong.com/gfwlist +server=/adobess.com/127.0.0.1#5335 +ipset=/adobess.com/gfwlist +server=/mcdelivery.co.kr/127.0.0.1#5335 +ipset=/mcdelivery.co.kr/gfwlist +server=/leakedmeat.com/127.0.0.1#5335 +ipset=/leakedmeat.com/gfwlist +server=/facvebook.com/127.0.0.1#5335 +ipset=/facvebook.com/gfwlist +server=/bmw-authority-vehicles.com/127.0.0.1#5335 +ipset=/bmw-authority-vehicles.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=/satan18av.com/127.0.0.1#5335 +ipset=/satan18av.com/gfwlist +server=/rssing.com/127.0.0.1#5335 +ipset=/rssing.com/gfwlist +server=/ikea.pl/127.0.0.1#5335 +ipset=/ikea.pl/gfwlist +server=/mini-tahiti.com/127.0.0.1#5335 +ipset=/mini-tahiti.com/gfwlist +server=/gputechconf.com/127.0.0.1#5335 +ipset=/gputechconf.com/gfwlist +server=/shopbmwusa.com/127.0.0.1#5335 +ipset=/shopbmwusa.com/gfwlist +server=/wawatv.net/127.0.0.1#5335 +ipset=/wawatv.net/gfwlist +server=/towerauction.com/127.0.0.1#5335 +ipset=/towerauction.com/gfwlist +server=/hdouban2.com/127.0.0.1#5335 +ipset=/hdouban2.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=/spektral.cc/127.0.0.1#5335 +ipset=/spektral.cc/gfwlist +server=/workplace.com/127.0.0.1#5335 +ipset=/workplace.com/gfwlist +server=/canon.com.by/127.0.0.1#5335 +ipset=/canon.com.by/gfwlist +server=/manhunt.net/127.0.0.1#5335 +ipset=/manhunt.net/gfwlist +server=/google.ps/127.0.0.1#5335 +ipset=/google.ps/gfwlist +server=/bootyliciousmag.com/127.0.0.1#5335 +ipset=/bootyliciousmag.com/gfwlist +server=/xxxtubeasian.net/127.0.0.1#5335 +ipset=/xxxtubeasian.net/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=/youtube.com.bo/127.0.0.1#5335 +ipset=/youtube.com.bo/gfwlist +server=/vpro.com/127.0.0.1#5335 +ipset=/vpro.com/gfwlist +server=/intel.ae/127.0.0.1#5335 +ipset=/intel.ae/gfwlist +server=/itsfuck.com/127.0.0.1#5335 +ipset=/itsfuck.com/gfwlist +server=/bumpshare.com/127.0.0.1#5335 +ipset=/bumpshare.com/gfwlist +server=/tukif.com/127.0.0.1#5335 +ipset=/tukif.com/gfwlist +server=/sony.com.ar/127.0.0.1#5335 +ipset=/sony.com.ar/gfwlist +server=/fi11tv1.com/127.0.0.1#5335 +ipset=/fi11tv1.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=/visa.co.za/127.0.0.1#5335 +ipset=/visa.co.za/gfwlist +server=/censorship.ai/127.0.0.1#5335 +ipset=/censorship.ai/gfwlist +server=/futureshop.ca/127.0.0.1#5335 +ipset=/futureshop.ca/gfwlist +server=/srebrenica360.com/127.0.0.1#5335 +ipset=/srebrenica360.com/gfwlist +server=/visaluxuryhotels.com/127.0.0.1#5335 +ipset=/visaluxuryhotels.com/gfwlist +server=/nudekenya.com/127.0.0.1#5335 +ipset=/nudekenya.com/gfwlist +server=/hpsoftware.com/127.0.0.1#5335 +ipset=/hpsoftware.com/gfwlist +server=/blogspot.com.au/127.0.0.1#5335 +ipset=/blogspot.com.au/gfwlist +server=/minisothailand.com/127.0.0.1#5335 +ipset=/minisothailand.com/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=/gbluebooks.blogspot.com/127.0.0.1#5335 +ipset=/gbluebooks.blogspot.com/gfwlist +server=/nudematurewomenpics.com/127.0.0.1#5335 +ipset=/nudematurewomenpics.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=/maddenchampionship.com/127.0.0.1#5335 +ipset=/maddenchampionship.com/gfwlist +server=/beatsblackfridaydeals.net/127.0.0.1#5335 +ipset=/beatsblackfridaydeals.net/gfwlist +server=/starbucksforlife.com/127.0.0.1#5335 +ipset=/starbucksforlife.com/gfwlist +server=/doclercdn.com/127.0.0.1#5335 +ipset=/doclercdn.com/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=/microsoftreactor.net/127.0.0.1#5335 +ipset=/microsoftreactor.net/gfwlist +server=/themoviedb.org/127.0.0.1#5335 +ipset=/themoviedb.org/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=/akamai-regression.net/127.0.0.1#5335 +ipset=/akamai-regression.net/gfwlist +server=/hardsextube.com/127.0.0.1#5335 +ipset=/hardsextube.com/gfwlist +server=/xnxx2.it/127.0.0.1#5335 +ipset=/xnxx2.it/gfwlist +server=/thomsonreuters.co.uk/127.0.0.1#5335 +ipset=/thomsonreuters.co.uk/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=/deepmind.com/127.0.0.1#5335 +ipset=/deepmind.com/gfwlist +server=/yandex.tj/127.0.0.1#5335 +ipset=/yandex.tj/gfwlist +server=/steezylist.com/127.0.0.1#5335 +ipset=/steezylist.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=/faceboobok.com/127.0.0.1#5335 +ipset=/faceboobok.com/gfwlist +server=/blogspot.co.ke/127.0.0.1#5335 +ipset=/blogspot.co.ke/gfwlist +server=/linemobile.com/127.0.0.1#5335 +ipset=/linemobile.com/gfwlist +server=/fulanax.com/127.0.0.1#5335 +ipset=/fulanax.com/gfwlist +server=/femjoy.com/127.0.0.1#5335 +ipset=/femjoy.com/gfwlist +server=/azure-mobile.net/127.0.0.1#5335 +ipset=/azure-mobile.net/gfwlist +server=/bestbuyus.com/127.0.0.1#5335 +ipset=/bestbuyus.com/gfwlist +server=/oppainorakuen.com/127.0.0.1#5335 +ipset=/oppainorakuen.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=/manototv.com/127.0.0.1#5335 +ipset=/manototv.com/gfwlist +server=/allfinegirls.com/127.0.0.1#5335 +ipset=/allfinegirls.com/gfwlist +server=/sing68.com/127.0.0.1#5335 +ipset=/sing68.com/gfwlist +server=/zavat.pw/127.0.0.1#5335 +ipset=/zavat.pw/gfwlist +server=/fanatical.com/127.0.0.1#5335 +ipset=/fanatical.com/gfwlist +server=/billpoint.tv/127.0.0.1#5335 +ipset=/billpoint.tv/gfwlist +server=/hotzxgirl.com/127.0.0.1#5335 +ipset=/hotzxgirl.com/gfwlist +server=/onlineteenhub.com/127.0.0.1#5335 +ipset=/onlineteenhub.com/gfwlist +server=/btt804.com/127.0.0.1#5335 +ipset=/btt804.com/gfwlist +server=/gumtree.sg/127.0.0.1#5335 +ipset=/gumtree.sg/gfwlist +server=/volvogroup.kr/127.0.0.1#5335 +ipset=/volvogroup.kr/gfwlist +server=/custombeatsny.com/127.0.0.1#5335 +ipset=/custombeatsny.com/gfwlist +server=/visaitalia.com/127.0.0.1#5335 +ipset=/visaitalia.com/gfwlist +server=/beatsbydre-chen.com/127.0.0.1#5335 +ipset=/beatsbydre-chen.com/gfwlist +server=/monstercasquebeatspascher.net/127.0.0.1#5335 +ipset=/monstercasquebeatspascher.net/gfwlist +server=/microsoftiotcentral.com/127.0.0.1#5335 +ipset=/microsoftiotcentral.com/gfwlist +server=/hotstunners.com/127.0.0.1#5335 +ipset=/hotstunners.com/gfwlist +server=/theman.in/127.0.0.1#5335 +ipset=/theman.in/gfwlist +server=/visa.com.hn/127.0.0.1#5335 +ipset=/visa.com.hn/gfwlist +server=/fireside.fm/127.0.0.1#5335 +ipset=/fireside.fm/gfwlist +server=/sandisk.com/127.0.0.1#5335 +ipset=/sandisk.com/gfwlist +server=/foxest.com/127.0.0.1#5335 +ipset=/foxest.com/gfwlist +server=/mature-porn-flix.com/127.0.0.1#5335 +ipset=/mature-porn-flix.com/gfwlist +server=/verilylifesciences.com/127.0.0.1#5335 +ipset=/verilylifesciences.com/gfwlist +server=/monstersbeatbydres.com/127.0.0.1#5335 +ipset=/monstersbeatbydres.com/gfwlist +server=/drdrebeatsdesale.com/127.0.0.1#5335 +ipset=/drdrebeatsdesale.com/gfwlist +server=/momsyoungboys.net/127.0.0.1#5335 +ipset=/momsyoungboys.net/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=/amateurmommymovies.com/127.0.0.1#5335 +ipset=/amateurmommymovies.com/gfwlist +server=/scholar.google.cz/127.0.0.1#5335 +ipset=/scholar.google.cz/gfwlist +server=/hcomicbook.com/127.0.0.1#5335 +ipset=/hcomicbook.com/gfwlist +server=/hentaivn.de/127.0.0.1#5335 +ipset=/hentaivn.de/gfwlist +server=/moeimg.net/127.0.0.1#5335 +ipset=/moeimg.net/gfwlist +server=/observable.net/127.0.0.1#5335 +ipset=/observable.net/gfwlist +server=/porn34.me/127.0.0.1#5335 +ipset=/porn34.me/gfwlist +server=/oldje.com/127.0.0.1#5335 +ipset=/oldje.com/gfwlist +server=/xiaoyaoge.xyz/127.0.0.1#5335 +ipset=/xiaoyaoge.xyz/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=/ntdtv.jp/127.0.0.1#5335 +ipset=/ntdtv.jp/gfwlist +server=/google.bs/127.0.0.1#5335 +ipset=/google.bs/gfwlist +server=/avgod.club/127.0.0.1#5335 +ipset=/avgod.club/gfwlist +server=/z5.com/127.0.0.1#5335 +ipset=/z5.com/gfwlist +server=/ikea.dk/127.0.0.1#5335 +ipset=/ikea.dk/gfwlist +server=/sony.co.nz/127.0.0.1#5335 +ipset=/sony.co.nz/gfwlist +server=/cnnpolitics.com/127.0.0.1#5335 +ipset=/cnnpolitics.com/gfwlist +server=/google.com.na/127.0.0.1#5335 +ipset=/google.com.na/gfwlist +server=/zoo-tube8.com/127.0.0.1#5335 +ipset=/zoo-tube8.com/gfwlist +server=/book4you.org/127.0.0.1#5335 +ipset=/book4you.org/gfwlist +server=/foxrad.io/127.0.0.1#5335 +ipset=/foxrad.io/gfwlist +server=/teslazta.net/127.0.0.1#5335 +ipset=/teslazta.net/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=/googleadapis.com/127.0.0.1#5335 +ipset=/googleadapis.com/gfwlist +server=/alt5-mtalk.google.com/127.0.0.1#5335 +ipset=/alt5-mtalk.google.com/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=/bekijkporno.nl/127.0.0.1#5335 +ipset=/bekijkporno.nl/gfwlist +server=/citas-para-mayoresde50.ec/127.0.0.1#5335 +ipset=/citas-para-mayoresde50.ec/gfwlist +server=/codivorexxx.com/127.0.0.1#5335 +ipset=/codivorexxx.com/gfwlist +server=/h0930.com/127.0.0.1#5335 +ipset=/h0930.com/gfwlist +server=/yandex.fi/127.0.0.1#5335 +ipset=/yandex.fi/gfwlist +server=/nerdnudes.com/127.0.0.1#5335 +ipset=/nerdnudes.com/gfwlist +server=/worldsfastestgamer.net/127.0.0.1#5335 +ipset=/worldsfastestgamer.net/gfwlist +server=/postimages.org/127.0.0.1#5335 +ipset=/postimages.org/gfwlist +server=/jable.tv/127.0.0.1#5335 +ipset=/jable.tv/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=/pornhub-deutsch.net/127.0.0.1#5335 +ipset=/pornhub-deutsch.net/gfwlist +server=/pokemonletsgopikachu.com/127.0.0.1#5335 +ipset=/pokemonletsgopikachu.com/gfwlist +server=/antarvasnax.com/127.0.0.1#5335 +ipset=/antarvasnax.com/gfwlist +server=/instagmania.com/127.0.0.1#5335 +ipset=/instagmania.com/gfwlist +server=/stlouisbmw.net/127.0.0.1#5335 +ipset=/stlouisbmw.net/gfwlist +server=/bokepvidz.com/127.0.0.1#5335 +ipset=/bokepvidz.com/gfwlist +server=/asproex.com/127.0.0.1#5335 +ipset=/asproex.com/gfwlist +server=/bandcamp.com/127.0.0.1#5335 +ipset=/bandcamp.com/gfwlist +server=/nudeteen.org/127.0.0.1#5335 +ipset=/nudeteen.org/gfwlist +server=/google.com.cy/127.0.0.1#5335 +ipset=/google.com.cy/gfwlist +server=/veet.com.pk/127.0.0.1#5335 +ipset=/veet.com.pk/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=/pashtovoa.com/127.0.0.1#5335 +ipset=/pashtovoa.com/gfwlist +server=/swisssigner.com/127.0.0.1#5335 +ipset=/swisssigner.com/gfwlist +server=/applepremiumreseller.com.au/127.0.0.1#5335 +ipset=/applepremiumreseller.com.au/gfwlist +server=/myfavoritearcade.com/127.0.0.1#5335 +ipset=/myfavoritearcade.com/gfwlist +server=/vaultify.info/127.0.0.1#5335 +ipset=/vaultify.info/gfwlist +server=/6asianporn.com/127.0.0.1#5335 +ipset=/6asianporn.com/gfwlist +server=/ieee-region6.org/127.0.0.1#5335 +ipset=/ieee-region6.org/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=/facebooik.org/127.0.0.1#5335 +ipset=/facebooik.org/gfwlist +server=/javtube.net/127.0.0.1#5335 +ipset=/javtube.net/gfwlist +server=/iphone.host/127.0.0.1#5335 +ipset=/iphone.host/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=/cbsi.live.ott.irdeto.com/127.0.0.1#5335 +ipset=/cbsi.live.ott.irdeto.com/gfwlist +server=/kkfcc03.com/127.0.0.1#5335 +ipset=/kkfcc03.com/gfwlist +server=/shakethesnake.com/127.0.0.1#5335 +ipset=/shakethesnake.com/gfwlist +server=/redwap.me/127.0.0.1#5335 +ipset=/redwap.me/gfwlist +server=/tiava1.com/127.0.0.1#5335 +ipset=/tiava1.com/gfwlist +server=/skokka.com/127.0.0.1#5335 +ipset=/skokka.com/gfwlist +server=/volvotruckcenter.fi/127.0.0.1#5335 +ipset=/volvotruckcenter.fi/gfwlist +server=/pearsoneducationbooks.com/127.0.0.1#5335 +ipset=/pearsoneducationbooks.com/gfwlist +server=/hpuniversity.info/127.0.0.1#5335 +ipset=/hpuniversity.info/gfwlist +server=/xboyvids.com/127.0.0.1#5335 +ipset=/xboyvids.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=/xxxaporn.com/127.0.0.1#5335 +ipset=/xxxaporn.com/gfwlist +server=/youtube.soy/127.0.0.1#5335 +ipset=/youtube.soy/gfwlist +server=/itsoc.org/127.0.0.1#5335 +ipset=/itsoc.org/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=/asianxxxjoy.com/127.0.0.1#5335 +ipset=/asianxxxjoy.com/gfwlist +server=/reneerossvideos.com/127.0.0.1#5335 +ipset=/reneerossvideos.com/gfwlist +server=/directtv-deals.tv/127.0.0.1#5335 +ipset=/directtv-deals.tv/gfwlist +server=/genshinimpact.com/127.0.0.1#5335 +ipset=/genshinimpact.com/gfwlist +server=/porn2012.com/127.0.0.1#5335 +ipset=/porn2012.com/gfwlist +server=/facewook.com/127.0.0.1#5335 +ipset=/facewook.com/gfwlist +server=/fullxxxmovies.net/127.0.0.1#5335 +ipset=/fullxxxmovies.net/gfwlist +server=/directvdeals.com/127.0.0.1#5335 +ipset=/directvdeals.com/gfwlist +server=/epochtimes.de/127.0.0.1#5335 +ipset=/epochtimes.de/gfwlist +server=/manhuabika.com/127.0.0.1#5335 +ipset=/manhuabika.com/gfwlist +server=/paypal-database.com/127.0.0.1#5335 +ipset=/paypal-database.com/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=/o365weve-ppe.com/127.0.0.1#5335 +ipset=/o365weve-ppe.com/gfwlist +server=/cosmosdb.net/127.0.0.1#5335 +ipset=/cosmosdb.net/gfwlist +server=/beatsbydre-us.com/127.0.0.1#5335 +ipset=/beatsbydre-us.com/gfwlist +server=/wii-u.com/127.0.0.1#5335 +ipset=/wii-u.com/gfwlist +server=/bmw-motorrad.com/127.0.0.1#5335 +ipset=/bmw-motorrad.com/gfwlist +server=/12diasderegalosdeitunes.gt/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.gt/gfwlist +server=/faphdporn.com/127.0.0.1#5335 +ipset=/faphdporn.com/gfwlist +server=/stackpath.com/127.0.0.1#5335 +ipset=/stackpath.com/gfwlist +server=/theaffairs.com/127.0.0.1#5335 +ipset=/theaffairs.com/gfwlist +server=/encuentroscasualesoecuador.com/127.0.0.1#5335 +ipset=/encuentroscasualesoecuador.com/gfwlist +server=/bmw.co.jp/127.0.0.1#5335 +ipset=/bmw.co.jp/gfwlist +server=/instagtram.com/127.0.0.1#5335 +ipset=/instagtram.com/gfwlist +server=/airwick.ro/127.0.0.1#5335 +ipset=/airwick.ro/gfwlist +server=/javtasty.com/127.0.0.1#5335 +ipset=/javtasty.com/gfwlist +server=/vimeocdn.com/127.0.0.1#5335 +ipset=/vimeocdn.com/gfwlist +server=/bluehatnights.com/127.0.0.1#5335 +ipset=/bluehatnights.com/gfwlist +server=/myvodafone.com.au/127.0.0.1#5335 +ipset=/myvodafone.com.au/gfwlist +server=/piwheels.org/127.0.0.1#5335 +ipset=/piwheels.org/gfwlist +server=/monsterbeatsbydrefactory.com/127.0.0.1#5335 +ipset=/monsterbeatsbydrefactory.com/gfwlist +server=/apibay.org/127.0.0.1#5335 +ipset=/apibay.org/gfwlist +server=/ehgt.org/127.0.0.1#5335 +ipset=/ehgt.org/gfwlist +server=/disneymagicmoments.it/127.0.0.1#5335 +ipset=/disneymagicmoments.it/gfwlist +server=/doujinnomori.com/127.0.0.1#5335 +ipset=/doujinnomori.com/gfwlist +server=/visa.com.ru/127.0.0.1#5335 +ipset=/visa.com.ru/gfwlist +server=/goldnikeclub.com/127.0.0.1#5335 +ipset=/goldnikeclub.com/gfwlist +server=/6-ar.com/127.0.0.1#5335 +ipset=/6-ar.com/gfwlist +server=/ebayvietnam.net/127.0.0.1#5335 +ipset=/ebayvietnam.net/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=/xhamster.xxx/127.0.0.1#5335 +ipset=/xhamster.xxx/gfwlist +server=/bestbuy.ca/127.0.0.1#5335 +ipset=/bestbuy.ca/gfwlist +server=/cherry-tale.com/127.0.0.1#5335 +ipset=/cherry-tale.com/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=/youtube.si/127.0.0.1#5335 +ipset=/youtube.si/gfwlist +server=/faproulette.online/127.0.0.1#5335 +ipset=/faproulette.online/gfwlist +server=/go-disneyworldgo.com/127.0.0.1#5335 +ipset=/go-disneyworldgo.com/gfwlist +server=/directvinternet.com/127.0.0.1#5335 +ipset=/directvinternet.com/gfwlist +server=/facebokok.com/127.0.0.1#5335 +ipset=/facebokok.com/gfwlist +server=/ikea.cz/127.0.0.1#5335 +ipset=/ikea.cz/gfwlist +server=/sundanceignite2016.com/127.0.0.1#5335 +ipset=/sundanceignite2016.com/gfwlist +server=/gemfury.com/127.0.0.1#5335 +ipset=/gemfury.com/gfwlist +server=/bmw-connecteddrive.sg/127.0.0.1#5335 +ipset=/bmw-connecteddrive.sg/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=/nexcat.com/127.0.0.1#5335 +ipset=/nexcat.com/gfwlist +server=/nowjav.com/127.0.0.1#5335 +ipset=/nowjav.com/gfwlist +server=/bridgestonerapiddelivery.com/127.0.0.1#5335 +ipset=/bridgestonerapiddelivery.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=/99thz.cc/127.0.0.1#5335 +ipset=/99thz.cc/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=/128100.xyz/127.0.0.1#5335 +ipset=/128100.xyz/gfwlist +server=/empornium.site/127.0.0.1#5335 +ipset=/empornium.site/gfwlist +server=/novinhabucetuda.com/127.0.0.1#5335 +ipset=/novinhabucetuda.com/gfwlist +server=/wwwdecide.com/127.0.0.1#5335 +ipset=/wwwdecide.com/gfwlist +server=/apornvideo.com/127.0.0.1#5335 +ipset=/apornvideo.com/gfwlist +server=/uun86.com/127.0.0.1#5335 +ipset=/uun86.com/gfwlist +server=/nflxsearch.net/127.0.0.1#5335 +ipset=/nflxsearch.net/gfwlist +server=/esp32.com/127.0.0.1#5335 +ipset=/esp32.com/gfwlist +server=/hoyoverse.com/127.0.0.1#5335 +ipset=/hoyoverse.com/gfwlist +server=/pornluxme.com/127.0.0.1#5335 +ipset=/pornluxme.com/gfwlist +server=/vimeoondemand.com/127.0.0.1#5335 +ipset=/vimeoondemand.com/gfwlist +server=/binancezh.pro/127.0.0.1#5335 +ipset=/binancezh.pro/gfwlist +server=/cherryasia.com/127.0.0.1#5335 +ipset=/cherryasia.com/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=/pornotime.net/127.0.0.1#5335 +ipset=/pornotime.net/gfwlist +server=/playcover.workers.dev/127.0.0.1#5335 +ipset=/playcover.workers.dev/gfwlist +server=/eromanga-cafe.com/127.0.0.1#5335 +ipset=/eromanga-cafe.com/gfwlist +server=/monsterbydrebeat.com/127.0.0.1#5335 +ipset=/monsterbydrebeat.com/gfwlist +server=/leaguehighschool.com/127.0.0.1#5335 +ipset=/leaguehighschool.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=/explorespanking.com/127.0.0.1#5335 +ipset=/explorespanking.com/gfwlist +server=/spore.com/127.0.0.1#5335 +ipset=/spore.com/gfwlist +server=/dot.net/127.0.0.1#5335 +ipset=/dot.net/gfwlist +server=/viacomcbs.com/127.0.0.1#5335 +ipset=/viacomcbs.com/gfwlist +server=/youtubego.co.in/127.0.0.1#5335 +ipset=/youtubego.co.in/gfwlist +server=/mini-connected.ch/127.0.0.1#5335 +ipset=/mini-connected.ch/gfwlist +server=/strepsils.ru/127.0.0.1#5335 +ipset=/strepsils.ru/gfwlist +server=/kk.stream/127.0.0.1#5335 +ipset=/kk.stream/gfwlist +server=/designeriphonescases.com/127.0.0.1#5335 +ipset=/designeriphonescases.com/gfwlist +server=/porn-star.com/127.0.0.1#5335 +ipset=/porn-star.com/gfwlist +server=/onlinexxxgames.com/127.0.0.1#5335 +ipset=/onlinexxxgames.com/gfwlist +server=/shotwithgeforce.com/127.0.0.1#5335 +ipset=/shotwithgeforce.com/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=/hpcodewarsbcn.com/127.0.0.1#5335 +ipset=/hpcodewarsbcn.com/gfwlist +server=/dmm-extension.com/127.0.0.1#5335 +ipset=/dmm-extension.com/gfwlist +server=/windowsupdate.com/127.0.0.1#5335 +ipset=/windowsupdate.com/gfwlist +server=/akamaiphillipines.net/127.0.0.1#5335 +ipset=/akamaiphillipines.net/gfwlist +server=/visa-atm.com/127.0.0.1#5335 +ipset=/visa-atm.com/gfwlist +server=/pornbozz.com/127.0.0.1#5335 +ipset=/pornbozz.com/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=/bdawnvr.xyz/127.0.0.1#5335 +ipset=/bdawnvr.xyz/gfwlist +server=/bloomberglaw.com/127.0.0.1#5335 +ipset=/bloomberglaw.com/gfwlist +server=/qualcomm.com/127.0.0.1#5335 +ipset=/qualcomm.com/gfwlist +server=/scoreuniverse.com/127.0.0.1#5335 +ipset=/scoreuniverse.com/gfwlist +server=/czechmassage.com/127.0.0.1#5335 +ipset=/czechmassage.com/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=/dndbeyond.com/127.0.0.1#5335 +ipset=/dndbeyond.com/gfwlist +server=/thawte.de/127.0.0.1#5335 +ipset=/thawte.de/gfwlist +server=/picpost.com/127.0.0.1#5335 +ipset=/picpost.com/gfwlist +server=/animalzoosex.me/127.0.0.1#5335 +ipset=/animalzoosex.me/gfwlist +server=/motionpictureser.com/127.0.0.1#5335 +ipset=/motionpictureser.com/gfwlist +server=/shopee.sg/127.0.0.1#5335 +ipset=/shopee.sg/gfwlist +server=/bloombergspace.com/127.0.0.1#5335 +ipset=/bloombergspace.com/gfwlist +server=/lghvacstory.com/127.0.0.1#5335 +ipset=/lghvacstory.com/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=/pleasurebabe.com/127.0.0.1#5335 +ipset=/pleasurebabe.com/gfwlist +server=/tube2012.com/127.0.0.1#5335 +ipset=/tube2012.com/gfwlist +server=/unlocklimitlesslearning.com/127.0.0.1#5335 +ipset=/unlocklimitlesslearning.com/gfwlist +server=/anm.co.uk/127.0.0.1#5335 +ipset=/anm.co.uk/gfwlist +server=/newsensations.com/127.0.0.1#5335 +ipset=/newsensations.com/gfwlist +server=/hulugo.com/127.0.0.1#5335 +ipset=/hulugo.com/gfwlist +server=/nubileset.com/127.0.0.1#5335 +ipset=/nubileset.com/gfwlist +server=/pornachi.com/127.0.0.1#5335 +ipset=/pornachi.com/gfwlist +server=/verhentai.tv/127.0.0.1#5335 +ipset=/verhentai.tv/gfwlist +server=/shoptraivip.com/127.0.0.1#5335 +ipset=/shoptraivip.com/gfwlist +server=/anibooru.com/127.0.0.1#5335 +ipset=/anibooru.com/gfwlist +server=/scholar.google.com.sv/127.0.0.1#5335 +ipset=/scholar.google.com.sv/gfwlist +server=/archlinux.org/127.0.0.1#5335 +ipset=/archlinux.org/gfwlist +server=/every1dns.net/127.0.0.1#5335 +ipset=/every1dns.net/gfwlist +server=/zoozhamster.com/127.0.0.1#5335 +ipset=/zoozhamster.com/gfwlist +server=/googel.com/127.0.0.1#5335 +ipset=/googel.com/gfwlist +server=/binance.me/127.0.0.1#5335 +ipset=/binance.me/gfwlist +server=/pre-bmwgroup.jobs/127.0.0.1#5335 +ipset=/pre-bmwgroup.jobs/gfwlist +server=/freeuseporn.com/127.0.0.1#5335 +ipset=/freeuseporn.com/gfwlist +server=/nbabot.net/127.0.0.1#5335 +ipset=/nbabot.net/gfwlist +server=/hentaifromhell.org/127.0.0.1#5335 +ipset=/hentaifromhell.org/gfwlist +server=/aboutporno.net/127.0.0.1#5335 +ipset=/aboutporno.net/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=/91qk41rf.com/127.0.0.1#5335 +ipset=/91qk41rf.com/gfwlist +server=/nintendo.at/127.0.0.1#5335 +ipset=/nintendo.at/gfwlist +server=/sldolls.com/127.0.0.1#5335 +ipset=/sldolls.com/gfwlist +server=/speeddreamride.com/127.0.0.1#5335 +ipset=/speeddreamride.com/gfwlist +server=/disney.my/127.0.0.1#5335 +ipset=/disney.my/gfwlist +server=/hdouga.com/127.0.0.1#5335 +ipset=/hdouga.com/gfwlist +server=/instagranm.com/127.0.0.1#5335 +ipset=/instagranm.com/gfwlist +server=/hellven.net/127.0.0.1#5335 +ipset=/hellven.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=/ghettotube.com/127.0.0.1#5335 +ipset=/ghettotube.com/gfwlist +server=/useplannr.com/127.0.0.1#5335 +ipset=/useplannr.com/gfwlist +server=/disney.se/127.0.0.1#5335 +ipset=/disney.se/gfwlist +server=/fontexplorerx.com/127.0.0.1#5335 +ipset=/fontexplorerx.com/gfwlist +server=/yahoo.si/127.0.0.1#5335 +ipset=/yahoo.si/gfwlist +server=/fescebook.com/127.0.0.1#5335 +ipset=/fescebook.com/gfwlist +server=/arabgirls.us/127.0.0.1#5335 +ipset=/arabgirls.us/gfwlist +server=/eroterest.net/127.0.0.1#5335 +ipset=/eroterest.net/gfwlist +server=/justnudepic.com/127.0.0.1#5335 +ipset=/justnudepic.com/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=/seksmet.nl/127.0.0.1#5335 +ipset=/seksmet.nl/gfwlist +server=/visa.pt/127.0.0.1#5335 +ipset=/visa.pt/gfwlist +server=/celebgramme.com/127.0.0.1#5335 +ipset=/celebgramme.com/gfwlist +server=/d2mrry2to5rg.com/127.0.0.1#5335 +ipset=/d2mrry2to5rg.com/gfwlist +server=/ebayoncampus.com/127.0.0.1#5335 +ipset=/ebayoncampus.com/gfwlist +server=/sankei-eiga.co.jp/127.0.0.1#5335 +ipset=/sankei-eiga.co.jp/gfwlist +server=/renminbao.com/127.0.0.1#5335 +ipset=/renminbao.com/gfwlist +server=/youtrannytube.com/127.0.0.1#5335 +ipset=/youtrannytube.com/gfwlist +server=/vmwgcomms.com/127.0.0.1#5335 +ipset=/vmwgcomms.com/gfwlist +server=/vidmpreview.com/127.0.0.1#5335 +ipset=/vidmpreview.com/gfwlist +server=/finehub.com/127.0.0.1#5335 +ipset=/finehub.com/gfwlist +server=/nyt.net/127.0.0.1#5335 +ipset=/nyt.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=/nutaku.net/127.0.0.1#5335 +ipset=/nutaku.net/gfwlist +server=/vfsco.se/127.0.0.1#5335 +ipset=/vfsco.se/gfwlist +server=/04647.club/127.0.0.1#5335 +ipset=/04647.club/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=/paypal-business.org/127.0.0.1#5335 +ipset=/paypal-business.org/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=/xnxx4porn.com/127.0.0.1#5335 +ipset=/xnxx4porn.com/gfwlist +server=/eurobabeindex.com/127.0.0.1#5335 +ipset=/eurobabeindex.com/gfwlist +server=/braintreeps.com/127.0.0.1#5335 +ipset=/braintreeps.com/gfwlist +server=/siterips.org/127.0.0.1#5335 +ipset=/siterips.org/gfwlist +server=/drebeats-singapore.net/127.0.0.1#5335 +ipset=/drebeats-singapore.net/gfwlist +server=/czechhunter.com/127.0.0.1#5335 +ipset=/czechhunter.com/gfwlist +server=/bili999.com/127.0.0.1#5335 +ipset=/bili999.com/gfwlist +server=/volvotrucks.sg/127.0.0.1#5335 +ipset=/volvotrucks.sg/gfwlist +server=/vct.news/127.0.0.1#5335 +ipset=/vct.news/gfwlist +server=/cashbycashapp.com/127.0.0.1#5335 +ipset=/cashbycashapp.com/gfwlist +server=/beats-headphones.us/127.0.0.1#5335 +ipset=/beats-headphones.us/gfwlist +server=/alphera.co.in/127.0.0.1#5335 +ipset=/alphera.co.in/gfwlist +server=/shegods.com/127.0.0.1#5335 +ipset=/shegods.com/gfwlist +server=/webex.co.uk/127.0.0.1#5335 +ipset=/webex.co.uk/gfwlist +server=/driverxxx.com/127.0.0.1#5335 +ipset=/driverxxx.com/gfwlist +server=/youtube.hu/127.0.0.1#5335 +ipset=/youtube.hu/gfwlist +server=/alphabet.asia/127.0.0.1#5335 +ipset=/alphabet.asia/gfwlist +server=/claravenger.com/127.0.0.1#5335 +ipset=/claravenger.com/gfwlist +server=/epicbrowser.com/127.0.0.1#5335 +ipset=/epicbrowser.com/gfwlist +server=/beatsbydrdres.com/127.0.0.1#5335 +ipset=/beatsbydrdres.com/gfwlist +server=/beatsbydreboxingdayca.com/127.0.0.1#5335 +ipset=/beatsbydreboxingdayca.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=/paypal-plaza.com/127.0.0.1#5335 +ipset=/paypal-plaza.com/gfwlist +server=/alterauserforums.com/127.0.0.1#5335 +ipset=/alterauserforums.com/gfwlist +server=/vfsco.com.br/127.0.0.1#5335 +ipset=/vfsco.com.br/gfwlist +server=/cfwives.com/127.0.0.1#5335 +ipset=/cfwives.com/gfwlist +server=/rbbusinessshop.com/127.0.0.1#5335 +ipset=/rbbusinessshop.com/gfwlist +server=/steamgames.com/127.0.0.1#5335 +ipset=/steamgames.com/gfwlist +server=/aziani.com/127.0.0.1#5335 +ipset=/aziani.com/gfwlist +server=/youpornxvideos.net/127.0.0.1#5335 +ipset=/youpornxvideos.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=/javgrown.com/127.0.0.1#5335 +ipset=/javgrown.com/gfwlist +server=/sonypicturesanimation.com/127.0.0.1#5335 +ipset=/sonypicturesanimation.com/gfwlist +server=/canon-emea.com/127.0.0.1#5335 +ipset=/canon-emea.com/gfwlist +server=/escortgirls.be/127.0.0.1#5335 +ipset=/escortgirls.be/gfwlist +server=/faceboot.com/127.0.0.1#5335 +ipset=/faceboot.com/gfwlist +server=/gopivotal.com/127.0.0.1#5335 +ipset=/gopivotal.com/gfwlist +server=/tvmedia.net.au/127.0.0.1#5335 +ipset=/tvmedia.net.au/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=/licensebuttons.net/127.0.0.1#5335 +ipset=/licensebuttons.net/gfwlist +server=/scolle.net/127.0.0.1#5335 +ipset=/scolle.net/gfwlist +server=/microsoft365.com/127.0.0.1#5335 +ipset=/microsoft365.com/gfwlist +server=/pypl.tv/127.0.0.1#5335 +ipset=/pypl.tv/gfwlist +server=/zeenews-fonts.s3.amazonaws.com/127.0.0.1#5335 +ipset=/zeenews-fonts.s3.amazonaws.com/gfwlist +server=/groupfun.com/127.0.0.1#5335 +ipset=/groupfun.com/gfwlist +server=/paypalbeacon.com/127.0.0.1#5335 +ipset=/paypalbeacon.com/gfwlist +server=/mray.club/127.0.0.1#5335 +ipset=/mray.club/gfwlist +server=/pornoweb.hu/127.0.0.1#5335 +ipset=/pornoweb.hu/gfwlist +server=/4pig.com/127.0.0.1#5335 +ipset=/4pig.com/gfwlist +server=/zoig.com/127.0.0.1#5335 +ipset=/zoig.com/gfwlist +server=/pokemonvgc.com/127.0.0.1#5335 +ipset=/pokemonvgc.com/gfwlist +server=/booking.com/127.0.0.1#5335 +ipset=/booking.com/gfwlist +server=/intel.sy/127.0.0.1#5335 +ipset=/intel.sy/gfwlist +server=/paypal-signin.us/127.0.0.1#5335 +ipset=/paypal-signin.us/gfwlist +server=/yuraku.8v8.be/127.0.0.1#5335 +ipset=/yuraku.8v8.be/gfwlist +server=/foxsportssupports.com/127.0.0.1#5335 +ipset=/foxsportssupports.com/gfwlist +server=/yahoo.com.om/127.0.0.1#5335 +ipset=/yahoo.com.om/gfwlist +server=/google.dk/127.0.0.1#5335 +ipset=/google.dk/gfwlist +server=/globaledu.org/127.0.0.1#5335 +ipset=/globaledu.org/gfwlist +server=/veet.com.sg/127.0.0.1#5335 +ipset=/veet.com.sg/gfwlist +server=/wealth.com.tw/127.0.0.1#5335 +ipset=/wealth.com.tw/gfwlist +server=/downloadpass.com/127.0.0.1#5335 +ipset=/downloadpass.com/gfwlist +server=/global-sci.org/127.0.0.1#5335 +ipset=/global-sci.org/gfwlist +server=/paragon.com/127.0.0.1#5335 +ipset=/paragon.com/gfwlist +server=/bangkokstreetwhores.com/127.0.0.1#5335 +ipset=/bangkokstreetwhores.com/gfwlist +server=/genshin-porn.com/127.0.0.1#5335 +ipset=/genshin-porn.com/gfwlist +server=/mastercard.com.ph/127.0.0.1#5335 +ipset=/mastercard.com.ph/gfwlist +server=/shopee.com/127.0.0.1#5335 +ipset=/shopee.com/gfwlist +server=/123sex.top/127.0.0.1#5335 +ipset=/123sex.top/gfwlist +server=/sonydesign.com/127.0.0.1#5335 +ipset=/sonydesign.com/gfwlist +server=/myconstructionworld.net/127.0.0.1#5335 +ipset=/myconstructionworld.net/gfwlist +server=/celebforum.co/127.0.0.1#5335 +ipset=/celebforum.co/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=/retrohomevideos.com/127.0.0.1#5335 +ipset=/retrohomevideos.com/gfwlist +server=/wearehairy.com/127.0.0.1#5335 +ipset=/wearehairy.com/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=/21hub.com/127.0.0.1#5335 +ipset=/21hub.com/gfwlist +server=/foxlexington.com/127.0.0.1#5335 +ipset=/foxlexington.com/gfwlist +server=/lindylist.org/127.0.0.1#5335 +ipset=/lindylist.org/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=/pussy3dporn.com/127.0.0.1#5335 +ipset=/pussy3dporn.com/gfwlist +server=/gcolle.net/127.0.0.1#5335 +ipset=/gcolle.net/gfwlist +server=/paypal.info/127.0.0.1#5335 +ipset=/paypal.info/gfwlist +server=/xuite.net/127.0.0.1#5335 +ipset=/xuite.net/gfwlist +server=/google.ne/127.0.0.1#5335 +ipset=/google.ne/gfwlist +server=/rethink.net/127.0.0.1#5335 +ipset=/rethink.net/gfwlist +server=/tinyurl.com/127.0.0.1#5335 +ipset=/tinyurl.com/gfwlist +server=/trikepatrol.com/127.0.0.1#5335 +ipset=/trikepatrol.com/gfwlist +server=/ettrade.com.hk/127.0.0.1#5335 +ipset=/ettrade.com.hk/gfwlist +server=/volvotrucks.tm/127.0.0.1#5335 +ipset=/volvotrucks.tm/gfwlist +server=/aacrjournals.org/127.0.0.1#5335 +ipset=/aacrjournals.org/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=/sagepub.com/127.0.0.1#5335 +ipset=/sagepub.com/gfwlist +server=/onlyhomemadeanal.com/127.0.0.1#5335 +ipset=/onlyhomemadeanal.com/gfwlist +server=/direectv.com/127.0.0.1#5335 +ipset=/direectv.com/gfwlist +server=/durex.co.nz/127.0.0.1#5335 +ipset=/durex.co.nz/gfwlist +server=/meitula.net/127.0.0.1#5335 +ipset=/meitula.net/gfwlist +server=/flyflv.com/127.0.0.1#5335 +ipset=/flyflv.com/gfwlist +server=/api-p.videomarket.jp/127.0.0.1#5335 +ipset=/api-p.videomarket.jp/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=/mini101.ca/127.0.0.1#5335 +ipset=/mini101.ca/gfwlist +server=/area51.to/127.0.0.1#5335 +ipset=/area51.to/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=/freejavporn.mobi/127.0.0.1#5335 +ipset=/freejavporn.mobi/gfwlist +server=/huanyuju.com/127.0.0.1#5335 +ipset=/huanyuju.com/gfwlist +server=/chobit.cc/127.0.0.1#5335 +ipset=/chobit.cc/gfwlist +server=/huluinstantmessenger.com/127.0.0.1#5335 +ipset=/huluinstantmessenger.com/gfwlist +server=/gameuxmasterguide.com/127.0.0.1#5335 +ipset=/gameuxmasterguide.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=/tjsbfj.com/127.0.0.1#5335 +ipset=/tjsbfj.com/gfwlist +server=/markzuckerberg.com/127.0.0.1#5335 +ipset=/markzuckerberg.com/gfwlist +server=/visa.tc/127.0.0.1#5335 +ipset=/visa.tc/gfwlist +server=/totalmateria.com/127.0.0.1#5335 +ipset=/totalmateria.com/gfwlist +server=/dnaspaces.io/127.0.0.1#5335 +ipset=/dnaspaces.io/gfwlist +server=/bmw.co.uk/127.0.0.1#5335 +ipset=/bmw.co.uk/gfwlist +server=/angle.com.tw/127.0.0.1#5335 +ipset=/angle.com.tw/gfwlist +server=/facebook-pmdcenter.net/127.0.0.1#5335 +ipset=/facebook-pmdcenter.net/gfwlist +server=/nvidia.com.ve/127.0.0.1#5335 +ipset=/nvidia.com.ve/gfwlist +server=/nicoseiga.jp/127.0.0.1#5335 +ipset=/nicoseiga.jp/gfwlist +server=/durex.com.hr/127.0.0.1#5335 +ipset=/durex.com.hr/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=/aliveitsm.com/127.0.0.1#5335 +ipset=/aliveitsm.com/gfwlist +server=/coova.com/127.0.0.1#5335 +ipset=/coova.com/gfwlist +server=/ipod.es/127.0.0.1#5335 +ipset=/ipod.es/gfwlist +server=/leagueoflegends.ca/127.0.0.1#5335 +ipset=/leagueoflegends.ca/gfwlist +server=/examroom.info/127.0.0.1#5335 +ipset=/examroom.info/gfwlist +server=/nintendo.net/127.0.0.1#5335 +ipset=/nintendo.net/gfwlist +server=/linseysworld.com/127.0.0.1#5335 +ipset=/linseysworld.com/gfwlist +server=/veet.cl/127.0.0.1#5335 +ipset=/veet.cl/gfwlist +server=/pornsos.com/127.0.0.1#5335 +ipset=/pornsos.com/gfwlist +server=/kingcomix.com/127.0.0.1#5335 +ipset=/kingcomix.com/gfwlist +server=/volvotrucks.co.ao/127.0.0.1#5335 +ipset=/volvotrucks.co.ao/gfwlist +server=/beegfree.com/127.0.0.1#5335 +ipset=/beegfree.com/gfwlist +server=/fleshbot.com/127.0.0.1#5335 +ipset=/fleshbot.com/gfwlist +server=/bsw.co.jp/127.0.0.1#5335 +ipset=/bsw.co.jp/gfwlist +server=/freepornpreview.net/127.0.0.1#5335 +ipset=/freepornpreview.net/gfwlist +server=/hothdsex.xxx/127.0.0.1#5335 +ipset=/hothdsex.xxx/gfwlist +server=/horseporn.tv/127.0.0.1#5335 +ipset=/horseporn.tv/gfwlist +server=/imagecurl.org/127.0.0.1#5335 +ipset=/imagecurl.org/gfwlist +server=/floppy-tits.com/127.0.0.1#5335 +ipset=/floppy-tits.com/gfwlist +server=/mastercard.cz/127.0.0.1#5335 +ipset=/mastercard.cz/gfwlist +server=/volvogroup.fr/127.0.0.1#5335 +ipset=/volvogroup.fr/gfwlist +server=/881903.com/127.0.0.1#5335 +ipset=/881903.com/gfwlist +server=/webcams.tv/127.0.0.1#5335 +ipset=/webcams.tv/gfwlist +server=/contactossexoecuador.com/127.0.0.1#5335 +ipset=/contactossexoecuador.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=/suruga-ya.jp/127.0.0.1#5335 +ipset=/suruga-ya.jp/gfwlist +server=/girlssexxxx.com/127.0.0.1#5335 +ipset=/girlssexxxx.com/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=/ero-anime.net/127.0.0.1#5335 +ipset=/ero-anime.net/gfwlist +server=/intel.af/127.0.0.1#5335 +ipset=/intel.af/gfwlist +server=/whoreasianporn.com/127.0.0.1#5335 +ipset=/whoreasianporn.com/gfwlist +server=/qualcomm.co.uk/127.0.0.1#5335 +ipset=/qualcomm.co.uk/gfwlist +server=/cheapbeatsbydrestudioedition.com/127.0.0.1#5335 +ipset=/cheapbeatsbydrestudioedition.com/gfwlist +server=/maddenseason.net/127.0.0.1#5335 +ipset=/maddenseason.net/gfwlist +server=/verisign.vn/127.0.0.1#5335 +ipset=/verisign.vn/gfwlist +server=/wildfreevideos.com/127.0.0.1#5335 +ipset=/wildfreevideos.com/gfwlist +server=/intel.com.my/127.0.0.1#5335 +ipset=/intel.com.my/gfwlist +server=/yahoo.com.mt/127.0.0.1#5335 +ipset=/yahoo.com.mt/gfwlist +server=/spiceworksstatic.com/127.0.0.1#5335 +ipset=/spiceworksstatic.com/gfwlist +server=/uhairy.com/127.0.0.1#5335 +ipset=/uhairy.com/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=/mini.kz/127.0.0.1#5335 +ipset=/mini.kz/gfwlist +server=/justindianporn.me/127.0.0.1#5335 +ipset=/justindianporn.me/gfwlist +server=/google.com.af/127.0.0.1#5335 +ipset=/google.com.af/gfwlist +server=/paypalonline.org/127.0.0.1#5335 +ipset=/paypalonline.org/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=/financialadvisoriq.com/127.0.0.1#5335 +ipset=/financialadvisoriq.com/gfwlist +server=/instantssl.com/127.0.0.1#5335 +ipset=/instantssl.com/gfwlist +server=/strepsils.com.hk/127.0.0.1#5335 +ipset=/strepsils.com.hk/gfwlist +server=/teen-girl.net/127.0.0.1#5335 +ipset=/teen-girl.net/gfwlist +server=/iwara.tv/127.0.0.1#5335 +ipset=/iwara.tv/gfwlist +server=/nudewomenpics.net/127.0.0.1#5335 +ipset=/nudewomenpics.net/gfwlist +server=/facebook.design/127.0.0.1#5335 +ipset=/facebook.design/gfwlist +server=/mini.com.uy/127.0.0.1#5335 +ipset=/mini.com.uy/gfwlist +server=/illusion.jp/127.0.0.1#5335 +ipset=/illusion.jp/gfwlist +server=/i-scmp.com/127.0.0.1#5335 +ipset=/i-scmp.com/gfwlist +server=/kindteenporn.com/127.0.0.1#5335 +ipset=/kindteenporn.com/gfwlist +server=/ikea.co.kr/127.0.0.1#5335 +ipset=/ikea.co.kr/gfwlist +server=/volvotrucks.gr/127.0.0.1#5335 +ipset=/volvotrucks.gr/gfwlist +server=/hentaiknight.com/127.0.0.1#5335 +ipset=/hentaiknight.com/gfwlist +server=/foxplus.com/127.0.0.1#5335 +ipset=/foxplus.com/gfwlist +server=/adult3dtoons.com/127.0.0.1#5335 +ipset=/adult3dtoons.com/gfwlist +server=/hkcsl.com/127.0.0.1#5335 +ipset=/hkcsl.com/gfwlist +server=/nurofen.it/127.0.0.1#5335 +ipset=/nurofen.it/gfwlist +server=/instagramn.com/127.0.0.1#5335 +ipset=/instagramn.com/gfwlist +server=/dafahao.com/127.0.0.1#5335 +ipset=/dafahao.com/gfwlist +server=/zerohedge.com/127.0.0.1#5335 +ipset=/zerohedge.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=/tubetria.mobi/127.0.0.1#5335 +ipset=/tubetria.mobi/gfwlist +server=/gaysitessearch.cc/127.0.0.1#5335 +ipset=/gaysitessearch.cc/gfwlist +server=/nikeselling.com/127.0.0.1#5335 +ipset=/nikeselling.com/gfwlist +server=/satnym.com/127.0.0.1#5335 +ipset=/satnym.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=/bigdickorgasm.com/127.0.0.1#5335 +ipset=/bigdickorgasm.com/gfwlist +server=/linefriends.com/127.0.0.1#5335 +ipset=/linefriends.com/gfwlist +server=/yourcolonoscopy.com/127.0.0.1#5335 +ipset=/yourcolonoscopy.com/gfwlist +server=/comodo.com/127.0.0.1#5335 +ipset=/comodo.com/gfwlist +server=/beatsmusic.wang/127.0.0.1#5335 +ipset=/beatsmusic.wang/gfwlist +server=/powerbook.eu/127.0.0.1#5335 +ipset=/powerbook.eu/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=/ebaymotorsblog.com/127.0.0.1#5335 +ipset=/ebaymotorsblog.com/gfwlist +server=/youtube.com.bd/127.0.0.1#5335 +ipset=/youtube.com.bd/gfwlist +server=/knoxemm.com/127.0.0.1#5335 +ipset=/knoxemm.com/gfwlist +server=/wdc.com/127.0.0.1#5335 +ipset=/wdc.com/gfwlist +server=/beats-seller.com/127.0.0.1#5335 +ipset=/beats-seller.com/gfwlist +server=/voyeurhit.com/127.0.0.1#5335 +ipset=/voyeurhit.com/gfwlist +server=/mrlivecam.com/127.0.0.1#5335 +ipset=/mrlivecam.com/gfwlist +server=/appcloud.com/127.0.0.1#5335 +ipset=/appcloud.com/gfwlist +server=/mini.hu/127.0.0.1#5335 +ipset=/mini.hu/gfwlist +server=/discord.gifts/127.0.0.1#5335 +ipset=/discord.gifts/gfwlist +server=/els-cdn.com/127.0.0.1#5335 +ipset=/els-cdn.com/gfwlist +server=/visceralgames.com/127.0.0.1#5335 +ipset=/visceralgames.com/gfwlist +server=/volvotrucks.com.tw/127.0.0.1#5335 +ipset=/volvotrucks.com.tw/gfwlist +server=/chinapress.com.my/127.0.0.1#5335 +ipset=/chinapress.com.my/gfwlist +server=/dettol.cz/127.0.0.1#5335 +ipset=/dettol.cz/gfwlist +server=/paypal-activate.info/127.0.0.1#5335 +ipset=/paypal-activate.info/gfwlist +server=/bmw.se/127.0.0.1#5335 +ipset=/bmw.se/gfwlist +server=/nike-us.com/127.0.0.1#5335 +ipset=/nike-us.com/gfwlist +server=/appstore.my/127.0.0.1#5335 +ipset=/appstore.my/gfwlist +server=/ebay.it/127.0.0.1#5335 +ipset=/ebay.it/gfwlist +server=/iza.ne.jp/127.0.0.1#5335 +ipset=/iza.ne.jp/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=/voanouvel.com/127.0.0.1#5335 +ipset=/voanouvel.com/gfwlist +server=/f3b7q2p3.ssl.hwcdn.net/127.0.0.1#5335 +ipset=/f3b7q2p3.ssl.hwcdn.net/gfwlist +server=/goragay.com/127.0.0.1#5335 +ipset=/goragay.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=/shopping-days.net/127.0.0.1#5335 +ipset=/shopping-days.net/gfwlist +server=/naaktevrouwenporno.com/127.0.0.1#5335 +ipset=/naaktevrouwenporno.com/gfwlist +server=/mypearsonshop.mx/127.0.0.1#5335 +ipset=/mypearsonshop.mx/gfwlist +server=/tailwindtraders.com/127.0.0.1#5335 +ipset=/tailwindtraders.com/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=/videolan.org/127.0.0.1#5335 +ipset=/videolan.org/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=/nurofengel.com/127.0.0.1#5335 +ipset=/nurofengel.com/gfwlist +server=/bmw-motorrad.hu/127.0.0.1#5335 +ipset=/bmw-motorrad.hu/gfwlist +server=/av234567.com/127.0.0.1#5335 +ipset=/av234567.com/gfwlist +server=/89.com/127.0.0.1#5335 +ipset=/89.com/gfwlist +server=/girlstryanal.com/127.0.0.1#5335 +ipset=/girlstryanal.com/gfwlist +server=/beats-dre-us.com/127.0.0.1#5335 +ipset=/beats-dre-us.com/gfwlist +server=/darwinsource.com/127.0.0.1#5335 +ipset=/darwinsource.com/gfwlist +server=/travelex.com.my/127.0.0.1#5335 +ipset=/travelex.com.my/gfwlist +server=/sexbookecuador.com/127.0.0.1#5335 +ipset=/sexbookecuador.com/gfwlist +server=/topvids.net/127.0.0.1#5335 +ipset=/topvids.net/gfwlist +server=/vmwarecertificationvideos.com/127.0.0.1#5335 +ipset=/vmwarecertificationvideos.com/gfwlist +server=/miniusatires.com/127.0.0.1#5335 +ipset=/miniusatires.com/gfwlist +server=/pleasefuck.org/127.0.0.1#5335 +ipset=/pleasefuck.org/gfwlist +server=/paypalshopping.com/127.0.0.1#5335 +ipset=/paypalshopping.com/gfwlist +server=/canon.me/127.0.0.1#5335 +ipset=/canon.me/gfwlist +server=/battle.net/127.0.0.1#5335 +ipset=/battle.net/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=/intel.mx/127.0.0.1#5335 +ipset=/intel.mx/gfwlist +server=/hdjavonline.com/127.0.0.1#5335 +ipset=/hdjavonline.com/gfwlist +server=/yahoo.com.bo/127.0.0.1#5335 +ipset=/yahoo.com.bo/gfwlist +server=/ogp.me/127.0.0.1#5335 +ipset=/ogp.me/gfwlist +server=/dumpxxx.net/127.0.0.1#5335 +ipset=/dumpxxx.net/gfwlist +server=/fjlkajhgfa.top/127.0.0.1#5335 +ipset=/fjlkajhgfa.top/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=/18av.mm-cg.com/127.0.0.1#5335 +ipset=/18av.mm-cg.com/gfwlist +server=/pearson.pl/127.0.0.1#5335 +ipset=/pearson.pl/gfwlist +server=/yahoo.dj/127.0.0.1#5335 +ipset=/yahoo.dj/gfwlist +server=/teeztube.com/127.0.0.1#5335 +ipset=/teeztube.com/gfwlist +server=/xxxsexanal.com/127.0.0.1#5335 +ipset=/xxxsexanal.com/gfwlist +server=/launchpadlibrarian.org/127.0.0.1#5335 +ipset=/launchpadlibrarian.org/gfwlist +server=/directvcookevilletn.com/127.0.0.1#5335 +ipset=/directvcookevilletn.com/gfwlist +server=/e-bay.net/127.0.0.1#5335 +ipset=/e-bay.net/gfwlist +server=/adultgamesapk.com/127.0.0.1#5335 +ipset=/adultgamesapk.com/gfwlist +server=/ikea.com.cy/127.0.0.1#5335 +ipset=/ikea.com.cy/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=/feacboo.com/127.0.0.1#5335 +ipset=/feacboo.com/gfwlist +server=/sesenovel.com/127.0.0.1#5335 +ipset=/sesenovel.com/gfwlist +server=/tagapie.com.tw/127.0.0.1#5335 +ipset=/tagapie.com.tw/gfwlist +server=/clipseksi.com/127.0.0.1#5335 +ipset=/clipseksi.com/gfwlist +server=/collaboraoffice.com/127.0.0.1#5335 +ipset=/collaboraoffice.com/gfwlist +server=/thawte.com/127.0.0.1#5335 +ipset=/thawte.com/gfwlist +server=/dealsbeatsblackfriday.com/127.0.0.1#5335 +ipset=/dealsbeatsblackfriday.com/gfwlist +server=/youtube.pr/127.0.0.1#5335 +ipset=/youtube.pr/gfwlist +server=/sehuatang.net/127.0.0.1#5335 +ipset=/sehuatang.net/gfwlist +server=/hentaikey.com/127.0.0.1#5335 +ipset=/hentaikey.com/gfwlist +server=/zaobao.com.sg/127.0.0.1#5335 +ipset=/zaobao.com.sg/gfwlist +server=/bmw.is/127.0.0.1#5335 +ipset=/bmw.is/gfwlist +server=/elephanttube.com/127.0.0.1#5335 +ipset=/elephanttube.com/gfwlist +server=/bidbay.com/127.0.0.1#5335 +ipset=/bidbay.com/gfwlist +server=/yamoon.club/127.0.0.1#5335 +ipset=/yamoon.club/gfwlist +server=/voaafaanoromoo.com/127.0.0.1#5335 +ipset=/voaafaanoromoo.com/gfwlist +server=/mings-fashion.com/127.0.0.1#5335 +ipset=/mings-fashion.com/gfwlist +server=/latamvmwareforum.com/127.0.0.1#5335 +ipset=/latamvmwareforum.com/gfwlist +server=/marvelsuperheroseptember.com/127.0.0.1#5335 +ipset=/marvelsuperheroseptember.com/gfwlist +server=/nintendonetwork.net/127.0.0.1#5335 +ipset=/nintendonetwork.net/gfwlist +server=/bmwmotorrad.com.au/127.0.0.1#5335 +ipset=/bmwmotorrad.com.au/gfwlist +server=/javsex.asia/127.0.0.1#5335 +ipset=/javsex.asia/gfwlist +server=/sexxxxfilms.com/127.0.0.1#5335 +ipset=/sexxxxfilms.com/gfwlist +server=/facdbook.com/127.0.0.1#5335 +ipset=/facdbook.com/gfwlist +server=/youtube.ua/127.0.0.1#5335 +ipset=/youtube.ua/gfwlist +server=/hdporn1080.net/127.0.0.1#5335 +ipset=/hdporn1080.net/gfwlist +server=/heydouga.com/127.0.0.1#5335 +ipset=/heydouga.com/gfwlist +server=/ecchi.xxx/127.0.0.1#5335 +ipset=/ecchi.xxx/gfwlist +server=/khanacademy.org/127.0.0.1#5335 +ipset=/khanacademy.org/gfwlist +server=/bigdick.com/127.0.0.1#5335 +ipset=/bigdick.com/gfwlist +server=/facebook-ebook.com/127.0.0.1#5335 +ipset=/facebook-ebook.com/gfwlist +server=/cloudflarestream.com/127.0.0.1#5335 +ipset=/cloudflarestream.com/gfwlist +server=/ethereum.foundation/127.0.0.1#5335 +ipset=/ethereum.foundation/gfwlist +server=/eromanga-hentai.com/127.0.0.1#5335 +ipset=/eromanga-hentai.com/gfwlist +server=/ebay-inc.org/127.0.0.1#5335 +ipset=/ebay-inc.org/gfwlist +server=/telekom.de/127.0.0.1#5335 +ipset=/telekom.de/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=/taleofthenight.com/127.0.0.1#5335 +ipset=/taleofthenight.com/gfwlist +server=/playsexgames.xxx/127.0.0.1#5335 +ipset=/playsexgames.xxx/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=/cqcorea.com/127.0.0.1#5335 +ipset=/cqcorea.com/gfwlist +server=/bustykellykay.com/127.0.0.1#5335 +ipset=/bustykellykay.com/gfwlist +server=/whorevintagesex.com/127.0.0.1#5335 +ipset=/whorevintagesex.com/gfwlist +server=/pivotalinitiative.com/127.0.0.1#5335 +ipset=/pivotalinitiative.com/gfwlist +server=/cheapbeats.us/127.0.0.1#5335 +ipset=/cheapbeats.us/gfwlist +server=/novostrong.com/127.0.0.1#5335 +ipset=/novostrong.com/gfwlist +server=/yahoo.at/127.0.0.1#5335 +ipset=/yahoo.at/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=/91gay.me/127.0.0.1#5335 +ipset=/91gay.me/gfwlist +server=/superuser.com/127.0.0.1#5335 +ipset=/superuser.com/gfwlist +server=/vfsco.sk/127.0.0.1#5335 +ipset=/vfsco.sk/gfwlist +server=/yourporndump.com/127.0.0.1#5335 +ipset=/yourporndump.com/gfwlist +server=/mini.com.mk/127.0.0.1#5335 +ipset=/mini.com.mk/gfwlist +server=/genitourinaryexam.com/127.0.0.1#5335 +ipset=/genitourinaryexam.com/gfwlist +server=/qatarescortsvip.com/127.0.0.1#5335 +ipset=/qatarescortsvip.com/gfwlist +server=/shopee.id/127.0.0.1#5335 +ipset=/shopee.id/gfwlist +server=/pearson-studium.ch/127.0.0.1#5335 +ipset=/pearson-studium.ch/gfwlist +server=/8kcosplay.com/127.0.0.1#5335 +ipset=/8kcosplay.com/gfwlist +server=/bmw-abudhabi.com/127.0.0.1#5335 +ipset=/bmw-abudhabi.com/gfwlist +server=/momoshop.com.tw/127.0.0.1#5335 +ipset=/momoshop.com.tw/gfwlist +server=/directvconnect.com/127.0.0.1#5335 +ipset=/directvconnect.com/gfwlist +server=/serverlesslibrary.net/127.0.0.1#5335 +ipset=/serverlesslibrary.net/gfwlist +server=/afappyending.com/127.0.0.1#5335 +ipset=/afappyending.com/gfwlist +server=/msunlimitedcloudsummit.com/127.0.0.1#5335 +ipset=/msunlimitedcloudsummit.com/gfwlist +server=/sagernet.org/127.0.0.1#5335 +ipset=/sagernet.org/gfwlist +server=/dykycl.com/127.0.0.1#5335 +ipset=/dykycl.com/gfwlist +server=/babosas.com/127.0.0.1#5335 +ipset=/babosas.com/gfwlist +server=/bridgestone.com.sg/127.0.0.1#5335 +ipset=/bridgestone.com.sg/gfwlist +server=/xvideo.com/127.0.0.1#5335 +ipset=/xvideo.com/gfwlist +server=/ladyboygold.com/127.0.0.1#5335 +ipset=/ladyboygold.com/gfwlist +server=/gockhuatviet.com/127.0.0.1#5335 +ipset=/gockhuatviet.com/gfwlist +server=/sm.ms/127.0.0.1#5335 +ipset=/sm.ms/gfwlist +server=/bmwsummerschool.com/127.0.0.1#5335 +ipset=/bmwsummerschool.com/gfwlist +server=/simgbb.com/127.0.0.1#5335 +ipset=/simgbb.com/gfwlist +server=/mushymush.tv/127.0.0.1#5335 +ipset=/mushymush.tv/gfwlist +server=/fuzokudx.com/127.0.0.1#5335 +ipset=/fuzokudx.com/gfwlist +server=/buckbuild.com/127.0.0.1#5335 +ipset=/buckbuild.com/gfwlist +server=/gelbooru.me/127.0.0.1#5335 +ipset=/gelbooru.me/gfwlist +server=/windowsmarketplace.com/127.0.0.1#5335 +ipset=/windowsmarketplace.com/gfwlist +server=/dojin-dl.com/127.0.0.1#5335 +ipset=/dojin-dl.com/gfwlist +server=/agendaweek.com/127.0.0.1#5335 +ipset=/agendaweek.com/gfwlist +server=/mastercard.at/127.0.0.1#5335 +ipset=/mastercard.at/gfwlist +server=/vodafone.com.tr/127.0.0.1#5335 +ipset=/vodafone.com.tr/gfwlist +server=/nikeinstock.com/127.0.0.1#5335 +ipset=/nikeinstock.com/gfwlist +server=/met-nude.com/127.0.0.1#5335 +ipset=/met-nude.com/gfwlist +server=/carstagram.com/127.0.0.1#5335 +ipset=/carstagram.com/gfwlist +server=/lojaiphone.com.br/127.0.0.1#5335 +ipset=/lojaiphone.com.br/gfwlist +server=/bangbros.com/127.0.0.1#5335 +ipset=/bangbros.com/gfwlist +server=/binancezh.kim/127.0.0.1#5335 +ipset=/binancezh.kim/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=/xxxmovies.pro/127.0.0.1#5335 +ipset=/xxxmovies.pro/gfwlist +server=/kindle.jp/127.0.0.1#5335 +ipset=/kindle.jp/gfwlist +server=/bmwhk.com/127.0.0.1#5335 +ipset=/bmwhk.com/gfwlist +server=/binancezh.biz/127.0.0.1#5335 +ipset=/binancezh.biz/gfwlist +server=/wariowarediy.com/127.0.0.1#5335 +ipset=/wariowarediy.com/gfwlist +server=/xzone.to/127.0.0.1#5335 +ipset=/xzone.to/gfwlist +server=/sony.pt/127.0.0.1#5335 +ipset=/sony.pt/gfwlist +server=/crates.io/127.0.0.1#5335 +ipset=/crates.io/gfwlist +server=/xxxtubenote.com/127.0.0.1#5335 +ipset=/xxxtubenote.com/gfwlist +server=/perfectshemales.com/127.0.0.1#5335 +ipset=/perfectshemales.com/gfwlist +server=/homephoneplus.com/127.0.0.1#5335 +ipset=/homephoneplus.com/gfwlist +server=/wordpress.org/127.0.0.1#5335 +ipset=/wordpress.org/gfwlist +server=/paypass.net/127.0.0.1#5335 +ipset=/paypass.net/gfwlist +server=/eaplay.com/127.0.0.1#5335 +ipset=/eaplay.com/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=/xx-map.com/127.0.0.1#5335 +ipset=/xx-map.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=/milfzr.com/127.0.0.1#5335 +ipset=/milfzr.com/gfwlist +server=/getzola.org/127.0.0.1#5335 +ipset=/getzola.org/gfwlist +server=/elsevier-ae.com/127.0.0.1#5335 +ipset=/elsevier-ae.com/gfwlist +server=/sublimetext.com/127.0.0.1#5335 +ipset=/sublimetext.com/gfwlist +server=/paypal-activate.com/127.0.0.1#5335 +ipset=/paypal-activate.com/gfwlist +server=/xxx-blog.to/127.0.0.1#5335 +ipset=/xxx-blog.to/gfwlist +server=/ero-comic-hunter.net/127.0.0.1#5335 +ipset=/ero-comic-hunter.net/gfwlist +server=/beatsbydreofficialdanmark.com/127.0.0.1#5335 +ipset=/beatsbydreofficialdanmark.com/gfwlist +server=/shopmonsterbeats.com/127.0.0.1#5335 +ipset=/shopmonsterbeats.com/gfwlist +server=/hentai0.com/127.0.0.1#5335 +ipset=/hentai0.com/gfwlist +server=/enemainformation.com/127.0.0.1#5335 +ipset=/enemainformation.com/gfwlist +server=/pearson-anaya.com/127.0.0.1#5335 +ipset=/pearson-anaya.com/gfwlist +server=/ilife.wang/127.0.0.1#5335 +ipset=/ilife.wang/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=/dropbox.com/127.0.0.1#5335 +ipset=/dropbox.com/gfwlist +server=/comeav.com/127.0.0.1#5335 +ipset=/comeav.com/gfwlist +server=/flic.kr/127.0.0.1#5335 +ipset=/flic.kr/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=/ssl-images-amazon.com/127.0.0.1#5335 +ipset=/ssl-images-amazon.com/gfwlist +server=/apple-pay.rs/127.0.0.1#5335 +ipset=/apple-pay.rs/gfwlist +server=/malayporn.space/127.0.0.1#5335 +ipset=/malayporn.space/gfwlist +server=/hentai-top100.supertop-100.com/127.0.0.1#5335 +ipset=/hentai-top100.supertop-100.com/gfwlist +server=/verizonenterprise.com/127.0.0.1#5335 +ipset=/verizonenterprise.com/gfwlist +server=/xattractive.com/127.0.0.1#5335 +ipset=/xattractive.com/gfwlist +server=/xo.com/127.0.0.1#5335 +ipset=/xo.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=/jayspov.net/127.0.0.1#5335 +ipset=/jayspov.net/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=/youtube.com.tr/127.0.0.1#5335 +ipset=/youtube.com.tr/gfwlist +server=/beatsshopstore.com/127.0.0.1#5335 +ipset=/beatsshopstore.com/gfwlist +server=/topxxxpornvids.com/127.0.0.1#5335 +ipset=/topxxxpornvids.com/gfwlist +server=/serviporno.com/127.0.0.1#5335 +ipset=/serviporno.com/gfwlist +server=/pornloser.com/127.0.0.1#5335 +ipset=/pornloser.com/gfwlist +server=/dulceecuador.com/127.0.0.1#5335 +ipset=/dulceecuador.com/gfwlist +server=/go.com/127.0.0.1#5335 +ipset=/go.com/gfwlist +server=/hbfile.net/127.0.0.1#5335 +ipset=/hbfile.net/gfwlist +server=/venmo.com/127.0.0.1#5335 +ipset=/venmo.com/gfwlist +server=/marketodesigner.com/127.0.0.1#5335 +ipset=/marketodesigner.com/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=/wp.com/127.0.0.1#5335 +ipset=/wp.com/gfwlist +server=/bbc-anal.com/127.0.0.1#5335 +ipset=/bbc-anal.com/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=/mastercard.fr/127.0.0.1#5335 +ipset=/mastercard.fr/gfwlist +server=/iphone.wang/127.0.0.1#5335 +ipset=/iphone.wang/gfwlist +server=/amateure-xtreme.com/127.0.0.1#5335 +ipset=/amateure-xtreme.com/gfwlist +server=/milfhunter.com/127.0.0.1#5335 +ipset=/milfhunter.com/gfwlist +server=/nypostreprints.com/127.0.0.1#5335 +ipset=/nypostreprints.com/gfwlist +server=/wixstatic.com/127.0.0.1#5335 +ipset=/wixstatic.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=/coreduo.com/127.0.0.1#5335 +ipset=/coreduo.com/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=/hqxxxmovies.com/127.0.0.1#5335 +ipset=/hqxxxmovies.com/gfwlist +server=/spicystory.net/127.0.0.1#5335 +ipset=/spicystory.net/gfwlist +server=/googledanmark.com/127.0.0.1#5335 +ipset=/googledanmark.com/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=/adobetechcommdemo.com/127.0.0.1#5335 +ipset=/adobetechcommdemo.com/gfwlist +server=/hulustream.com/127.0.0.1#5335 +ipset=/hulustream.com/gfwlist +server=/default.exp-tas.com/127.0.0.1#5335 +ipset=/default.exp-tas.com/gfwlist +server=/deluxe.com.hk/127.0.0.1#5335 +ipset=/deluxe.com.hk/gfwlist +server=/javcc.com/127.0.0.1#5335 +ipset=/javcc.com/gfwlist +server=/volvobuses.hk/127.0.0.1#5335 +ipset=/volvobuses.hk/gfwlist +server=/cochranelibrary.com/127.0.0.1#5335 +ipset=/cochranelibrary.com/gfwlist +server=/kenya4.com/127.0.0.1#5335 +ipset=/kenya4.com/gfwlist +server=/itunesparty.com/127.0.0.1#5335 +ipset=/itunesparty.com/gfwlist +server=/underhentai.net/127.0.0.1#5335 +ipset=/underhentai.net/gfwlist +server=/bitchesgirls.com/127.0.0.1#5335 +ipset=/bitchesgirls.com/gfwlist +server=/beatspromotions.com/127.0.0.1#5335 +ipset=/beatspromotions.com/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=/54647.online/127.0.0.1#5335 +ipset=/54647.online/gfwlist +server=/momspornvideos.com/127.0.0.1#5335 +ipset=/momspornvideos.com/gfwlist +server=/avstar09.com/127.0.0.1#5335 +ipset=/avstar09.com/gfwlist +server=/nintendo.dk/127.0.0.1#5335 +ipset=/nintendo.dk/gfwlist +server=/newestbeatsbydre.com/127.0.0.1#5335 +ipset=/newestbeatsbydre.com/gfwlist +server=/primemomsex.com/127.0.0.1#5335 +ipset=/primemomsex.com/gfwlist +server=/tryboobs.com/127.0.0.1#5335 +ipset=/tryboobs.com/gfwlist +server=/hulurussia.com/127.0.0.1#5335 +ipset=/hulurussia.com/gfwlist +server=/bangkokbangers.com/127.0.0.1#5335 +ipset=/bangkokbangers.com/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=/cloudflareok.com/127.0.0.1#5335 +ipset=/cloudflareok.com/gfwlist +server=/sandisk.in/127.0.0.1#5335 +ipset=/sandisk.in/gfwlist +server=/pki-posta.ch/127.0.0.1#5335 +ipset=/pki-posta.ch/gfwlist +server=/esri.com/127.0.0.1#5335 +ipset=/esri.com/gfwlist +server=/foxnewsaroundtheworld.com/127.0.0.1#5335 +ipset=/foxnewsaroundtheworld.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=/100bucksbabes.com/127.0.0.1#5335 +ipset=/100bucksbabes.com/gfwlist +server=/rexxx.org/127.0.0.1#5335 +ipset=/rexxx.org/gfwlist +server=/gravitytank.com/127.0.0.1#5335 +ipset=/gravitytank.com/gfwlist +server=/javdove.com/127.0.0.1#5335 +ipset=/javdove.com/gfwlist +server=/deutsch-sexfilme.com/127.0.0.1#5335 +ipset=/deutsch-sexfilme.com/gfwlist +server=/rt.com/127.0.0.1#5335 +ipset=/rt.com/gfwlist +server=/razersupport.com/127.0.0.1#5335 +ipset=/razersupport.com/gfwlist +server=/youngpornhd.com/127.0.0.1#5335 +ipset=/youngpornhd.com/gfwlist +server=/instagram-engineering.com/127.0.0.1#5335 +ipset=/instagram-engineering.com/gfwlist +server=/amp.akamaized.net/127.0.0.1#5335 +ipset=/amp.akamaized.net/gfwlist +server=/funnyordie.com/127.0.0.1#5335 +ipset=/funnyordie.com/gfwlist +server=/ft.com/127.0.0.1#5335 +ipset=/ft.com/gfwlist +server=/akamai-thailand.net/127.0.0.1#5335 +ipset=/akamai-thailand.net/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=/ieee-pes.org/127.0.0.1#5335 +ipset=/ieee-pes.org/gfwlist +server=/tsumino.com/127.0.0.1#5335 +ipset=/tsumino.com/gfwlist +server=/badteenspunished.com/127.0.0.1#5335 +ipset=/badteenspunished.com/gfwlist +server=/sony.com.au/127.0.0.1#5335 +ipset=/sony.com.au/gfwlist +server=/siteripz.com/127.0.0.1#5335 +ipset=/siteripz.com/gfwlist +server=/sexuria.com/127.0.0.1#5335 +ipset=/sexuria.com/gfwlist +server=/dezyred.com/127.0.0.1#5335 +ipset=/dezyred.com/gfwlist +server=/beats-sale.com/127.0.0.1#5335 +ipset=/beats-sale.com/gfwlist +server=/pornhat.one/127.0.0.1#5335 +ipset=/pornhat.one/gfwlist +server=/thenewslens.com/127.0.0.1#5335 +ipset=/thenewslens.com/gfwlist +server=/nikebuy.com/127.0.0.1#5335 +ipset=/nikebuy.com/gfwlist +server=/applemx-icloud.com/127.0.0.1#5335 +ipset=/applemx-icloud.com/gfwlist +server=/tr.com/127.0.0.1#5335 +ipset=/tr.com/gfwlist +server=/electronjs.org/127.0.0.1#5335 +ipset=/electronjs.org/gfwlist +server=/uusextoy.com/127.0.0.1#5335 +ipset=/uusextoy.com/gfwlist +server=/google.com.sv/127.0.0.1#5335 +ipset=/google.com.sv/gfwlist +server=/porntoplinks.com/127.0.0.1#5335 +ipset=/porntoplinks.com/gfwlist +server=/proton.me/127.0.0.1#5335 +ipset=/proton.me/gfwlist +server=/faasbook.com/127.0.0.1#5335 +ipset=/faasbook.com/gfwlist +server=/dogfart.com/127.0.0.1#5335 +ipset=/dogfart.com/gfwlist +server=/xvideos2.com/127.0.0.1#5335 +ipset=/xvideos2.com/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=/lupoporno.com/127.0.0.1#5335 +ipset=/lupoporno.com/gfwlist +server=/vodafone.co.uk/127.0.0.1#5335 +ipset=/vodafone.co.uk/gfwlist +server=/xgaytube.tv/127.0.0.1#5335 +ipset=/xgaytube.tv/gfwlist +server=/asianthumbs.org/127.0.0.1#5335 +ipset=/asianthumbs.org/gfwlist +server=/ikea.lv/127.0.0.1#5335 +ipset=/ikea.lv/gfwlist +server=/thzu.cc/127.0.0.1#5335 +ipset=/thzu.cc/gfwlist +server=/atscaleconference.com/127.0.0.1#5335 +ipset=/atscaleconference.com/gfwlist +server=/sexdollpornhd.com/127.0.0.1#5335 +ipset=/sexdollpornhd.com/gfwlist +server=/cherrypai.com/127.0.0.1#5335 +ipset=/cherrypai.com/gfwlist +server=/visa.es/127.0.0.1#5335 +ipset=/visa.es/gfwlist +server=/eworld.com/127.0.0.1#5335 +ipset=/eworld.com/gfwlist +server=/meuhentai.com/127.0.0.1#5335 +ipset=/meuhentai.com/gfwlist +server=/auricularesbeatsbaratosshop.com/127.0.0.1#5335 +ipset=/auricularesbeatsbaratosshop.com/gfwlist +server=/3d-xxx.com/127.0.0.1#5335 +ipset=/3d-xxx.com/gfwlist +server=/applestore.cm/127.0.0.1#5335 +ipset=/applestore.cm/gfwlist +server=/dw.com/127.0.0.1#5335 +ipset=/dw.com/gfwlist +server=/hentai-gif-anime.com/127.0.0.1#5335 +ipset=/hentai-gif-anime.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=/eroticbeautyhub.com/127.0.0.1#5335 +ipset=/eroticbeautyhub.com/gfwlist +server=/voaindonesia.com/127.0.0.1#5335 +ipset=/voaindonesia.com/gfwlist +server=/ebayforeclosure.org/127.0.0.1#5335 +ipset=/ebayforeclosure.org/gfwlist +server=/paypal-security.net/127.0.0.1#5335 +ipset=/paypal-security.net/gfwlist +server=/manoto1.tv/127.0.0.1#5335 +ipset=/manoto1.tv/gfwlist +server=/webpkgcache.com/127.0.0.1#5335 +ipset=/webpkgcache.com/gfwlist +server=/yourdirtymind.com/127.0.0.1#5335 +ipset=/yourdirtymind.com/gfwlist +server=/quicktime.com/127.0.0.1#5335 +ipset=/quicktime.com/gfwlist +server=/pornpics.com/127.0.0.1#5335 +ipset=/pornpics.com/gfwlist +server=/volvobuses.sg/127.0.0.1#5335 +ipset=/volvobuses.sg/gfwlist +server=/ikea.ae/127.0.0.1#5335 +ipset=/ikea.ae/gfwlist +server=/europalibera.org/127.0.0.1#5335 +ipset=/europalibera.org/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=/veetbangladesh.com/127.0.0.1#5335 +ipset=/veetbangladesh.com/gfwlist +server=/ysm.yahoo.com/127.0.0.1#5335 +ipset=/ysm.yahoo.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=/hentaifreak.org/127.0.0.1#5335 +ipset=/hentaifreak.org/gfwlist +server=/pricelesssurprises.com/127.0.0.1#5335 +ipset=/pricelesssurprises.com/gfwlist +server=/quiz.directory/127.0.0.1#5335 +ipset=/quiz.directory/gfwlist +server=/lesbian8.com/127.0.0.1#5335 +ipset=/lesbian8.com/gfwlist +server=/sandisk.co.jp/127.0.0.1#5335 +ipset=/sandisk.co.jp/gfwlist +server=/bmw.sk/127.0.0.1#5335 +ipset=/bmw.sk/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=/fuckgames.xxx/127.0.0.1#5335 +ipset=/fuckgames.xxx/gfwlist +server=/zoo-porno.biz/127.0.0.1#5335 +ipset=/zoo-porno.biz/gfwlist +server=/simplyipod.com/127.0.0.1#5335 +ipset=/simplyipod.com/gfwlist +server=/newhampshirebmw.com/127.0.0.1#5335 +ipset=/newhampshirebmw.com/gfwlist +server=/xxxindianporn2.com/127.0.0.1#5335 +ipset=/xxxindianporn2.com/gfwlist +server=/girlfriendgalleries.net/127.0.0.1#5335 +ipset=/girlfriendgalleries.net/gfwlist +server=/hpsupport.com/127.0.0.1#5335 +ipset=/hpsupport.com/gfwlist +server=/bellotube.com/127.0.0.1#5335 +ipset=/bellotube.com/gfwlist +server=/voyeurweb.com/127.0.0.1#5335 +ipset=/voyeurweb.com/gfwlist +server=/fox247.com/127.0.0.1#5335 +ipset=/fox247.com/gfwlist +server=/gv.com/127.0.0.1#5335 +ipset=/gv.com/gfwlist +server=/hdporn92.com/127.0.0.1#5335 +ipset=/hdporn92.com/gfwlist +server=/gaymaletube.com/127.0.0.1#5335 +ipset=/gaymaletube.com/gfwlist +server=/ebayfashion.net/127.0.0.1#5335 +ipset=/ebayfashion.net/gfwlist +server=/fuckableteens.net/127.0.0.1#5335 +ipset=/fuckableteens.net/gfwlist +server=/projectvoyeur.com/127.0.0.1#5335 +ipset=/projectvoyeur.com/gfwlist +server=/google.co.cr/127.0.0.1#5335 +ipset=/google.co.cr/gfwlist +server=/youtube.com.tw/127.0.0.1#5335 +ipset=/youtube.com.tw/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=/facebookswagstore.com/127.0.0.1#5335 +ipset=/facebookswagstore.com/gfwlist +server=/mybukkakeporn.com/127.0.0.1#5335 +ipset=/mybukkakeporn.com/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=/fbreg.com/127.0.0.1#5335 +ipset=/fbreg.com/gfwlist +server=/twitterstat.us/127.0.0.1#5335 +ipset=/twitterstat.us/gfwlist +server=/elpornoamateur.com/127.0.0.1#5335 +ipset=/elpornoamateur.com/gfwlist +server=/easynike.com/127.0.0.1#5335 +ipset=/easynike.com/gfwlist +server=/finevids.xxx/127.0.0.1#5335 +ipset=/finevids.xxx/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=/sex.cam/127.0.0.1#5335 +ipset=/sex.cam/gfwlist +server=/purextc.com/127.0.0.1#5335 +ipset=/purextc.com/gfwlist +server=/yoursigmoidoscopy.com/127.0.0.1#5335 +ipset=/yoursigmoidoscopy.com/gfwlist +server=/familystrokes.com/127.0.0.1#5335 +ipset=/familystrokes.com/gfwlist +server=/bmw-motorrad.co.id/127.0.0.1#5335 +ipset=/bmw-motorrad.co.id/gfwlist +server=/slackcertified.com/127.0.0.1#5335 +ipset=/slackcertified.com/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=/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=/hentaicloud.com/127.0.0.1#5335 +ipset=/hentaicloud.com/gfwlist +server=/mucinexprofessional.com/127.0.0.1#5335 +ipset=/mucinexprofessional.com/gfwlist +server=/yahoo.cm/127.0.0.1#5335 +ipset=/yahoo.cm/gfwlist +server=/fau11.com/127.0.0.1#5335 +ipset=/fau11.com/gfwlist +server=/littleasians.com/127.0.0.1#5335 +ipset=/littleasians.com/gfwlist +server=/hanime1.me/127.0.0.1#5335 +ipset=/hanime1.me/gfwlist +server=/statsmakemecry.com/127.0.0.1#5335 +ipset=/statsmakemecry.com/gfwlist +server=/jorropo.net/127.0.0.1#5335 +ipset=/jorropo.net/gfwlist +server=/billpointnewzealand.com/127.0.0.1#5335 +ipset=/billpointnewzealand.com/gfwlist +server=/gfw.report/127.0.0.1#5335 +ipset=/gfw.report/gfwlist +server=/opensourceinsight.dev/127.0.0.1#5335 +ipset=/opensourceinsight.dev/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=/fuck.com/127.0.0.1#5335 +ipset=/fuck.com/gfwlist +server=/starcraft.com/127.0.0.1#5335 +ipset=/starcraft.com/gfwlist +server=/instgram.com/127.0.0.1#5335 +ipset=/instgram.com/gfwlist +server=/netlify.com/127.0.0.1#5335 +ipset=/netlify.com/gfwlist +server=/streamlatina.com/127.0.0.1#5335 +ipset=/streamlatina.com/gfwlist +server=/pornvideos.casa/127.0.0.1#5335 +ipset=/pornvideos.casa/gfwlist +server=/javwide.com/127.0.0.1#5335 +ipset=/javwide.com/gfwlist +server=/facebookhome.cc/127.0.0.1#5335 +ipset=/facebookhome.cc/gfwlist +server=/syzbj36.xyz/127.0.0.1#5335 +ipset=/syzbj36.xyz/gfwlist +server=/apple-expo.com/127.0.0.1#5335 +ipset=/apple-expo.com/gfwlist +server=/akamaitechnologies.com/127.0.0.1#5335 +ipset=/akamaitechnologies.com/gfwlist +server=/tubegold.xxx/127.0.0.1#5335 +ipset=/tubegold.xxx/gfwlist +server=/facesbooc.com/127.0.0.1#5335 +ipset=/facesbooc.com/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=/swoosh.com/127.0.0.1#5335 +ipset=/swoosh.com/gfwlist +server=/javscat.net/127.0.0.1#5335 +ipset=/javscat.net/gfwlist +server=/apple.hamburg/127.0.0.1#5335 +ipset=/apple.hamburg/gfwlist +server=/sex.xxx/127.0.0.1#5335 +ipset=/sex.xxx/gfwlist +server=/bitcoin.org/127.0.0.1#5335 +ipset=/bitcoin.org/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=/linemyshop.com/127.0.0.1#5335 +ipset=/linemyshop.com/gfwlist +server=/disneysubscription.com/127.0.0.1#5335 +ipset=/disneysubscription.com/gfwlist +server=/get.dev/127.0.0.1#5335 +ipset=/get.dev/gfwlist +server=/pornofrog.com/127.0.0.1#5335 +ipset=/pornofrog.com/gfwlist +server=/go-lang.org/127.0.0.1#5335 +ipset=/go-lang.org/gfwlist +server=/tutanota.com/127.0.0.1#5335 +ipset=/tutanota.com/gfwlist +server=/bmw-connecteddrive.my/127.0.0.1#5335 +ipset=/bmw-connecteddrive.my/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=/familysexsimulator.com/127.0.0.1#5335 +ipset=/familysexsimulator.com/gfwlist +server=/wired.com/127.0.0.1#5335 +ipset=/wired.com/gfwlist +server=/buzzav.com/127.0.0.1#5335 +ipset=/buzzav.com/gfwlist +server=/dettol.com.sg/127.0.0.1#5335 +ipset=/dettol.com.sg/gfwlist +server=/intel.az/127.0.0.1#5335 +ipset=/intel.az/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=/fragrancebay.com/127.0.0.1#5335 +ipset=/fragrancebay.com/gfwlist +server=/starbuckssummergame.ca/127.0.0.1#5335 +ipset=/starbuckssummergame.ca/gfwlist +server=/minilondon.co/127.0.0.1#5335 +ipset=/minilondon.co/gfwlist +server=/ads.youtube.com/127.0.0.1#5335 +ipset=/ads.youtube.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=/holaporno.xxx/127.0.0.1#5335 +ipset=/holaporno.xxx/gfwlist +server=/nijinchu.com/127.0.0.1#5335 +ipset=/nijinchu.com/gfwlist +server=/btt904.com/127.0.0.1#5335 +ipset=/btt904.com/gfwlist +server=/s-msft.com/127.0.0.1#5335 +ipset=/s-msft.com/gfwlist +server=/bmwstepconnections.com/127.0.0.1#5335 +ipset=/bmwstepconnections.com/gfwlist +server=/hotpornbible.com/127.0.0.1#5335 +ipset=/hotpornbible.com/gfwlist +server=/imgcrl.org/127.0.0.1#5335 +ipset=/imgcrl.org/gfwlist +server=/manytoon.com/127.0.0.1#5335 +ipset=/manytoon.com/gfwlist +server=/freehentaistream.com/127.0.0.1#5335 +ipset=/freehentaistream.com/gfwlist +server=/evise.com/127.0.0.1#5335 +ipset=/evise.com/gfwlist +server=/xxx-porn-fuck.com/127.0.0.1#5335 +ipset=/xxx-porn-fuck.com/gfwlist +server=/familysimulator.io/127.0.0.1#5335 +ipset=/familysimulator.io/gfwlist +server=/lgsalesportal.com/127.0.0.1#5335 +ipset=/lgsalesportal.com/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=/faapy.com/127.0.0.1#5335 +ipset=/faapy.com/gfwlist +server=/yandex.jobs/127.0.0.1#5335 +ipset=/yandex.jobs/gfwlist +server=/volvobuses.com.tw/127.0.0.1#5335 +ipset=/volvobuses.com.tw/gfwlist +server=/venmo.org/127.0.0.1#5335 +ipset=/venmo.org/gfwlist +server=/illusiony.com/127.0.0.1#5335 +ipset=/illusiony.com/gfwlist +server=/facebookgraphsearch.com/127.0.0.1#5335 +ipset=/facebookgraphsearch.com/gfwlist +server=/racked.com/127.0.0.1#5335 +ipset=/racked.com/gfwlist +server=/viewerswives.net/127.0.0.1#5335 +ipset=/viewerswives.net/gfwlist +server=/thaichix.com/127.0.0.1#5335 +ipset=/thaichix.com/gfwlist +server=/webobjects.co.uk/127.0.0.1#5335 +ipset=/webobjects.co.uk/gfwlist +server=/monsterbeatsforsale.com/127.0.0.1#5335 +ipset=/monsterbeatsforsale.com/gfwlist +server=/xvideosx.com.br/127.0.0.1#5335 +ipset=/xvideosx.com.br/gfwlist +server=/cbsservice.aws.syncbak.com/127.0.0.1#5335 +ipset=/cbsservice.aws.syncbak.com/gfwlist +server=/albastudio.co/127.0.0.1#5335 +ipset=/albastudio.co/gfwlist +server=/fetishpornonly.com/127.0.0.1#5335 +ipset=/fetishpornonly.com/gfwlist +server=/worldhack.com/127.0.0.1#5335 +ipset=/worldhack.com/gfwlist +server=/myfoxchicago.com/127.0.0.1#5335 +ipset=/myfoxchicago.com/gfwlist +server=/fortnite.com/127.0.0.1#5335 +ipset=/fortnite.com/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=/yomiuri-johkai.co.jp/127.0.0.1#5335 +ipset=/yomiuri-johkai.co.jp/gfwlist +server=/link2galleries.com/127.0.0.1#5335 +ipset=/link2galleries.com/gfwlist +server=/geforce.co.kr/127.0.0.1#5335 +ipset=/geforce.co.kr/gfwlist +server=/exploitedteensasia.com/127.0.0.1#5335 +ipset=/exploitedteensasia.com/gfwlist +server=/bustyoldsluts.com/127.0.0.1#5335 +ipset=/bustyoldsluts.com/gfwlist +server=/fap-xxx.com/127.0.0.1#5335 +ipset=/fap-xxx.com/gfwlist +server=/geti2p.net/127.0.0.1#5335 +ipset=/geti2p.net/gfwlist +server=/hulu.us/127.0.0.1#5335 +ipset=/hulu.us/gfwlist +server=/comodoca4.com/127.0.0.1#5335 +ipset=/comodoca4.com/gfwlist +server=/spankred3d.com/127.0.0.1#5335 +ipset=/spankred3d.com/gfwlist +server=/scholar.google.com.py/127.0.0.1#5335 +ipset=/scholar.google.com.py/gfwlist +server=/beatsbydrdreoutlet.com/127.0.0.1#5335 +ipset=/beatsbydrdreoutlet.com/gfwlist +server=/myfoxcharlotte.com/127.0.0.1#5335 +ipset=/myfoxcharlotte.com/gfwlist +server=/somanylolies.com/127.0.0.1#5335 +ipset=/somanylolies.com/gfwlist +server=/fulltaboo.tv/127.0.0.1#5335 +ipset=/fulltaboo.tv/gfwlist +server=/letsencrypt.com/127.0.0.1#5335 +ipset=/letsencrypt.com/gfwlist +server=/disneyhentai.com/127.0.0.1#5335 +ipset=/disneyhentai.com/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=/adobeaemcloud.net/127.0.0.1#5335 +ipset=/adobeaemcloud.net/gfwlist +server=/conscrypt.org/127.0.0.1#5335 +ipset=/conscrypt.org/gfwlist +server=/thaigirls.net/127.0.0.1#5335 +ipset=/thaigirls.net/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=/cloudflare-ipfs.com/127.0.0.1#5335 +ipset=/cloudflare-ipfs.com/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=/v2ray.cool/127.0.0.1#5335 +ipset=/v2ray.cool/gfwlist +server=/icloud.ch/127.0.0.1#5335 +ipset=/icloud.ch/gfwlist +server=/ebay.co.ve/127.0.0.1#5335 +ipset=/ebay.co.ve/gfwlist +server=/bmw-jordan.com/127.0.0.1#5335 +ipset=/bmw-jordan.com/gfwlist +server=/canon.hu/127.0.0.1#5335 +ipset=/canon.hu/gfwlist +server=/porn-stalker.fr/127.0.0.1#5335 +ipset=/porn-stalker.fr/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=/minidurham.ca/127.0.0.1#5335 +ipset=/minidurham.ca/gfwlist +server=/leannecrowvideos.com/127.0.0.1#5335 +ipset=/leannecrowvideos.com/gfwlist +server=/freebasics.com/127.0.0.1#5335 +ipset=/freebasics.com/gfwlist +server=/bmw-albania.com/127.0.0.1#5335 +ipset=/bmw-albania.com/gfwlist +server=/wildxxxhardcore.com/127.0.0.1#5335 +ipset=/wildxxxhardcore.com/gfwlist +server=/blogspot.mk/127.0.0.1#5335 +ipset=/blogspot.mk/gfwlist +server=/drebeats-france.com/127.0.0.1#5335 +ipset=/drebeats-france.com/gfwlist +server=/dagfs.com/127.0.0.1#5335 +ipset=/dagfs.com/gfwlist +server=/paypalshopping.net/127.0.0.1#5335 +ipset=/paypalshopping.net/gfwlist +server=/sex-hot-sites.com/127.0.0.1#5335 +ipset=/sex-hot-sites.com/gfwlist +server=/verisign.com.br/127.0.0.1#5335 +ipset=/verisign.com.br/gfwlist +server=/perfectnaked.com/127.0.0.1#5335 +ipset=/perfectnaked.com/gfwlist +server=/hplip.net/127.0.0.1#5335 +ipset=/hplip.net/gfwlist +server=/animegal.net/127.0.0.1#5335 +ipset=/animegal.net/gfwlist +server=/xxxstreams.eu/127.0.0.1#5335 +ipset=/xxxstreams.eu/gfwlist +server=/chaturbate.com/127.0.0.1#5335 +ipset=/chaturbate.com/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=/hotladyhere.com/127.0.0.1#5335 +ipset=/hotladyhere.com/gfwlist +server=/ahvideosexe.com/127.0.0.1#5335 +ipset=/ahvideosexe.com/gfwlist +server=/instagramlogin.com/127.0.0.1#5335 +ipset=/instagramlogin.com/gfwlist +server=/centos.org/127.0.0.1#5335 +ipset=/centos.org/gfwlist +server=/oauthz.com/127.0.0.1#5335 +ipset=/oauthz.com/gfwlist +server=/x1337x.se/127.0.0.1#5335 +ipset=/x1337x.se/gfwlist +server=/mach-os.net/127.0.0.1#5335 +ipset=/mach-os.net/gfwlist +server=/tsmodelstube.com/127.0.0.1#5335 +ipset=/tsmodelstube.com/gfwlist +server=/hornygfporn.com/127.0.0.1#5335 +ipset=/hornygfporn.com/gfwlist +server=/gloryofheracles.com/127.0.0.1#5335 +ipset=/gloryofheracles.com/gfwlist +server=/booksc.me/127.0.0.1#5335 +ipset=/booksc.me/gfwlist +server=/eca.hinet.net/127.0.0.1#5335 +ipset=/eca.hinet.net/gfwlist +server=/vkontakte.ru/127.0.0.1#5335 +ipset=/vkontakte.ru/gfwlist +server=/crit-staging.com/127.0.0.1#5335 +ipset=/crit-staging.com/gfwlist +server=/fabuyemian.com/127.0.0.1#5335 +ipset=/fabuyemian.com/gfwlist +server=/yourdoll.com/127.0.0.1#5335 +ipset=/yourdoll.com/gfwlist +server=/beatsua.com/127.0.0.1#5335 +ipset=/beatsua.com/gfwlist +server=/newtalk.tw/127.0.0.1#5335 +ipset=/newtalk.tw/gfwlist +server=/nikeshoesmarket.com/127.0.0.1#5335 +ipset=/nikeshoesmarket.com/gfwlist +server=/petiteballerinasfucked.com/127.0.0.1#5335 +ipset=/petiteballerinasfucked.com/gfwlist +server=/vimeo.fr/127.0.0.1#5335 +ipset=/vimeo.fr/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=/yahoo.com.sg/127.0.0.1#5335 +ipset=/yahoo.com.sg/gfwlist +server=/windy.com/127.0.0.1#5335 +ipset=/windy.com/gfwlist +server=/sony.lt/127.0.0.1#5335 +ipset=/sony.lt/gfwlist +server=/facebookcoronavirus.com/127.0.0.1#5335 +ipset=/facebookcoronavirus.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=/ikea.com.gr/127.0.0.1#5335 +ipset=/ikea.com.gr/gfwlist +server=/zeit.co/127.0.0.1#5335 +ipset=/zeit.co/gfwlist +server=/hairyclassic.com/127.0.0.1#5335 +ipset=/hairyclassic.com/gfwlist +server=/zeitworld.com/127.0.0.1#5335 +ipset=/zeitworld.com/gfwlist +server=/gaymenring.com/127.0.0.1#5335 +ipset=/gaymenring.com/gfwlist +server=/liberapay.org/127.0.0.1#5335 +ipset=/liberapay.org/gfwlist +server=/independentoperatorcn.com/127.0.0.1#5335 +ipset=/independentoperatorcn.com/gfwlist +server=/javscatting.com/127.0.0.1#5335 +ipset=/javscatting.com/gfwlist +server=/rakuten-static.com/127.0.0.1#5335 +ipset=/rakuten-static.com/gfwlist +server=/s-bluemix.net/127.0.0.1#5335 +ipset=/s-bluemix.net/gfwlist +server=/primevideo.tv/127.0.0.1#5335 +ipset=/primevideo.tv/gfwlist +server=/javbus22.com/127.0.0.1#5335 +ipset=/javbus22.com/gfwlist +server=/visa.ca/127.0.0.1#5335 +ipset=/visa.ca/gfwlist +server=/directvhouston.com/127.0.0.1#5335 +ipset=/directvhouston.com/gfwlist +server=/gloryholeswallow.com/127.0.0.1#5335 +ipset=/gloryholeswallow.com/gfwlist +server=/ebayglobalshipping.com/127.0.0.1#5335 +ipset=/ebayglobalshipping.com/gfwlist +server=/ozeex.com/127.0.0.1#5335 +ipset=/ozeex.com/gfwlist +server=/donsnaughtymodels.com/127.0.0.1#5335 +ipset=/donsnaughtymodels.com/gfwlist +server=/facebo-ok.com/127.0.0.1#5335 +ipset=/facebo-ok.com/gfwlist +server=/anime-rule34-world.b-cdn.net/127.0.0.1#5335 +ipset=/anime-rule34-world.b-cdn.net/gfwlist +server=/dropboxforum.com/127.0.0.1#5335 +ipset=/dropboxforum.com/gfwlist +server=/mini.nc/127.0.0.1#5335 +ipset=/mini.nc/gfwlist +server=/taiwannews.com.tw/127.0.0.1#5335 +ipset=/taiwannews.com.tw/gfwlist +server=/paypal-europe.com/127.0.0.1#5335 +ipset=/paypal-europe.com/gfwlist +server=/reallesbianexposed.com/127.0.0.1#5335 +ipset=/reallesbianexposed.com/gfwlist +server=/discordsays.com/127.0.0.1#5335 +ipset=/discordsays.com/gfwlist +server=/bmwdelawarevalley.com/127.0.0.1#5335 +ipset=/bmwdelawarevalley.com/gfwlist +server=/haisetu.net/127.0.0.1#5335 +ipset=/haisetu.net/gfwlist +server=/casquebeatsbydrdresolohd.com/127.0.0.1#5335 +ipset=/casquebeatsbydrdresolohd.com/gfwlist +server=/icloud.com/127.0.0.1#5335 +ipset=/icloud.com/gfwlist +server=/extraindiansex.com/127.0.0.1#5335 +ipset=/extraindiansex.com/gfwlist +server=/abow.jp/127.0.0.1#5335 +ipset=/abow.jp/gfwlist +server=/plusone8.com/127.0.0.1#5335 +ipset=/plusone8.com/gfwlist +server=/appleonline.com/127.0.0.1#5335 +ipset=/appleonline.com/gfwlist +server=/famouspornstars.com/127.0.0.1#5335 +ipset=/famouspornstars.com/gfwlist +server=/shopee.io/127.0.0.1#5335 +ipset=/shopee.io/gfwlist +server=/publicsexhub.com/127.0.0.1#5335 +ipset=/publicsexhub.com/gfwlist +server=/yandex.ru/127.0.0.1#5335 +ipset=/yandex.ru/gfwlist +server=/amateur-pussies.com/127.0.0.1#5335 +ipset=/amateur-pussies.com/gfwlist +server=/nikeshoescity.com/127.0.0.1#5335 +ipset=/nikeshoescity.com/gfwlist +server=/amazonaws.co.uk/127.0.0.1#5335 +ipset=/amazonaws.co.uk/gfwlist +server=/lgappstv.com/127.0.0.1#5335 +ipset=/lgappstv.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=/tps138.info/127.0.0.1#5335 +ipset=/tps138.info/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=/rarbg.me/127.0.0.1#5335 +ipset=/rarbg.me/gfwlist +server=/joinside.org/127.0.0.1#5335 +ipset=/joinside.org/gfwlist +server=/girlsxxx.net/127.0.0.1#5335 +ipset=/girlsxxx.net/gfwlist +server=/kamisama-day.jp/127.0.0.1#5335 +ipset=/kamisama-day.jp/gfwlist +server=/hpcomputers.com/127.0.0.1#5335 +ipset=/hpcomputers.com/gfwlist +server=/linearcollider.org/127.0.0.1#5335 +ipset=/linearcollider.org/gfwlist +server=/lizardporn.com/127.0.0.1#5335 +ipset=/lizardporn.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=/bestpremiumpornsite.com/127.0.0.1#5335 +ipset=/bestpremiumpornsite.com/gfwlist +server=/dweb.link/127.0.0.1#5335 +ipset=/dweb.link/gfwlist +server=/youtube.co.cr/127.0.0.1#5335 +ipset=/youtube.co.cr/gfwlist +server=/facwebook.com/127.0.0.1#5335 +ipset=/facwebook.com/gfwlist +server=/akastream.com/127.0.0.1#5335 +ipset=/akastream.com/gfwlist +server=/createspace.com/127.0.0.1#5335 +ipset=/createspace.com/gfwlist +server=/volvotrucks.nl/127.0.0.1#5335 +ipset=/volvotrucks.nl/gfwlist +server=/instagramizlenme.com/127.0.0.1#5335 +ipset=/instagramizlenme.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=/beatspillnewcolor.com/127.0.0.1#5335 +ipset=/beatspillnewcolor.com/gfwlist +server=/sandisk.co.uk/127.0.0.1#5335 +ipset=/sandisk.co.uk/gfwlist +server=/positivessl.com/127.0.0.1#5335 +ipset=/positivessl.com/gfwlist +server=/shyav.com/127.0.0.1#5335 +ipset=/shyav.com/gfwlist +server=/mariobroswii.com/127.0.0.1#5335 +ipset=/mariobroswii.com/gfwlist +server=/pornodrome.tv/127.0.0.1#5335 +ipset=/pornodrome.tv/gfwlist +server=/pearsonassessment.nl/127.0.0.1#5335 +ipset=/pearsonassessment.nl/gfwlist +server=/xvideos-porn-video.com/127.0.0.1#5335 +ipset=/xvideos-porn-video.com/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=/bloombergnext.com/127.0.0.1#5335 +ipset=/bloombergnext.com/gfwlist +server=/beatsbydreoordopjes.com/127.0.0.1#5335 +ipset=/beatsbydreoordopjes.com/gfwlist +server=/touchsmartpc.com/127.0.0.1#5335 +ipset=/touchsmartpc.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=/appdomain.cloud/127.0.0.1#5335 +ipset=/appdomain.cloud/gfwlist +server=/pornmadeathome.com/127.0.0.1#5335 +ipset=/pornmadeathome.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=/fontshop-prod-responsive-images.s3.amazonaws.com/127.0.0.1#5335 +ipset=/fontshop-prod-responsive-images.s3.amazonaws.com/gfwlist +server=/applepay.berlin/127.0.0.1#5335 +ipset=/applepay.berlin/gfwlist +server=/cnnmoneystream.com/127.0.0.1#5335 +ipset=/cnnmoneystream.com/gfwlist +server=/bridgestonetire.com/127.0.0.1#5335 +ipset=/bridgestonetire.com/gfwlist +server=/adidas.hu/127.0.0.1#5335 +ipset=/adidas.hu/gfwlist +server=/telebay.com/127.0.0.1#5335 +ipset=/telebay.com/gfwlist +server=/bingagencyawards.com/127.0.0.1#5335 +ipset=/bingagencyawards.com/gfwlist +server=/thebeatsbydre.com/127.0.0.1#5335 +ipset=/thebeatsbydre.com/gfwlist +server=/ikea.my/127.0.0.1#5335 +ipset=/ikea.my/gfwlist +server=/rule34h.com/127.0.0.1#5335 +ipset=/rule34h.com/gfwlist +server=/facebookmsn.com/127.0.0.1#5335 +ipset=/facebookmsn.com/gfwlist +server=/facebookporn.org/127.0.0.1#5335 +ipset=/facebookporn.org/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=/libgen.st/127.0.0.1#5335 +ipset=/libgen.st/gfwlist +server=/xinfhw.com/127.0.0.1#5335 +ipset=/xinfhw.com/gfwlist +server=/bmw-asia.com/127.0.0.1#5335 +ipset=/bmw-asia.com/gfwlist +server=/pixiv.org/127.0.0.1#5335 +ipset=/pixiv.org/gfwlist +server=/downloadsforipod.com/127.0.0.1#5335 +ipset=/downloadsforipod.com/gfwlist +server=/alphabet.lv/127.0.0.1#5335 +ipset=/alphabet.lv/gfwlist +server=/pornxvideos.win/127.0.0.1#5335 +ipset=/pornxvideos.win/gfwlist +server=/free-aa.com/127.0.0.1#5335 +ipset=/free-aa.com/gfwlist +server=/sislovesme.com/127.0.0.1#5335 +ipset=/sislovesme.com/gfwlist +server=/cbspressexpress.com/127.0.0.1#5335 +ipset=/cbspressexpress.com/gfwlist +server=/hex.pm/127.0.0.1#5335 +ipset=/hex.pm/gfwlist +server=/sanspo.com/127.0.0.1#5335 +ipset=/sanspo.com/gfwlist +server=/ptt.sex/127.0.0.1#5335 +ipset=/ptt.sex/gfwlist +server=/mingpaomonthly.com/127.0.0.1#5335 +ipset=/mingpaomonthly.com/gfwlist +server=/titanfall.com/127.0.0.1#5335 +ipset=/titanfall.com/gfwlist +server=/durex.ro/127.0.0.1#5335 +ipset=/durex.ro/gfwlist +server=/momsbangteens.com/127.0.0.1#5335 +ipset=/momsbangteens.com/gfwlist +server=/realmaturesfuck.com/127.0.0.1#5335 +ipset=/realmaturesfuck.com/gfwlist +server=/12diasderegalosdeitunes.co.cr/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.co.cr/gfwlist +server=/xnxx2.info/127.0.0.1#5335 +ipset=/xnxx2.info/gfwlist +server=/thegatewaypundit.com/127.0.0.1#5335 +ipset=/thegatewaypundit.com/gfwlist +server=/zononi.com/127.0.0.1#5335 +ipset=/zononi.com/gfwlist +server=/amazonauthorinsights.com/127.0.0.1#5335 +ipset=/amazonauthorinsights.com/gfwlist +server=/vrbgay.com/127.0.0.1#5335 +ipset=/vrbgay.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=/xxnxx-porn.com/127.0.0.1#5335 +ipset=/xxnxx-porn.com/gfwlist +server=/vokevr.com/127.0.0.1#5335 +ipset=/vokevr.com/gfwlist +server=/accountpaypal.net/127.0.0.1#5335 +ipset=/accountpaypal.net/gfwlist +server=/shelfstuff.com/127.0.0.1#5335 +ipset=/shelfstuff.com/gfwlist +server=/facebookatschool.com/127.0.0.1#5335 +ipset=/facebookatschool.com/gfwlist +server=/yourmomsgotbigtits.com/127.0.0.1#5335 +ipset=/yourmomsgotbigtits.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=/weeklytimesnow.com.au/127.0.0.1#5335 +ipset=/weeklytimesnow.com.au/gfwlist +server=/hotfiesta.com/127.0.0.1#5335 +ipset=/hotfiesta.com/gfwlist +server=/pixplug.in/127.0.0.1#5335 +ipset=/pixplug.in/gfwlist +server=/smallteenpussy.com/127.0.0.1#5335 +ipset=/smallteenpussy.com/gfwlist +server=/line.biz/127.0.0.1#5335 +ipset=/line.biz/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=/erodoujinshi-world.com/127.0.0.1#5335 +ipset=/erodoujinshi-world.com/gfwlist +server=/akahost.net/127.0.0.1#5335 +ipset=/akahost.net/gfwlist +server=/mythicentertainment.net/127.0.0.1#5335 +ipset=/mythicentertainment.net/gfwlist +server=/vervesex.com/127.0.0.1#5335 +ipset=/vervesex.com/gfwlist +server=/bluemix.net/127.0.0.1#5335 +ipset=/bluemix.net/gfwlist +server=/12diasderegalosdeitunes.com/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.com/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=/vidown.com/127.0.0.1#5335 +ipset=/vidown.com/gfwlist +server=/cnet.com/127.0.0.1#5335 +ipset=/cnet.com/gfwlist +server=/spacex.com/127.0.0.1#5335 +ipset=/spacex.com/gfwlist +server=/freegaysexgames.com/127.0.0.1#5335 +ipset=/freegaysexgames.com/gfwlist +server=/ikea.jo/127.0.0.1#5335 +ipset=/ikea.jo/gfwlist +server=/starbucks.com.sg/127.0.0.1#5335 +ipset=/starbucks.com.sg/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=/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=/hbo.map.fastly.net/127.0.0.1#5335 +ipset=/hbo.map.fastly.net/gfwlist +server=/zoho.in/127.0.0.1#5335 +ipset=/zoho.in/gfwlist +server=/fapporn.me/127.0.0.1#5335 +ipset=/fapporn.me/gfwlist +server=/etpress.com.hk/127.0.0.1#5335 +ipset=/etpress.com.hk/gfwlist +server=/ebayclassifieds.tv/127.0.0.1#5335 +ipset=/ebayclassifieds.tv/gfwlist +server=/neuerporno.com/127.0.0.1#5335 +ipset=/neuerporno.com/gfwlist +server=/ozvoice.org/127.0.0.1#5335 +ipset=/ozvoice.org/gfwlist +server=/thedailysnkr.com/127.0.0.1#5335 +ipset=/thedailysnkr.com/gfwlist +server=/jkforum.net/127.0.0.1#5335 +ipset=/jkforum.net/gfwlist +server=/finishinfo.it/127.0.0.1#5335 +ipset=/finishinfo.it/gfwlist +server=/teensnow.com/127.0.0.1#5335 +ipset=/teensnow.com/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=/liverail.com/127.0.0.1#5335 +ipset=/liverail.com/gfwlist +server=/hbomaxdash.s.llnwi.net/127.0.0.1#5335 +ipset=/hbomaxdash.s.llnwi.net/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=/pahabicilemezsurprizler.com/127.0.0.1#5335 +ipset=/pahabicilemezsurprizler.com/gfwlist +server=/verisign.dk/127.0.0.1#5335 +ipset=/verisign.dk/gfwlist +server=/beatswholesale.us/127.0.0.1#5335 +ipset=/beatswholesale.us/gfwlist +server=/swissign.li/127.0.0.1#5335 +ipset=/swissign.li/gfwlist +server=/stepmaturesex.com/127.0.0.1#5335 +ipset=/stepmaturesex.com/gfwlist +server=/iphoneplus.wang/127.0.0.1#5335 +ipset=/iphoneplus.wang/gfwlist +server=/stripselector.com/127.0.0.1#5335 +ipset=/stripselector.com/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=/javhub.net/127.0.0.1#5335 +ipset=/javhub.net/gfwlist +server=/whimn.com.au/127.0.0.1#5335 +ipset=/whimn.com.au/gfwlist +server=/indiansexmms2.com/127.0.0.1#5335 +ipset=/indiansexmms2.com/gfwlist +server=/weekly-economist.com/127.0.0.1#5335 +ipset=/weekly-economist.com/gfwlist +server=/volvotrucks.kg/127.0.0.1#5335 +ipset=/volvotrucks.kg/gfwlist +server=/watch-ebay.org/127.0.0.1#5335 +ipset=/watch-ebay.org/gfwlist +server=/facebook-forum.com/127.0.0.1#5335 +ipset=/facebook-forum.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=/mini.tn/127.0.0.1#5335 +ipset=/mini.tn/gfwlist +server=/hket.com/127.0.0.1#5335 +ipset=/hket.com/gfwlist +server=/nke6.com/127.0.0.1#5335 +ipset=/nke6.com/gfwlist +server=/intel.ie/127.0.0.1#5335 +ipset=/intel.ie/gfwlist +server=/dirtyship.com/127.0.0.1#5335 +ipset=/dirtyship.com/gfwlist +server=/colombianas.webcam/127.0.0.1#5335 +ipset=/colombianas.webcam/gfwlist +server=/fonts.com/127.0.0.1#5335 +ipset=/fonts.com/gfwlist +server=/porn-discounts.com/127.0.0.1#5335 +ipset=/porn-discounts.com/gfwlist +server=/mit.net/127.0.0.1#5335 +ipset=/mit.net/gfwlist +server=/365buymy.com/127.0.0.1#5335 +ipset=/365buymy.com/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=/sego8.cc/127.0.0.1#5335 +ipset=/sego8.cc/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=/autumn-jade.com/127.0.0.1#5335 +ipset=/autumn-jade.com/gfwlist +server=/fury.io/127.0.0.1#5335 +ipset=/fury.io/gfwlist +server=/amateurpornonly.com/127.0.0.1#5335 +ipset=/amateurpornonly.com/gfwlist +server=/highcolonic.info/127.0.0.1#5335 +ipset=/highcolonic.info/gfwlist +server=/appleinclegal.com/127.0.0.1#5335 +ipset=/appleinclegal.com/gfwlist +server=/hornysexgame.com/127.0.0.1#5335 +ipset=/hornysexgame.com/gfwlist +server=/bmw-group.net/127.0.0.1#5335 +ipset=/bmw-group.net/gfwlist +server=/hentaibros.com/127.0.0.1#5335 +ipset=/hentaibros.com/gfwlist +server=/52fuliji.cc/127.0.0.1#5335 +ipset=/52fuliji.cc/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=/nextdigital.com.hk/127.0.0.1#5335 +ipset=/nextdigital.com.hk/gfwlist +server=/gayasiantheater.com/127.0.0.1#5335 +ipset=/gayasiantheater.com/gfwlist +server=/microsoft.hu/127.0.0.1#5335 +ipset=/microsoft.hu/gfwlist +server=/debank.com/127.0.0.1#5335 +ipset=/debank.com/gfwlist +server=/beats-bydreoutletonline.com/127.0.0.1#5335 +ipset=/beats-bydreoutletonline.com/gfwlist +server=/1337xx.to/127.0.0.1#5335 +ipset=/1337xx.to/gfwlist +server=/page.link/127.0.0.1#5335 +ipset=/page.link/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=/paypal-apps.com/127.0.0.1#5335 +ipset=/paypal-apps.com/gfwlist +server=/newenergyfinance.com/127.0.0.1#5335 +ipset=/newenergyfinance.com/gfwlist +server=/hpconnected.us/127.0.0.1#5335 +ipset=/hpconnected.us/gfwlist +server=/applepaysupplies.tv/127.0.0.1#5335 +ipset=/applepaysupplies.tv/gfwlist +server=/volvobuses.com.pt/127.0.0.1#5335 +ipset=/volvobuses.com.pt/gfwlist +server=/airwick.es/127.0.0.1#5335 +ipset=/airwick.es/gfwlist +server=/speedrun.com/127.0.0.1#5335 +ipset=/speedrun.com/gfwlist +server=/google.ht/127.0.0.1#5335 +ipset=/google.ht/gfwlist +server=/lewdvrgames.com/127.0.0.1#5335 +ipset=/lewdvrgames.com/gfwlist +server=/hdpornt.com/127.0.0.1#5335 +ipset=/hdpornt.com/gfwlist +server=/disneyinternational.com/127.0.0.1#5335 +ipset=/disneyinternational.com/gfwlist +server=/masterintelligence.com/127.0.0.1#5335 +ipset=/masterintelligence.com/gfwlist +server=/deepl.com/127.0.0.1#5335 +ipset=/deepl.com/gfwlist +server=/paypal-team.com/127.0.0.1#5335 +ipset=/paypal-team.com/gfwlist +server=/instagramtakiphilesi.com/127.0.0.1#5335 +ipset=/instagramtakiphilesi.com/gfwlist +server=/pornpros.com/127.0.0.1#5335 +ipset=/pornpros.com/gfwlist +server=/2gayboys.com/127.0.0.1#5335 +ipset=/2gayboys.com/gfwlist +server=/afpforum.com/127.0.0.1#5335 +ipset=/afpforum.com/gfwlist +server=/bigtopsites.com/127.0.0.1#5335 +ipset=/bigtopsites.com/gfwlist +server=/anime-tube.pw/127.0.0.1#5335 +ipset=/anime-tube.pw/gfwlist +server=/eropasture.com/127.0.0.1#5335 +ipset=/eropasture.com/gfwlist +server=/twitteroauth.com/127.0.0.1#5335 +ipset=/twitteroauth.com/gfwlist +server=/scholar.google.de/127.0.0.1#5335 +ipset=/scholar.google.de/gfwlist +server=/ohsexfilm.com/127.0.0.1#5335 +ipset=/ohsexfilm.com/gfwlist +server=/gateway.pinata.cloud/127.0.0.1#5335 +ipset=/gateway.pinata.cloud/gfwlist +server=/minneapolisbmw.com/127.0.0.1#5335 +ipset=/minneapolisbmw.com/gfwlist +server=/pokemongoldsilver.com/127.0.0.1#5335 +ipset=/pokemongoldsilver.com/gfwlist +server=/hpdriver.com/127.0.0.1#5335 +ipset=/hpdriver.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=/beatsbydrdre-headphones.com/127.0.0.1#5335 +ipset=/beatsbydrdre-headphones.com/gfwlist +server=/0emm.com/127.0.0.1#5335 +ipset=/0emm.com/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=/anysex.com/127.0.0.1#5335 +ipset=/anysex.com/gfwlist +server=/d2anahhhmp1ffz.cloudfront.net/127.0.0.1#5335 +ipset=/d2anahhhmp1ffz.cloudfront.net/gfwlist +server=/snapwebcams.com/127.0.0.1#5335 +ipset=/snapwebcams.com/gfwlist +server=/dis.gd/127.0.0.1#5335 +ipset=/dis.gd/gfwlist +server=/foxsoccershop.com/127.0.0.1#5335 +ipset=/foxsoccershop.com/gfwlist +server=/fbhome.com/127.0.0.1#5335 +ipset=/fbhome.com/gfwlist +server=/ohpornovideo.com/127.0.0.1#5335 +ipset=/ohpornovideo.com/gfwlist +server=/terapeak.info/127.0.0.1#5335 +ipset=/terapeak.info/gfwlist +server=/privatemarketplaces.us/127.0.0.1#5335 +ipset=/privatemarketplaces.us/gfwlist +server=/typenetwork.com/127.0.0.1#5335 +ipset=/typenetwork.com/gfwlist +server=/bastropfirestone.com/127.0.0.1#5335 +ipset=/bastropfirestone.com/gfwlist +server=/beurettesvideo.com/127.0.0.1#5335 +ipset=/beurettesvideo.com/gfwlist +server=/mini-lebanon.com/127.0.0.1#5335 +ipset=/mini-lebanon.com/gfwlist +server=/paradisehotelquizfox.com/127.0.0.1#5335 +ipset=/paradisehotelquizfox.com/gfwlist +server=/buypass-ssl.com/127.0.0.1#5335 +ipset=/buypass-ssl.com/gfwlist +server=/newsgawakaru.com/127.0.0.1#5335 +ipset=/newsgawakaru.com/gfwlist +server=/www-paypal.info/127.0.0.1#5335 +ipset=/www-paypal.info/gfwlist +server=/ipod.ru/127.0.0.1#5335 +ipset=/ipod.ru/gfwlist +server=/demdex.net/127.0.0.1#5335 +ipset=/demdex.net/gfwlist +server=/deps.dev/127.0.0.1#5335 +ipset=/deps.dev/gfwlist +server=/cosplayeromania.jp/127.0.0.1#5335 +ipset=/cosplayeromania.jp/gfwlist +server=/epochtimes.com.br/127.0.0.1#5335 +ipset=/epochtimes.com.br/gfwlist +server=/xlecx.org/127.0.0.1#5335 +ipset=/xlecx.org/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=/whatsapp.info/127.0.0.1#5335 +ipset=/whatsapp.info/gfwlist +server=/monsterbeatsfactory.net/127.0.0.1#5335 +ipset=/monsterbeatsfactory.net/gfwlist +server=/directvrichmond.com/127.0.0.1#5335 +ipset=/directvrichmond.com/gfwlist +server=/fbbmarket.com/127.0.0.1#5335 +ipset=/fbbmarket.com/gfwlist +server=/ikea.com.pr/127.0.0.1#5335 +ipset=/ikea.com.pr/gfwlist +server=/fetishtown.net/127.0.0.1#5335 +ipset=/fetishtown.net/gfwlist +server=/terrapeak.com/127.0.0.1#5335 +ipset=/terrapeak.com/gfwlist +server=/prime-video.com/127.0.0.1#5335 +ipset=/prime-video.com/gfwlist +server=/stonefoxlingerie.com/127.0.0.1#5335 +ipset=/stonefoxlingerie.com/gfwlist +server=/3d-toon.com/127.0.0.1#5335 +ipset=/3d-toon.com/gfwlist +server=/canon.ge/127.0.0.1#5335 +ipset=/canon.ge/gfwlist +server=/hppavillionlaptop.com/127.0.0.1#5335 +ipset=/hppavillionlaptop.com/gfwlist +server=/microsoftuwp.com/127.0.0.1#5335 +ipset=/microsoftuwp.com/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=/wankizer.com/127.0.0.1#5335 +ipset=/wankizer.com/gfwlist +server=/theinitium.com/127.0.0.1#5335 +ipset=/theinitium.com/gfwlist +server=/sharkyporn.com/127.0.0.1#5335 +ipset=/sharkyporn.com/gfwlist +server=/cheapbeatsbydrenz.net/127.0.0.1#5335 +ipset=/cheapbeatsbydrenz.net/gfwlist +server=/shesfreaky.com/127.0.0.1#5335 +ipset=/shesfreaky.com/gfwlist +server=/topescort.nl/127.0.0.1#5335 +ipset=/topescort.nl/gfwlist +server=/pornojux.com/127.0.0.1#5335 +ipset=/pornojux.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=/ebi.ac.uk/127.0.0.1#5335 +ipset=/ebi.ac.uk/gfwlist +server=/cheapbeatsbus.com/127.0.0.1#5335 +ipset=/cheapbeatsbus.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=/clip16.com/127.0.0.1#5335 +ipset=/clip16.com/gfwlist +server=/viewpointsfromfacebook.com/127.0.0.1#5335 +ipset=/viewpointsfromfacebook.com/gfwlist +server=/geeksquad.tv/127.0.0.1#5335 +ipset=/geeksquad.tv/gfwlist +server=/latex-project.org/127.0.0.1#5335 +ipset=/latex-project.org/gfwlist +server=/wetandpuffy.com/127.0.0.1#5335 +ipset=/wetandpuffy.com/gfwlist +server=/pmatehunter.com/127.0.0.1#5335 +ipset=/pmatehunter.com/gfwlist +server=/epochtimes.com.au/127.0.0.1#5335 +ipset=/epochtimes.com.au/gfwlist +server=/thz7.net/127.0.0.1#5335 +ipset=/thz7.net/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=/bmw-motorrad.com.my/127.0.0.1#5335 +ipset=/bmw-motorrad.com.my/gfwlist +server=/liketruyen.net/127.0.0.1#5335 +ipset=/liketruyen.net/gfwlist +server=/nubiles-porn.com/127.0.0.1#5335 +ipset=/nubiles-porn.com/gfwlist +server=/all-sex-links.com/127.0.0.1#5335 +ipset=/all-sex-links.com/gfwlist +server=/embed.ly/127.0.0.1#5335 +ipset=/embed.ly/gfwlist +server=/incommon-rsa.org/127.0.0.1#5335 +ipset=/incommon-rsa.org/gfwlist +server=/pornfuror.com/127.0.0.1#5335 +ipset=/pornfuror.com/gfwlist +server=/starbucks.com.tr/127.0.0.1#5335 +ipset=/starbucks.com.tr/gfwlist +server=/spreadporn.org/127.0.0.1#5335 +ipset=/spreadporn.org/gfwlist +server=/volvospares.com/127.0.0.1#5335 +ipset=/volvospares.com/gfwlist +server=/pornohut.info/127.0.0.1#5335 +ipset=/pornohut.info/gfwlist +server=/wd.com/127.0.0.1#5335 +ipset=/wd.com/gfwlist +server=/dotcernpilot.info/127.0.0.1#5335 +ipset=/dotcernpilot.info/gfwlist +server=/foxcreativeuniversity.com/127.0.0.1#5335 +ipset=/foxcreativeuniversity.com/gfwlist +server=/porndisk.com/127.0.0.1#5335 +ipset=/porndisk.com/gfwlist +server=/bloombergradio.com/127.0.0.1#5335 +ipset=/bloombergradio.com/gfwlist +server=/visa.com.co/127.0.0.1#5335 +ipset=/visa.com.co/gfwlist +server=/yandex.com.ua/127.0.0.1#5335 +ipset=/yandex.com.ua/gfwlist +server=/vodafone.de/127.0.0.1#5335 +ipset=/vodafone.de/gfwlist +server=/ikea.co.pl/127.0.0.1#5335 +ipset=/ikea.co.pl/gfwlist +server=/xxx.xxx/127.0.0.1#5335 +ipset=/xxx.xxx/gfwlist +server=/addison-wesley.ch/127.0.0.1#5335 +ipset=/addison-wesley.ch/gfwlist +server=/voaafrique.com/127.0.0.1#5335 +ipset=/voaafrique.com/gfwlist +server=/intel.us/127.0.0.1#5335 +ipset=/intel.us/gfwlist +server=/psg-int-centralus.cloudapp.net/127.0.0.1#5335 +ipset=/psg-int-centralus.cloudapp.net/gfwlist +server=/fb.com/127.0.0.1#5335 +ipset=/fb.com/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=/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=/youtube.com.ph/127.0.0.1#5335 +ipset=/youtube.com.ph/gfwlist +server=/zb.com/127.0.0.1#5335 +ipset=/zb.com/gfwlist +server=/nikedunksshoes.com/127.0.0.1#5335 +ipset=/nikedunksshoes.com/gfwlist +server=/mainichibooks.com/127.0.0.1#5335 +ipset=/mainichibooks.com/gfwlist +server=/farfetch.net/127.0.0.1#5335 +ipset=/farfetch.net/gfwlist +server=/explicittube.com/127.0.0.1#5335 +ipset=/explicittube.com/gfwlist +server=/ttvnw.net/127.0.0.1#5335 +ipset=/ttvnw.net/gfwlist +server=/volvobuses.be/127.0.0.1#5335 +ipset=/volvobuses.be/gfwlist +server=/luvmov.com/127.0.0.1#5335 +ipset=/luvmov.com/gfwlist +server=/paypalnetwork.org/127.0.0.1#5335 +ipset=/paypalnetwork.org/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=/alt6-mtalk.google.com/127.0.0.1#5335 +ipset=/alt6-mtalk.google.com/gfwlist +server=/16fhgdty.xyz/127.0.0.1#5335 +ipset=/16fhgdty.xyz/gfwlist +server=/adultfreex.com/127.0.0.1#5335 +ipset=/adultfreex.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=/google.rw/127.0.0.1#5335 +ipset=/google.rw/gfwlist +server=/attglobal.net/127.0.0.1#5335 +ipset=/attglobal.net/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=/gaypornlove.net/127.0.0.1#5335 +ipset=/gaypornlove.net/gfwlist +server=/0cgdklr5sfwj.com/127.0.0.1#5335 +ipset=/0cgdklr5sfwj.com/gfwlist +server=/younger19.com/127.0.0.1#5335 +ipset=/younger19.com/gfwlist +server=/psyccareers.com/127.0.0.1#5335 +ipset=/psyccareers.com/gfwlist +server=/me.com/127.0.0.1#5335 +ipset=/me.com/gfwlist +server=/zohouniversity.com/127.0.0.1#5335 +ipset=/zohouniversity.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=/thepornscat.com/127.0.0.1#5335 +ipset=/thepornscat.com/gfwlist +server=/blogspot.td/127.0.0.1#5335 +ipset=/blogspot.td/gfwlist +server=/canon.co.il/127.0.0.1#5335 +ipset=/canon.co.il/gfwlist +server=/69-sexgames.com/127.0.0.1#5335 +ipset=/69-sexgames.com/gfwlist +server=/kijijiraps.ca/127.0.0.1#5335 +ipset=/kijijiraps.ca/gfwlist +server=/mofosnetwork.com/127.0.0.1#5335 +ipset=/mofosnetwork.com/gfwlist +server=/yahoo.com.vn/127.0.0.1#5335 +ipset=/yahoo.com.vn/gfwlist +server=/gettyimages.pt/127.0.0.1#5335 +ipset=/gettyimages.pt/gfwlist +server=/srwwu.uno/127.0.0.1#5335 +ipset=/srwwu.uno/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=/cabletv.com.hk/127.0.0.1#5335 +ipset=/cabletv.com.hk/gfwlist +server=/diablo3.com/127.0.0.1#5335 +ipset=/diablo3.com/gfwlist +server=/nakadashi.to/127.0.0.1#5335 +ipset=/nakadashi.to/gfwlist +server=/oreilly.review/127.0.0.1#5335 +ipset=/oreilly.review/gfwlist +server=/hot-teens.com/127.0.0.1#5335 +ipset=/hot-teens.com/gfwlist +server=/makeitopen.com/127.0.0.1#5335 +ipset=/makeitopen.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=/beatsbydresonline-nz.com/127.0.0.1#5335 +ipset=/beatsbydresonline-nz.com/gfwlist +server=/beatsbydresalemall2013.com/127.0.0.1#5335 +ipset=/beatsbydresalemall2013.com/gfwlist +server=/porcore.com/127.0.0.1#5335 +ipset=/porcore.com/gfwlist +server=/powerappscdn.net/127.0.0.1#5335 +ipset=/powerappscdn.net/gfwlist +server=/rakuten.ca/127.0.0.1#5335 +ipset=/rakuten.ca/gfwlist +server=/rk.com/127.0.0.1#5335 +ipset=/rk.com/gfwlist +server=/elasticbeanstalk.com/127.0.0.1#5335 +ipset=/elasticbeanstalk.com/gfwlist +server=/vk.com/127.0.0.1#5335 +ipset=/vk.com/gfwlist +server=/oxlife.co/127.0.0.1#5335 +ipset=/oxlife.co/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=/bffshd.com/127.0.0.1#5335 +ipset=/bffshd.com/gfwlist +server=/squirrelgroup.net/127.0.0.1#5335 +ipset=/squirrelgroup.net/gfwlist +server=/blogspot.sk/127.0.0.1#5335 +ipset=/blogspot.sk/gfwlist +server=/microsoft.ua/127.0.0.1#5335 +ipset=/microsoft.ua/gfwlist +server=/bountyhunterporn.com/127.0.0.1#5335 +ipset=/bountyhunterporn.com/gfwlist +server=/ipadair.cl/127.0.0.1#5335 +ipset=/ipadair.cl/gfwlist +server=/takegoto.com/127.0.0.1#5335 +ipset=/takegoto.com/gfwlist +server=/ikea.au/127.0.0.1#5335 +ipset=/ikea.au/gfwlist +server=/av69.tv/127.0.0.1#5335 +ipset=/av69.tv/gfwlist +server=/logitech.com.cn/127.0.0.1#5335 +ipset=/logitech.com.cn/gfwlist +server=/hbogoasia.sg/127.0.0.1#5335 +ipset=/hbogoasia.sg/gfwlist +server=/cbsplaylistserver.aws.syncbak.com/127.0.0.1#5335 +ipset=/cbsplaylistserver.aws.syncbak.com/gfwlist +server=/hpprinterinstalls.com/127.0.0.1#5335 +ipset=/hpprinterinstalls.com/gfwlist +server=/intercom.com/127.0.0.1#5335 +ipset=/intercom.com/gfwlist +server=/nikehelp.com/127.0.0.1#5335 +ipset=/nikehelp.com/gfwlist +server=/mallandrinhas.net/127.0.0.1#5335 +ipset=/mallandrinhas.net/gfwlist +server=/gettyimages.be/127.0.0.1#5335 +ipset=/gettyimages.be/gfwlist +server=/2k.com/127.0.0.1#5335 +ipset=/2k.com/gfwlist +server=/bestgames-2022.com/127.0.0.1#5335 +ipset=/bestgames-2022.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=/skype-edf.akadns.net/127.0.0.1#5335 +ipset=/skype-edf.akadns.net/gfwlist +server=/mastercard.com.co/127.0.0.1#5335 +ipset=/mastercard.com.co/gfwlist +server=/pornyeah.com/127.0.0.1#5335 +ipset=/pornyeah.com/gfwlist +server=/microsoft.ee/127.0.0.1#5335 +ipset=/microsoft.ee/gfwlist +server=/intel.md/127.0.0.1#5335 +ipset=/intel.md/gfwlist +server=/58avgo.com/127.0.0.1#5335 +ipset=/58avgo.com/gfwlist +server=/ass4all.com/127.0.0.1#5335 +ipset=/ass4all.com/gfwlist +server=/myxvids.com/127.0.0.1#5335 +ipset=/myxvids.com/gfwlist +server=/youtube.my/127.0.0.1#5335 +ipset=/youtube.my/gfwlist +server=/lasvegasbmw.com/127.0.0.1#5335 +ipset=/lasvegasbmw.com/gfwlist +server=/healthcarecareeronline.com/127.0.0.1#5335 +ipset=/healthcarecareeronline.com/gfwlist +server=/randyblue.com/127.0.0.1#5335 +ipset=/randyblue.com/gfwlist +server=/avstar6.com/127.0.0.1#5335 +ipset=/avstar6.com/gfwlist +server=/vipstudiocali.com/127.0.0.1#5335 +ipset=/vipstudiocali.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=/petite.one/127.0.0.1#5335 +ipset=/petite.one/gfwlist +server=/ro89.com/127.0.0.1#5335 +ipset=/ro89.com/gfwlist +server=/annualpelvicexam.com/127.0.0.1#5335 +ipset=/annualpelvicexam.com/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=/radiosvoboda.org/127.0.0.1#5335 +ipset=/radiosvoboda.org/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=/bluehatil.com/127.0.0.1#5335 +ipset=/bluehatil.com/gfwlist +server=/juliamiles.com/127.0.0.1#5335 +ipset=/juliamiles.com/gfwlist +server=/sexytuber.com/127.0.0.1#5335 +ipset=/sexytuber.com/gfwlist +server=/adorevids.com/127.0.0.1#5335 +ipset=/adorevids.com/gfwlist +server=/lavteam.org/127.0.0.1#5335 +ipset=/lavteam.org/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=/thinkboxsoftware.com/127.0.0.1#5335 +ipset=/thinkboxsoftware.com/gfwlist +server=/pornsexer.com/127.0.0.1#5335 +ipset=/pornsexer.com/gfwlist +server=/sellercommunity.com/127.0.0.1#5335 +ipset=/sellercommunity.com/gfwlist +server=/mastercard.co.id/127.0.0.1#5335 +ipset=/mastercard.co.id/gfwlist +server=/mirar.xxx/127.0.0.1#5335 +ipset=/mirar.xxx/gfwlist +server=/callabitch.org/127.0.0.1#5335 +ipset=/callabitch.org/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=/new-jero.net/127.0.0.1#5335 +ipset=/new-jero.net/gfwlist +server=/iphoto.no/127.0.0.1#5335 +ipset=/iphoto.no/gfwlist +server=/play4free.com/127.0.0.1#5335 +ipset=/play4free.com/gfwlist +server=/huluteam.com/127.0.0.1#5335 +ipset=/huluteam.com/gfwlist +server=/pornking.fun/127.0.0.1#5335 +ipset=/pornking.fun/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=/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=/pornoko.net/127.0.0.1#5335 +ipset=/pornoko.net/gfwlist +server=/thebeatsbydre.net/127.0.0.1#5335 +ipset=/thebeatsbydre.net/gfwlist +server=/torrindex.net/127.0.0.1#5335 +ipset=/torrindex.net/gfwlist +server=/google.com.pe/127.0.0.1#5335 +ipset=/google.com.pe/gfwlist +server=/vodafone.com/127.0.0.1#5335 +ipset=/vodafone.com/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=/pokemonswordshield.com/127.0.0.1#5335 +ipset=/pokemonswordshield.com/gfwlist +server=/btcbox.co.jp/127.0.0.1#5335 +ipset=/btcbox.co.jp/gfwlist +server=/alexanderstreet.com/127.0.0.1#5335 +ipset=/alexanderstreet.com/gfwlist +server=/picasaweb.net/127.0.0.1#5335 +ipset=/picasaweb.net/gfwlist +server=/youtube.lt/127.0.0.1#5335 +ipset=/youtube.lt/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=/desiporn.tube/127.0.0.1#5335 +ipset=/desiporn.tube/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=/beatsbydrehd.com/127.0.0.1#5335 +ipset=/beatsbydrehd.com/gfwlist +server=/google.ee/127.0.0.1#5335 +ipset=/google.ee/gfwlist +server=/tgp6.com/127.0.0.1#5335 +ipset=/tgp6.com/gfwlist +server=/amateur-porn-tube.net/127.0.0.1#5335 +ipset=/amateur-porn-tube.net/gfwlist +server=/powerautomate.com/127.0.0.1#5335 +ipset=/powerautomate.com/gfwlist +server=/javtag.net/127.0.0.1#5335 +ipset=/javtag.net/gfwlist +server=/volvotrucks.pl/127.0.0.1#5335 +ipset=/volvotrucks.pl/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=/freematuresgallery.com/127.0.0.1#5335 +ipset=/freematuresgallery.com/gfwlist +server=/iina.io/127.0.0.1#5335 +ipset=/iina.io/gfwlist +server=/foxnewspolitics.com/127.0.0.1#5335 +ipset=/foxnewspolitics.com/gfwlist +server=/zb.io/127.0.0.1#5335 +ipset=/zb.io/gfwlist +server=/hotgirlsclips.com/127.0.0.1#5335 +ipset=/hotgirlsclips.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=/visualstudio.net/127.0.0.1#5335 +ipset=/visualstudio.net/gfwlist +server=/conda.io/127.0.0.1#5335 +ipset=/conda.io/gfwlist +server=/xvideo.vlog.br/127.0.0.1#5335 +ipset=/xvideo.vlog.br/gfwlist +server=/nordstrom.com/127.0.0.1#5335 +ipset=/nordstrom.com/gfwlist +server=/vipheadphones.com/127.0.0.1#5335 +ipset=/vipheadphones.com/gfwlist +server=/premiumpornlist.com/127.0.0.1#5335 +ipset=/premiumpornlist.com/gfwlist +server=/hpprintersupplies.com/127.0.0.1#5335 +ipset=/hpprintersupplies.com/gfwlist +server=/intel.tw/127.0.0.1#5335 +ipset=/intel.tw/gfwlist +server=/freeteenporn.xxx/127.0.0.1#5335 +ipset=/freeteenporn.xxx/gfwlist +server=/1lib.to/127.0.0.1#5335 +ipset=/1lib.to/gfwlist +server=/thomsonreuters.com.pe/127.0.0.1#5335 +ipset=/thomsonreuters.com.pe/gfwlist +server=/freesitexxx.com/127.0.0.1#5335 +ipset=/freesitexxx.com/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=/pearsonschoolsandfecolleges.co.uk/127.0.0.1#5335 +ipset=/pearsonschoolsandfecolleges.co.uk/gfwlist +server=/beatsdreoutletsale.com/127.0.0.1#5335 +ipset=/beatsdreoutletsale.com/gfwlist +server=/demoprint.com/127.0.0.1#5335 +ipset=/demoprint.com/gfwlist +server=/v.gd/127.0.0.1#5335 +ipset=/v.gd/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=/onlyleaks.me/127.0.0.1#5335 +ipset=/onlyleaks.me/gfwlist +server=/sextubeset.com/127.0.0.1#5335 +ipset=/sextubeset.com/gfwlist +server=/youtube.by/127.0.0.1#5335 +ipset=/youtube.by/gfwlist +server=/family-simulator.io/127.0.0.1#5335 +ipset=/family-simulator.io/gfwlist +server=/tktube.com/127.0.0.1#5335 +ipset=/tktube.com/gfwlist +server=/freesexalbum.com/127.0.0.1#5335 +ipset=/freesexalbum.com/gfwlist +server=/casquemonsterbeatsbydre2013.com/127.0.0.1#5335 +ipset=/casquemonsterbeatsbydre2013.com/gfwlist +server=/kinkypeepz.com/127.0.0.1#5335 +ipset=/kinkypeepz.com/gfwlist +server=/video01.org/127.0.0.1#5335 +ipset=/video01.org/gfwlist +server=/asme.org/127.0.0.1#5335 +ipset=/asme.org/gfwlist +server=/yeyuehuachao11.com/127.0.0.1#5335 +ipset=/yeyuehuachao11.com/gfwlist +server=/shopbydre.com/127.0.0.1#5335 +ipset=/shopbydre.com/gfwlist +server=/erosberry.com/127.0.0.1#5335 +ipset=/erosberry.com/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=/6mature9.com/127.0.0.1#5335 +ipset=/6mature9.com/gfwlist +server=/besterpornos.com/127.0.0.1#5335 +ipset=/besterpornos.com/gfwlist +server=/gosq.co/127.0.0.1#5335 +ipset=/gosq.co/gfwlist +server=/aapl.tw/127.0.0.1#5335 +ipset=/aapl.tw/gfwlist +server=/truyengihay.net/127.0.0.1#5335 +ipset=/truyengihay.net/gfwlist +server=/sankei-kurashi.com/127.0.0.1#5335 +ipset=/sankei-kurashi.com/gfwlist +server=/hpindigopress.com/127.0.0.1#5335 +ipset=/hpindigopress.com/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=/spankbang.com/127.0.0.1#5335 +ipset=/spankbang.com/gfwlist +server=/shemaletube.pro/127.0.0.1#5335 +ipset=/shemaletube.pro/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=/etnet.com.hk/127.0.0.1#5335 +ipset=/etnet.com.hk/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=/uxxxporn.com/127.0.0.1#5335 +ipset=/uxxxporn.com/gfwlist +server=/dkbeatsbydre.com/127.0.0.1#5335 +ipset=/dkbeatsbydre.com/gfwlist +server=/dldshare.net/127.0.0.1#5335 +ipset=/dldshare.net/gfwlist +server=/coomer.party/127.0.0.1#5335 +ipset=/coomer.party/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=/cherrypornhd.com/127.0.0.1#5335 +ipset=/cherrypornhd.com/gfwlist +server=/seemyporn.com/127.0.0.1#5335 +ipset=/seemyporn.com/gfwlist +server=/blogspot.rs/127.0.0.1#5335 +ipset=/blogspot.rs/gfwlist +server=/bridgestonecomercial.com.br/127.0.0.1#5335 +ipset=/bridgestonecomercial.com.br/gfwlist +server=/dualeotruyen1s.com/127.0.0.1#5335 +ipset=/dualeotruyen1s.com/gfwlist +server=/tail-f.com/127.0.0.1#5335 +ipset=/tail-f.com/gfwlist +server=/sexxxx.rodeo/127.0.0.1#5335 +ipset=/sexxxx.rodeo/gfwlist +server=/bromo.com/127.0.0.1#5335 +ipset=/bromo.com/gfwlist +server=/yogalayout.com/127.0.0.1#5335 +ipset=/yogalayout.com/gfwlist +server=/hornygamer.com/127.0.0.1#5335 +ipset=/hornygamer.com/gfwlist +server=/jiuzhouyihuo.com/127.0.0.1#5335 +ipset=/jiuzhouyihuo.com/gfwlist +server=/parstream.net/127.0.0.1#5335 +ipset=/parstream.net/gfwlist +server=/xlinkz.to/127.0.0.1#5335 +ipset=/xlinkz.to/gfwlist +server=/mini-connected.nl/127.0.0.1#5335 +ipset=/mini-connected.nl/gfwlist +server=/indianpornfast.com/127.0.0.1#5335 +ipset=/indianpornfast.com/gfwlist +server=/drdrebeatsbillig.com/127.0.0.1#5335 +ipset=/drdrebeatsbillig.com/gfwlist +server=/youtube.co.kr/127.0.0.1#5335 +ipset=/youtube.co.kr/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=/xapplist.com/127.0.0.1#5335 +ipset=/xapplist.com/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=/exoticuganda.com/127.0.0.1#5335 +ipset=/exoticuganda.com/gfwlist +server=/europepmc.org/127.0.0.1#5335 +ipset=/europepmc.org/gfwlist +server=/toon-3d.com/127.0.0.1#5335 +ipset=/toon-3d.com/gfwlist +server=/miniwidget.ca/127.0.0.1#5335 +ipset=/miniwidget.ca/gfwlist +server=/alchemysynth.com/127.0.0.1#5335 +ipset=/alchemysynth.com/gfwlist +server=/mini.am/127.0.0.1#5335 +ipset=/mini.am/gfwlist +server=/reaxys.com/127.0.0.1#5335 +ipset=/reaxys.com/gfwlist +server=/mini-connected.at/127.0.0.1#5335 +ipset=/mini-connected.at/gfwlist +server=/ebaybags.com/127.0.0.1#5335 +ipset=/ebaybags.com/gfwlist +server=/appleone.space/127.0.0.1#5335 +ipset=/appleone.space/gfwlist +server=/yamaxun.com/127.0.0.1#5335 +ipset=/yamaxun.com/gfwlist +server=/briantreepayments.net/127.0.0.1#5335 +ipset=/briantreepayments.net/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=/influencersgonewild.com/127.0.0.1#5335 +ipset=/influencersgonewild.com/gfwlist +server=/one889.app/127.0.0.1#5335 +ipset=/one889.app/gfwlist +server=/city-hentai.com/127.0.0.1#5335 +ipset=/city-hentai.com/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=/sb-mobile.jp/127.0.0.1#5335 +ipset=/sb-mobile.jp/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=/serbiporno.net/127.0.0.1#5335 +ipset=/serbiporno.net/gfwlist +server=/volvotrucks.co.nz/127.0.0.1#5335 +ipset=/volvotrucks.co.nz/gfwlist +server=/chuporno.com/127.0.0.1#5335 +ipset=/chuporno.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=/valoryirene.com/127.0.0.1#5335 +ipset=/valoryirene.com/gfwlist +server=/shp.ee/127.0.0.1#5335 +ipset=/shp.ee/gfwlist +server=/javpush.com/127.0.0.1#5335 +ipset=/javpush.com/gfwlist +server=/bnetcmsus-a.akamaihd.net/127.0.0.1#5335 +ipset=/bnetcmsus-a.akamaihd.net/gfwlist +server=/hot-arab-films.com/127.0.0.1#5335 +ipset=/hot-arab-films.com/gfwlist +server=/clipsbai.com/127.0.0.1#5335 +ipset=/clipsbai.com/gfwlist +server=/capitaliq.com/127.0.0.1#5335 +ipset=/capitaliq.com/gfwlist +server=/ciscojabbervideo.net/127.0.0.1#5335 +ipset=/ciscojabbervideo.net/gfwlist +server=/bokep.net/127.0.0.1#5335 +ipset=/bokep.net/gfwlist +server=/mini.lu/127.0.0.1#5335 +ipset=/mini.lu/gfwlist +server=/qmap.pub/127.0.0.1#5335 +ipset=/qmap.pub/gfwlist +server=/booksc.eu/127.0.0.1#5335 +ipset=/booksc.eu/gfwlist +server=/nesaporn.mobi/127.0.0.1#5335 +ipset=/nesaporn.mobi/gfwlist +server=/softbankventuresasia.com/127.0.0.1#5335 +ipset=/softbankventuresasia.com/gfwlist +server=/pinterest.ca/127.0.0.1#5335 +ipset=/pinterest.ca/gfwlist +server=/69loli.com/127.0.0.1#5335 +ipset=/69loli.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=/identrust.net/127.0.0.1#5335 +ipset=/identrust.net/gfwlist +server=/booth.pm/127.0.0.1#5335 +ipset=/booth.pm/gfwlist +server=/canon.bg/127.0.0.1#5335 +ipset=/canon.bg/gfwlist +server=/appleenews.com/127.0.0.1#5335 +ipset=/appleenews.com/gfwlist +server=/mult34.com/127.0.0.1#5335 +ipset=/mult34.com/gfwlist +server=/google.ml/127.0.0.1#5335 +ipset=/google.ml/gfwlist +server=/tomonews.net/127.0.0.1#5335 +ipset=/tomonews.net/gfwlist +server=/imagepost.com/127.0.0.1#5335 +ipset=/imagepost.com/gfwlist +server=/custom-iphonecase.com/127.0.0.1#5335 +ipset=/custom-iphonecase.com/gfwlist +server=/hgsacx.com/127.0.0.1#5335 +ipset=/hgsacx.com/gfwlist +server=/myfoxdc.com/127.0.0.1#5335 +ipset=/myfoxdc.com/gfwlist +server=/youtube.com.do/127.0.0.1#5335 +ipset=/youtube.com.do/gfwlist +server=/foxnetworks.info/127.0.0.1#5335 +ipset=/foxnetworks.info/gfwlist +server=/phimsexnhanh.club/127.0.0.1#5335 +ipset=/phimsexnhanh.club/gfwlist +server=/porndudecasting.com/127.0.0.1#5335 +ipset=/porndudecasting.com/gfwlist +server=/xecce.com/127.0.0.1#5335 +ipset=/xecce.com/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=/kyodoimages.jp/127.0.0.1#5335 +ipset=/kyodoimages.jp/gfwlist +server=/sweetsinner.com/127.0.0.1#5335 +ipset=/sweetsinner.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=/yahoo.com.pr/127.0.0.1#5335 +ipset=/yahoo.com.pr/gfwlist +server=/thesafeporn.com/127.0.0.1#5335 +ipset=/thesafeporn.com/gfwlist +server=/gayasianamateurs.com/127.0.0.1#5335 +ipset=/gayasianamateurs.com/gfwlist +server=/youtube.kr/127.0.0.1#5335 +ipset=/youtube.kr/gfwlist +server=/shegg.com/127.0.0.1#5335 +ipset=/shegg.com/gfwlist +server=/muse.jhu.edu/127.0.0.1#5335 +ipset=/muse.jhu.edu/gfwlist +server=/luoli.info/127.0.0.1#5335 +ipset=/luoli.info/gfwlist +server=/directvsavings.com/127.0.0.1#5335 +ipset=/directvsavings.com/gfwlist +server=/hddgames.cc/127.0.0.1#5335 +ipset=/hddgames.cc/gfwlist +server=/ebay.com.ph/127.0.0.1#5335 +ipset=/ebay.com.ph/gfwlist +server=/indianpornvideos2.com/127.0.0.1#5335 +ipset=/indianpornvideos2.com/gfwlist +server=/cortanaanalytics.com/127.0.0.1#5335 +ipset=/cortanaanalytics.com/gfwlist +server=/thelegendarystarfy.com/127.0.0.1#5335 +ipset=/thelegendarystarfy.com/gfwlist +server=/gogole.com/127.0.0.1#5335 +ipset=/gogole.com/gfwlist +server=/kodi.tv/127.0.0.1#5335 +ipset=/kodi.tv/gfwlist +server=/xxxtubeset.com/127.0.0.1#5335 +ipset=/xxxtubeset.com/gfwlist +server=/blackstonespoliceservice.com/127.0.0.1#5335 +ipset=/blackstonespoliceservice.com/gfwlist +server=/usercontent.dev/127.0.0.1#5335 +ipset=/usercontent.dev/gfwlist +server=/outbound.io/127.0.0.1#5335 +ipset=/outbound.io/gfwlist +server=/applefilmaker.com/127.0.0.1#5335 +ipset=/applefilmaker.com/gfwlist +server=/wofl.tv/127.0.0.1#5335 +ipset=/wofl.tv/gfwlist +server=/sexmodel.wordpress.com/127.0.0.1#5335 +ipset=/sexmodel.wordpress.com/gfwlist +server=/instagran.com/127.0.0.1#5335 +ipset=/instagran.com/gfwlist +server=/yandex.de/127.0.0.1#5335 +ipset=/yandex.de/gfwlist +server=/beatsdre-monster.com/127.0.0.1#5335 +ipset=/beatsdre-monster.com/gfwlist +server=/xxx2023.com/127.0.0.1#5335 +ipset=/xxx2023.com/gfwlist +server=/steamcontent.com/127.0.0.1#5335 +ipset=/steamcontent.com/gfwlist +server=/certinomis.fr/127.0.0.1#5335 +ipset=/certinomis.fr/gfwlist +server=/javtrust.com/127.0.0.1#5335 +ipset=/javtrust.com/gfwlist +server=/topanime.biz/127.0.0.1#5335 +ipset=/topanime.biz/gfwlist +server=/hentaiseason.com/127.0.0.1#5335 +ipset=/hentaiseason.com/gfwlist +server=/bestiality.guru/127.0.0.1#5335 +ipset=/bestiality.guru/gfwlist +server=/cheapmonsterbeatssale.com/127.0.0.1#5335 +ipset=/cheapmonsterbeatssale.com/gfwlist +server=/paypal-innovationlab.com/127.0.0.1#5335 +ipset=/paypal-innovationlab.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=/avstar05.me/127.0.0.1#5335 +ipset=/avstar05.me/gfwlist +server=/zuckerberg.net/127.0.0.1#5335 +ipset=/zuckerberg.net/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=/intel.de/127.0.0.1#5335 +ipset=/intel.de/gfwlist +server=/pornoitaliano.com/127.0.0.1#5335 +ipset=/pornoitaliano.com/gfwlist +server=/leaguoflegends.com/127.0.0.1#5335 +ipset=/leaguoflegends.com/gfwlist +server=/chatsex.xxx/127.0.0.1#5335 +ipset=/chatsex.xxx/gfwlist +server=/sharmota.com/127.0.0.1#5335 +ipset=/sharmota.com/gfwlist +server=/vfsco.us/127.0.0.1#5335 +ipset=/vfsco.us/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=/volvobuses.com/127.0.0.1#5335 +ipset=/volvobuses.com/gfwlist +server=/over18arcade.com/127.0.0.1#5335 +ipset=/over18arcade.com/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=/yeswegays.com/127.0.0.1#5335 +ipset=/yeswegays.com/gfwlist +server=/swisssign-group.li/127.0.0.1#5335 +ipset=/swisssign-group.li/gfwlist +server=/msdn.com/127.0.0.1#5335 +ipset=/msdn.com/gfwlist +server=/nbyy.tv/127.0.0.1#5335 +ipset=/nbyy.tv/gfwlist +server=/simplifycommerce.com/127.0.0.1#5335 +ipset=/simplifycommerce.com/gfwlist +server=/espn.hb.omtrdc.net/127.0.0.1#5335 +ipset=/espn.hb.omtrdc.net/gfwlist +server=/hentaitube.online/127.0.0.1#5335 +ipset=/hentaitube.online/gfwlist +server=/nextstop.com/127.0.0.1#5335 +ipset=/nextstop.com/gfwlist +server=/niosii.com/127.0.0.1#5335 +ipset=/niosii.com/gfwlist +server=/adultgamestop.com/127.0.0.1#5335 +ipset=/adultgamestop.com/gfwlist +server=/apple.ee/127.0.0.1#5335 +ipset=/apple.ee/gfwlist +server=/live-patreon-marketing.pantheonsite.io/127.0.0.1#5335 +ipset=/live-patreon-marketing.pantheonsite.io/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=/thepornbet.com/127.0.0.1#5335 +ipset=/thepornbet.com/gfwlist +server=/galaxymobile.jp/127.0.0.1#5335 +ipset=/galaxymobile.jp/gfwlist +server=/volvobuses.fi/127.0.0.1#5335 +ipset=/volvobuses.fi/gfwlist +server=/masaladesi.com/127.0.0.1#5335 +ipset=/masaladesi.com/gfwlist +server=/redlightcenter.com/127.0.0.1#5335 +ipset=/redlightcenter.com/gfwlist +server=/disneystreaming.com/127.0.0.1#5335 +ipset=/disneystreaming.com/gfwlist +server=/xerotica.com/127.0.0.1#5335 +ipset=/xerotica.com/gfwlist +server=/ikea.ee/127.0.0.1#5335 +ipset=/ikea.ee/gfwlist +server=/k8s.io/127.0.0.1#5335 +ipset=/k8s.io/gfwlist +server=/blogblog.com/127.0.0.1#5335 +ipset=/blogblog.com/gfwlist +server=/ekolojik.org/127.0.0.1#5335 +ipset=/ekolojik.org/gfwlist +server=/facebgook.com/127.0.0.1#5335 +ipset=/facebgook.com/gfwlist +server=/beatsshop-uk.com/127.0.0.1#5335 +ipset=/beatsshop-uk.com/gfwlist +server=/camsvids.tv/127.0.0.1#5335 +ipset=/camsvids.tv/gfwlist +server=/jetfuelapp.com/127.0.0.1#5335 +ipset=/jetfuelapp.com/gfwlist +server=/gsccdn.com/127.0.0.1#5335 +ipset=/gsccdn.com/gfwlist +server=/attdns.com/127.0.0.1#5335 +ipset=/attdns.com/gfwlist +server=/vmwareemeablog.com/127.0.0.1#5335 +ipset=/vmwareemeablog.com/gfwlist +server=/bmw-product-highlights.com/127.0.0.1#5335 +ipset=/bmw-product-highlights.com/gfwlist +server=/vscode.search.windows.net/127.0.0.1#5335 +ipset=/vscode.search.windows.net/gfwlist +server=/jizzboom.com/127.0.0.1#5335 +ipset=/jizzboom.com/gfwlist +server=/whatsapp.org/127.0.0.1#5335 +ipset=/whatsapp.org/gfwlist +server=/netflixdnstest10.com/127.0.0.1#5335 +ipset=/netflixdnstest10.com/gfwlist +server=/toprealvideos.com/127.0.0.1#5335 +ipset=/toprealvideos.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=/boltdns.net/127.0.0.1#5335 +ipset=/boltdns.net/gfwlist +server=/mastercard.az/127.0.0.1#5335 +ipset=/mastercard.az/gfwlist +server=/porndork.com/127.0.0.1#5335 +ipset=/porndork.com/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=/omg.adult/127.0.0.1#5335 +ipset=/omg.adult/gfwlist +server=/amateurslovesporn.com/127.0.0.1#5335 +ipset=/amateurslovesporn.com/gfwlist +server=/googlefinland.com/127.0.0.1#5335 +ipset=/googlefinland.com/gfwlist +server=/shellcheck.net/127.0.0.1#5335 +ipset=/shellcheck.net/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=/discord.store/127.0.0.1#5335 +ipset=/discord.store/gfwlist +server=/angulardart.org/127.0.0.1#5335 +ipset=/angulardart.org/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=/tandberg.com/127.0.0.1#5335 +ipset=/tandberg.com/gfwlist +server=/tryrating.com/127.0.0.1#5335 +ipset=/tryrating.com/gfwlist +server=/hpbestbuy.com/127.0.0.1#5335 +ipset=/hpbestbuy.com/gfwlist +server=/familyporn.tv/127.0.0.1#5335 +ipset=/familyporn.tv/gfwlist +server=/axios.com/127.0.0.1#5335 +ipset=/axios.com/gfwlist +server=/pornodanke.com/127.0.0.1#5335 +ipset=/pornodanke.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=/camwhoreshd.com/127.0.0.1#5335 +ipset=/camwhoreshd.com/gfwlist +server=/gwiki.net/127.0.0.1#5335 +ipset=/gwiki.net/gfwlist +server=/epochmediagroup.com/127.0.0.1#5335 +ipset=/epochmediagroup.com/gfwlist +server=/ebayenterprise.net/127.0.0.1#5335 +ipset=/ebayenterprise.net/gfwlist +server=/hentaisub.info/127.0.0.1#5335 +ipset=/hentaisub.info/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=/digitalplayground.com/127.0.0.1#5335 +ipset=/digitalplayground.com/gfwlist +server=/2371tom.com/127.0.0.1#5335 +ipset=/2371tom.com/gfwlist +server=/google.mv/127.0.0.1#5335 +ipset=/google.mv/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=/jav-vr.net/127.0.0.1#5335 +ipset=/jav-vr.net/gfwlist +server=/updatetube.com/127.0.0.1#5335 +ipset=/updatetube.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=/getdropbox.com/127.0.0.1#5335 +ipset=/getdropbox.com/gfwlist +server=/bastillepost.com/127.0.0.1#5335 +ipset=/bastillepost.com/gfwlist +server=/ikea.ch/127.0.0.1#5335 +ipset=/ikea.ch/gfwlist +server=/ikea.gr/127.0.0.1#5335 +ipset=/ikea.gr/gfwlist +server=/camster.com/127.0.0.1#5335 +ipset=/camster.com/gfwlist +server=/trueanal.com/127.0.0.1#5335 +ipset=/trueanal.com/gfwlist +server=/foxsports.pe/127.0.0.1#5335 +ipset=/foxsports.pe/gfwlist +server=/milta1980.co.uk/127.0.0.1#5335 +ipset=/milta1980.co.uk/gfwlist +server=/indiangirlsclub.com/127.0.0.1#5335 +ipset=/indiangirlsclub.com/gfwlist +server=/justswallows.com/127.0.0.1#5335 +ipset=/justswallows.com/gfwlist +server=/bmw-motorrad.co/127.0.0.1#5335 +ipset=/bmw-motorrad.co/gfwlist +server=/google.hu/127.0.0.1#5335 +ipset=/google.hu/gfwlist +server=/sissy-university.com/127.0.0.1#5335 +ipset=/sissy-university.com/gfwlist +server=/bmw-connecteddrive.ru/127.0.0.1#5335 +ipset=/bmw-connecteddrive.ru/gfwlist +server=/hkbnes.net/127.0.0.1#5335 +ipset=/hkbnes.net/gfwlist +server=/hdouban.com/127.0.0.1#5335 +ipset=/hdouban.com/gfwlist +server=/dogspics.net/127.0.0.1#5335 +ipset=/dogspics.net/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=/scholar.google.com.au/127.0.0.1#5335 +ipset=/scholar.google.com.au/gfwlist +server=/bmw-museum.com/127.0.0.1#5335 +ipset=/bmw-museum.com/gfwlist +server=/foxgay.com/127.0.0.1#5335 +ipset=/foxgay.com/gfwlist +server=/gfpics.com/127.0.0.1#5335 +ipset=/gfpics.com/gfwlist +server=/vmwlabconnect.com/127.0.0.1#5335 +ipset=/vmwlabconnect.com/gfwlist +server=/indiansexpussy.com/127.0.0.1#5335 +ipset=/indiansexpussy.com/gfwlist +server=/t21ipau.nikkei.co.jp/127.0.0.1#5335 +ipset=/t21ipau.nikkei.co.jp/gfwlist +server=/kyodo-d.info/127.0.0.1#5335 +ipset=/kyodo-d.info/gfwlist +server=/qwant.it/127.0.0.1#5335 +ipset=/qwant.it/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=/mat6tube.com/127.0.0.1#5335 +ipset=/mat6tube.com/gfwlist +server=/acmvalidationsaws.com/127.0.0.1#5335 +ipset=/acmvalidationsaws.com/gfwlist +server=/hkbigman.net/127.0.0.1#5335 +ipset=/hkbigman.net/gfwlist +server=/beatsbydreheadphones-nz.com/127.0.0.1#5335 +ipset=/beatsbydreheadphones-nz.com/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=/3animalsextube.com/127.0.0.1#5335 +ipset=/3animalsextube.com/gfwlist +server=/macintoshsoftware.com/127.0.0.1#5335 +ipset=/macintoshsoftware.com/gfwlist +server=/onlyhentaistuff.com/127.0.0.1#5335 +ipset=/onlyhentaistuff.com/gfwlist +server=/sharizelvideos.com/127.0.0.1#5335 +ipset=/sharizelvideos.com/gfwlist +server=/indianporngirls.com/127.0.0.1#5335 +ipset=/indianporngirls.com/gfwlist +server=/scholar.google.lt/127.0.0.1#5335 +ipset=/scholar.google.lt/gfwlist +server=/minicaribbean.com/127.0.0.1#5335 +ipset=/minicaribbean.com/gfwlist +server=/vfsco.ch/127.0.0.1#5335 +ipset=/vfsco.ch/gfwlist +server=/javhard.org/127.0.0.1#5335 +ipset=/javhard.org/gfwlist +server=/adidas.ru/127.0.0.1#5335 +ipset=/adidas.ru/gfwlist +server=/yourfantasybeginsnow.com/127.0.0.1#5335 +ipset=/yourfantasybeginsnow.com/gfwlist +server=/milfpornpics.xxx/127.0.0.1#5335 +ipset=/milfpornpics.xxx/gfwlist +server=/mickey.tv/127.0.0.1#5335 +ipset=/mickey.tv/gfwlist +server=/bmw-diplomatic-sales.com/127.0.0.1#5335 +ipset=/bmw-diplomatic-sales.com/gfwlist +server=/appleid.hk/127.0.0.1#5335 +ipset=/appleid.hk/gfwlist +server=/paypal-photocard.com/127.0.0.1#5335 +ipset=/paypal-photocard.com/gfwlist +server=/misa-prod.s3.ap-northeast-1.amazonaws.com/127.0.0.1#5335 +ipset=/misa-prod.s3.ap-northeast-1.amazonaws.com/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=/4ertik.live/127.0.0.1#5335 +ipset=/4ertik.live/gfwlist +server=/gitlab.net/127.0.0.1#5335 +ipset=/gitlab.net/gfwlist +server=/kissjav.li/127.0.0.1#5335 +ipset=/kissjav.li/gfwlist +server=/kaob3.xyz/127.0.0.1#5335 +ipset=/kaob3.xyz/gfwlist +server=/tblop.com/127.0.0.1#5335 +ipset=/tblop.com/gfwlist +server=/oxfordscholarship.com/127.0.0.1#5335 +ipset=/oxfordscholarship.com/gfwlist +server=/wellmaturetube.com/127.0.0.1#5335 +ipset=/wellmaturetube.com/gfwlist +server=/porkahd.co/127.0.0.1#5335 +ipset=/porkahd.co/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=/the-japan-news.com/127.0.0.1#5335 +ipset=/the-japan-news.com/gfwlist +server=/pornogramxxx.com/127.0.0.1#5335 +ipset=/pornogramxxx.com/gfwlist +server=/ibb.co/127.0.0.1#5335 +ipset=/ibb.co/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=/canon.kz/127.0.0.1#5335 +ipset=/canon.kz/gfwlist +server=/theclyster.com/127.0.0.1#5335 +ipset=/theclyster.com/gfwlist +server=/youtube.ng/127.0.0.1#5335 +ipset=/youtube.ng/gfwlist +server=/ipns.co/127.0.0.1#5335 +ipset=/ipns.co/gfwlist +server=/microsoft.rs/127.0.0.1#5335 +ipset=/microsoft.rs/gfwlist +server=/enemasupplier.com/127.0.0.1#5335 +ipset=/enemasupplier.com/gfwlist +server=/beatsbydrecustomwireless.com/127.0.0.1#5335 +ipset=/beatsbydrecustomwireless.com/gfwlist +server=/google.co.ug/127.0.0.1#5335 +ipset=/google.co.ug/gfwlist +server=/mashaalradio.com/127.0.0.1#5335 +ipset=/mashaalradio.com/gfwlist +server=/wireless.radio/127.0.0.1#5335 +ipset=/wireless.radio/gfwlist +server=/vultr.com/127.0.0.1#5335 +ipset=/vultr.com/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=/azureiotsuite.com/127.0.0.1#5335 +ipset=/azureiotsuite.com/gfwlist +server=/i.jeded.com/127.0.0.1#5335 +ipset=/i.jeded.com/gfwlist +server=/swingers-homemade-videos.com/127.0.0.1#5335 +ipset=/swingers-homemade-videos.com/gfwlist +server=/visamiddleeast.com/127.0.0.1#5335 +ipset=/visamiddleeast.com/gfwlist +server=/banatal3arab.com/127.0.0.1#5335 +ipset=/banatal3arab.com/gfwlist +server=/proxyadult.org/127.0.0.1#5335 +ipset=/proxyadult.org/gfwlist +server=/visaluxuryhotelcollection.com.mx/127.0.0.1#5335 +ipset=/visaluxuryhotelcollection.com.mx/gfwlist +server=/gastrointestinalexam.com/127.0.0.1#5335 +ipset=/gastrointestinalexam.com/gfwlist +server=/imovie.eu/127.0.0.1#5335 +ipset=/imovie.eu/gfwlist +server=/wantmywife.com/127.0.0.1#5335 +ipset=/wantmywife.com/gfwlist +server=/avstar2.com/127.0.0.1#5335 +ipset=/avstar2.com/gfwlist +server=/dawngatechronicles.com/127.0.0.1#5335 +ipset=/dawngatechronicles.com/gfwlist +server=/ohsexotube.com/127.0.0.1#5335 +ipset=/ohsexotube.com/gfwlist +server=/facultyopinions.com/127.0.0.1#5335 +ipset=/facultyopinions.com/gfwlist +server=/azureedge.net/127.0.0.1#5335 +ipset=/azureedge.net/gfwlist +server=/faicbooc.com/127.0.0.1#5335 +ipset=/faicbooc.com/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=/filme2.xxx/127.0.0.1#5335 +ipset=/filme2.xxx/gfwlist +server=/dssott.com/127.0.0.1#5335 +ipset=/dssott.com/gfwlist +server=/duckmovie.com/127.0.0.1#5335 +ipset=/duckmovie.com/gfwlist +server=/earpod.net/127.0.0.1#5335 +ipset=/earpod.net/gfwlist +server=/ss7.app/127.0.0.1#5335 +ipset=/ss7.app/gfwlist +server=/ipfs.anonymize.com/127.0.0.1#5335 +ipset=/ipfs.anonymize.com/gfwlist +server=/megapornpics.com/127.0.0.1#5335 +ipset=/megapornpics.com/gfwlist +server=/ipodcleaner.com/127.0.0.1#5335 +ipset=/ipodcleaner.com/gfwlist +server=/facebof.com/127.0.0.1#5335 +ipset=/facebof.com/gfwlist +server=/apyarstorybooks.blogspot.com/127.0.0.1#5335 +ipset=/apyarstorybooks.blogspot.com/gfwlist +server=/activelearnprimary.com.au/127.0.0.1#5335 +ipset=/activelearnprimary.com.au/gfwlist +server=/deepfreeze.tech/127.0.0.1#5335 +ipset=/deepfreeze.tech/gfwlist +server=/swingersexorgy.com/127.0.0.1#5335 +ipset=/swingersexorgy.com/gfwlist +server=/leavinghpinc.com/127.0.0.1#5335 +ipset=/leavinghpinc.com/gfwlist +server=/foampositeshoes.com/127.0.0.1#5335 +ipset=/foampositeshoes.com/gfwlist +server=/pornadoo.com/127.0.0.1#5335 +ipset=/pornadoo.com/gfwlist +server=/ilecture.co.nz/127.0.0.1#5335 +ipset=/ilecture.co.nz/gfwlist +server=/volvotrucks.pe/127.0.0.1#5335 +ipset=/volvotrucks.pe/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=/immoral.jp/127.0.0.1#5335 +ipset=/immoral.jp/gfwlist +server=/visa.com.gt/127.0.0.1#5335 +ipset=/visa.com.gt/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=/premiumbooty.com/127.0.0.1#5335 +ipset=/premiumbooty.com/gfwlist +server=/nineteentube.com/127.0.0.1#5335 +ipset=/nineteentube.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=/paypal-activate.org/127.0.0.1#5335 +ipset=/paypal-activate.org/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=/adultgames18.com/127.0.0.1#5335 +ipset=/adultgames18.com/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=/strepsils.pt/127.0.0.1#5335 +ipset=/strepsils.pt/gfwlist +server=/darksidemagazine.com/127.0.0.1#5335 +ipset=/darksidemagazine.com/gfwlist +server=/crazyshit.com/127.0.0.1#5335 +ipset=/crazyshit.com/gfwlist +server=/bustymomsvideo.com/127.0.0.1#5335 +ipset=/bustymomsvideo.com/gfwlist +server=/archiveofourown.com/127.0.0.1#5335 +ipset=/archiveofourown.com/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=/wetplace.com/127.0.0.1#5335 +ipset=/wetplace.com/gfwlist +server=/eromanga-school.com/127.0.0.1#5335 +ipset=/eromanga-school.com/gfwlist +server=/babesbang.com/127.0.0.1#5335 +ipset=/babesbang.com/gfwlist +server=/alpherafinancialservices.in/127.0.0.1#5335 +ipset=/alpherafinancialservices.in/gfwlist +server=/mask.icloud.com/127.0.0.1#5335 +ipset=/mask.icloud.com/gfwlist +server=/photos18.com/127.0.0.1#5335 +ipset=/photos18.com/gfwlist +server=/gohentai.net/127.0.0.1#5335 +ipset=/gohentai.net/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=/yandex.fr/127.0.0.1#5335 +ipset=/yandex.fr/gfwlist +server=/dianapost.com/127.0.0.1#5335 +ipset=/dianapost.com/gfwlist +server=/grss-ieee.org/127.0.0.1#5335 +ipset=/grss-ieee.org/gfwlist +server=/fandom.zendesk.com/127.0.0.1#5335 +ipset=/fandom.zendesk.com/gfwlist +server=/escortrankings.uk/127.0.0.1#5335 +ipset=/escortrankings.uk/gfwlist +server=/ptzwx.com/127.0.0.1#5335 +ipset=/ptzwx.com/gfwlist +server=/strepsils.si/127.0.0.1#5335 +ipset=/strepsils.si/gfwlist +server=/uriminzokkiri.com/127.0.0.1#5335 +ipset=/uriminzokkiri.com/gfwlist +server=/as-hls-uk-live.akamaized.net/127.0.0.1#5335 +ipset=/as-hls-uk-live.akamaized.net/gfwlist +server=/winudf.com/127.0.0.1#5335 +ipset=/winudf.com/gfwlist +server=/boylove.live/127.0.0.1#5335 +ipset=/boylove.live/gfwlist +server=/paypal-center.org/127.0.0.1#5335 +ipset=/paypal-center.org/gfwlist +server=/discordactivities.com/127.0.0.1#5335 +ipset=/discordactivities.com/gfwlist +server=/familymart.com.my/127.0.0.1#5335 +ipset=/familymart.com.my/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=/nicky.xxx/127.0.0.1#5335 +ipset=/nicky.xxx/gfwlist +server=/sxarab.top/127.0.0.1#5335 +ipset=/sxarab.top/gfwlist +server=/airsupportapp.com/127.0.0.1#5335 +ipset=/airsupportapp.com/gfwlist +server=/tati-log.com/127.0.0.1#5335 +ipset=/tati-log.com/gfwlist +server=/akatns.net/127.0.0.1#5335 +ipset=/akatns.net/gfwlist +server=/zhainanjidid.top/127.0.0.1#5335 +ipset=/zhainanjidid.top/gfwlist +server=/porngo.com/127.0.0.1#5335 +ipset=/porngo.com/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=/casquebeatsfracheter.com/127.0.0.1#5335 +ipset=/casquebeatsfracheter.com/gfwlist +server=/ibm.eu/127.0.0.1#5335 +ipset=/ibm.eu/gfwlist +server=/analscreen.com/127.0.0.1#5335 +ipset=/analscreen.com/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=/clco.cc/127.0.0.1#5335 +ipset=/clco.cc/gfwlist +server=/intel.ba/127.0.0.1#5335 +ipset=/intel.ba/gfwlist +server=/imgsmail.ru/127.0.0.1#5335 +ipset=/imgsmail.ru/gfwlist +server=/duckduckgo.com.mx/127.0.0.1#5335 +ipset=/duckduckgo.com.mx/gfwlist +server=/machogaytube.com/127.0.0.1#5335 +ipset=/machogaytube.com/gfwlist +server=/bitporno.com/127.0.0.1#5335 +ipset=/bitporno.com/gfwlist +server=/pearsoncmg.com/127.0.0.1#5335 +ipset=/pearsoncmg.com/gfwlist +server=/underlords.com/127.0.0.1#5335 +ipset=/underlords.com/gfwlist +server=/karger.com/127.0.0.1#5335 +ipset=/karger.com/gfwlist +server=/beatsdre.net/127.0.0.1#5335 +ipset=/beatsdre.net/gfwlist +server=/aebn.com/127.0.0.1#5335 +ipset=/aebn.com/gfwlist +server=/revenue-performance-management.com/127.0.0.1#5335 +ipset=/revenue-performance-management.com/gfwlist +server=/coithienthai.com/127.0.0.1#5335 +ipset=/coithienthai.com/gfwlist +server=/epochtimeshk.org/127.0.0.1#5335 +ipset=/epochtimeshk.org/gfwlist +server=/watch-porn.net/127.0.0.1#5335 +ipset=/watch-porn.net/gfwlist +server=/google.com.ag/127.0.0.1#5335 +ipset=/google.com.ag/gfwlist +server=/yahoo.com.gt/127.0.0.1#5335 +ipset=/yahoo.com.gt/gfwlist +server=/mini.com.pl/127.0.0.1#5335 +ipset=/mini.com.pl/gfwlist +server=/miniso.by/127.0.0.1#5335 +ipset=/miniso.by/gfwlist +server=/beatsbydres-shop.com/127.0.0.1#5335 +ipset=/beatsbydres-shop.com/gfwlist +server=/pokemon.com/127.0.0.1#5335 +ipset=/pokemon.com/gfwlist +server=/nijifeti.com/127.0.0.1#5335 +ipset=/nijifeti.com/gfwlist +server=/videoindexer.ai/127.0.0.1#5335 +ipset=/videoindexer.ai/gfwlist +server=/youporner.eu/127.0.0.1#5335 +ipset=/youporner.eu/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=/realestate.com.au/127.0.0.1#5335 +ipset=/realestate.com.au/gfwlist +server=/calgon.tv/127.0.0.1#5335 +ipset=/calgon.tv/gfwlist +server=/javsex.to/127.0.0.1#5335 +ipset=/javsex.to/gfwlist +server=/mylf.com/127.0.0.1#5335 +ipset=/mylf.com/gfwlist +server=/fm4.jp/127.0.0.1#5335 +ipset=/fm4.jp/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=/swisssign-group.com/127.0.0.1#5335 +ipset=/swisssign-group.com/gfwlist +server=/askubuntu.com/127.0.0.1#5335 +ipset=/askubuntu.com/gfwlist +server=/nfsc.global/127.0.0.1#5335 +ipset=/nfsc.global/gfwlist +server=/sociolotron.com/127.0.0.1#5335 +ipset=/sociolotron.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=/gputechconf.co.kr/127.0.0.1#5335 +ipset=/gputechconf.co.kr/gfwlist +server=/morganclaypool.com/127.0.0.1#5335 +ipset=/morganclaypool.com/gfwlist +server=/xn--6eup7j.net/127.0.0.1#5335 +ipset=/xn--6eup7j.net/gfwlist +server=/youtube.com.hn/127.0.0.1#5335 +ipset=/youtube.com.hn/gfwlist +server=/packer.io/127.0.0.1#5335 +ipset=/packer.io/gfwlist +server=/bethsoft.com/127.0.0.1#5335 +ipset=/bethsoft.com/gfwlist +server=/epikporn.com/127.0.0.1#5335 +ipset=/epikporn.com/gfwlist +server=/filmporno.it/127.0.0.1#5335 +ipset=/filmporno.it/gfwlist +server=/moez-m.com/127.0.0.1#5335 +ipset=/moez-m.com/gfwlist +server=/microsoftgamestack.com/127.0.0.1#5335 +ipset=/microsoftgamestack.com/gfwlist +server=/9to5terminal.com/127.0.0.1#5335 +ipset=/9to5terminal.com/gfwlist +server=/anilos.com/127.0.0.1#5335 +ipset=/anilos.com/gfwlist +server=/travelex.it/127.0.0.1#5335 +ipset=/travelex.it/gfwlist +server=/asproexapi.com/127.0.0.1#5335 +ipset=/asproexapi.com/gfwlist +server=/yahoo.com.lb/127.0.0.1#5335 +ipset=/yahoo.com.lb/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=/v8project.org/127.0.0.1#5335 +ipset=/v8project.org/gfwlist +server=/avgigi.com/127.0.0.1#5335 +ipset=/avgigi.com/gfwlist +server=/pornomineiro.com/127.0.0.1#5335 +ipset=/pornomineiro.com/gfwlist +server=/veet.us/127.0.0.1#5335 +ipset=/veet.us/gfwlist +server=/yiqiedoushiganggangkaishi.org/127.0.0.1#5335 +ipset=/yiqiedoushiganggangkaishi.org/gfwlist +server=/porno800.com/127.0.0.1#5335 +ipset=/porno800.com/gfwlist +server=/yarnpkg.com/127.0.0.1#5335 +ipset=/yarnpkg.com/gfwlist +server=/visa.mn/127.0.0.1#5335 +ipset=/visa.mn/gfwlist +server=/adidas.co.in/127.0.0.1#5335 +ipset=/adidas.co.in/gfwlist +server=/cc18.tv/127.0.0.1#5335 +ipset=/cc18.tv/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=/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=/sustainthesound.com/127.0.0.1#5335 +ipset=/sustainthesound.com/gfwlist +server=/budatt.com/127.0.0.1#5335 +ipset=/budatt.com/gfwlist +server=/kilmeadeandfriends.com/127.0.0.1#5335 +ipset=/kilmeadeandfriends.com/gfwlist +server=/nikenews.com/127.0.0.1#5335 +ipset=/nikenews.com/gfwlist +server=/bestporncomix.com/127.0.0.1#5335 +ipset=/bestporncomix.com/gfwlist +server=/onenote.com/127.0.0.1#5335 +ipset=/onenote.com/gfwlist +server=/javtorrent.me/127.0.0.1#5335 +ipset=/javtorrent.me/gfwlist +server=/bmwmass.com/127.0.0.1#5335 +ipset=/bmwmass.com/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=/free3dadultgames.com/127.0.0.1#5335 +ipset=/free3dadultgames.com/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=/ourshemales.com/127.0.0.1#5335 +ipset=/ourshemales.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=/milfs-now.com/127.0.0.1#5335 +ipset=/milfs-now.com/gfwlist +server=/dengiamerika.com/127.0.0.1#5335 +ipset=/dengiamerika.com/gfwlist +server=/sex0098.com/127.0.0.1#5335 +ipset=/sex0098.com/gfwlist +server=/discordpartygames.com/127.0.0.1#5335 +ipset=/discordpartygames.com/gfwlist +server=/twitterinc.com/127.0.0.1#5335 +ipset=/twitterinc.com/gfwlist +server=/miniso.my/127.0.0.1#5335 +ipset=/miniso.my/gfwlist +server=/pearsonassessment.be/127.0.0.1#5335 +ipset=/pearsonassessment.be/gfwlist +server=/wujieliulan.com/127.0.0.1#5335 +ipset=/wujieliulan.com/gfwlist +server=/onsalekey.com/127.0.0.1#5335 +ipset=/onsalekey.com/gfwlist +server=/issitedownrightnow.com/127.0.0.1#5335 +ipset=/issitedownrightnow.com/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=/directvmonitoring.com/127.0.0.1#5335 +ipset=/directvmonitoring.com/gfwlist +server=/strepsils.at/127.0.0.1#5335 +ipset=/strepsils.at/gfwlist +server=/kenyanporn.blogspot.com/127.0.0.1#5335 +ipset=/kenyanporn.blogspot.com/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=/pornocaserotube.com/127.0.0.1#5335 +ipset=/pornocaserotube.com/gfwlist +server=/q13.com/127.0.0.1#5335 +ipset=/q13.com/gfwlist +server=/adult-home-videos.com/127.0.0.1#5335 +ipset=/adult-home-videos.com/gfwlist +server=/pornofilmlist.com/127.0.0.1#5335 +ipset=/pornofilmlist.com/gfwlist +server=/steamcommunity.com/127.0.0.1#5335 +ipset=/steamcommunity.com/gfwlist +server=/onlineporn-vids.com/127.0.0.1#5335 +ipset=/onlineporn-vids.com/gfwlist +server=/airwick.cl/127.0.0.1#5335 +ipset=/airwick.cl/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=/worldsex.com/127.0.0.1#5335 +ipset=/worldsex.com/gfwlist +server=/bbbaihu.vip/127.0.0.1#5335 +ipset=/bbbaihu.vip/gfwlist +server=/haho.moe/127.0.0.1#5335 +ipset=/haho.moe/gfwlist +server=/bloomsburydesignlibrary.com/127.0.0.1#5335 +ipset=/bloomsburydesignlibrary.com/gfwlist +server=/pearson-intl.com/127.0.0.1#5335 +ipset=/pearson-intl.com/gfwlist +server=/facbook.com/127.0.0.1#5335 +ipset=/facbook.com/gfwlist +server=/bmw-motorrad.jp/127.0.0.1#5335 +ipset=/bmw-motorrad.jp/gfwlist +server=/hqdesexo.com/127.0.0.1#5335 +ipset=/hqdesexo.com/gfwlist +server=/suruga-ya.com/127.0.0.1#5335 +ipset=/suruga-ya.com/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=/xxxfile.org/127.0.0.1#5335 +ipset=/xxxfile.org/gfwlist +server=/hamsterporn.tv/127.0.0.1#5335 +ipset=/hamsterporn.tv/gfwlist +server=/isgame365.cc/127.0.0.1#5335 +ipset=/isgame365.cc/gfwlist +server=/googleoptimize.com/127.0.0.1#5335 +ipset=/googleoptimize.com/gfwlist +server=/garotaporno.com/127.0.0.1#5335 +ipset=/garotaporno.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=/nikecraft.com/127.0.0.1#5335 +ipset=/nikecraft.com/gfwlist +server=/boylabs.net/127.0.0.1#5335 +ipset=/boylabs.net/gfwlist +server=/hpsmartstage.com/127.0.0.1#5335 +ipset=/hpsmartstage.com/gfwlist +server=/stark-verlag.ch/127.0.0.1#5335 +ipset=/stark-verlag.ch/gfwlist +server=/visadpsonline.us/127.0.0.1#5335 +ipset=/visadpsonline.us/gfwlist +server=/menshin-channel.com/127.0.0.1#5335 +ipset=/menshin-channel.com/gfwlist +server=/sonyprotechnosupport.co.jp/127.0.0.1#5335 +ipset=/sonyprotechnosupport.co.jp/gfwlist +server=/applepaysupplies.com/127.0.0.1#5335 +ipset=/applepaysupplies.com/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=/bmw.de/127.0.0.1#5335 +ipset=/bmw.de/gfwlist +server=/copro.pw/127.0.0.1#5335 +ipset=/copro.pw/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=/facfebook.com/127.0.0.1#5335 +ipset=/facfebook.com/gfwlist +server=/xnxx2.pro/127.0.0.1#5335 +ipset=/xnxx2.pro/gfwlist +server=/edisebay.com/127.0.0.1#5335 +ipset=/edisebay.com/gfwlist +server=/yahoo.as/127.0.0.1#5335 +ipset=/yahoo.as/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=/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=/zoosexfarm.com/127.0.0.1#5335 +ipset=/zoosexfarm.com/gfwlist +server=/icloude.com/127.0.0.1#5335 +ipset=/icloude.com/gfwlist +server=/youpornlist.com/127.0.0.1#5335 +ipset=/youpornlist.com/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=/ipodnano.com/127.0.0.1#5335 +ipset=/ipodnano.com/gfwlist +server=/disneybaby.com/127.0.0.1#5335 +ipset=/disneybaby.com/gfwlist +server=/veet.ca/127.0.0.1#5335 +ipset=/veet.ca/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=/mdn.mozillademos.org/127.0.0.1#5335 +ipset=/mdn.mozillademos.org/gfwlist +server=/aliveipc.com/127.0.0.1#5335 +ipset=/aliveipc.com/gfwlist +server=/homemadefucktube.com/127.0.0.1#5335 +ipset=/homemadefucktube.com/gfwlist +server=/vanish.si/127.0.0.1#5335 +ipset=/vanish.si/gfwlist +server=/cherrypimps.com/127.0.0.1#5335 +ipset=/cherrypimps.com/gfwlist +server=/ikea.com.mx/127.0.0.1#5335 +ipset=/ikea.com.mx/gfwlist +server=/beatsbydre-outlet.com/127.0.0.1#5335 +ipset=/beatsbydre-outlet.com/gfwlist +server=/porn4days.cc/127.0.0.1#5335 +ipset=/porn4days.cc/gfwlist +server=/hentai-for.net/127.0.0.1#5335 +ipset=/hentai-for.net/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=/customizedbeatsdre.com/127.0.0.1#5335 +ipset=/customizedbeatsdre.com/gfwlist +server=/xwebporn.com/127.0.0.1#5335 +ipset=/xwebporn.com/gfwlist +server=/medium.systems/127.0.0.1#5335 +ipset=/medium.systems/gfwlist +server=/ciscolive.com/127.0.0.1#5335 +ipset=/ciscolive.com/gfwlist +server=/hkej.com/127.0.0.1#5335 +ipset=/hkej.com/gfwlist +server=/windowsuem.com/127.0.0.1#5335 +ipset=/windowsuem.com/gfwlist +server=/bonedathome.com/127.0.0.1#5335 +ipset=/bonedathome.com/gfwlist +server=/mochajs.org/127.0.0.1#5335 +ipset=/mochajs.org/gfwlist +server=/link.theplatform.com/127.0.0.1#5335 +ipset=/link.theplatform.com/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=/limeteensex.com/127.0.0.1#5335 +ipset=/limeteensex.com/gfwlist +server=/bloombergindustry.com/127.0.0.1#5335 +ipset=/bloombergindustry.com/gfwlist +server=/nurgay.to/127.0.0.1#5335 +ipset=/nurgay.to/gfwlist +server=/netflixdnstest4.com/127.0.0.1#5335 +ipset=/netflixdnstest4.com/gfwlist +server=/canon.com.mt/127.0.0.1#5335 +ipset=/canon.com.mt/gfwlist +server=/hentaifox.com/127.0.0.1#5335 +ipset=/hentaifox.com/gfwlist +server=/breasthealthinfo.com/127.0.0.1#5335 +ipset=/breasthealthinfo.com/gfwlist +server=/thecuckoldporn.com/127.0.0.1#5335 +ipset=/thecuckoldporn.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=/finishwin.be/127.0.0.1#5335 +ipset=/finishwin.be/gfwlist +server=/cheapbeatsbydrefau.com/127.0.0.1#5335 +ipset=/cheapbeatsbydrefau.com/gfwlist +server=/b3bos.com/127.0.0.1#5335 +ipset=/b3bos.com/gfwlist +server=/vdoav.com/127.0.0.1#5335 +ipset=/vdoav.com/gfwlist +server=/adultartsites.com/127.0.0.1#5335 +ipset=/adultartsites.com/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=/applepay.tv/127.0.0.1#5335 +ipset=/applepay.tv/gfwlist +server=/arabysexy.mobi/127.0.0.1#5335 +ipset=/arabysexy.mobi/gfwlist +server=/mastercard.co.ke/127.0.0.1#5335 +ipset=/mastercard.co.ke/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=/twifuli.com/127.0.0.1#5335 +ipset=/twifuli.com/gfwlist +server=/youtube.com.pe/127.0.0.1#5335 +ipset=/youtube.com.pe/gfwlist +server=/sony.com.vn/127.0.0.1#5335 +ipset=/sony.com.vn/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=/bmw.co.kr/127.0.0.1#5335 +ipset=/bmw.co.kr/gfwlist +server=/xvideos5.com.br/127.0.0.1#5335 +ipset=/xvideos5.com.br/gfwlist +server=/nijieronavi.com/127.0.0.1#5335 +ipset=/nijieronavi.com/gfwlist +server=/adelaidenow.com.au/127.0.0.1#5335 +ipset=/adelaidenow.com.au/gfwlist +server=/discountedporn.com/127.0.0.1#5335 +ipset=/discountedporn.com/gfwlist +server=/igniteseurope.com/127.0.0.1#5335 +ipset=/igniteseurope.com/gfwlist +server=/redporno.cz/127.0.0.1#5335 +ipset=/redporno.cz/gfwlist +server=/starbucks.com.bn/127.0.0.1#5335 +ipset=/starbucks.com.bn/gfwlist +server=/xnostars.com/127.0.0.1#5335 +ipset=/xnostars.com/gfwlist +server=/icloud.is/127.0.0.1#5335 +ipset=/icloud.is/gfwlist +server=/bbwmilftube.com/127.0.0.1#5335 +ipset=/bbwmilftube.com/gfwlist +server=/milflove.live/127.0.0.1#5335 +ipset=/milflove.live/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=/facebookdusexe.org/127.0.0.1#5335 +ipset=/facebookdusexe.org/gfwlist +server=/mobile01.com/127.0.0.1#5335 +ipset=/mobile01.com/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=/ciscotr.com/127.0.0.1#5335 +ipset=/ciscotr.com/gfwlist +server=/beatsbydressale.com/127.0.0.1#5335 +ipset=/beatsbydressale.com/gfwlist +server=/sextubish.com/127.0.0.1#5335 +ipset=/sextubish.com/gfwlist +server=/volvotrucks.be/127.0.0.1#5335 +ipset=/volvotrucks.be/gfwlist +server=/dechamora.com/127.0.0.1#5335 +ipset=/dechamora.com/gfwlist +server=/move-free.net/127.0.0.1#5335 +ipset=/move-free.net/gfwlist +server=/pornteen123.com/127.0.0.1#5335 +ipset=/pornteen123.com/gfwlist +server=/applewallet.tv/127.0.0.1#5335 +ipset=/applewallet.tv/gfwlist +server=/sony.com.br/127.0.0.1#5335 +ipset=/sony.com.br/gfwlist +server=/pornfidelity.com/127.0.0.1#5335 +ipset=/pornfidelity.com/gfwlist +server=/hyu2.com/127.0.0.1#5335 +ipset=/hyu2.com/gfwlist +server=/directvmetropolisil.com/127.0.0.1#5335 +ipset=/directvmetropolisil.com/gfwlist +server=/detentiongirls.com/127.0.0.1#5335 +ipset=/detentiongirls.com/gfwlist +server=/bbg.gov/127.0.0.1#5335 +ipset=/bbg.gov/gfwlist +server=/ikea.no/127.0.0.1#5335 +ipset=/ikea.no/gfwlist +server=/java.com/127.0.0.1#5335 +ipset=/java.com/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=/erotic-photos.net/127.0.0.1#5335 +ipset=/erotic-photos.net/gfwlist +server=/volvotrucks.es/127.0.0.1#5335 +ipset=/volvotrucks.es/gfwlist +server=/kodi.wiki/127.0.0.1#5335 +ipset=/kodi.wiki/gfwlist +server=/oppai-doga.info/127.0.0.1#5335 +ipset=/oppai-doga.info/gfwlist +server=/nintendo.it/127.0.0.1#5335 +ipset=/nintendo.it/gfwlist +server=/blogspot.re/127.0.0.1#5335 +ipset=/blogspot.re/gfwlist +server=/cmpaas.com/127.0.0.1#5335 +ipset=/cmpaas.com/gfwlist +server=/xvideoz.win/127.0.0.1#5335 +ipset=/xvideoz.win/gfwlist +server=/beatsbydrecheaper.com/127.0.0.1#5335 +ipset=/beatsbydrecheaper.com/gfwlist +server=/attwirelessonline.com/127.0.0.1#5335 +ipset=/attwirelessonline.com/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=/applepay.rs/127.0.0.1#5335 +ipset=/applepay.rs/gfwlist +server=/amazon.red/127.0.0.1#5335 +ipset=/amazon.red/gfwlist +server=/happymeal.com.au/127.0.0.1#5335 +ipset=/happymeal.com.au/gfwlist +server=/maturesexual.com/127.0.0.1#5335 +ipset=/maturesexual.com/gfwlist +server=/intel.la/127.0.0.1#5335 +ipset=/intel.la/gfwlist +server=/fruitycams.com/127.0.0.1#5335 +ipset=/fruitycams.com/gfwlist +server=/bridgestonecomercial.com.ar/127.0.0.1#5335 +ipset=/bridgestonecomercial.com.ar/gfwlist +server=/multipornfor.me/127.0.0.1#5335 +ipset=/multipornfor.me/gfwlist +server=/wix.com/127.0.0.1#5335 +ipset=/wix.com/gfwlist +server=/blogspot.com/127.0.0.1#5335 +ipset=/blogspot.com/gfwlist +server=/sambaporno.com/127.0.0.1#5335 +ipset=/sambaporno.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=/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=/thisvid.com/127.0.0.1#5335 +ipset=/thisvid.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=/paypal-login.org/127.0.0.1#5335 +ipset=/paypal-login.org/gfwlist +server=/momtarts3d.com/127.0.0.1#5335 +ipset=/momtarts3d.com/gfwlist +server=/jable.org/127.0.0.1#5335 +ipset=/jable.org/gfwlist +server=/espressif.com/127.0.0.1#5335 +ipset=/espressif.com/gfwlist +server=/analcamshow.com/127.0.0.1#5335 +ipset=/analcamshow.com/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=/videosdesexo.com.br/127.0.0.1#5335 +ipset=/videosdesexo.com.br/gfwlist +server=/85tube.com/127.0.0.1#5335 +ipset=/85tube.com/gfwlist +server=/ebonyinlove.com/127.0.0.1#5335 +ipset=/ebonyinlove.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=/escobarvip.it/127.0.0.1#5335 +ipset=/escobarvip.it/gfwlist +server=/apigee.com/127.0.0.1#5335 +ipset=/apigee.com/gfwlist +server=/bang-movies.com/127.0.0.1#5335 +ipset=/bang-movies.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=/shopee.fr/127.0.0.1#5335 +ipset=/shopee.fr/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=/imagecurl.com/127.0.0.1#5335 +ipset=/imagecurl.com/gfwlist +server=/xxxgames.games/127.0.0.1#5335 +ipset=/xxxgames.games/gfwlist +server=/pornhubselect.com/127.0.0.1#5335 +ipset=/pornhubselect.com/gfwlist +server=/zoosexnet.com/127.0.0.1#5335 +ipset=/zoosexnet.com/gfwlist +server=/igetnaughty.com/127.0.0.1#5335 +ipset=/igetnaughty.com/gfwlist +server=/aporntv.com/127.0.0.1#5335 +ipset=/aporntv.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=/ikea.co.jp/127.0.0.1#5335 +ipset=/ikea.co.jp/gfwlist +server=/blogspot.co.id/127.0.0.1#5335 +ipset=/blogspot.co.id/gfwlist +server=/1to1computing.com.au/127.0.0.1#5335 +ipset=/1to1computing.com.au/gfwlist +server=/jerkdolls.com/127.0.0.1#5335 +ipset=/jerkdolls.com/gfwlist +server=/milfmovs.com/127.0.0.1#5335 +ipset=/milfmovs.com/gfwlist +server=/vanishcentroamerica.com/127.0.0.1#5335 +ipset=/vanishcentroamerica.com/gfwlist +server=/dansmovies.com/127.0.0.1#5335 +ipset=/dansmovies.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=/1classtube.com/127.0.0.1#5335 +ipset=/1classtube.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=/sex.com/127.0.0.1#5335 +ipset=/sex.com/gfwlist +server=/wzlthw.com/127.0.0.1#5335 +ipset=/wzlthw.com/gfwlist +server=/tsundora.com/127.0.0.1#5335 +ipset=/tsundora.com/gfwlist +server=/drebeatsstudio2013.com/127.0.0.1#5335 +ipset=/drebeatsstudio2013.com/gfwlist +server=/88kkn.com/127.0.0.1#5335 +ipset=/88kkn.com/gfwlist +server=/analqts.com/127.0.0.1#5335 +ipset=/analqts.com/gfwlist +server=/twinktube.sexy/127.0.0.1#5335 +ipset=/twinktube.sexy/gfwlist +server=/4club.com/127.0.0.1#5335 +ipset=/4club.com/gfwlist +server=/nikeit.com/127.0.0.1#5335 +ipset=/nikeit.com/gfwlist +server=/hdpornmax.net/127.0.0.1#5335 +ipset=/hdpornmax.net/gfwlist +server=/p-events-delivery.akamaized.net/127.0.0.1#5335 +ipset=/p-events-delivery.akamaized.net/gfwlist +server=/guangming.com.my/127.0.0.1#5335 +ipset=/guangming.com.my/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=/nicolepeters.com/127.0.0.1#5335 +ipset=/nicolepeters.com/gfwlist +server=/quicktime.eu/127.0.0.1#5335 +ipset=/quicktime.eu/gfwlist +server=/bigcocker.com/127.0.0.1#5335 +ipset=/bigcocker.com/gfwlist +server=/cherrypanpan.com/127.0.0.1#5335 +ipset=/cherrypanpan.com/gfwlist +server=/hdxnxx.xxx/127.0.0.1#5335 +ipset=/hdxnxx.xxx/gfwlist +server=/cheapbeatsla.com/127.0.0.1#5335 +ipset=/cheapbeatsla.com/gfwlist +server=/nbys1.tv/127.0.0.1#5335 +ipset=/nbys1.tv/gfwlist +server=/blaoshi.cc/127.0.0.1#5335 +ipset=/blaoshi.cc/gfwlist +server=/aboutamazon.jp/127.0.0.1#5335 +ipset=/aboutamazon.jp/gfwlist +server=/bb33.net/127.0.0.1#5335 +ipset=/bb33.net/gfwlist +server=/xnxx.net/127.0.0.1#5335 +ipset=/xnxx.net/gfwlist +server=/disney.no/127.0.0.1#5335 +ipset=/disney.no/gfwlist +server=/sci-hub.se/127.0.0.1#5335 +ipset=/sci-hub.se/gfwlist +server=/pornobuzz.net/127.0.0.1#5335 +ipset=/pornobuzz.net/gfwlist +server=/webcamjackers.com/127.0.0.1#5335 +ipset=/webcamjackers.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=/tabooporn.tv/127.0.0.1#5335 +ipset=/tabooporn.tv/gfwlist +server=/adobeoobe.com/127.0.0.1#5335 +ipset=/adobeoobe.com/gfwlist +server=/adobeku.com/127.0.0.1#5335 +ipset=/adobeku.com/gfwlist +server=/nakedamateurmilf.com/127.0.0.1#5335 +ipset=/nakedamateurmilf.com/gfwlist +server=/daindianporn.com/127.0.0.1#5335 +ipset=/daindianporn.com/gfwlist +server=/limedia.tw/127.0.0.1#5335 +ipset=/limedia.tw/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=/msftnet.org/127.0.0.1#5335 +ipset=/msftnet.org/gfwlist +server=/facebookenespanol.com/127.0.0.1#5335 +ipset=/facebookenespanol.com/gfwlist +server=/67maoab.com/127.0.0.1#5335 +ipset=/67maoab.com/gfwlist +server=/miniso-au.com/127.0.0.1#5335 +ipset=/miniso-au.com/gfwlist +server=/xxxwow.net/127.0.0.1#5335 +ipset=/xxxwow.net/gfwlist +server=/donkparty.com/127.0.0.1#5335 +ipset=/donkparty.com/gfwlist +server=/paypal-excelinvoicing.com/127.0.0.1#5335 +ipset=/paypal-excelinvoicing.com/gfwlist +server=/fuckmaturepussy.com/127.0.0.1#5335 +ipset=/fuckmaturepussy.com/gfwlist +server=/freesexgames.games/127.0.0.1#5335 +ipset=/freesexgames.games/gfwlist +server=/xn--cck4d8b3009a.com/127.0.0.1#5335 +ipset=/xn--cck4d8b3009a.com/gfwlist +server=/marketingcloud.com/127.0.0.1#5335 +ipset=/marketingcloud.com/gfwlist +server=/hdfreeporn.net/127.0.0.1#5335 +ipset=/hdfreeporn.net/gfwlist +server=/volvotruckcenter.dk/127.0.0.1#5335 +ipset=/volvotruckcenter.dk/gfwlist +server=/gcld-line.com/127.0.0.1#5335 +ipset=/gcld-line.com/gfwlist +server=/bluekai.com/127.0.0.1#5335 +ipset=/bluekai.com/gfwlist +server=/videostravestis.xxx/127.0.0.1#5335 +ipset=/videostravestis.xxx/gfwlist +server=/bayvoice.net/127.0.0.1#5335 +ipset=/bayvoice.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=/188channel.com/127.0.0.1#5335 +ipset=/188channel.com/gfwlist +server=/cpz.to/127.0.0.1#5335 +ipset=/cpz.to/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=/famousnudes.com/127.0.0.1#5335 +ipset=/famousnudes.com/gfwlist +server=/all3dsexpics.com/127.0.0.1#5335 +ipset=/all3dsexpics.com/gfwlist +server=/rectovaginalexam.com/127.0.0.1#5335 +ipset=/rectovaginalexam.com/gfwlist +server=/tiktokv.com/127.0.0.1#5335 +ipset=/tiktokv.com/gfwlist +server=/harpercollinsspeakersbureau.com/127.0.0.1#5335 +ipset=/harpercollinsspeakersbureau.com/gfwlist +server=/hentainanime.com/127.0.0.1#5335 +ipset=/hentainanime.com/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=/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=/myfistingporn.com/127.0.0.1#5335 +ipset=/myfistingporn.com/gfwlist +server=/directtvreviews.com/127.0.0.1#5335 +ipset=/directtvreviews.com/gfwlist +server=/gelbooru.com/127.0.0.1#5335 +ipset=/gelbooru.com/gfwlist +server=/volvotrucks.ge/127.0.0.1#5335 +ipset=/volvotrucks.ge/gfwlist +server=/mortein.com.br/127.0.0.1#5335 +ipset=/mortein.com.br/gfwlist +server=/1watchmygf.com/127.0.0.1#5335 +ipset=/1watchmygf.com/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=/bentobox.tv/127.0.0.1#5335 +ipset=/bentobox.tv/gfwlist +server=/qckprn.com/127.0.0.1#5335 +ipset=/qckprn.com/gfwlist +server=/pornpander.com/127.0.0.1#5335 +ipset=/pornpander.com/gfwlist +server=/paypal-database.us/127.0.0.1#5335 +ipset=/paypal-database.us/gfwlist +server=/pornolab.net/127.0.0.1#5335 +ipset=/pornolab.net/gfwlist +server=/bnbstatic.com/127.0.0.1#5335 +ipset=/bnbstatic.com/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=/bloomberglp.com/127.0.0.1#5335 +ipset=/bloomberglp.com/gfwlist +server=/livexxx.me/127.0.0.1#5335 +ipset=/livexxx.me/gfwlist +server=/bmw-motorrad.fr/127.0.0.1#5335 +ipset=/bmw-motorrad.fr/gfwlist +server=/intel.it/127.0.0.1#5335 +ipset=/intel.it/gfwlist +server=/cuckoldingwifey.com/127.0.0.1#5335 +ipset=/cuckoldingwifey.com/gfwlist +server=/sohcradio.com/127.0.0.1#5335 +ipset=/sohcradio.com/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=/bustysammieblack.com/127.0.0.1#5335 +ipset=/bustysammieblack.com/gfwlist +server=/whoreslag.com/127.0.0.1#5335 +ipset=/whoreslag.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=/blowjobqueens.net/127.0.0.1#5335 +ipset=/blowjobqueens.net/gfwlist +server=/foxweatherwatch.com/127.0.0.1#5335 +ipset=/foxweatherwatch.com/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=/sirenxxxstudios.com/127.0.0.1#5335 +ipset=/sirenxxxstudios.com/gfwlist +server=/attwifi.com/127.0.0.1#5335 +ipset=/attwifi.com/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=/realgfporn.com/127.0.0.1#5335 +ipset=/realgfporn.com/gfwlist +server=/nikesportswear.com/127.0.0.1#5335 +ipset=/nikesportswear.com/gfwlist +server=/porno365.website/127.0.0.1#5335 +ipset=/porno365.website/gfwlist +server=/yahoo.com.do/127.0.0.1#5335 +ipset=/yahoo.com.do/gfwlist +server=/anacams.com/127.0.0.1#5335 +ipset=/anacams.com/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=/backdoorlesbians.com/127.0.0.1#5335 +ipset=/backdoorlesbians.com/gfwlist +server=/hentaiblue.com/127.0.0.1#5335 +ipset=/hentaiblue.com/gfwlist +server=/managedpki.com/127.0.0.1#5335 +ipset=/managedpki.com/gfwlist +server=/beascoremodel.com/127.0.0.1#5335 +ipset=/beascoremodel.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=/porngogo.supertop-100.com/127.0.0.1#5335 +ipset=/porngogo.supertop-100.com/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=/hot-sex-tube.com/127.0.0.1#5335 +ipset=/hot-sex-tube.com/gfwlist +server=/szabadeuropa.hu/127.0.0.1#5335 +ipset=/szabadeuropa.hu/gfwlist +server=/verisign.asia/127.0.0.1#5335 +ipset=/verisign.asia/gfwlist +server=/footstockings.com/127.0.0.1#5335 +ipset=/footstockings.com/gfwlist +server=/finishinfo.ru/127.0.0.1#5335 +ipset=/finishinfo.ru/gfwlist +server=/beatsaudios.net/127.0.0.1#5335 +ipset=/beatsaudios.net/gfwlist +server=/definebabe.com/127.0.0.1#5335 +ipset=/definebabe.com/gfwlist +server=/sankeishop.jp/127.0.0.1#5335 +ipset=/sankeishop.jp/gfwlist +server=/scientificlinux.org/127.0.0.1#5335 +ipset=/scientificlinux.org/gfwlist +server=/lolshop.co.kr/127.0.0.1#5335 +ipset=/lolshop.co.kr/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=/phxbmw.com/127.0.0.1#5335 +ipset=/phxbmw.com/gfwlist +server=/18push.com/127.0.0.1#5335 +ipset=/18push.com/gfwlist +server=/hpeurope.com/127.0.0.1#5335 +ipset=/hpeurope.com/gfwlist +server=/hardcore-sex-filme.com/127.0.0.1#5335 +ipset=/hardcore-sex-filme.com/gfwlist +server=/bobvoyeur.com/127.0.0.1#5335 +ipset=/bobvoyeur.com/gfwlist +server=/istripper.com/127.0.0.1#5335 +ipset=/istripper.com/gfwlist +server=/canon.hr/127.0.0.1#5335 +ipset=/canon.hr/gfwlist +server=/youngpornonly.com/127.0.0.1#5335 +ipset=/youngpornonly.com/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=/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=/jade-net-home.com/127.0.0.1#5335 +ipset=/jade-net-home.com/gfwlist +server=/scholar.google.pl/127.0.0.1#5335 +ipset=/scholar.google.pl/gfwlist +server=/deepfreeze.co.uk/127.0.0.1#5335 +ipset=/deepfreeze.co.uk/gfwlist +server=/yahoo.co.tz/127.0.0.1#5335 +ipset=/yahoo.co.tz/gfwlist +server=/teatroporno.com/127.0.0.1#5335 +ipset=/teatroporno.com/gfwlist +server=/businesswebwise.com/127.0.0.1#5335 +ipset=/businesswebwise.com/gfwlist +server=/drdreprobeatssale.com/127.0.0.1#5335 +ipset=/drdreprobeatssale.com/gfwlist +server=/lokinet.org/127.0.0.1#5335 +ipset=/lokinet.org/gfwlist +server=/book18.org/127.0.0.1#5335 +ipset=/book18.org/gfwlist +server=/fapforfun.net/127.0.0.1#5335 +ipset=/fapforfun.net/gfwlist +server=/hot-cartoon.com/127.0.0.1#5335 +ipset=/hot-cartoon.com/gfwlist +server=/scival.com/127.0.0.1#5335 +ipset=/scival.com/gfwlist +server=/science.com/127.0.0.1#5335 +ipset=/science.com/gfwlist +server=/impala-media-production.s3.amazonaws.com/127.0.0.1#5335 +ipset=/impala-media-production.s3.amazonaws.com/gfwlist +server=/lol-europe.com/127.0.0.1#5335 +ipset=/lol-europe.com/gfwlist +server=/repe21.com/127.0.0.1#5335 +ipset=/repe21.com/gfwlist +server=/teacherfucksteens.com/127.0.0.1#5335 +ipset=/teacherfucksteens.com/gfwlist +server=/bmw.lc/127.0.0.1#5335 +ipset=/bmw.lc/gfwlist +server=/babesnetwork.com/127.0.0.1#5335 +ipset=/babesnetwork.com/gfwlist +server=/tube18.sex/127.0.0.1#5335 +ipset=/tube18.sex/gfwlist +server=/bmw-motorrad-now-or-never.com/127.0.0.1#5335 +ipset=/bmw-motorrad-now-or-never.com/gfwlist +server=/gab.com/127.0.0.1#5335 +ipset=/gab.com/gfwlist +server=/pornoorzel.com/127.0.0.1#5335 +ipset=/pornoorzel.com/gfwlist +server=/sego8.co/127.0.0.1#5335 +ipset=/sego8.co/gfwlist +server=/yaddal.tv/127.0.0.1#5335 +ipset=/yaddal.tv/gfwlist +server=/nikeplus.com/127.0.0.1#5335 +ipset=/nikeplus.com/gfwlist +server=/xn--m1abbbgjah.lol/127.0.0.1#5335 +ipset=/xn--m1abbbgjah.lol/gfwlist +server=/devopsassessment.net/127.0.0.1#5335 +ipset=/devopsassessment.net/gfwlist +server=/yahoo.hu/127.0.0.1#5335 +ipset=/yahoo.hu/gfwlist +server=/berlincompanions.com/127.0.0.1#5335 +ipset=/berlincompanions.com/gfwlist +server=/intel.vu/127.0.0.1#5335 +ipset=/intel.vu/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=/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=/workstations.tv/127.0.0.1#5335 +ipset=/workstations.tv/gfwlist +server=/fcaebook.com/127.0.0.1#5335 +ipset=/fcaebook.com/gfwlist +server=/dicela.com/127.0.0.1#5335 +ipset=/dicela.com/gfwlist +server=/see.xxx/127.0.0.1#5335 +ipset=/see.xxx/gfwlist +server=/nytchina.com/127.0.0.1#5335 +ipset=/nytchina.com/gfwlist +server=/nikefr.com/127.0.0.1#5335 +ipset=/nikefr.com/gfwlist +server=/pdxbmw.com/127.0.0.1#5335 +ipset=/pdxbmw.com/gfwlist +server=/mmonsterheadphones.net/127.0.0.1#5335 +ipset=/mmonsterheadphones.net/gfwlist +server=/tiltbrush.com/127.0.0.1#5335 +ipset=/tiltbrush.com/gfwlist +server=/scholar.google.co.jp/127.0.0.1#5335 +ipset=/scholar.google.co.jp/gfwlist +server=/likuoo.video/127.0.0.1#5335 +ipset=/likuoo.video/gfwlist +server=/ftop.ru/127.0.0.1#5335 +ipset=/ftop.ru/gfwlist +server=/powerbeats2wireless.com/127.0.0.1#5335 +ipset=/powerbeats2wireless.com/gfwlist +server=/infolinker.com.tw/127.0.0.1#5335 +ipset=/infolinker.com.tw/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=/apple.sa/127.0.0.1#5335 +ipset=/apple.sa/gfwlist +server=/heartbreakers.gallery/127.0.0.1#5335 +ipset=/heartbreakers.gallery/gfwlist +server=/xxx.com/127.0.0.1#5335 +ipset=/xxx.com/gfwlist +server=/inkedravens.com/127.0.0.1#5335 +ipset=/inkedravens.com/gfwlist +server=/porndude2.com/127.0.0.1#5335 +ipset=/porndude2.com/gfwlist +server=/dirctv.com/127.0.0.1#5335 +ipset=/dirctv.com/gfwlist +server=/cams.com/127.0.0.1#5335 +ipset=/cams.com/gfwlist +server=/ecgapp.net/127.0.0.1#5335 +ipset=/ecgapp.net/gfwlist +server=/tastyblacks.com/127.0.0.1#5335 +ipset=/tastyblacks.com/gfwlist +server=/laowang.vip/127.0.0.1#5335 +ipset=/laowang.vip/gfwlist +server=/apple.kr/127.0.0.1#5335 +ipset=/apple.kr/gfwlist +server=/extensionworkshop.com/127.0.0.1#5335 +ipset=/extensionworkshop.com/gfwlist +server=/teraperk.com/127.0.0.1#5335 +ipset=/teraperk.com/gfwlist +server=/aljazeera.net/127.0.0.1#5335 +ipset=/aljazeera.net/gfwlist +server=/allhen.online/127.0.0.1#5335 +ipset=/allhen.online/gfwlist +server=/airwick.at/127.0.0.1#5335 +ipset=/airwick.at/gfwlist +server=/csgfnmdb.com/127.0.0.1#5335 +ipset=/csgfnmdb.com/gfwlist +server=/firewire.eu/127.0.0.1#5335 +ipset=/firewire.eu/gfwlist +server=/mobileme.dk/127.0.0.1#5335 +ipset=/mobileme.dk/gfwlist +server=/bmw-qatar.com/127.0.0.1#5335 +ipset=/bmw-qatar.com/gfwlist +server=/trust-provider.com/127.0.0.1#5335 +ipset=/trust-provider.com/gfwlist +server=/jav.dog/127.0.0.1#5335 +ipset=/jav.dog/gfwlist +server=/publicpornvideo.com/127.0.0.1#5335 +ipset=/publicpornvideo.com/gfwlist +server=/eablackbox.com/127.0.0.1#5335 +ipset=/eablackbox.com/gfwlist +server=/mypornfox.com/127.0.0.1#5335 +ipset=/mypornfox.com/gfwlist +server=/desiraesworld.com/127.0.0.1#5335 +ipset=/desiraesworld.com/gfwlist +server=/appule.com/127.0.0.1#5335 +ipset=/appule.com/gfwlist +server=/esmatube.com/127.0.0.1#5335 +ipset=/esmatube.com/gfwlist +server=/bmwgroup-plants.com/127.0.0.1#5335 +ipset=/bmwgroup-plants.com/gfwlist +server=/ntdtv.org/127.0.0.1#5335 +ipset=/ntdtv.org/gfwlist +server=/wwwmfacebook.com/127.0.0.1#5335 +ipset=/wwwmfacebook.com/gfwlist +server=/edu-research.org/127.0.0.1#5335 +ipset=/edu-research.org/gfwlist +server=/watchjavonline.com/127.0.0.1#5335 +ipset=/watchjavonline.com/gfwlist +server=/ptapjmp.com/127.0.0.1#5335 +ipset=/ptapjmp.com/gfwlist +server=/stream-mydirtyhobby.biz/127.0.0.1#5335 +ipset=/stream-mydirtyhobby.biz/gfwlist +server=/love7.xyz/127.0.0.1#5335 +ipset=/love7.xyz/gfwlist +server=/bdsmlibrary.com/127.0.0.1#5335 +ipset=/bdsmlibrary.com/gfwlist +server=/dart.dev/127.0.0.1#5335 +ipset=/dart.dev/gfwlist +server=/nakedasiansex.com/127.0.0.1#5335 +ipset=/nakedasiansex.com/gfwlist +server=/branchportal.com/127.0.0.1#5335 +ipset=/branchportal.com/gfwlist +server=/pornobrasil.org/127.0.0.1#5335 +ipset=/pornobrasil.org/gfwlist +server=/xvideosbrasil.com/127.0.0.1#5335 +ipset=/xvideosbrasil.com/gfwlist +server=/sexoquente.blog/127.0.0.1#5335 +ipset=/sexoquente.blog/gfwlist +server=/fb.watch/127.0.0.1#5335 +ipset=/fb.watch/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=/pinterest.com.au/127.0.0.1#5335 +ipset=/pinterest.com.au/gfwlist +server=/hornybutt.com/127.0.0.1#5335 +ipset=/hornybutt.com/gfwlist +server=/rokutime.com/127.0.0.1#5335 +ipset=/rokutime.com/gfwlist +server=/binads.com/127.0.0.1#5335 +ipset=/binads.com/gfwlist +server=/applewatch.wang/127.0.0.1#5335 +ipset=/applewatch.wang/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=/sextvx.com/127.0.0.1#5335 +ipset=/sextvx.com/gfwlist +server=/renzhe.cloud/127.0.0.1#5335 +ipset=/renzhe.cloud/gfwlist +server=/faceid99.net/127.0.0.1#5335 +ipset=/faceid99.net/gfwlist +server=/amz123.com/127.0.0.1#5335 +ipset=/amz123.com/gfwlist +server=/icuminside.com/127.0.0.1#5335 +ipset=/icuminside.com/gfwlist +server=/hypodermic-injection.com/127.0.0.1#5335 +ipset=/hypodermic-injection.com/gfwlist +server=/beatsbydrdresale.net/127.0.0.1#5335 +ipset=/beatsbydrdresale.net/gfwlist +server=/homemadepornclip.com/127.0.0.1#5335 +ipset=/homemadepornclip.com/gfwlist +server=/camwhores.video/127.0.0.1#5335 +ipset=/camwhores.video/gfwlist +server=/mmaaxx.com/127.0.0.1#5335 +ipset=/mmaaxx.com/gfwlist +server=/xxxporn.su/127.0.0.1#5335 +ipset=/xxxporn.su/gfwlist +server=/2013cheapestbeats.com/127.0.0.1#5335 +ipset=/2013cheapestbeats.com/gfwlist +server=/twitter.jp/127.0.0.1#5335 +ipset=/twitter.jp/gfwlist +server=/nike-uk.com/127.0.0.1#5335 +ipset=/nike-uk.com/gfwlist +server=/google.cat/127.0.0.1#5335 +ipset=/google.cat/gfwlist +server=/dazn-api.com/127.0.0.1#5335 +ipset=/dazn-api.com/gfwlist +server=/statics-marketingsites-eas-ms-com.akamaized.net/127.0.0.1#5335 +ipset=/statics-marketingsites-eas-ms-com.akamaized.net/gfwlist +server=/celebritystorysite.com/127.0.0.1#5335 +ipset=/celebritystorysite.com/gfwlist +server=/fuck55.net/127.0.0.1#5335 +ipset=/fuck55.net/gfwlist +server=/icevirtuallibrary.com/127.0.0.1#5335 +ipset=/icevirtuallibrary.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=/linkedin.at/127.0.0.1#5335 +ipset=/linkedin.at/gfwlist +server=/gettyimages.hk/127.0.0.1#5335 +ipset=/gettyimages.hk/gfwlist +server=/fontbook.com/127.0.0.1#5335 +ipset=/fontbook.com/gfwlist +server=/money-link.com.tw/127.0.0.1#5335 +ipset=/money-link.com.tw/gfwlist +server=/naked.com/127.0.0.1#5335 +ipset=/naked.com/gfwlist +server=/fox.com/127.0.0.1#5335 +ipset=/fox.com/gfwlist +server=/bmw.mq/127.0.0.1#5335 +ipset=/bmw.mq/gfwlist +server=/best-sex-games.com/127.0.0.1#5335 +ipset=/best-sex-games.com/gfwlist +server=/blackandstacked.com/127.0.0.1#5335 +ipset=/blackandstacked.com/gfwlist +server=/ebaymotors.org/127.0.0.1#5335 +ipset=/ebaymotors.org/gfwlist +server=/dirtydoglinks.com/127.0.0.1#5335 +ipset=/dirtydoglinks.com/gfwlist +server=/shooshtime.com/127.0.0.1#5335 +ipset=/shooshtime.com/gfwlist +server=/n3ro.wtf/127.0.0.1#5335 +ipset=/n3ro.wtf/gfwlist +server=/joyclub.de/127.0.0.1#5335 +ipset=/joyclub.de/gfwlist +server=/drebeatspill.com/127.0.0.1#5335 +ipset=/drebeatspill.com/gfwlist +server=/bmw.mn/127.0.0.1#5335 +ipset=/bmw.mn/gfwlist +server=/ebayshop.com/127.0.0.1#5335 +ipset=/ebayshop.com/gfwlist +server=/yandex.lt/127.0.0.1#5335 +ipset=/yandex.lt/gfwlist +server=/estudio360.com.co/127.0.0.1#5335 +ipset=/estudio360.com.co/gfwlist +server=/stxmosquitoproject.org/127.0.0.1#5335 +ipset=/stxmosquitoproject.org/gfwlist +server=/hentaiheroes.com/127.0.0.1#5335 +ipset=/hentaiheroes.com/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=/tubeenema.com/127.0.0.1#5335 +ipset=/tubeenema.com/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=/veet.ro/127.0.0.1#5335 +ipset=/veet.ro/gfwlist +server=/javgg.net/127.0.0.1#5335 +ipset=/javgg.net/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=/openmidas.com/127.0.0.1#5335 +ipset=/openmidas.com/gfwlist +server=/disney-studio.com/127.0.0.1#5335 +ipset=/disney-studio.com/gfwlist +server=/fakings.com/127.0.0.1#5335 +ipset=/fakings.com/gfwlist +server=/bmw.com.uy/127.0.0.1#5335 +ipset=/bmw.com.uy/gfwlist +server=/freexxxporn.org/127.0.0.1#5335 +ipset=/freexxxporn.org/gfwlist +server=/xxxhubvideos.com/127.0.0.1#5335 +ipset=/xxxhubvideos.com/gfwlist +server=/dartsearch.net/127.0.0.1#5335 +ipset=/dartsearch.net/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=/diddykongracing.com/127.0.0.1#5335 +ipset=/diddykongracing.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=/hpayshop.com/127.0.0.1#5335 +ipset=/hpayshop.com/gfwlist +server=/termux.org/127.0.0.1#5335 +ipset=/termux.org/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=/mspairlift.com/127.0.0.1#5335 +ipset=/mspairlift.com/gfwlist +server=/riotgames.tv/127.0.0.1#5335 +ipset=/riotgames.tv/gfwlist +server=/ankarazirvesi2018.com/127.0.0.1#5335 +ipset=/ankarazirvesi2018.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=/xbox.org/127.0.0.1#5335 +ipset=/xbox.org/gfwlist +server=/pinterest.engineering/127.0.0.1#5335 +ipset=/pinterest.engineering/gfwlist +server=/wegamedeveloper.com/127.0.0.1#5335 +ipset=/wegamedeveloper.com/gfwlist +server=/okx.com/127.0.0.1#5335 +ipset=/okx.com/gfwlist +server=/wzmyg.com/127.0.0.1#5335 +ipset=/wzmyg.com/gfwlist +server=/monsterbeats-solo.net/127.0.0.1#5335 +ipset=/monsterbeats-solo.net/gfwlist +server=/eaaccess.com/127.0.0.1#5335 +ipset=/eaaccess.com/gfwlist +server=/abclider.com/127.0.0.1#5335 +ipset=/abclider.com/gfwlist +server=/comodoca2.com/127.0.0.1#5335 +ipset=/comodoca2.com/gfwlist +server=/sakuralive.com/127.0.0.1#5335 +ipset=/sakuralive.com/gfwlist +server=/visa.se/127.0.0.1#5335 +ipset=/visa.se/gfwlist +server=/zootube1.com/127.0.0.1#5335 +ipset=/zootube1.com/gfwlist +server=/hp-webplatform.com/127.0.0.1#5335 +ipset=/hp-webplatform.com/gfwlist +server=/rbspeakup.com/127.0.0.1#5335 +ipset=/rbspeakup.com/gfwlist +server=/fetishpornfilms.com/127.0.0.1#5335 +ipset=/fetishpornfilms.com/gfwlist +server=/beatfactoryoutlets.com/127.0.0.1#5335 +ipset=/beatfactoryoutlets.com/gfwlist +server=/battlefield.com/127.0.0.1#5335 +ipset=/battlefield.com/gfwlist +server=/moveaws.com/127.0.0.1#5335 +ipset=/moveaws.com/gfwlist +server=/openwrt.org/127.0.0.1#5335 +ipset=/openwrt.org/gfwlist +server=/supermariogalaxy.com/127.0.0.1#5335 +ipset=/supermariogalaxy.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=/naiadsystems.com/127.0.0.1#5335 +ipset=/naiadsystems.com/gfwlist +server=/hpusertraining.com/127.0.0.1#5335 +ipset=/hpusertraining.com/gfwlist +server=/yahoo.cl/127.0.0.1#5335 +ipset=/yahoo.cl/gfwlist +server=/huluusa.com/127.0.0.1#5335 +ipset=/huluusa.com/gfwlist +server=/ebayimg.com/127.0.0.1#5335 +ipset=/ebayimg.com/gfwlist +server=/visa.com.tr/127.0.0.1#5335 +ipset=/visa.com.tr/gfwlist +server=/ok.ru/127.0.0.1#5335 +ipset=/ok.ru/gfwlist +server=/bmw-motorrad.co.za/127.0.0.1#5335 +ipset=/bmw-motorrad.co.za/gfwlist +server=/javextreme.net/127.0.0.1#5335 +ipset=/javextreme.net/gfwlist +server=/nowe.com/127.0.0.1#5335 +ipset=/nowe.com/gfwlist +server=/yinmh.com/127.0.0.1#5335 +ipset=/yinmh.com/gfwlist +server=/iporntoo.com/127.0.0.1#5335 +ipset=/iporntoo.com/gfwlist +server=/appl4e.com/127.0.0.1#5335 +ipset=/appl4e.com/gfwlist +server=/thisav.org/127.0.0.1#5335 +ipset=/thisav.org/gfwlist +server=/videosdesexo.br.com/127.0.0.1#5335 +ipset=/videosdesexo.br.com/gfwlist +server=/nbcuni.com/127.0.0.1#5335 +ipset=/nbcuni.com/gfwlist +server=/ubisoft.com/127.0.0.1#5335 +ipset=/ubisoft.com/gfwlist +server=/nudeteenboys.net/127.0.0.1#5335 +ipset=/nudeteenboys.net/gfwlist +server=/voasomali.com/127.0.0.1#5335 +ipset=/voasomali.com/gfwlist +server=/medow.ru/127.0.0.1#5335 +ipset=/medow.ru/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=/povr.com/127.0.0.1#5335 +ipset=/povr.com/gfwlist +server=/appletaiwan.com/127.0.0.1#5335 +ipset=/appletaiwan.com/gfwlist +server=/youtube.mx/127.0.0.1#5335 +ipset=/youtube.mx/gfwlist +server=/wirelessgroup.co.uk/127.0.0.1#5335 +ipset=/wirelessgroup.co.uk/gfwlist +server=/ya.ru/127.0.0.1#5335 +ipset=/ya.ru/gfwlist +server=/cheapheadsetshop.com/127.0.0.1#5335 +ipset=/cheapheadsetshop.com/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=/sonypcl.jp/127.0.0.1#5335 +ipset=/sonypcl.jp/gfwlist +server=/paypalhere.tv/127.0.0.1#5335 +ipset=/paypalhere.tv/gfwlist +server=/sexmadeathome.com/127.0.0.1#5335 +ipset=/sexmadeathome.com/gfwlist +server=/bmwconnecteddrive.com/127.0.0.1#5335 +ipset=/bmwconnecteddrive.com/gfwlist +server=/sexy-beauties.com/127.0.0.1#5335 +ipset=/sexy-beauties.com/gfwlist +server=/69games.xxx/127.0.0.1#5335 +ipset=/69games.xxx/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=/lgecareers.com/127.0.0.1#5335 +ipset=/lgecareers.com/gfwlist +server=/voacantonese.com/127.0.0.1#5335 +ipset=/voacantonese.com/gfwlist +server=/boobpedia.com/127.0.0.1#5335 +ipset=/boobpedia.com/gfwlist +server=/10musume.com/127.0.0.1#5335 +ipset=/10musume.com/gfwlist +server=/thumbzilla.com/127.0.0.1#5335 +ipset=/thumbzilla.com/gfwlist +server=/starbucks.com.mx/127.0.0.1#5335 +ipset=/starbucks.com.mx/gfwlist +server=/smartoneholdings.com/127.0.0.1#5335 +ipset=/smartoneholdings.com/gfwlist +server=/ikea.co.uk/127.0.0.1#5335 +ipset=/ikea.co.uk/gfwlist +server=/drebeats-studio.com/127.0.0.1#5335 +ipset=/drebeats-studio.com/gfwlist +server=/airwick.ca/127.0.0.1#5335 +ipset=/airwick.ca/gfwlist +server=/whispersystems.org/127.0.0.1#5335 +ipset=/whispersystems.org/gfwlist +server=/paypal-prepaid.com/127.0.0.1#5335 +ipset=/paypal-prepaid.com/gfwlist +server=/hentaiporn.com/127.0.0.1#5335 +ipset=/hentaiporn.com/gfwlist +server=/wwwinstagram.com/127.0.0.1#5335 +ipset=/wwwinstagram.com/gfwlist +server=/cartoon-sex.tv/127.0.0.1#5335 +ipset=/cartoon-sex.tv/gfwlist +server=/cheapbeatsbydrdrepro.com/127.0.0.1#5335 +ipset=/cheapbeatsbydrdrepro.com/gfwlist +server=/shemalespoiledwhore.com/127.0.0.1#5335 +ipset=/shemalespoiledwhore.com/gfwlist +server=/nike-usa.com/127.0.0.1#5335 +ipset=/nike-usa.com/gfwlist +server=/hpinstantink.ca/127.0.0.1#5335 +ipset=/hpinstantink.ca/gfwlist +server=/hshsxkj.com/127.0.0.1#5335 +ipset=/hshsxkj.com/gfwlist +server=/tvbeventpower.com.hk/127.0.0.1#5335 +ipset=/tvbeventpower.com.hk/gfwlist +server=/wwwicloud.com/127.0.0.1#5335 +ipset=/wwwicloud.com/gfwlist +server=/wuyefuli.org/127.0.0.1#5335 +ipset=/wuyefuli.org/gfwlist +server=/newschristmasshopping.com/127.0.0.1#5335 +ipset=/newschristmasshopping.com/gfwlist +server=/bloombergtaxtech.com/127.0.0.1#5335 +ipset=/bloombergtaxtech.com/gfwlist +server=/mymmode.com/127.0.0.1#5335 +ipset=/mymmode.com/gfwlist +server=/girlfriendvids.net/127.0.0.1#5335 +ipset=/girlfriendvids.net/gfwlist +server=/fapnado.com/127.0.0.1#5335 +ipset=/fapnado.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=/intelvmwarecybersecurity.com/127.0.0.1#5335 +ipset=/intelvmwarecybersecurity.com/gfwlist +server=/928.plus/127.0.0.1#5335 +ipset=/928.plus/gfwlist +server=/xozilla.com/127.0.0.1#5335 +ipset=/xozilla.com/gfwlist +server=/bitquick.co/127.0.0.1#5335 +ipset=/bitquick.co/gfwlist +server=/bidong25.com/127.0.0.1#5335 +ipset=/bidong25.com/gfwlist +server=/macosforge.org/127.0.0.1#5335 +ipset=/macosforge.org/gfwlist +server=/topescortbabes.com/127.0.0.1#5335 +ipset=/topescortbabes.com/gfwlist +server=/xxxhdvideo.mobi/127.0.0.1#5335 +ipset=/xxxhdvideo.mobi/gfwlist +server=/wwwebay.com/127.0.0.1#5335 +ipset=/wwwebay.com/gfwlist +server=/themilfmovies.com/127.0.0.1#5335 +ipset=/themilfmovies.com/gfwlist +server=/gizmoxxx.com/127.0.0.1#5335 +ipset=/gizmoxxx.com/gfwlist +server=/buyaapl.net/127.0.0.1#5335 +ipset=/buyaapl.net/gfwlist +server=/n15zev3w.shop/127.0.0.1#5335 +ipset=/n15zev3w.shop/gfwlist +server=/sis001.com/127.0.0.1#5335 +ipset=/sis001.com/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=/teachmyass.com/127.0.0.1#5335 +ipset=/teachmyass.com/gfwlist +server=/favelaporno.com/127.0.0.1#5335 +ipset=/favelaporno.com/gfwlist +server=/yandex.uz/127.0.0.1#5335 +ipset=/yandex.uz/gfwlist +server=/47gyosei.jp/127.0.0.1#5335 +ipset=/47gyosei.jp/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=/girls2see.ch/127.0.0.1#5335 +ipset=/girls2see.ch/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=/jav.gallery/127.0.0.1#5335 +ipset=/jav.gallery/gfwlist +server=/globalsecurity.org/127.0.0.1#5335 +ipset=/globalsecurity.org/gfwlist +server=/tubesex.me/127.0.0.1#5335 +ipset=/tubesex.me/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=/disney-asia.com/127.0.0.1#5335 +ipset=/disney-asia.com/gfwlist +server=/esposasymaridos.com/127.0.0.1#5335 +ipset=/esposasymaridos.com/gfwlist +server=/bustykerrymarie.com/127.0.0.1#5335 +ipset=/bustykerrymarie.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=/picacomic.xyz/127.0.0.1#5335 +ipset=/picacomic.xyz/gfwlist +server=/ams02.space/127.0.0.1#5335 +ipset=/ams02.space/gfwlist +server=/xvideos.blog/127.0.0.1#5335 +ipset=/xvideos.blog/gfwlist +server=/young-amateur-movies.com/127.0.0.1#5335 +ipset=/young-amateur-movies.com/gfwlist +server=/cheerwholesale.us/127.0.0.1#5335 +ipset=/cheerwholesale.us/gfwlist +server=/eamythic.net/127.0.0.1#5335 +ipset=/eamythic.net/gfwlist +server=/beatsbydrediscount.com/127.0.0.1#5335 +ipset=/beatsbydrediscount.com/gfwlist +server=/amazingcuckold.com/127.0.0.1#5335 +ipset=/amazingcuckold.com/gfwlist +server=/webcamgirls.chat/127.0.0.1#5335 +ipset=/webcamgirls.chat/gfwlist +server=/virtualearth.net/127.0.0.1#5335 +ipset=/virtualearth.net/gfwlist +server=/home-sex-tapes.com/127.0.0.1#5335 +ipset=/home-sex-tapes.com/gfwlist +server=/nvidia.com/127.0.0.1#5335 +ipset=/nvidia.com/gfwlist +server=/modelmediaus.com/127.0.0.1#5335 +ipset=/modelmediaus.com/gfwlist +server=/facebook-texas-holdem.com/127.0.0.1#5335 +ipset=/facebook-texas-holdem.com/gfwlist +server=/unstyle.us/127.0.0.1#5335 +ipset=/unstyle.us/gfwlist +server=/ccav69.info/127.0.0.1#5335 +ipset=/ccav69.info/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=/xoom-experience.com/127.0.0.1#5335 +ipset=/xoom-experience.com/gfwlist +server=/binancezh.live/127.0.0.1#5335 +ipset=/binancezh.live/gfwlist +server=/transpornsites.com/127.0.0.1#5335 +ipset=/transpornsites.com/gfwlist +server=/playartifact.com/127.0.0.1#5335 +ipset=/playartifact.com/gfwlist +server=/nomulus.foo/127.0.0.1#5335 +ipset=/nomulus.foo/gfwlist +server=/lliusno.com/127.0.0.1#5335 +ipset=/lliusno.com/gfwlist +server=/softbank-telecom.com/127.0.0.1#5335 +ipset=/softbank-telecom.com/gfwlist +server=/bmw-connecteddrive.no/127.0.0.1#5335 +ipset=/bmw-connecteddrive.no/gfwlist +server=/geeksquad.ca/127.0.0.1#5335 +ipset=/geeksquad.ca/gfwlist +server=/nakedmodelsxxx.com/127.0.0.1#5335 +ipset=/nakedmodelsxxx.com/gfwlist +server=/homemoviestube.com/127.0.0.1#5335 +ipset=/homemoviestube.com/gfwlist +server=/jmcomic.me/127.0.0.1#5335 +ipset=/jmcomic.me/gfwlist +server=/yourgynexam.com/127.0.0.1#5335 +ipset=/yourgynexam.com/gfwlist +server=/dettol.ie/127.0.0.1#5335 +ipset=/dettol.ie/gfwlist +server=/onefifteen.net/127.0.0.1#5335 +ipset=/onefifteen.net/gfwlist +server=/hentaigamer.org/127.0.0.1#5335 +ipset=/hentaigamer.org/gfwlist +server=/static-cisco.com/127.0.0.1#5335 +ipset=/static-cisco.com/gfwlist +server=/wanokokorosoh.com/127.0.0.1#5335 +ipset=/wanokokorosoh.com/gfwlist +server=/myappleid.com/127.0.0.1#5335 +ipset=/myappleid.com/gfwlist +server=/onlyincestporn.com/127.0.0.1#5335 +ipset=/onlyincestporn.com/gfwlist +server=/ladsp.com/127.0.0.1#5335 +ipset=/ladsp.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=/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=/berkeley.edu/127.0.0.1#5335 +ipset=/berkeley.edu/gfwlist +server=/miniso.ca/127.0.0.1#5335 +ipset=/miniso.ca/gfwlist +server=/instaadder.com/127.0.0.1#5335 +ipset=/instaadder.com/gfwlist +server=/novinhasdozapzap.com/127.0.0.1#5335 +ipset=/novinhasdozapzap.com/gfwlist +server=/beatspascher-bydre.com/127.0.0.1#5335 +ipset=/beatspascher-bydre.com/gfwlist +server=/tawny-peaks.com/127.0.0.1#5335 +ipset=/tawny-peaks.com/gfwlist +server=/codeforaliving.io/127.0.0.1#5335 +ipset=/codeforaliving.io/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=/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=/jav-1080.com/127.0.0.1#5335 +ipset=/jav-1080.com/gfwlist +server=/my-magazine.me/127.0.0.1#5335 +ipset=/my-magazine.me/gfwlist +server=/xlgirls.com/127.0.0.1#5335 +ipset=/xlgirls.com/gfwlist +server=/cnshopin.com/127.0.0.1#5335 +ipset=/cnshopin.com/gfwlist +server=/wisecoin.com/127.0.0.1#5335 +ipset=/wisecoin.com/gfwlist +server=/paypal-corp.com/127.0.0.1#5335 +ipset=/paypal-corp.com/gfwlist +server=/9to5google.com/127.0.0.1#5335 +ipset=/9to5google.com/gfwlist +server=/jmcomic.mobi/127.0.0.1#5335 +ipset=/jmcomic.mobi/gfwlist +server=/supjav.com/127.0.0.1#5335 +ipset=/supjav.com/gfwlist +server=/fappcelebs.com/127.0.0.1#5335 +ipset=/fappcelebs.com/gfwlist +server=/porngamesverse.com/127.0.0.1#5335 +ipset=/porngamesverse.com/gfwlist +server=/fox46.com/127.0.0.1#5335 +ipset=/fox46.com/gfwlist +server=/hornychat.net/127.0.0.1#5335 +ipset=/hornychat.net/gfwlist +server=/reddit.com/127.0.0.1#5335 +ipset=/reddit.com/gfwlist +server=/nikkansports.com/127.0.0.1#5335 +ipset=/nikkansports.com/gfwlist +server=/asianpornmovies.com/127.0.0.1#5335 +ipset=/asianpornmovies.com/gfwlist +server=/ieeemce.org/127.0.0.1#5335 +ipset=/ieeemce.org/gfwlist +server=/258porn.com/127.0.0.1#5335 +ipset=/258porn.com/gfwlist +server=/anal.media/127.0.0.1#5335 +ipset=/anal.media/gfwlist +server=/jjgirls.com/127.0.0.1#5335 +ipset=/jjgirls.com/gfwlist +server=/gopivotal.net/127.0.0.1#5335 +ipset=/gopivotal.net/gfwlist +server=/pornvideotube.online/127.0.0.1#5335 +ipset=/pornvideotube.online/gfwlist +server=/openvpn.net/127.0.0.1#5335 +ipset=/openvpn.net/gfwlist +server=/rosemarydoll.com/127.0.0.1#5335 +ipset=/rosemarydoll.com/gfwlist +server=/hdhole.com/127.0.0.1#5335 +ipset=/hdhole.com/gfwlist +server=/youtube.com.hk/127.0.0.1#5335 +ipset=/youtube.com.hk/gfwlist +server=/cdnpure.com/127.0.0.1#5335 +ipset=/cdnpure.com/gfwlist +server=/xvideostravestis.xxx/127.0.0.1#5335 +ipset=/xvideostravestis.xxx/gfwlist +server=/vrporn.com/127.0.0.1#5335 +ipset=/vrporn.com/gfwlist +server=/ppaypal.com/127.0.0.1#5335 +ipset=/ppaypal.com/gfwlist +server=/paypal-secure.net/127.0.0.1#5335 +ipset=/paypal-secure.net/gfwlist +server=/cliphunter.com/127.0.0.1#5335 +ipset=/cliphunter.com/gfwlist +server=/facebookgames.com/127.0.0.1#5335 +ipset=/facebookgames.com/gfwlist +server=/pornhost.com/127.0.0.1#5335 +ipset=/pornhost.com/gfwlist +server=/apl-hamivideo.cdn.hinet.net/127.0.0.1#5335 +ipset=/apl-hamivideo.cdn.hinet.net/gfwlist +server=/vmwsalesrewards.com/127.0.0.1#5335 +ipset=/vmwsalesrewards.com/gfwlist +server=/xxx-files.org/127.0.0.1#5335 +ipset=/xxx-files.org/gfwlist +server=/allhorsesex.com/127.0.0.1#5335 +ipset=/allhorsesex.com/gfwlist +server=/xscale.com/127.0.0.1#5335 +ipset=/xscale.com/gfwlist +server=/babesandbitches.net/127.0.0.1#5335 +ipset=/babesandbitches.net/gfwlist +server=/settv.com.tw/127.0.0.1#5335 +ipset=/settv.com.tw/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=/azurestackvalidation.com/127.0.0.1#5335 +ipset=/azurestackvalidation.com/gfwlist +server=/bmwperformancecenter.com/127.0.0.1#5335 +ipset=/bmwperformancecenter.com/gfwlist +server=/ukipad.com/127.0.0.1#5335 +ipset=/ukipad.com/gfwlist +server=/yandex.st/127.0.0.1#5335 +ipset=/yandex.st/gfwlist +server=/ebaycoins.com/127.0.0.1#5335 +ipset=/ebaycoins.com/gfwlist +server=/gosq.com/127.0.0.1#5335 +ipset=/gosq.com/gfwlist +server=/sexiframe.com/127.0.0.1#5335 +ipset=/sexiframe.com/gfwlist +server=/citytourgirls.com/127.0.0.1#5335 +ipset=/citytourgirls.com/gfwlist +server=/pincong.rocks/127.0.0.1#5335 +ipset=/pincong.rocks/gfwlist +server=/hunk.ws/127.0.0.1#5335 +ipset=/hunk.ws/gfwlist +server=/blpprofessional.com/127.0.0.1#5335 +ipset=/blpprofessional.com/gfwlist +server=/tgirlcentral.com/127.0.0.1#5335 +ipset=/tgirlcentral.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=/hentaihaven.me/127.0.0.1#5335 +ipset=/hentaihaven.me/gfwlist +server=/shireyishunjian.com/127.0.0.1#5335 +ipset=/shireyishunjian.com/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=/visa.gr/127.0.0.1#5335 +ipset=/visa.gr/gfwlist +server=/storm.mg/127.0.0.1#5335 +ipset=/storm.mg/gfwlist +server=/cockyboys.com/127.0.0.1#5335 +ipset=/cockyboys.com/gfwlist +server=/netflix.com.edgesuite.net/127.0.0.1#5335 +ipset=/netflix.com.edgesuite.net/gfwlist +server=/monsterbeatsmall.com/127.0.0.1#5335 +ipset=/monsterbeatsmall.com/gfwlist +server=/18doujin.com/127.0.0.1#5335 +ipset=/18doujin.com/gfwlist +server=/itunes.us/127.0.0.1#5335 +ipset=/itunes.us/gfwlist +server=/thetimes.co.uk/127.0.0.1#5335 +ipset=/thetimes.co.uk/gfwlist +server=/tellapart.com/127.0.0.1#5335 +ipset=/tellapart.com/gfwlist +server=/smutindia.com/127.0.0.1#5335 +ipset=/smutindia.com/gfwlist +server=/netpornsex.net/127.0.0.1#5335 +ipset=/netpornsex.net/gfwlist +server=/qualcommlabs.com/127.0.0.1#5335 +ipset=/qualcommlabs.com/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=/gen.lib.rus.ec/127.0.0.1#5335 +ipset=/gen.lib.rus.ec/gfwlist +server=/nukemanga.com/127.0.0.1#5335 +ipset=/nukemanga.com/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=/earphonescheapest.com/127.0.0.1#5335 +ipset=/earphonescheapest.com/gfwlist +server=/c-ij.com/127.0.0.1#5335 +ipset=/c-ij.com/gfwlist +server=/desihoes.com/127.0.0.1#5335 +ipset=/desihoes.com/gfwlist +server=/exxxtra.net/127.0.0.1#5335 +ipset=/exxxtra.net/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=/veporn.com/127.0.0.1#5335 +ipset=/veporn.com/gfwlist +server=/homofans.blogspot.com/127.0.0.1#5335 +ipset=/homofans.blogspot.com/gfwlist +server=/amznl.com/127.0.0.1#5335 +ipset=/amznl.com/gfwlist +server=/thepornlistdude.com/127.0.0.1#5335 +ipset=/thepornlistdude.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=/reuters.tv/127.0.0.1#5335 +ipset=/reuters.tv/gfwlist +server=/intel.si/127.0.0.1#5335 +ipset=/intel.si/gfwlist +server=/vfsco.ie/127.0.0.1#5335 +ipset=/vfsco.ie/gfwlist +server=/ah-me.com/127.0.0.1#5335 +ipset=/ah-me.com/gfwlist +server=/sonybo.co.jp/127.0.0.1#5335 +ipset=/sonybo.co.jp/gfwlist +server=/sexwebvideo.com/127.0.0.1#5335 +ipset=/sexwebvideo.com/gfwlist +server=/businessinsider.fr/127.0.0.1#5335 +ipset=/businessinsider.fr/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=/booloo.com/127.0.0.1#5335 +ipset=/booloo.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=/redditmail.com/127.0.0.1#5335 +ipset=/redditmail.com/gfwlist +server=/ikea.om/127.0.0.1#5335 +ipset=/ikea.om/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=/4porn4.com/127.0.0.1#5335 +ipset=/4porn4.com/gfwlist +server=/reconinstruments.com/127.0.0.1#5335 +ipset=/reconinstruments.com/gfwlist +server=/scholar.google.com.ly/127.0.0.1#5335 +ipset=/scholar.google.com.ly/gfwlist +server=/asianporn.sexy/127.0.0.1#5335 +ipset=/asianporn.sexy/gfwlist +server=/emagic.de/127.0.0.1#5335 +ipset=/emagic.de/gfwlist +server=/qkjuyet.com/127.0.0.1#5335 +ipset=/qkjuyet.com/gfwlist +server=/xxxpornotuber.com/127.0.0.1#5335 +ipset=/xxxpornotuber.com/gfwlist +server=/ipple.com/127.0.0.1#5335 +ipset=/ipple.com/gfwlist +server=/jkbeats.com/127.0.0.1#5335 +ipset=/jkbeats.com/gfwlist +server=/topnudemalecelebs.com/127.0.0.1#5335 +ipset=/topnudemalecelebs.com/gfwlist +server=/universalpicturesinternational.com/127.0.0.1#5335 +ipset=/universalpicturesinternational.com/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=/namemybeats.com/127.0.0.1#5335 +ipset=/namemybeats.com/gfwlist +server=/facebooj.com/127.0.0.1#5335 +ipset=/facebooj.com/gfwlist +server=/shikorina.net/127.0.0.1#5335 +ipset=/shikorina.net/gfwlist +server=/moneywithfacebook.com/127.0.0.1#5335 +ipset=/moneywithfacebook.com/gfwlist +server=/facecbgook.com/127.0.0.1#5335 +ipset=/facecbgook.com/gfwlist +server=/sissy.game/127.0.0.1#5335 +ipset=/sissy.game/gfwlist +server=/wiipartyu.com/127.0.0.1#5335 +ipset=/wiipartyu.com/gfwlist +server=/chatwhores.org/127.0.0.1#5335 +ipset=/chatwhores.org/gfwlist +server=/awstrack.me/127.0.0.1#5335 +ipset=/awstrack.me/gfwlist +server=/anaconda.org/127.0.0.1#5335 +ipset=/anaconda.org/gfwlist +server=/bangbrosnetwork.com/127.0.0.1#5335 +ipset=/bangbrosnetwork.com/gfwlist +server=/discord.tools/127.0.0.1#5335 +ipset=/discord.tools/gfwlist +server=/hottestfilms.com/127.0.0.1#5335 +ipset=/hottestfilms.com/gfwlist +server=/chromeos.dev/127.0.0.1#5335 +ipset=/chromeos.dev/gfwlist +server=/xnxxx.cc/127.0.0.1#5335 +ipset=/xnxxx.cc/gfwlist +server=/signal.org/127.0.0.1#5335 +ipset=/signal.org/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=/imaypb.com/127.0.0.1#5335 +ipset=/imaypb.com/gfwlist +server=/hpdrivers.com/127.0.0.1#5335 +ipset=/hpdrivers.com/gfwlist +server=/taiwansex.tw/127.0.0.1#5335 +ipset=/taiwansex.tw/gfwlist +server=/hptv.fun/127.0.0.1#5335 +ipset=/hptv.fun/gfwlist +server=/typeisbeautiful.com/127.0.0.1#5335 +ipset=/typeisbeautiful.com/gfwlist +server=/svipshipin.store/127.0.0.1#5335 +ipset=/svipshipin.store/gfwlist +server=/vipergirls.to/127.0.0.1#5335 +ipset=/vipergirls.to/gfwlist +server=/archive.org/127.0.0.1#5335 +ipset=/archive.org/gfwlist +server=/qoo10.jp/127.0.0.1#5335 +ipset=/qoo10.jp/gfwlist +server=/zuckerberg.com/127.0.0.1#5335 +ipset=/zuckerberg.com/gfwlist +server=/cbsinteractive.com/127.0.0.1#5335 +ipset=/cbsinteractive.com/gfwlist +server=/awempire.com/127.0.0.1#5335 +ipset=/awempire.com/gfwlist +server=/empflix.com/127.0.0.1#5335 +ipset=/empflix.com/gfwlist +server=/onstream.cc/127.0.0.1#5335 +ipset=/onstream.cc/gfwlist +server=/mycomicsxxx.com/127.0.0.1#5335 +ipset=/mycomicsxxx.com/gfwlist +server=/github.dev/127.0.0.1#5335 +ipset=/github.dev/gfwlist +server=/cam4.com/127.0.0.1#5335 +ipset=/cam4.com/gfwlist +server=/shameless.com/127.0.0.1#5335 +ipset=/shameless.com/gfwlist +server=/pornjam.com/127.0.0.1#5335 +ipset=/pornjam.com/gfwlist +server=/nintendoswitchtogether.com/127.0.0.1#5335 +ipset=/nintendoswitchtogether.com/gfwlist +server=/moeero-library.com/127.0.0.1#5335 +ipset=/moeero-library.com/gfwlist +server=/noisullifb.com/127.0.0.1#5335 +ipset=/noisullifb.com/gfwlist +server=/perfectgirls.net/127.0.0.1#5335 +ipset=/perfectgirls.net/gfwlist +server=/intel.in/127.0.0.1#5335 +ipset=/intel.in/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=/wwwpornhub.pro/127.0.0.1#5335 +ipset=/wwwpornhub.pro/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=/management-azure-devices.net/127.0.0.1#5335 +ipset=/management-azure-devices.net/gfwlist +server=/xgames.zone/127.0.0.1#5335 +ipset=/xgames.zone/gfwlist +server=/xsela.cc/127.0.0.1#5335 +ipset=/xsela.cc/gfwlist +server=/netfapx.com/127.0.0.1#5335 +ipset=/netfapx.com/gfwlist +server=/vox-cdn.com/127.0.0.1#5335 +ipset=/vox-cdn.com/gfwlist +server=/youtube.ly/127.0.0.1#5335 +ipset=/youtube.ly/gfwlist +server=/hentai.desi/127.0.0.1#5335 +ipset=/hentai.desi/gfwlist +server=/javday.tv/127.0.0.1#5335 +ipset=/javday.tv/gfwlist +server=/enematube.com/127.0.0.1#5335 +ipset=/enematube.com/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=/brasilincesto.com/127.0.0.1#5335 +ipset=/brasilincesto.com/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=/blogspot.co.at/127.0.0.1#5335 +ipset=/blogspot.co.at/gfwlist +server=/watchanimeattheoffice.com/127.0.0.1#5335 +ipset=/watchanimeattheoffice.com/gfwlist +server=/dojin.com/127.0.0.1#5335 +ipset=/dojin.com/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=/tgirlpostop.com/127.0.0.1#5335 +ipset=/tgirlpostop.com/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=/aeasyshop.com/127.0.0.1#5335 +ipset=/aeasyshop.com/gfwlist +server=/bmw-eg.com/127.0.0.1#5335 +ipset=/bmw-eg.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=/mcdonalds.no/127.0.0.1#5335 +ipset=/mcdonalds.no/gfwlist +server=/paypal-special.com/127.0.0.1#5335 +ipset=/paypal-special.com/gfwlist +server=/bunnylust.com/127.0.0.1#5335 +ipset=/bunnylust.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=/directvforhotels.com/127.0.0.1#5335 +ipset=/directvforhotels.com/gfwlist +server=/youtube.co.nz/127.0.0.1#5335 +ipset=/youtube.co.nz/gfwlist +server=/moneyswift.online/127.0.0.1#5335 +ipset=/moneyswift.online/gfwlist +server=/durex.co.il/127.0.0.1#5335 +ipset=/durex.co.il/gfwlist +server=/microsoftnewskids.com/127.0.0.1#5335 +ipset=/microsoftnewskids.com/gfwlist +server=/hetzner.de/127.0.0.1#5335 +ipset=/hetzner.de/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=/goldteenporn.com/127.0.0.1#5335 +ipset=/goldteenporn.com/gfwlist +server=/pornmz.net/127.0.0.1#5335 +ipset=/pornmz.net/gfwlist +server=/oxforddnb.com/127.0.0.1#5335 +ipset=/oxforddnb.com/gfwlist +server=/applicationinsights.io/127.0.0.1#5335 +ipset=/applicationinsights.io/gfwlist +server=/get.new/127.0.0.1#5335 +ipset=/get.new/gfwlist +server=/sssins.com/127.0.0.1#5335 +ipset=/sssins.com/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=/amazon.co.jp/127.0.0.1#5335 +ipset=/amazon.co.jp/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=/milkmanbook.com/127.0.0.1#5335 +ipset=/milkmanbook.com/gfwlist +server=/itu.int/127.0.0.1#5335 +ipset=/itu.int/gfwlist +server=/beatscheap-nz.com/127.0.0.1#5335 +ipset=/beatscheap-nz.com/gfwlist +server=/zbporn.com/127.0.0.1#5335 +ipset=/zbporn.com/gfwlist +server=/verisigninc.com/127.0.0.1#5335 +ipset=/verisigninc.com/gfwlist +server=/lucasentertainment.com/127.0.0.1#5335 +ipset=/lucasentertainment.com/gfwlist +server=/intercomcdn.com/127.0.0.1#5335 +ipset=/intercomcdn.com/gfwlist +server=/embl.fr/127.0.0.1#5335 +ipset=/embl.fr/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=/pixanalytics.com/127.0.0.1#5335 +ipset=/pixanalytics.com/gfwlist +server=/wholeplanetfoundation.org/127.0.0.1#5335 +ipset=/wholeplanetfoundation.org/gfwlist +server=/txxx.com/127.0.0.1#5335 +ipset=/txxx.com/gfwlist +server=/lightxxxtube.com/127.0.0.1#5335 +ipset=/lightxxxtube.com/gfwlist +server=/trustsign.ch/127.0.0.1#5335 +ipset=/trustsign.ch/gfwlist +server=/schemer.com/127.0.0.1#5335 +ipset=/schemer.com/gfwlist +server=/pinterest.it/127.0.0.1#5335 +ipset=/pinterest.it/gfwlist +server=/milfpornonly.com/127.0.0.1#5335 +ipset=/milfpornonly.com/gfwlist +server=/msropendata.com/127.0.0.1#5335 +ipset=/msropendata.com/gfwlist +server=/zobry.site/127.0.0.1#5335 +ipset=/zobry.site/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=/azuredigitaltwins.net/127.0.0.1#5335 +ipset=/azuredigitaltwins.net/gfwlist +server=/pornobom.com.br/127.0.0.1#5335 +ipset=/pornobom.com.br/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=/link-o-rama.com/127.0.0.1#5335 +ipset=/link-o-rama.com/gfwlist +server=/drebeatstudio.com/127.0.0.1#5335 +ipset=/drebeatstudio.com/gfwlist +server=/milffox.com/127.0.0.1#5335 +ipset=/milffox.com/gfwlist +server=/digitalcertvalidation.com/127.0.0.1#5335 +ipset=/digitalcertvalidation.com/gfwlist +server=/facebookstories.com/127.0.0.1#5335 +ipset=/facebookstories.com/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=/trans500.com/127.0.0.1#5335 +ipset=/trans500.com/gfwlist +server=/faceboof.com/127.0.0.1#5335 +ipset=/faceboof.com/gfwlist +server=/radiofarda.com/127.0.0.1#5335 +ipset=/radiofarda.com/gfwlist +server=/warp.plus/127.0.0.1#5335 +ipset=/warp.plus/gfwlist +server=/paypalbenefits.com/127.0.0.1#5335 +ipset=/paypalbenefits.com/gfwlist +server=/qualcomm.co.id/127.0.0.1#5335 +ipset=/qualcomm.co.id/gfwlist +server=/findacard.com/127.0.0.1#5335 +ipset=/findacard.com/gfwlist +server=/nvidia.fr/127.0.0.1#5335 +ipset=/nvidia.fr/gfwlist +server=/bmw.pt/127.0.0.1#5335 +ipset=/bmw.pt/gfwlist +server=/yaptube.com/127.0.0.1#5335 +ipset=/yaptube.com/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=/makecode.org/127.0.0.1#5335 +ipset=/makecode.org/gfwlist +server=/caijinglengyan.com/127.0.0.1#5335 +ipset=/caijinglengyan.com/gfwlist +server=/hentaiworld.tv/127.0.0.1#5335 +ipset=/hentaiworld.tv/gfwlist +server=/nudistbeachporn.com/127.0.0.1#5335 +ipset=/nudistbeachporn.com/gfwlist +server=/ultradonkey.com/127.0.0.1#5335 +ipset=/ultradonkey.com/gfwlist +server=/cbssports.com/127.0.0.1#5335 +ipset=/cbssports.com/gfwlist +server=/tsthai.com/127.0.0.1#5335 +ipset=/tsthai.com/gfwlist +server=/durex.com/127.0.0.1#5335 +ipset=/durex.com/gfwlist +server=/monbeats2013.com/127.0.0.1#5335 +ipset=/monbeats2013.com/gfwlist +server=/tiaz.site/127.0.0.1#5335 +ipset=/tiaz.site/gfwlist +server=/atlantaminidealers.com/127.0.0.1#5335 +ipset=/atlantaminidealers.com/gfwlist +server=/slack-files.com/127.0.0.1#5335 +ipset=/slack-files.com/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=/lovegirls.cam/127.0.0.1#5335 +ipset=/lovegirls.cam/gfwlist +server=/mastercardworldwide.com/127.0.0.1#5335 +ipset=/mastercardworldwide.com/gfwlist +server=/hentai2read.com/127.0.0.1#5335 +ipset=/hentai2read.com/gfwlist +server=/jove.com/127.0.0.1#5335 +ipset=/jove.com/gfwlist +server=/amateur-fetish.com/127.0.0.1#5335 +ipset=/amateur-fetish.com/gfwlist +server=/illusionze.com/127.0.0.1#5335 +ipset=/illusionze.com/gfwlist +server=/amazon.nl/127.0.0.1#5335 +ipset=/amazon.nl/gfwlist +server=/x3vid.com/127.0.0.1#5335 +ipset=/x3vid.com/gfwlist +server=/bbcpornonly.com/127.0.0.1#5335 +ipset=/bbcpornonly.com/gfwlist +server=/nuki-dokoro.com/127.0.0.1#5335 +ipset=/nuki-dokoro.com/gfwlist +server=/hentai247.net/127.0.0.1#5335 +ipset=/hentai247.net/gfwlist +server=/casquebeatsofficiel-fr.com/127.0.0.1#5335 +ipset=/casquebeatsofficiel-fr.com/gfwlist +server=/dollnight.com/127.0.0.1#5335 +ipset=/dollnight.com/gfwlist +server=/appleone.chat/127.0.0.1#5335 +ipset=/appleone.chat/gfwlist +server=/javhdonline.com/127.0.0.1#5335 +ipset=/javhdonline.com/gfwlist +server=/hentaihub.xxx/127.0.0.1#5335 +ipset=/hentaihub.xxx/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=/60plusmilfs.com/127.0.0.1#5335 +ipset=/60plusmilfs.com/gfwlist +server=/50plusmilfs.com/127.0.0.1#5335 +ipset=/50plusmilfs.com/gfwlist +server=/myfreeblack.com/127.0.0.1#5335 +ipset=/myfreeblack.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=/pearsonelt.ch/127.0.0.1#5335 +ipset=/pearsonelt.ch/gfwlist +server=/collins.in/127.0.0.1#5335 +ipset=/collins.in/gfwlist +server=/thaicherry.com/127.0.0.1#5335 +ipset=/thaicherry.com/gfwlist +server=/chocam.com/127.0.0.1#5335 +ipset=/chocam.com/gfwlist +server=/brill.com/127.0.0.1#5335 +ipset=/brill.com/gfwlist +server=/internetexxxplorer.com/127.0.0.1#5335 +ipset=/internetexxxplorer.com/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=/accv.es/127.0.0.1#5335 +ipset=/accv.es/gfwlist +server=/bcvp0rtal.com/127.0.0.1#5335 +ipset=/bcvp0rtal.com/gfwlist +server=/fotoscaserasx.com/127.0.0.1#5335 +ipset=/fotoscaserasx.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=/nurofen.es/127.0.0.1#5335 +ipset=/nurofen.es/gfwlist +server=/pscp.tv/127.0.0.1#5335 +ipset=/pscp.tv/gfwlist +server=/excedo.com/127.0.0.1#5335 +ipset=/excedo.com/gfwlist +server=/stocking-tease.com/127.0.0.1#5335 +ipset=/stocking-tease.com/gfwlist +server=/topcartoonsites.com/127.0.0.1#5335 +ipset=/topcartoonsites.com/gfwlist +server=/adult-sex-games.com/127.0.0.1#5335 +ipset=/adult-sex-games.com/gfwlist +server=/homemadeanalporn.com/127.0.0.1#5335 +ipset=/homemadeanalporn.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=/mewe.com/127.0.0.1#5335 +ipset=/mewe.com/gfwlist +server=/gputechconf.eu/127.0.0.1#5335 +ipset=/gputechconf.eu/gfwlist +server=/tokyo-sports.co.jp/127.0.0.1#5335 +ipset=/tokyo-sports.co.jp/gfwlist +server=/mcdonalds.se/127.0.0.1#5335 +ipset=/mcdonalds.se/gfwlist +server=/2013beatsbydreshop.com/127.0.0.1#5335 +ipset=/2013beatsbydreshop.com/gfwlist +server=/zooporn.pro/127.0.0.1#5335 +ipset=/zooporn.pro/gfwlist +server=/pornosphere.com/127.0.0.1#5335 +ipset=/pornosphere.com/gfwlist +server=/i91av.org/127.0.0.1#5335 +ipset=/i91av.org/gfwlist +server=/erito.com/127.0.0.1#5335 +ipset=/erito.com/gfwlist +server=/fox9.com/127.0.0.1#5335 +ipset=/fox9.com/gfwlist +server=/durex.ie/127.0.0.1#5335 +ipset=/durex.ie/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=/volvotruckrental.be/127.0.0.1#5335 +ipset=/volvotruckrental.be/gfwlist +server=/paramount.com/127.0.0.1#5335 +ipset=/paramount.com/gfwlist +server=/scene7.com/127.0.0.1#5335 +ipset=/scene7.com/gfwlist +server=/indian-free-xnxx.com/127.0.0.1#5335 +ipset=/indian-free-xnxx.com/gfwlist +server=/easports.com/127.0.0.1#5335 +ipset=/easports.com/gfwlist +server=/avstar04.com/127.0.0.1#5335 +ipset=/avstar04.com/gfwlist +server=/apple.co.uk/127.0.0.1#5335 +ipset=/apple.co.uk/gfwlist +server=/bloombergsurvey.com/127.0.0.1#5335 +ipset=/bloombergsurvey.com/gfwlist +server=/javhdporn.com/127.0.0.1#5335 +ipset=/javhdporn.com/gfwlist +server=/huluapp.com/127.0.0.1#5335 +ipset=/huluapp.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=/icloud.sk/127.0.0.1#5335 +ipset=/icloud.sk/gfwlist +server=/adultgamereviews.com/127.0.0.1#5335 +ipset=/adultgamereviews.com/gfwlist +server=/swjedifallenorder.com/127.0.0.1#5335 +ipset=/swjedifallenorder.com/gfwlist +server=/kusugurizanmai.com/127.0.0.1#5335 +ipset=/kusugurizanmai.com/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=/nownews.com/127.0.0.1#5335 +ipset=/nownews.com/gfwlist +server=/kindle.it/127.0.0.1#5335 +ipset=/kindle.it/gfwlist +server=/foxsports.com.ve/127.0.0.1#5335 +ipset=/foxsports.com.ve/gfwlist +server=/161sex.com/127.0.0.1#5335 +ipset=/161sex.com/gfwlist +server=/jizzle.com/127.0.0.1#5335 +ipset=/jizzle.com/gfwlist +server=/docs.rs/127.0.0.1#5335 +ipset=/docs.rs/gfwlist +server=/verisign.es/127.0.0.1#5335 +ipset=/verisign.es/gfwlist +server=/scharferporno.com/127.0.0.1#5335 +ipset=/scharferporno.com/gfwlist +server=/hentaihaven.xxx/127.0.0.1#5335 +ipset=/hentaihaven.xxx/gfwlist +server=/bmw.com.pe/127.0.0.1#5335 +ipset=/bmw.com.pe/gfwlist +server=/hentaimovieplanet.com/127.0.0.1#5335 +ipset=/hentaimovieplanet.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=/discordcdn.com/127.0.0.1#5335 +ipset=/discordcdn.com/gfwlist +server=/lonestarnaughtygirls.com/127.0.0.1#5335 +ipset=/lonestarnaughtygirls.com/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=/xfreehd.com/127.0.0.1#5335 +ipset=/xfreehd.com/gfwlist +server=/ccnsite.com/127.0.0.1#5335 +ipset=/ccnsite.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=/momsteachsex.com/127.0.0.1#5335 +ipset=/momsteachsex.com/gfwlist +server=/janor6.net/127.0.0.1#5335 +ipset=/janor6.net/gfwlist +server=/uniswap.org/127.0.0.1#5335 +ipset=/uniswap.org/gfwlist +server=/washa.tv/127.0.0.1#5335 +ipset=/washa.tv/gfwlist +server=/idnike.com/127.0.0.1#5335 +ipset=/idnike.com/gfwlist +server=/bmw-connecteddrive.ch/127.0.0.1#5335 +ipset=/bmw-connecteddrive.ch/gfwlist +server=/directvdealer.com/127.0.0.1#5335 +ipset=/directvdealer.com/gfwlist +server=/awstrust.com/127.0.0.1#5335 +ipset=/awstrust.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=/realmilwaukeenow.com/127.0.0.1#5335 +ipset=/realmilwaukeenow.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=/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=/volvotrucks.md/127.0.0.1#5335 +ipset=/volvotrucks.md/gfwlist +server=/appleipodsettlement.com/127.0.0.1#5335 +ipset=/appleipodsettlement.com/gfwlist +server=/shemalehd.sex/127.0.0.1#5335 +ipset=/shemalehd.sex/gfwlist +server=/starbucks.ad/127.0.0.1#5335 +ipset=/starbucks.ad/gfwlist +server=/h-flash.com/127.0.0.1#5335 +ipset=/h-flash.com/gfwlist +server=/rundf665.cyou/127.0.0.1#5335 +ipset=/rundf665.cyou/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=/famousinternetgirls.com/127.0.0.1#5335 +ipset=/famousinternetgirls.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=/ddd-smart.net/127.0.0.1#5335 +ipset=/ddd-smart.net/gfwlist +server=/sextop1.net/127.0.0.1#5335 +ipset=/sextop1.net/gfwlist +server=/xxxtubegf.com/127.0.0.1#5335 +ipset=/xxxtubegf.com/gfwlist +server=/hulugans.com/127.0.0.1#5335 +ipset=/hulugans.com/gfwlist +server=/paheal.net/127.0.0.1#5335 +ipset=/paheal.net/gfwlist +server=/allfet.net/127.0.0.1#5335 +ipset=/allfet.net/gfwlist +server=/pussyporntubes.com/127.0.0.1#5335 +ipset=/pussyporntubes.com/gfwlist +server=/favebook.com/127.0.0.1#5335 +ipset=/favebook.com/gfwlist +server=/beatselectronic.net/127.0.0.1#5335 +ipset=/beatselectronic.net/gfwlist +server=/meetandfuckgames.com/127.0.0.1#5335 +ipset=/meetandfuckgames.com/gfwlist +server=/marvelsuperwar.com/127.0.0.1#5335 +ipset=/marvelsuperwar.com/gfwlist +server=/spotify.map.fastlylb.net/127.0.0.1#5335 +ipset=/spotify.map.fastlylb.net/gfwlist +server=/fastlane.ci/127.0.0.1#5335 +ipset=/fastlane.ci/gfwlist +server=/shemaletrannypics.com/127.0.0.1#5335 +ipset=/shemaletrannypics.com/gfwlist +server=/adulti01.com/127.0.0.1#5335 +ipset=/adulti01.com/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=/porn-sex-video.me/127.0.0.1#5335 +ipset=/porn-sex-video.me/gfwlist +server=/raspberrypi.org/127.0.0.1#5335 +ipset=/raspberrypi.org/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=/girlsfuck-tube.com/127.0.0.1#5335 +ipset=/girlsfuck-tube.com/gfwlist +server=/40momporntube.com/127.0.0.1#5335 +ipset=/40momporntube.com/gfwlist +server=/pornyteen.com/127.0.0.1#5335 +ipset=/pornyteen.com/gfwlist +server=/epigeum.com/127.0.0.1#5335 +ipset=/epigeum.com/gfwlist +server=/salebeatslasteststyle4you.com/127.0.0.1#5335 +ipset=/salebeatslasteststyle4you.com/gfwlist +server=/xxxhentai.net/127.0.0.1#5335 +ipset=/xxxhentai.net/gfwlist +server=/ebay.ie/127.0.0.1#5335 +ipset=/ebay.ie/gfwlist +server=/e-tugra.com/127.0.0.1#5335 +ipset=/e-tugra.com/gfwlist +server=/esm.run/127.0.0.1#5335 +ipset=/esm.run/gfwlist +server=/yahoo.co.bw/127.0.0.1#5335 +ipset=/yahoo.co.bw/gfwlist +server=/dropbox.tech/127.0.0.1#5335 +ipset=/dropbox.tech/gfwlist +server=/badasianpussy.com/127.0.0.1#5335 +ipset=/badasianpussy.com/gfwlist +server=/monsterbeatsbydre-usa.com/127.0.0.1#5335 +ipset=/monsterbeatsbydre-usa.com/gfwlist +server=/coronavirusnow.com/127.0.0.1#5335 +ipset=/coronavirusnow.com/gfwlist +server=/blackamateurfuck.com/127.0.0.1#5335 +ipset=/blackamateurfuck.com/gfwlist +server=/xxxtubezoo.com/127.0.0.1#5335 +ipset=/xxxtubezoo.com/gfwlist +server=/paypal-secure.org/127.0.0.1#5335 +ipset=/paypal-secure.org/gfwlist +server=/ubuntu-touch.io/127.0.0.1#5335 +ipset=/ubuntu-touch.io/gfwlist +server=/venmo-touch.com/127.0.0.1#5335 +ipset=/venmo-touch.com/gfwlist +server=/notepad-plus-plus.org/127.0.0.1#5335 +ipset=/notepad-plus-plus.org/gfwlist +server=/bmw-sports.com/127.0.0.1#5335 +ipset=/bmw-sports.com/gfwlist +server=/creampieforgranny.com/127.0.0.1#5335 +ipset=/creampieforgranny.com/gfwlist +server=/bdsmland.org/127.0.0.1#5335 +ipset=/bdsmland.org/gfwlist +server=/jiuse905.com/127.0.0.1#5335 +ipset=/jiuse905.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=/hornygirlsonline.org/127.0.0.1#5335 +ipset=/hornygirlsonline.org/gfwlist +server=/yaoiotaku.com/127.0.0.1#5335 +ipset=/yaoiotaku.com/gfwlist +server=/bitsquare.io/127.0.0.1#5335 +ipset=/bitsquare.io/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=/golang.org/127.0.0.1#5335 +ipset=/golang.org/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=/bloombergstatus.com/127.0.0.1#5335 +ipset=/bloombergstatus.com/gfwlist +server=/yarininsuyu.com/127.0.0.1#5335 +ipset=/yarininsuyu.com/gfwlist +server=/xxxxvideo.uno/127.0.0.1#5335 +ipset=/xxxxvideo.uno/gfwlist +server=/melonbooks.co.jp/127.0.0.1#5335 +ipset=/melonbooks.co.jp/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=/ebaycom.com/127.0.0.1#5335 +ipset=/ebaycom.com/gfwlist +server=/d-trust.net/127.0.0.1#5335 +ipset=/d-trust.net/gfwlist +server=/gfpornmovies.com/127.0.0.1#5335 +ipset=/gfpornmovies.com/gfwlist +server=/iphoneacessorios.com.br/127.0.0.1#5335 +ipset=/iphoneacessorios.com.br/gfwlist +server=/redgifs.com/127.0.0.1#5335 +ipset=/redgifs.com/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=/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=/merakigo.com/127.0.0.1#5335 +ipset=/merakigo.com/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=/shockingmovies.com/127.0.0.1#5335 +ipset=/shockingmovies.com/gfwlist +server=/pca.st/127.0.0.1#5335 +ipset=/pca.st/gfwlist +server=/drbizzaro.com/127.0.0.1#5335 +ipset=/drbizzaro.com/gfwlist +server=/camgoddess.tv/127.0.0.1#5335 +ipset=/camgoddess.tv/gfwlist +server=/gaythebest.com/127.0.0.1#5335 +ipset=/gaythebest.com/gfwlist +server=/databank.worldbank.org/127.0.0.1#5335 +ipset=/databank.worldbank.org/gfwlist +server=/6arabs.com/127.0.0.1#5335 +ipset=/6arabs.com/gfwlist +server=/xxxpicz.com/127.0.0.1#5335 +ipset=/xxxpicz.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=/icloud-content.com/127.0.0.1#5335 +ipset=/icloud-content.com/gfwlist +server=/gemfire.net/127.0.0.1#5335 +ipset=/gemfire.net/gfwlist +server=/udn.com.tw/127.0.0.1#5335 +ipset=/udn.com.tw/gfwlist +server=/vivaxnxx.com/127.0.0.1#5335 +ipset=/vivaxnxx.com/gfwlist +server=/forbiddenasian.com/127.0.0.1#5335 +ipset=/forbiddenasian.com/gfwlist +server=/ydn.com.tw/127.0.0.1#5335 +ipset=/ydn.com.tw/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=/pornhubdeutsch.net/127.0.0.1#5335 +ipset=/pornhubdeutsch.net/gfwlist +server=/ebay-us.com/127.0.0.1#5335 +ipset=/ebay-us.com/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=/googledrive.com/127.0.0.1#5335 +ipset=/googledrive.com/gfwlist +server=/mybmw.ca/127.0.0.1#5335 +ipset=/mybmw.ca/gfwlist +server=/iproperty.com/127.0.0.1#5335 +ipset=/iproperty.com/gfwlist +server=/truyen-hentai.fr/127.0.0.1#5335 +ipset=/truyen-hentai.fr/gfwlist +server=/brdteengal.com/127.0.0.1#5335 +ipset=/brdteengal.com/gfwlist +server=/attpurchasing.com/127.0.0.1#5335 +ipset=/attpurchasing.com/gfwlist +server=/hzmn.net/127.0.0.1#5335 +ipset=/hzmn.net/gfwlist +server=/xxxassfuck.com/127.0.0.1#5335 +ipset=/xxxassfuck.com/gfwlist +server=/xvideos-dl.top/127.0.0.1#5335 +ipset=/xvideos-dl.top/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=/mingky.org/127.0.0.1#5335 +ipset=/mingky.org/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=/amazonvideodirect.com/127.0.0.1#5335 +ipset=/amazonvideodirect.com/gfwlist +server=/bmwtampabay.com/127.0.0.1#5335 +ipset=/bmwtampabay.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=/zeronet.io/127.0.0.1#5335 +ipset=/zeronet.io/gfwlist +server=/finishinfo.jp/127.0.0.1#5335 +ipset=/finishinfo.jp/gfwlist +server=/pornstreams.tv/127.0.0.1#5335 +ipset=/pornstreams.tv/gfwlist +server=/newmonst1erbeatsto1re.com/127.0.0.1#5335 +ipset=/newmonst1erbeatsto1re.com/gfwlist +server=/qq.design/127.0.0.1#5335 +ipset=/qq.design/gfwlist +server=/townsvillebulletin.com.au/127.0.0.1#5335 +ipset=/townsvillebulletin.com.au/gfwlist +server=/javmuch.com/127.0.0.1#5335 +ipset=/javmuch.com/gfwlist +server=/jbe-platform.com/127.0.0.1#5335 +ipset=/jbe-platform.com/gfwlist +server=/huffpostbrasil.com/127.0.0.1#5335 +ipset=/huffpostbrasil.com/gfwlist +server=/totoleak.com/127.0.0.1#5335 +ipset=/totoleak.com/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=/sexarea.org/127.0.0.1#5335 +ipset=/sexarea.org/gfwlist +server=/digicert.com/127.0.0.1#5335 +ipset=/digicert.com/gfwlist +server=/straightouttasomewhere.com/127.0.0.1#5335 +ipset=/straightouttasomewhere.com/gfwlist +server=/vtvan.com/127.0.0.1#5335 +ipset=/vtvan.com/gfwlist +server=/filmesdesexo.blog/127.0.0.1#5335 +ipset=/filmesdesexo.blog/gfwlist +server=/netflixdnstest2.com/127.0.0.1#5335 +ipset=/netflixdnstest2.com/gfwlist +server=/pornoslon.me/127.0.0.1#5335 +ipset=/pornoslon.me/gfwlist +server=/cashpassport.com/127.0.0.1#5335 +ipset=/cashpassport.com/gfwlist +server=/osdn.net/127.0.0.1#5335 +ipset=/osdn.net/gfwlist +server=/doujin-eromanga.com/127.0.0.1#5335 +ipset=/doujin-eromanga.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=/facbool.com/127.0.0.1#5335 +ipset=/facbool.com/gfwlist +server=/tencent.design/127.0.0.1#5335 +ipset=/tencent.design/gfwlist +server=/localizecdn.com/127.0.0.1#5335 +ipset=/localizecdn.com/gfwlist +server=/shadowslaves.com/127.0.0.1#5335 +ipset=/shadowslaves.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=/xogogo.com/127.0.0.1#5335 +ipset=/xogogo.com/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=/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=/nubilefilms.com/127.0.0.1#5335 +ipset=/nubilefilms.com/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=/freeanimalporn.net/127.0.0.1#5335 +ipset=/freeanimalporn.net/gfwlist +server=/redmatureporn.com/127.0.0.1#5335 +ipset=/redmatureporn.com/gfwlist +server=/3dsexgames.biz/127.0.0.1#5335 +ipset=/3dsexgames.biz/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=/pornprosnetwork.com/127.0.0.1#5335 +ipset=/pornprosnetwork.com/gfwlist +server=/singtaoopo.com/127.0.0.1#5335 +ipset=/singtaoopo.com/gfwlist +server=/xkeezmovies.com/127.0.0.1#5335 +ipset=/xkeezmovies.com/gfwlist +server=/bestialitytaboo.tv/127.0.0.1#5335 +ipset=/bestialitytaboo.tv/gfwlist +server=/sexy-models.net/127.0.0.1#5335 +ipset=/sexy-models.net/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=/beatsodre.com/127.0.0.1#5335 +ipset=/beatsodre.com/gfwlist +server=/simcity-buildit.com/127.0.0.1#5335 +ipset=/simcity-buildit.com/gfwlist +server=/jstor.org/127.0.0.1#5335 +ipset=/jstor.org/gfwlist +server=/urlgalleries.net/127.0.0.1#5335 +ipset=/urlgalleries.net/gfwlist +server=/businessinsider.com.pl/127.0.0.1#5335 +ipset=/businessinsider.com.pl/gfwlist +server=/wowyoungporn.com/127.0.0.1#5335 +ipset=/wowyoungporn.com/gfwlist +server=/rbeuroinfo.com/127.0.0.1#5335 +ipset=/rbeuroinfo.com/gfwlist +server=/265sdwe3.com/127.0.0.1#5335 +ipset=/265sdwe3.com/gfwlist +server=/iwank.tv/127.0.0.1#5335 +ipset=/iwank.tv/gfwlist +server=/cdnjs.com/127.0.0.1#5335 +ipset=/cdnjs.com/gfwlist +server=/privateclassics.com/127.0.0.1#5335 +ipset=/privateclassics.com/gfwlist +server=/feedly.com/127.0.0.1#5335 +ipset=/feedly.com/gfwlist +server=/xnxx.tv/127.0.0.1#5335 +ipset=/xnxx.tv/gfwlist +server=/bmw-connecteddrive.fr/127.0.0.1#5335 +ipset=/bmw-connecteddrive.fr/gfwlist +server=/rbnainternational.com/127.0.0.1#5335 +ipset=/rbnainternational.com/gfwlist +server=/wankoz.com/127.0.0.1#5335 +ipset=/wankoz.com/gfwlist +server=/analfuckvideo.com/127.0.0.1#5335 +ipset=/analfuckvideo.com/gfwlist +server=/microsofttradein.com/127.0.0.1#5335 +ipset=/microsofttradein.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=/c4rex.co/127.0.0.1#5335 +ipset=/c4rex.co/gfwlist +server=/fapopedia.net/127.0.0.1#5335 +ipset=/fapopedia.net/gfwlist +server=/kamababa.com/127.0.0.1#5335 +ipset=/kamababa.com/gfwlist +server=/videosdepornografia.blog.br/127.0.0.1#5335 +ipset=/videosdepornografia.blog.br/gfwlist +server=/thomsonreuters.com.au/127.0.0.1#5335 +ipset=/thomsonreuters.com.au/gfwlist +server=/thrixxx.com/127.0.0.1#5335 +ipset=/thrixxx.com/gfwlist +server=/amazontrust.com/127.0.0.1#5335 +ipset=/amazontrust.com/gfwlist +server=/porndroids.com/127.0.0.1#5335 +ipset=/porndroids.com/gfwlist +server=/viddeo-jav.net/127.0.0.1#5335 +ipset=/viddeo-jav.net/gfwlist +server=/qmov.com/127.0.0.1#5335 +ipset=/qmov.com/gfwlist +server=/seasidestory.tokyo/127.0.0.1#5335 +ipset=/seasidestory.tokyo/gfwlist +server=/nikebiz.info/127.0.0.1#5335 +ipset=/nikebiz.info/gfwlist +server=/4hu.tv/127.0.0.1#5335 +ipset=/4hu.tv/gfwlist +server=/crustwebsites.net/127.0.0.1#5335 +ipset=/crustwebsites.net/gfwlist +server=/srtcdn.net/127.0.0.1#5335 +ipset=/srtcdn.net/gfwlist +server=/facebookw.com/127.0.0.1#5335 +ipset=/facebookw.com/gfwlist +server=/monsterbeatsstore.com/127.0.0.1#5335 +ipset=/monsterbeatsstore.com/gfwlist +server=/volvotrucks.id/127.0.0.1#5335 +ipset=/volvotrucks.id/gfwlist +server=/sextubebox.com/127.0.0.1#5335 +ipset=/sextubebox.com/gfwlist +server=/femalefounderscomp.com/127.0.0.1#5335 +ipset=/femalefounderscomp.com/gfwlist +server=/sexecherche.com/127.0.0.1#5335 +ipset=/sexecherche.com/gfwlist +server=/classymomsex.com/127.0.0.1#5335 +ipset=/classymomsex.com/gfwlist +server=/pokemonblackwhite.com/127.0.0.1#5335 +ipset=/pokemonblackwhite.com/gfwlist +server=/monsterbeats-onsale.com/127.0.0.1#5335 +ipset=/monsterbeats-onsale.com/gfwlist +server=/amazonsdi.com/127.0.0.1#5335 +ipset=/amazonsdi.com/gfwlist +server=/iwantgalleries.com/127.0.0.1#5335 +ipset=/iwantgalleries.com/gfwlist +server=/kimosex.com/127.0.0.1#5335 +ipset=/kimosex.com/gfwlist +server=/bdsmstreak.com/127.0.0.1#5335 +ipset=/bdsmstreak.com/gfwlist +server=/optimumssl.com/127.0.0.1#5335 +ipset=/optimumssl.com/gfwlist +server=/sqlserveronlinux.com/127.0.0.1#5335 +ipset=/sqlserveronlinux.com/gfwlist +server=/ctee.com.tw/127.0.0.1#5335 +ipset=/ctee.com.tw/gfwlist +server=/eiu.com/127.0.0.1#5335 +ipset=/eiu.com/gfwlist +server=/doujin-info.net/127.0.0.1#5335 +ipset=/doujin-info.net/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=/amazon.it/127.0.0.1#5335 +ipset=/amazon.it/gfwlist +server=/mvideoporno.xxx/127.0.0.1#5335 +ipset=/mvideoporno.xxx/gfwlist +server=/fappeningthots.com/127.0.0.1#5335 +ipset=/fappeningthots.com/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=/mu6bce1c.xyz/127.0.0.1#5335 +ipset=/mu6bce1c.xyz/gfwlist +server=/google.com.gh/127.0.0.1#5335 +ipset=/google.com.gh/gfwlist +server=/stacksnippets.net/127.0.0.1#5335 +ipset=/stacksnippets.net/gfwlist +server=/shenyunperformingarts.org/127.0.0.1#5335 +ipset=/shenyunperformingarts.org/gfwlist +server=/gotporn.com/127.0.0.1#5335 +ipset=/gotporn.com/gfwlist +server=/voabambara.com/127.0.0.1#5335 +ipset=/voabambara.com/gfwlist +server=/porngub.com/127.0.0.1#5335 +ipset=/porngub.com/gfwlist +server=/vscode-cdn.net/127.0.0.1#5335 +ipset=/vscode-cdn.net/gfwlist +server=/sexsim.com/127.0.0.1#5335 +ipset=/sexsim.com/gfwlist +server=/veet.co.kr/127.0.0.1#5335 +ipset=/veet.co.kr/gfwlist +server=/pandamovies.pw/127.0.0.1#5335 +ipset=/pandamovies.pw/gfwlist +server=/paypal-center.info/127.0.0.1#5335 +ipset=/paypal-center.info/gfwlist +server=/watch-my-gf.com/127.0.0.1#5335 +ipset=/watch-my-gf.com/gfwlist +server=/zohowebstatic.com/127.0.0.1#5335 +ipset=/zohowebstatic.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=/art1lib.com/127.0.0.1#5335 +ipset=/art1lib.com/gfwlist +server=/theuab.net/127.0.0.1#5335 +ipset=/theuab.net/gfwlist +server=/djreprints.com/127.0.0.1#5335 +ipset=/djreprints.com/gfwlist +server=/sexu.com/127.0.0.1#5335 +ipset=/sexu.com/gfwlist +server=/2013pascherbeatsbydre.com/127.0.0.1#5335 +ipset=/2013pascherbeatsbydre.com/gfwlist +server=/sspanel.net/127.0.0.1#5335 +ipset=/sspanel.net/gfwlist +server=/vmwxw.com/127.0.0.1#5335 +ipset=/vmwxw.com/gfwlist +server=/proctoscopeexam.com/127.0.0.1#5335 +ipset=/proctoscopeexam.com/gfwlist +server=/facebook4business.com/127.0.0.1#5335 +ipset=/facebook4business.com/gfwlist +server=/mdnkids.com/127.0.0.1#5335 +ipset=/mdnkids.com/gfwlist +server=/realclearenergy.org/127.0.0.1#5335 +ipset=/realclearenergy.org/gfwlist +server=/jusmynote.wordpress.com/127.0.0.1#5335 +ipset=/jusmynote.wordpress.com/gfwlist +server=/monsterbeatsbydreshop.com/127.0.0.1#5335 +ipset=/monsterbeatsbydreshop.com/gfwlist +server=/silkengirl.com/127.0.0.1#5335 +ipset=/silkengirl.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=/cisco-warrantyfinder.com/127.0.0.1#5335 +ipset=/cisco-warrantyfinder.com/gfwlist +server=/weverse.io/127.0.0.1#5335 +ipset=/weverse.io/gfwlist +server=/ftvgirls.com/127.0.0.1#5335 +ipset=/ftvgirls.com/gfwlist +server=/bukkake.link/127.0.0.1#5335 +ipset=/bukkake.link/gfwlist +server=/snapchat.com/127.0.0.1#5335 +ipset=/snapchat.com/gfwlist +server=/primecurves.com/127.0.0.1#5335 +ipset=/primecurves.com/gfwlist +server=/ahpornotube.com/127.0.0.1#5335 +ipset=/ahpornotube.com/gfwlist +server=/iwantporn.net/127.0.0.1#5335 +ipset=/iwantporn.net/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=/alphabet.org.uk/127.0.0.1#5335 +ipset=/alphabet.org.uk/gfwlist +server=/umamusume.akamaized.net/127.0.0.1#5335 +ipset=/umamusume.akamaized.net/gfwlist +server=/yahoo.com.uy/127.0.0.1#5335 +ipset=/yahoo.com.uy/gfwlist +server=/mwhentai.net/127.0.0.1#5335 +ipset=/mwhentai.net/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=/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=/caime.xyz/127.0.0.1#5335 +ipset=/caime.xyz/gfwlist +server=/curve.fi/127.0.0.1#5335 +ipset=/curve.fi/gfwlist +server=/monsterbeatsshops.net/127.0.0.1#5335 +ipset=/monsterbeatsshops.net/gfwlist +server=/vanish.sk/127.0.0.1#5335 +ipset=/vanish.sk/gfwlist +server=/hentai2.net/127.0.0.1#5335 +ipset=/hentai2.net/gfwlist +server=/enfabebe.com/127.0.0.1#5335 +ipset=/enfabebe.com/gfwlist +server=/bmwgroup.jobs/127.0.0.1#5335 +ipset=/bmwgroup.jobs/gfwlist +server=/lacomics.org/127.0.0.1#5335 +ipset=/lacomics.org/gfwlist +server=/homedepot-static.com/127.0.0.1#5335 +ipset=/homedepot-static.com/gfwlist +server=/postyourgirls.ws/127.0.0.1#5335 +ipset=/postyourgirls.ws/gfwlist +server=/onlynudes.org/127.0.0.1#5335 +ipset=/onlynudes.org/gfwlist +server=/leagueoflegends.co.kr/127.0.0.1#5335 +ipset=/leagueoflegends.co.kr/gfwlist +server=/mastercard.com.mx/127.0.0.1#5335 +ipset=/mastercard.com.mx/gfwlist +server=/duoweiweek.com/127.0.0.1#5335 +ipset=/duoweiweek.com/gfwlist +server=/sexvideos.tel/127.0.0.1#5335 +ipset=/sexvideos.tel/gfwlist +server=/integral7.com/127.0.0.1#5335 +ipset=/integral7.com/gfwlist +server=/now.sh/127.0.0.1#5335 +ipset=/now.sh/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=/techstreet.com/127.0.0.1#5335 +ipset=/techstreet.com/gfwlist +server=/vanish.es/127.0.0.1#5335 +ipset=/vanish.es/gfwlist +server=/adventofcode.com/127.0.0.1#5335 +ipset=/adventofcode.com/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=/sheflix.com/127.0.0.1#5335 +ipset=/sheflix.com/gfwlist +server=/9ccms.me/127.0.0.1#5335 +ipset=/9ccms.me/gfwlist +server=/verisign.com.vn/127.0.0.1#5335 +ipset=/verisign.com.vn/gfwlist +server=/apple.ca/127.0.0.1#5335 +ipset=/apple.ca/gfwlist +server=/thehulubraintrust.com/127.0.0.1#5335 +ipset=/thehulubraintrust.com/gfwlist +server=/older-women-porn.com/127.0.0.1#5335 +ipset=/older-women-porn.com/gfwlist +server=/5q5zu9f1.me/127.0.0.1#5335 +ipset=/5q5zu9f1.me/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=/sextubedot.com/127.0.0.1#5335 +ipset=/sextubedot.com/gfwlist +server=/whatbrowser.org/127.0.0.1#5335 +ipset=/whatbrowser.org/gfwlist +server=/amateurgirlfriends.net/127.0.0.1#5335 +ipset=/amateurgirlfriends.net/gfwlist +server=/globalsign.nl/127.0.0.1#5335 +ipset=/globalsign.nl/gfwlist +server=/mini.my/127.0.0.1#5335 +ipset=/mini.my/gfwlist +server=/clubhouseapi.com/127.0.0.1#5335 +ipset=/clubhouseapi.com/gfwlist +server=/sale-nikeshoes.com/127.0.0.1#5335 +ipset=/sale-nikeshoes.com/gfwlist +server=/fapxl.com/127.0.0.1#5335 +ipset=/fapxl.com/gfwlist +server=/hentaicore.net/127.0.0.1#5335 +ipset=/hentaicore.net/gfwlist +server=/wsjmediakit.com/127.0.0.1#5335 +ipset=/wsjmediakit.com/gfwlist +server=/haskell.org/127.0.0.1#5335 +ipset=/haskell.org/gfwlist +server=/moviesarena.com/127.0.0.1#5335 +ipset=/moviesarena.com/gfwlist +server=/beatsbydreaustraliaonline.com/127.0.0.1#5335 +ipset=/beatsbydreaustraliaonline.com/gfwlist +server=/scholar.google.fi/127.0.0.1#5335 +ipset=/scholar.google.fi/gfwlist +server=/visa.com.gy/127.0.0.1#5335 +ipset=/visa.com.gy/gfwlist +server=/ebaystore77.com/127.0.0.1#5335 +ipset=/ebaystore77.com/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=/ebayopensource.com/127.0.0.1#5335 +ipset=/ebayopensource.com/gfwlist +server=/xtube.com/127.0.0.1#5335 +ipset=/xtube.com/gfwlist +server=/0xxx.ws/127.0.0.1#5335 +ipset=/0xxx.ws/gfwlist +server=/omobi.cc/127.0.0.1#5335 +ipset=/omobi.cc/gfwlist +server=/bestbuy-audio.com/127.0.0.1#5335 +ipset=/bestbuy-audio.com/gfwlist +server=/herodex.org/127.0.0.1#5335 +ipset=/herodex.org/gfwlist +server=/deps.info/127.0.0.1#5335 +ipset=/deps.info/gfwlist +server=/hpsuresupply.com/127.0.0.1#5335 +ipset=/hpsuresupply.com/gfwlist +server=/worldflipper.jp/127.0.0.1#5335 +ipset=/worldflipper.jp/gfwlist +server=/foxneodigital.com/127.0.0.1#5335 +ipset=/foxneodigital.com/gfwlist +server=/hpccp.com/127.0.0.1#5335 +ipset=/hpccp.com/gfwlist +server=/mini.no/127.0.0.1#5335 +ipset=/mini.no/gfwlist +server=/amateursexstart.nl/127.0.0.1#5335 +ipset=/amateursexstart.nl/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=/digitaldesire.com/127.0.0.1#5335 +ipset=/digitaldesire.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=/xn--d4ty0ojsqzfd.com/127.0.0.1#5335 +ipset=/xn--d4ty0ojsqzfd.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=/4beatsbydre.com/127.0.0.1#5335 +ipset=/4beatsbydre.com/gfwlist +server=/5beatsbydre.com/127.0.0.1#5335 +ipset=/5beatsbydre.com/gfwlist +server=/erotera.blogo.jp/127.0.0.1#5335 +ipset=/erotera.blogo.jp/gfwlist +server=/beatsbydreheadphonesolo.com/127.0.0.1#5335 +ipset=/beatsbydreheadphonesolo.com/gfwlist +server=/mostly.jp/127.0.0.1#5335 +ipset=/mostly.jp/gfwlist +server=/drebeats-singapore.com/127.0.0.1#5335 +ipset=/drebeats-singapore.com/gfwlist +server=/google.lt/127.0.0.1#5335 +ipset=/google.lt/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=/propertysex.com/127.0.0.1#5335 +ipset=/propertysex.com/gfwlist +server=/h2porn.com/127.0.0.1#5335 +ipset=/h2porn.com/gfwlist +server=/acmvalidations.com/127.0.0.1#5335 +ipset=/acmvalidations.com/gfwlist +server=/appleid-uk.us/127.0.0.1#5335 +ipset=/appleid-uk.us/gfwlist +server=/appyq.com/127.0.0.1#5335 +ipset=/appyq.com/gfwlist +server=/wasmer.io/127.0.0.1#5335 +ipset=/wasmer.io/gfwlist +server=/enfamil.com/127.0.0.1#5335 +ipset=/enfamil.com/gfwlist +server=/pejyyah.com/127.0.0.1#5335 +ipset=/pejyyah.com/gfwlist +server=/enfamil.pl/127.0.0.1#5335 +ipset=/enfamil.pl/gfwlist +server=/cy22.tv/127.0.0.1#5335 +ipset=/cy22.tv/gfwlist +server=/ebayexpress.sg/127.0.0.1#5335 +ipset=/ebayexpress.sg/gfwlist +server=/casualhomemadesex.com/127.0.0.1#5335 +ipset=/casualhomemadesex.com/gfwlist +server=/91porn.com/127.0.0.1#5335 +ipset=/91porn.com/gfwlist +server=/ffotolia.com/127.0.0.1#5335 +ipset=/ffotolia.com/gfwlist +server=/gfotolia.com/127.0.0.1#5335 +ipset=/gfotolia.com/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=/tubinge.com/127.0.0.1#5335 +ipset=/tubinge.com/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=/zzcartoon.com/127.0.0.1#5335 +ipset=/zzcartoon.com/gfwlist +server=/ladyboygold.eu/127.0.0.1#5335 +ipset=/ladyboygold.eu/gfwlist +server=/lethalhardcorevr.com/127.0.0.1#5335 +ipset=/lethalhardcorevr.com/gfwlist +server=/retroclassicporn.com/127.0.0.1#5335 +ipset=/retroclassicporn.com/gfwlist +server=/ipadmini.lk/127.0.0.1#5335 +ipset=/ipadmini.lk/gfwlist +server=/9anime.cz/127.0.0.1#5335 +ipset=/9anime.cz/gfwlist +server=/shadowsocks.com/127.0.0.1#5335 +ipset=/shadowsocks.com/gfwlist +server=/chla3.com/127.0.0.1#5335 +ipset=/chla3.com/gfwlist +server=/young-webcam.net/127.0.0.1#5335 +ipset=/young-webcam.net/gfwlist +server=/vilavpn2.xyz/127.0.0.1#5335 +ipset=/vilavpn2.xyz/gfwlist +server=/durexindia.com/127.0.0.1#5335 +ipset=/durexindia.com/gfwlist +server=/protonmail.com/127.0.0.1#5335 +ipset=/protonmail.com/gfwlist +server=/aplestore.com/127.0.0.1#5335 +ipset=/aplestore.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=/letmejerk.fun/127.0.0.1#5335 +ipset=/letmejerk.fun/gfwlist +server=/movefrees.com/127.0.0.1#5335 +ipset=/movefrees.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=/gslink.us/127.0.0.1#5335 +ipset=/gslink.us/gfwlist +server=/ehwiki.org/127.0.0.1#5335 +ipset=/ehwiki.org/gfwlist +server=/twhentai.com/127.0.0.1#5335 +ipset=/twhentai.com/gfwlist +server=/terapeak.com/127.0.0.1#5335 +ipset=/terapeak.com/gfwlist +server=/fbooktaiwan.com/127.0.0.1#5335 +ipset=/fbooktaiwan.com/gfwlist +server=/bmw.am/127.0.0.1#5335 +ipset=/bmw.am/gfwlist +server=/gisplanning.com/127.0.0.1#5335 +ipset=/gisplanning.com/gfwlist +server=/bmw.com.ni/127.0.0.1#5335 +ipset=/bmw.com.ni/gfwlist +server=/bestlistofporn.com/127.0.0.1#5335 +ipset=/bestlistofporn.com/gfwlist +server=/beatspills.com/127.0.0.1#5335 +ipset=/beatspills.com/gfwlist +server=/volvobuses.ru/127.0.0.1#5335 +ipset=/volvobuses.ru/gfwlist +server=/18p2p.com/127.0.0.1#5335 +ipset=/18p2p.com/gfwlist +server=/pinterest.hu/127.0.0.1#5335 +ipset=/pinterest.hu/gfwlist +server=/hackfacebook.com/127.0.0.1#5335 +ipset=/hackfacebook.com/gfwlist +server=/f6988.com/127.0.0.1#5335 +ipset=/f6988.com/gfwlist +server=/luxuretv.fun/127.0.0.1#5335 +ipset=/luxuretv.fun/gfwlist +server=/veet.de/127.0.0.1#5335 +ipset=/veet.de/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=/ricefever.com/127.0.0.1#5335 +ipset=/ricefever.com/gfwlist +server=/spotify.com.edgesuite.net/127.0.0.1#5335 +ipset=/spotify.com.edgesuite.net/gfwlist +server=/paypal-optimizer.com/127.0.0.1#5335 +ipset=/paypal-optimizer.com/gfwlist +server=/xvds.tv/127.0.0.1#5335 +ipset=/xvds.tv/gfwlist +server=/soirt4.fun/127.0.0.1#5335 +ipset=/soirt4.fun/gfwlist +server=/jav-subtitles.com/127.0.0.1#5335 +ipset=/jav-subtitles.com/gfwlist +server=/rhodeislandbmw.com/127.0.0.1#5335 +ipset=/rhodeislandbmw.com/gfwlist +server=/videoxxxporn.biz/127.0.0.1#5335 +ipset=/videoxxxporn.biz/gfwlist +server=/xtubezoo.com/127.0.0.1#5335 +ipset=/xtubezoo.com/gfwlist +server=/beatsbydre-headphonesshop.com/127.0.0.1#5335 +ipset=/beatsbydre-headphonesshop.com/gfwlist +server=/beejp.net/127.0.0.1#5335 +ipset=/beejp.net/gfwlist +server=/pornvideobb.com/127.0.0.1#5335 +ipset=/pornvideobb.com/gfwlist +server=/famifun.com.tw/127.0.0.1#5335 +ipset=/famifun.com.tw/gfwlist +server=/beatsbestdeals.com/127.0.0.1#5335 +ipset=/beatsbestdeals.com/gfwlist +server=/24porn.com/127.0.0.1#5335 +ipset=/24porn.com/gfwlist +server=/uguisupapa.net/127.0.0.1#5335 +ipset=/uguisupapa.net/gfwlist +server=/xnxvideos.org/127.0.0.1#5335 +ipset=/xnxvideos.org/gfwlist +server=/bromite.org/127.0.0.1#5335 +ipset=/bromite.org/gfwlist +server=/airitilibrary.com/127.0.0.1#5335 +ipset=/airitilibrary.com/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=/btec.co.uk/127.0.0.1#5335 +ipset=/btec.co.uk/gfwlist +server=/intercomassets.com/127.0.0.1#5335 +ipset=/intercomassets.com/gfwlist +server=/rocksdb.org/127.0.0.1#5335 +ipset=/rocksdb.org/gfwlist +server=/foxnewssunday.com/127.0.0.1#5335 +ipset=/foxnewssunday.com/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=/clipsex.asia/127.0.0.1#5335 +ipset=/clipsex.asia/gfwlist +server=/futpromos.com/127.0.0.1#5335 +ipset=/futpromos.com/gfwlist +server=/hutpromos.com/127.0.0.1#5335 +ipset=/hutpromos.com/gfwlist +server=/science.org/127.0.0.1#5335 +ipset=/science.org/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=/bmw.co.id/127.0.0.1#5335 +ipset=/bmw.co.id/gfwlist +server=/mcrouter.org/127.0.0.1#5335 +ipset=/mcrouter.org/gfwlist +server=/nushemale.com/127.0.0.1#5335 +ipset=/nushemale.com/gfwlist +server=/hdpornvideo.xxx/127.0.0.1#5335 +ipset=/hdpornvideo.xxx/gfwlist +server=/planetsuzy.org/127.0.0.1#5335 +ipset=/planetsuzy.org/gfwlist +server=/avelip.com/127.0.0.1#5335 +ipset=/avelip.com/gfwlist +server=/akamaietpcompromisedcnctest.com/127.0.0.1#5335 +ipset=/akamaietpcompromisedcnctest.com/gfwlist +server=/falundafa.org.tw/127.0.0.1#5335 +ipset=/falundafa.org.tw/gfwlist +server=/darkcategories.com/127.0.0.1#5335 +ipset=/darkcategories.com/gfwlist +server=/japanesegirlspictures.com/127.0.0.1#5335 +ipset=/japanesegirlspictures.com/gfwlist +server=/hotescortdusseldorf.com/127.0.0.1#5335 +ipset=/hotescortdusseldorf.com/gfwlist +server=/sg1lib.org/127.0.0.1#5335 +ipset=/sg1lib.org/gfwlist +server=/monsterbeatsheadphone.com/127.0.0.1#5335 +ipset=/monsterbeatsheadphone.com/gfwlist +server=/videosporno.life/127.0.0.1#5335 +ipset=/videosporno.life/gfwlist +server=/intel.mk/127.0.0.1#5335 +ipset=/intel.mk/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=/via0.com/127.0.0.1#5335 +ipset=/via0.com/gfwlist +server=/kindleoasisnews.com/127.0.0.1#5335 +ipset=/kindleoasisnews.com/gfwlist +server=/hulugermany.com/127.0.0.1#5335 +ipset=/hulugermany.com/gfwlist +server=/el-ladies.com/127.0.0.1#5335 +ipset=/el-ladies.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=/supremacy.com/127.0.0.1#5335 +ipset=/supremacy.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=/visanet.net/127.0.0.1#5335 +ipset=/visanet.net/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=/qprize.com/127.0.0.1#5335 +ipset=/qprize.com/gfwlist +server=/huluhuluhuluhulu10.work/127.0.0.1#5335 +ipset=/huluhuluhuluhulu10.work/gfwlist +server=/mostpopularpornsites.com/127.0.0.1#5335 +ipset=/mostpopularpornsites.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=/18h.mm-cg.com/127.0.0.1#5335 +ipset=/18h.mm-cg.com/gfwlist +server=/porncrash.com/127.0.0.1#5335 +ipset=/porncrash.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=/bestporngames.com/127.0.0.1#5335 +ipset=/bestporngames.com/gfwlist +server=/3movs.xyz/127.0.0.1#5335 +ipset=/3movs.xyz/gfwlist +server=/travelex.fr/127.0.0.1#5335 +ipset=/travelex.fr/gfwlist +server=/facboox.com/127.0.0.1#5335 +ipset=/facboox.com/gfwlist +server=/newsexxxx.com/127.0.0.1#5335 +ipset=/newsexxxx.com/gfwlist +server=/lysol.co.cr/127.0.0.1#5335 +ipset=/lysol.co.cr/gfwlist +server=/unity.com/127.0.0.1#5335 +ipset=/unity.com/gfwlist +server=/hentai2012.com/127.0.0.1#5335 +ipset=/hentai2012.com/gfwlist +server=/vkmessenger.com/127.0.0.1#5335 +ipset=/vkmessenger.com/gfwlist +server=/nettyinternet.com/127.0.0.1#5335 +ipset=/nettyinternet.com/gfwlist +server=/youtube.de/127.0.0.1#5335 +ipset=/youtube.de/gfwlist +server=/amateurxx.org/127.0.0.1#5335 +ipset=/amateurxx.org/gfwlist +server=/guardianapis.com/127.0.0.1#5335 +ipset=/guardianapis.com/gfwlist +server=/veet.co.in/127.0.0.1#5335 +ipset=/veet.co.in/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=/ipfs.best-practice.se/127.0.0.1#5335 +ipset=/ipfs.best-practice.se/gfwlist +server=/pse.is/127.0.0.1#5335 +ipset=/pse.is/gfwlist +server=/volvobuses.it/127.0.0.1#5335 +ipset=/volvobuses.it/gfwlist +server=/ganjing.com/127.0.0.1#5335 +ipset=/ganjing.com/gfwlist +server=/crazy-amateurs.com/127.0.0.1#5335 +ipset=/crazy-amateurs.com/gfwlist +server=/youtube.co.tz/127.0.0.1#5335 +ipset=/youtube.co.tz/gfwlist +server=/fullhdxxx.com/127.0.0.1#5335 +ipset=/fullhdxxx.com/gfwlist +server=/paypal.so/127.0.0.1#5335 +ipset=/paypal.so/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=/api.ai/127.0.0.1#5335 +ipset=/api.ai/gfwlist +server=/iafd.com/127.0.0.1#5335 +ipset=/iafd.com/gfwlist +server=/videoleak.me/127.0.0.1#5335 +ipset=/videoleak.me/gfwlist +server=/meadjohnson.com.tw/127.0.0.1#5335 +ipset=/meadjohnson.com.tw/gfwlist +server=/googleearth.com/127.0.0.1#5335 +ipset=/googleearth.com/gfwlist +server=/celebsporno.com/127.0.0.1#5335 +ipset=/celebsporno.com/gfwlist +server=/megaphone.fm/127.0.0.1#5335 +ipset=/megaphone.fm/gfwlist +server=/xh-porn.com/127.0.0.1#5335 +ipset=/xh-porn.com/gfwlist +server=/sextreffen-portale.com/127.0.0.1#5335 +ipset=/sextreffen-portale.com/gfwlist +server=/hypodermicinjectiononline.com/127.0.0.1#5335 +ipset=/hypodermicinjectiononline.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=/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=/pwabuilder.com/127.0.0.1#5335 +ipset=/pwabuilder.com/gfwlist +server=/rushporn.online/127.0.0.1#5335 +ipset=/rushporn.online/gfwlist +server=/hanzhen.xmulib.org/127.0.0.1#5335 +ipset=/hanzhen.xmulib.org/gfwlist +server=/centrino.net/127.0.0.1#5335 +ipset=/centrino.net/gfwlist +server=/facebooksignup.net/127.0.0.1#5335 +ipset=/facebooksignup.net/gfwlist +server=/vfsco.com.tr/127.0.0.1#5335 +ipset=/vfsco.com.tr/gfwlist +server=/milfs-gone-wild.com/127.0.0.1#5335 +ipset=/milfs-gone-wild.com/gfwlist +server=/chillingo.com/127.0.0.1#5335 +ipset=/chillingo.com/gfwlist +server=/pornvidhd.club/127.0.0.1#5335 +ipset=/pornvidhd.club/gfwlist +server=/hentaicovid.com/127.0.0.1#5335 +ipset=/hentaicovid.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=/artnudegalleries.com/127.0.0.1#5335 +ipset=/artnudegalleries.com/gfwlist +server=/sextubexxl.com/127.0.0.1#5335 +ipset=/sextubexxl.com/gfwlist +server=/redxxx.cc/127.0.0.1#5335 +ipset=/redxxx.cc/gfwlist +server=/arabxn.com/127.0.0.1#5335 +ipset=/arabxn.com/gfwlist +server=/camvideos.tv/127.0.0.1#5335 +ipset=/camvideos.tv/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=/scathd.com/127.0.0.1#5335 +ipset=/scathd.com/gfwlist +server=/sextoystop.com/127.0.0.1#5335 +ipset=/sextoystop.com/gfwlist +server=/camstagestudio.com/127.0.0.1#5335 +ipset=/camstagestudio.com/gfwlist +server=/ccstatic.org/127.0.0.1#5335 +ipset=/ccstatic.org/gfwlist +server=/gettyimages.fr/127.0.0.1#5335 +ipset=/gettyimages.fr/gfwlist +server=/fury.blog/127.0.0.1#5335 +ipset=/fury.blog/gfwlist +server=/maileoch.com/127.0.0.1#5335 +ipset=/maileoch.com/gfwlist +server=/nextwork.com.hk/127.0.0.1#5335 +ipset=/nextwork.com.hk/gfwlist +server=/1bigclub.com/127.0.0.1#5335 +ipset=/1bigclub.com/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=/gobeatsye.com/127.0.0.1#5335 +ipset=/gobeatsye.com/gfwlist +server=/xn--d1acpjx3f.xn--p1ai/127.0.0.1#5335 +ipset=/xn--d1acpjx3f.xn--p1ai/gfwlist +server=/lcgirls.com/127.0.0.1#5335 +ipset=/lcgirls.com/gfwlist +server=/spizoo.com/127.0.0.1#5335 +ipset=/spizoo.com/gfwlist +server=/pricelessafrica.com/127.0.0.1#5335 +ipset=/pricelessafrica.com/gfwlist +server=/fox42kptm.com/127.0.0.1#5335 +ipset=/fox42kptm.com/gfwlist +server=/xhot.pro/127.0.0.1#5335 +ipset=/xhot.pro/gfwlist +server=/html5rocks.com/127.0.0.1#5335 +ipset=/html5rocks.com/gfwlist +server=/ieee-aess.org/127.0.0.1#5335 +ipset=/ieee-aess.org/gfwlist +server=/zoo-hardcore.com/127.0.0.1#5335 +ipset=/zoo-hardcore.com/gfwlist +server=/pictocum.com/127.0.0.1#5335 +ipset=/pictocum.com/gfwlist +server=/zukunftswerkstatt.de/127.0.0.1#5335 +ipset=/zukunftswerkstatt.de/gfwlist +server=/mangahasu.se/127.0.0.1#5335 +ipset=/mangahasu.se/gfwlist +server=/fox10news.com/127.0.0.1#5335 +ipset=/fox10news.com/gfwlist +server=/intel.co.kr/127.0.0.1#5335 +ipset=/intel.co.kr/gfwlist +server=/seematureporn.com/127.0.0.1#5335 +ipset=/seematureporn.com/gfwlist +server=/vfsco.be/127.0.0.1#5335 +ipset=/vfsco.be/gfwlist +server=/atnext.com/127.0.0.1#5335 +ipset=/atnext.com/gfwlist +server=/zooyouporn.com/127.0.0.1#5335 +ipset=/zooyouporn.com/gfwlist +server=/damnhotz.com/127.0.0.1#5335 +ipset=/damnhotz.com/gfwlist +server=/asmhentai.com/127.0.0.1#5335 +ipset=/asmhentai.com/gfwlist +server=/fairmarket.com/127.0.0.1#5335 +ipset=/fairmarket.com/gfwlist +server=/scandalplanet.com/127.0.0.1#5335 +ipset=/scandalplanet.com/gfwlist +server=/chocolatey.org/127.0.0.1#5335 +ipset=/chocolatey.org/gfwlist +server=/iceporncasting.com/127.0.0.1#5335 +ipset=/iceporncasting.com/gfwlist +server=/imperial.insendi.com/127.0.0.1#5335 +ipset=/imperial.insendi.com/gfwlist +server=/illusnoi.com/127.0.0.1#5335 +ipset=/illusnoi.com/gfwlist +server=/intellij.com/127.0.0.1#5335 +ipset=/intellij.com/gfwlist +server=/wxoyt.com/127.0.0.1#5335 +ipset=/wxoyt.com/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=/pornfoolery.com/127.0.0.1#5335 +ipset=/pornfoolery.com/gfwlist +server=/wowgirls.com/127.0.0.1#5335 +ipset=/wowgirls.com/gfwlist +server=/polygon.com/127.0.0.1#5335 +ipset=/polygon.com/gfwlist +server=/sexbombo.com/127.0.0.1#5335 +ipset=/sexbombo.com/gfwlist +server=/intellij.net/127.0.0.1#5335 +ipset=/intellij.net/gfwlist +server=/sankei-kaihatsu.co.jp/127.0.0.1#5335 +ipset=/sankei-kaihatsu.co.jp/gfwlist +server=/truyen-hentai.com/127.0.0.1#5335 +ipset=/truyen-hentai.com/gfwlist +server=/minisexdoll.com/127.0.0.1#5335 +ipset=/minisexdoll.com/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=/volvopenta.com.br/127.0.0.1#5335 +ipset=/volvopenta.com.br/gfwlist +server=/golosameriki.com/127.0.0.1#5335 +ipset=/golosameriki.com/gfwlist +server=/videosmadeathome.com/127.0.0.1#5335 +ipset=/videosmadeathome.com/gfwlist +server=/chemnetbase.com/127.0.0.1#5335 +ipset=/chemnetbase.com/gfwlist +server=/facebookgroups.com/127.0.0.1#5335 +ipset=/facebookgroups.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=/cozydrdrebeats.com/127.0.0.1#5335 +ipset=/cozydrdrebeats.com/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=/ebay.pk/127.0.0.1#5335 +ipset=/ebay.pk/gfwlist +server=/hkcnews.com/127.0.0.1#5335 +ipset=/hkcnews.com/gfwlist +server=/yahoo.co.in/127.0.0.1#5335 +ipset=/yahoo.co.in/gfwlist +server=/anallivecams.com/127.0.0.1#5335 +ipset=/anallivecams.com/gfwlist +server=/kenyaraha.net/127.0.0.1#5335 +ipset=/kenyaraha.net/gfwlist +server=/bondagesm.xyz/127.0.0.1#5335 +ipset=/bondagesm.xyz/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=/llnwi.net/127.0.0.1#5335 +ipset=/llnwi.net/gfwlist +server=/vxnbbrs.xyz/127.0.0.1#5335 +ipset=/vxnbbrs.xyz/gfwlist +server=/githubhackathon.com/127.0.0.1#5335 +ipset=/githubhackathon.com/gfwlist +server=/beatsbydreuk.com/127.0.0.1#5335 +ipset=/beatsbydreuk.com/gfwlist +server=/hkgolden.media/127.0.0.1#5335 +ipset=/hkgolden.media/gfwlist +server=/erome.com/127.0.0.1#5335 +ipset=/erome.com/gfwlist +server=/realclearhistory.com/127.0.0.1#5335 +ipset=/realclearhistory.com/gfwlist +server=/ccdc.cam.ac.uk/127.0.0.1#5335 +ipset=/ccdc.cam.ac.uk/gfwlist +server=/wildfanny.com/127.0.0.1#5335 +ipset=/wildfanny.com/gfwlist +server=/duckduckgo.nl/127.0.0.1#5335 +ipset=/duckduckgo.nl/gfwlist +server=/furrypornvideos.com/127.0.0.1#5335 +ipset=/furrypornvideos.com/gfwlist +server=/xxxvideos247.com/127.0.0.1#5335 +ipset=/xxxvideos247.com/gfwlist +server=/studioluxus.com/127.0.0.1#5335 +ipset=/studioluxus.com/gfwlist +server=/1337x.gd/127.0.0.1#5335 +ipset=/1337x.gd/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=/japan-forward.com/127.0.0.1#5335 +ipset=/japan-forward.com/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=/tiktokcdn.com/127.0.0.1#5335 +ipset=/tiktokcdn.com/gfwlist +server=/logicoolg.com/127.0.0.1#5335 +ipset=/logicoolg.com/gfwlist +server=/youtube.ch/127.0.0.1#5335 +ipset=/youtube.ch/gfwlist +server=/boysfood.com/127.0.0.1#5335 +ipset=/boysfood.com/gfwlist +server=/babesinporn.com/127.0.0.1#5335 +ipset=/babesinporn.com/gfwlist +server=/ptt2.cc/127.0.0.1#5335 +ipset=/ptt2.cc/gfwlist +server=/applecomputer.co.in/127.0.0.1#5335 +ipset=/applecomputer.co.in/gfwlist +server=/ipodcentre.nl/127.0.0.1#5335 +ipset=/ipodcentre.nl/gfwlist +server=/byteoversea.com/127.0.0.1#5335 +ipset=/byteoversea.com/gfwlist +server=/nikeprice.com/127.0.0.1#5335 +ipset=/nikeprice.com/gfwlist +server=/seemilfporn.com/127.0.0.1#5335 +ipset=/seemilfporn.com/gfwlist +server=/vrpornmania.com/127.0.0.1#5335 +ipset=/vrpornmania.com/gfwlist +server=/jqueryui.com/127.0.0.1#5335 +ipset=/jqueryui.com/gfwlist +server=/planetminecraft.com/127.0.0.1#5335 +ipset=/planetminecraft.com/gfwlist +server=/cableav.tv/127.0.0.1#5335 +ipset=/cableav.tv/gfwlist +server=/disneycareers.com/127.0.0.1#5335 +ipset=/disneycareers.com/gfwlist +server=/dyttapi.com/127.0.0.1#5335 +ipset=/dyttapi.com/gfwlist +server=/redhdtube.xxx/127.0.0.1#5335 +ipset=/redhdtube.xxx/gfwlist +server=/dirtyflix.com/127.0.0.1#5335 +ipset=/dirtyflix.com/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=/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=/drdreheadphonesusstore.com/127.0.0.1#5335 +ipset=/drdreheadphonesusstore.com/gfwlist +server=/minikelowna.com/127.0.0.1#5335 +ipset=/minikelowna.com/gfwlist +server=/k9vidz.com/127.0.0.1#5335 +ipset=/k9vidz.com/gfwlist +server=/msocdn.com/127.0.0.1#5335 +ipset=/msocdn.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=/3dhentaix.com/127.0.0.1#5335 +ipset=/3dhentaix.com/gfwlist +server=/instagramphoto.com/127.0.0.1#5335 +ipset=/instagramphoto.com/gfwlist +server=/zeenite.com/127.0.0.1#5335 +ipset=/zeenite.com/gfwlist +server=/truthordarepics.com/127.0.0.1#5335 +ipset=/truthordarepics.com/gfwlist +server=/hpdrivers.org/127.0.0.1#5335 +ipset=/hpdrivers.org/gfwlist +server=/opengraphprotocol.com/127.0.0.1#5335 +ipset=/opengraphprotocol.com/gfwlist +server=/adult789.futoka.jp/127.0.0.1#5335 +ipset=/adult789.futoka.jp/gfwlist +server=/fimfiction.net/127.0.0.1#5335 +ipset=/fimfiction.net/gfwlist +server=/bmw-carit.de/127.0.0.1#5335 +ipset=/bmw-carit.de/gfwlist +server=/thepornblender.com/127.0.0.1#5335 +ipset=/thepornblender.com/gfwlist +server=/machos.net/127.0.0.1#5335 +ipset=/machos.net/gfwlist +server=/onedrive.live.com/127.0.0.1#5335 +ipset=/onedrive.live.com/gfwlist +server=/att.tv/127.0.0.1#5335 +ipset=/att.tv/gfwlist +server=/pornmaster.fun/127.0.0.1#5335 +ipset=/pornmaster.fun/gfwlist +server=/latticedata.com/127.0.0.1#5335 +ipset=/latticedata.com/gfwlist +server=/imsrbx.xyz/127.0.0.1#5335 +ipset=/imsrbx.xyz/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=/91fans.org/127.0.0.1#5335 +ipset=/91fans.org/gfwlist +server=/roborecall.com/127.0.0.1#5335 +ipset=/roborecall.com/gfwlist +server=/collabora.org/127.0.0.1#5335 +ipset=/collabora.org/gfwlist +server=/syosetu.com/127.0.0.1#5335 +ipset=/syosetu.com/gfwlist +server=/hxcsxs.pro/127.0.0.1#5335 +ipset=/hxcsxs.pro/gfwlist +server=/lusthero.com/127.0.0.1#5335 +ipset=/lusthero.com/gfwlist +server=/xxmovz.com/127.0.0.1#5335 +ipset=/xxmovz.com/gfwlist +server=/ipadair.jp/127.0.0.1#5335 +ipset=/ipadair.jp/gfwlist +server=/ams.org/127.0.0.1#5335 +ipset=/ams.org/gfwlist +server=/disney.bg/127.0.0.1#5335 +ipset=/disney.bg/gfwlist +server=/bmw.at/127.0.0.1#5335 +ipset=/bmw.at/gfwlist +server=/ahentaitv.com/127.0.0.1#5335 +ipset=/ahentaitv.com/gfwlist +server=/drebeats-monster.com/127.0.0.1#5335 +ipset=/drebeats-monster.com/gfwlist +server=/canon.ca/127.0.0.1#5335 +ipset=/canon.ca/gfwlist +server=/neowin.net/127.0.0.1#5335 +ipset=/neowin.net/gfwlist +server=/wholefoods.com/127.0.0.1#5335 +ipset=/wholefoods.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=/mypornads.com/127.0.0.1#5335 +ipset=/mypornads.com/gfwlist +server=/xoxoteiras.com/127.0.0.1#5335 +ipset=/xoxoteiras.com/gfwlist +server=/midatlanticbmwmotorcycles.com/127.0.0.1#5335 +ipset=/midatlanticbmwmotorcycles.com/gfwlist +server=/imgbb.com/127.0.0.1#5335 +ipset=/imgbb.com/gfwlist +server=/1drv.com/127.0.0.1#5335 +ipset=/1drv.com/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=/pornhd8k.net/127.0.0.1#5335 +ipset=/pornhd8k.net/gfwlist +server=/mkt.com/127.0.0.1#5335 +ipset=/mkt.com/gfwlist +server=/seselah.com/127.0.0.1#5335 +ipset=/seselah.com/gfwlist +server=/rferl.org/127.0.0.1#5335 +ipset=/rferl.org/gfwlist +server=/boulx.com/127.0.0.1#5335 +ipset=/boulx.com/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=/xxxccc4.com/127.0.0.1#5335 +ipset=/xxxccc4.com/gfwlist +server=/x.company/127.0.0.1#5335 +ipset=/x.company/gfwlist +server=/itnel.com/127.0.0.1#5335 +ipset=/itnel.com/gfwlist +server=/wrds-www.wharton.upenn.edu/127.0.0.1#5335 +ipset=/wrds-www.wharton.upenn.edu/gfwlist +server=/crazyxxx3dworld.net/127.0.0.1#5335 +ipset=/crazyxxx3dworld.net/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=/googlefiber.net/127.0.0.1#5335 +ipset=/googlefiber.net/gfwlist +server=/pornditos.com/127.0.0.1#5335 +ipset=/pornditos.com/gfwlist +server=/yourporngod.com/127.0.0.1#5335 +ipset=/yourporngod.com/gfwlist +server=/pornhits.com/127.0.0.1#5335 +ipset=/pornhits.com/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=/momtube.club/127.0.0.1#5335 +ipset=/momtube.club/gfwlist +server=/barrons-conferences.com/127.0.0.1#5335 +ipset=/barrons-conferences.com/gfwlist +server=/beatsbydrestudio-australia.com/127.0.0.1#5335 +ipset=/beatsbydrestudio-australia.com/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=/netpornsex.com/127.0.0.1#5335 +ipset=/netpornsex.com/gfwlist +server=/maturescam.com/127.0.0.1#5335 +ipset=/maturescam.com/gfwlist +server=/b6b33.com/127.0.0.1#5335 +ipset=/b6b33.com/gfwlist +server=/applewatch.tw/127.0.0.1#5335 +ipset=/applewatch.tw/gfwlist +server=/papalah.com/127.0.0.1#5335 +ipset=/papalah.com/gfwlist +server=/facewbook.co/127.0.0.1#5335 +ipset=/facewbook.co/gfwlist +server=/rea.design/127.0.0.1#5335 +ipset=/rea.design/gfwlist +server=/sexyhumorgames.com/127.0.0.1#5335 +ipset=/sexyhumorgames.com/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=/xnxxhd.tv/127.0.0.1#5335 +ipset=/xnxxhd.tv/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=/annamilk.com/127.0.0.1#5335 +ipset=/annamilk.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=/huffpostarabi.com/127.0.0.1#5335 +ipset=/huffpostarabi.com/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=/asknudes.com/127.0.0.1#5335 +ipset=/asknudes.com/gfwlist +server=/yandex.aero/127.0.0.1#5335 +ipset=/yandex.aero/gfwlist +server=/freebeacon.com/127.0.0.1#5335 +ipset=/freebeacon.com/gfwlist +server=/google.com.bo/127.0.0.1#5335 +ipset=/google.com.bo/gfwlist +server=/esperanzagomez.org/127.0.0.1#5335 +ipset=/esperanzagomez.org/gfwlist +server=/ibeatsbydre.cc/127.0.0.1#5335 +ipset=/ibeatsbydre.cc/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=/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=/55dndn.com/127.0.0.1#5335 +ipset=/55dndn.com/gfwlist +server=/beatsdrdrecuffie.net/127.0.0.1#5335 +ipset=/beatsdrdrecuffie.net/gfwlist +server=/fotiolia.com/127.0.0.1#5335 +ipset=/fotiolia.com/gfwlist +server=/sonytc.co.jp/127.0.0.1#5335 +ipset=/sonytc.co.jp/gfwlist +server=/new-akiba.com/127.0.0.1#5335 +ipset=/new-akiba.com/gfwlist +server=/asebay.com/127.0.0.1#5335 +ipset=/asebay.com/gfwlist +server=/sexhdmovs.com/127.0.0.1#5335 +ipset=/sexhdmovs.com/gfwlist +server=/yeyuehuachao13.com/127.0.0.1#5335 +ipset=/yeyuehuachao13.com/gfwlist +server=/intel.ga/127.0.0.1#5335 +ipset=/intel.ga/gfwlist +server=/webex.fr/127.0.0.1#5335 +ipset=/webex.fr/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=/foxnews.net/127.0.0.1#5335 +ipset=/foxnews.net/gfwlist +server=/collegejournal.com/127.0.0.1#5335 +ipset=/collegejournal.com/gfwlist +server=/digitalplaygroundnetwork.com/127.0.0.1#5335 +ipset=/digitalplaygroundnetwork.com/gfwlist +server=/adultgamingroom.com/127.0.0.1#5335 +ipset=/adultgamingroom.com/gfwlist +server=/yourpelvicexam.com/127.0.0.1#5335 +ipset=/yourpelvicexam.com/gfwlist +server=/minisokorea.com/127.0.0.1#5335 +ipset=/minisokorea.com/gfwlist +server=/durex.com.ng/127.0.0.1#5335 +ipset=/durex.com.ng/gfwlist +server=/redislabs.com/127.0.0.1#5335 +ipset=/redislabs.com/gfwlist +server=/dettol.com.au/127.0.0.1#5335 +ipset=/dettol.com.au/gfwlist +server=/kingofpics.com/127.0.0.1#5335 +ipset=/kingofpics.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=/pornsites.xxx/127.0.0.1#5335 +ipset=/pornsites.xxx/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=/firstpelvicexam.com/127.0.0.1#5335 +ipset=/firstpelvicexam.com/gfwlist +server=/av-channel.com/127.0.0.1#5335 +ipset=/av-channel.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=/extremetube.com/127.0.0.1#5335 +ipset=/extremetube.com/gfwlist +server=/mommystoytime.com/127.0.0.1#5335 +ipset=/mommystoytime.com/gfwlist +server=/dlmobilegarena-a.akamaihd.net/127.0.0.1#5335 +ipset=/dlmobilegarena-a.akamaihd.net/gfwlist +server=/lmmbtc.com/127.0.0.1#5335 +ipset=/lmmbtc.com/gfwlist +server=/hotindianxxxsex.com/127.0.0.1#5335 +ipset=/hotindianxxxsex.com/gfwlist +server=/shianyuanfang.com/127.0.0.1#5335 +ipset=/shianyuanfang.com/gfwlist +server=/txqzz34r.com/127.0.0.1#5335 +ipset=/txqzz34r.com/gfwlist +server=/vmwareusergroupstore.com/127.0.0.1#5335 +ipset=/vmwareusergroupstore.com/gfwlist +server=/asagaku.com/127.0.0.1#5335 +ipset=/asagaku.com/gfwlist +server=/qumingwz.com/127.0.0.1#5335 +ipset=/qumingwz.com/gfwlist +server=/babyzone.com/127.0.0.1#5335 +ipset=/babyzone.com/gfwlist +server=/girlfriendhomeporn.com/127.0.0.1#5335 +ipset=/girlfriendhomeporn.com/gfwlist +server=/sexlikereal.com/127.0.0.1#5335 +ipset=/sexlikereal.com/gfwlist +server=/ebaytv.org/127.0.0.1#5335 +ipset=/ebaytv.org/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=/freudbox.com/127.0.0.1#5335 +ipset=/freudbox.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=/ipod.tw/127.0.0.1#5335 +ipset=/ipod.tw/gfwlist +server=/hp3d.com/127.0.0.1#5335 +ipset=/hp3d.com/gfwlist +server=/scoreland2.com/127.0.0.1#5335 +ipset=/scoreland2.com/gfwlist +server=/ryokoyomiuri.co.jp/127.0.0.1#5335 +ipset=/ryokoyomiuri.co.jp/gfwlist +server=/burningcamel.com/127.0.0.1#5335 +ipset=/burningcamel.com/gfwlist +server=/xxvideos.xxx/127.0.0.1#5335 +ipset=/xxvideos.xxx/gfwlist +server=/twistedlinks.net/127.0.0.1#5335 +ipset=/twistedlinks.net/gfwlist +server=/hentai-archive.com/127.0.0.1#5335 +ipset=/hentai-archive.com/gfwlist +server=/myfoxphilly.com/127.0.0.1#5335 +ipset=/myfoxphilly.com/gfwlist +server=/bmw-motorrad.com.tr/127.0.0.1#5335 +ipset=/bmw-motorrad.com.tr/gfwlist +server=/skunkgirl.cc/127.0.0.1#5335 +ipset=/skunkgirl.cc/gfwlist +server=/facebuok.com/127.0.0.1#5335 +ipset=/facebuok.com/gfwlist +server=/finishinfo.no/127.0.0.1#5335 +ipset=/finishinfo.no/gfwlist +server=/paypal-network.org/127.0.0.1#5335 +ipset=/paypal-network.org/gfwlist +server=/xoomcom.com/127.0.0.1#5335 +ipset=/xoomcom.com/gfwlist +server=/abbywintersfree.com/127.0.0.1#5335 +ipset=/abbywintersfree.com/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=/tanflix.com/127.0.0.1#5335 +ipset=/tanflix.com/gfwlist +server=/nintendo.be/127.0.0.1#5335 +ipset=/nintendo.be/gfwlist +server=/vsmarketplacebadge.apphb.com/127.0.0.1#5335 +ipset=/vsmarketplacebadge.apphb.com/gfwlist +server=/vrpornjack.com/127.0.0.1#5335 +ipset=/vrpornjack.com/gfwlist +server=/fifastreet.com/127.0.0.1#5335 +ipset=/fifastreet.com/gfwlist +server=/tokyomotion.com/127.0.0.1#5335 +ipset=/tokyomotion.com/gfwlist +server=/tvbusa.com/127.0.0.1#5335 +ipset=/tvbusa.com/gfwlist +server=/xlovecam.com/127.0.0.1#5335 +ipset=/xlovecam.com/gfwlist +server=/cloudflare.net/127.0.0.1#5335 +ipset=/cloudflare.net/gfwlist +server=/fljmh.com/127.0.0.1#5335 +ipset=/fljmh.com/gfwlist +server=/m5ir5np1.shop/127.0.0.1#5335 +ipset=/m5ir5np1.shop/gfwlist +server=/cas.org/127.0.0.1#5335 +ipset=/cas.org/gfwlist +server=/starcraft2.com/127.0.0.1#5335 +ipset=/starcraft2.com/gfwlist +server=/eurogirlsescort.com/127.0.0.1#5335 +ipset=/eurogirlsescort.com/gfwlist +server=/4channel.org/127.0.0.1#5335 +ipset=/4channel.org/gfwlist +server=/cylink0122.icu/127.0.0.1#5335 +ipset=/cylink0122.icu/gfwlist +server=/appl-e.com/127.0.0.1#5335 +ipset=/appl-e.com/gfwlist +server=/6parkbbs.com/127.0.0.1#5335 +ipset=/6parkbbs.com/gfwlist +server=/xsrxpwvg.com/127.0.0.1#5335 +ipset=/xsrxpwvg.com/gfwlist +server=/beatsdrdre-solo.com/127.0.0.1#5335 +ipset=/beatsdrdre-solo.com/gfwlist +server=/porn2018.com/127.0.0.1#5335 +ipset=/porn2018.com/gfwlist +server=/ebaycar.com/127.0.0.1#5335 +ipset=/ebaycar.com/gfwlist +server=/neotokyo.supertop-100.com/127.0.0.1#5335 +ipset=/neotokyo.supertop-100.com/gfwlist +server=/ikea.jp/127.0.0.1#5335 +ipset=/ikea.jp/gfwlist +server=/mageconf.com.ua/127.0.0.1#5335 +ipset=/mageconf.com.ua/gfwlist +server=/uporno.xxx/127.0.0.1#5335 +ipset=/uporno.xxx/gfwlist +server=/nxta.org/127.0.0.1#5335 +ipset=/nxta.org/gfwlist +server=/xcafe.com/127.0.0.1#5335 +ipset=/xcafe.com/gfwlist +server=/root-signing.ch/127.0.0.1#5335 +ipset=/root-signing.ch/gfwlist +server=/lovemstudios.com/127.0.0.1#5335 +ipset=/lovemstudios.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=/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=/acs.org/127.0.0.1#5335 +ipset=/acs.org/gfwlist +server=/masterwanker.com/127.0.0.1#5335 +ipset=/masterwanker.com/gfwlist +server=/hardsex8.com/127.0.0.1#5335 +ipset=/hardsex8.com/gfwlist +server=/ebay-vacation.com/127.0.0.1#5335 +ipset=/ebay-vacation.com/gfwlist +server=/qporno.xxx/127.0.0.1#5335 +ipset=/qporno.xxx/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=/xnxx-xxx.win/127.0.0.1#5335 +ipset=/xnxx-xxx.win/gfwlist +server=/att.com/127.0.0.1#5335 +ipset=/att.com/gfwlist +server=/pricelesspick.com/127.0.0.1#5335 +ipset=/pricelesspick.com/gfwlist +server=/microsoftreactor.org/127.0.0.1#5335 +ipset=/microsoftreactor.org/gfwlist +server=/tube.bz/127.0.0.1#5335 +ipset=/tube.bz/gfwlist +server=/91rb.com/127.0.0.1#5335 +ipset=/91rb.com/gfwlist +server=/cotweet.com/127.0.0.1#5335 +ipset=/cotweet.com/gfwlist +server=/hentainstream.com/127.0.0.1#5335 +ipset=/hentainstream.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=/s-books.com/127.0.0.1#5335 +ipset=/s-books.com/gfwlist +server=/rrtis.com/127.0.0.1#5335 +ipset=/rrtis.com/gfwlist +server=/xn--9trs65b.com/127.0.0.1#5335 +ipset=/xn--9trs65b.com/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=/mailonline.com/127.0.0.1#5335 +ipset=/mailonline.com/gfwlist +server=/bridgestone.co.jp/127.0.0.1#5335 +ipset=/bridgestone.co.jp/gfwlist +server=/pornohoo.com.mx/127.0.0.1#5335 +ipset=/pornohoo.com.mx/gfwlist +server=/videosamadoresreais.com/127.0.0.1#5335 +ipset=/videosamadoresreais.com/gfwlist +server=/javleak.com/127.0.0.1#5335 +ipset=/javleak.com/gfwlist +server=/protonmail.ch/127.0.0.1#5335 +ipset=/protonmail.ch/gfwlist +server=/netlifystatus.com/127.0.0.1#5335 +ipset=/netlifystatus.com/gfwlist +server=/pornfind.org/127.0.0.1#5335 +ipset=/pornfind.org/gfwlist +server=/mortein.co.nz/127.0.0.1#5335 +ipset=/mortein.co.nz/gfwlist +server=/honkaistarrail.com/127.0.0.1#5335 +ipset=/honkaistarrail.com/gfwlist +server=/volvogrouptruckcenter.nl/127.0.0.1#5335 +ipset=/volvogrouptruckcenter.nl/gfwlist +server=/rarbggo.org/127.0.0.1#5335 +ipset=/rarbggo.org/gfwlist +server=/joylovedolls.com/127.0.0.1#5335 +ipset=/joylovedolls.com/gfwlist +server=/hentaiverse.org/127.0.0.1#5335 +ipset=/hentaiverse.org/gfwlist +server=/javhd.com/127.0.0.1#5335 +ipset=/javhd.com/gfwlist +server=/playpornogames.com/127.0.0.1#5335 +ipset=/playpornogames.com/gfwlist +server=/blender.org/127.0.0.1#5335 +ipset=/blender.org/gfwlist +server=/topbeatsdealer.com/127.0.0.1#5335 +ipset=/topbeatsdealer.com/gfwlist +server=/bmw-adventskalender.com/127.0.0.1#5335 +ipset=/bmw-adventskalender.com/gfwlist +server=/nytstyle.com/127.0.0.1#5335 +ipset=/nytstyle.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=/mini.co.cr/127.0.0.1#5335 +ipset=/mini.co.cr/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=/thisvidscat.net/127.0.0.1#5335 +ipset=/thisvidscat.net/gfwlist +server=/hbogo.com/127.0.0.1#5335 +ipset=/hbogo.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=/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=/apple-darwin.org/127.0.0.1#5335 +ipset=/apple-darwin.org/gfwlist +server=/venmo.net/127.0.0.1#5335 +ipset=/venmo.net/gfwlist +server=/z676869.com/127.0.0.1#5335 +ipset=/z676869.com/gfwlist +server=/hoolu.com/127.0.0.1#5335 +ipset=/hoolu.com/gfwlist +server=/hotgaylist.com/127.0.0.1#5335 +ipset=/hotgaylist.com/gfwlist +server=/reachporn.com/127.0.0.1#5335 +ipset=/reachporn.com/gfwlist +server=/blogspot.is/127.0.0.1#5335 +ipset=/blogspot.is/gfwlist +server=/orzqwq.com/127.0.0.1#5335 +ipset=/orzqwq.com/gfwlist +server=/femalestars.com/127.0.0.1#5335 +ipset=/femalestars.com/gfwlist +server=/google.co.in/127.0.0.1#5335 +ipset=/google.co.in/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=/aerogard.com.au/127.0.0.1#5335 +ipset=/aerogard.com.au/gfwlist +server=/airwick.co.in/127.0.0.1#5335 +ipset=/airwick.co.in/gfwlist +server=/applecentre.info/127.0.0.1#5335 +ipset=/applecentre.info/gfwlist +server=/ecpa.fr/127.0.0.1#5335 +ipset=/ecpa.fr/gfwlist +server=/pornoamateurlatino.net/127.0.0.1#5335 +ipset=/pornoamateurlatino.net/gfwlist +server=/vikiporn.com/127.0.0.1#5335 +ipset=/vikiporn.com/gfwlist +server=/facebook-corp.com/127.0.0.1#5335 +ipset=/facebook-corp.com/gfwlist +server=/scorepass.com/127.0.0.1#5335 +ipset=/scorepass.com/gfwlist +server=/javhub.me/127.0.0.1#5335 +ipset=/javhub.me/gfwlist +server=/16885858.com/127.0.0.1#5335 +ipset=/16885858.com/gfwlist +server=/shemaleporn.fun/127.0.0.1#5335 +ipset=/shemaleporn.fun/gfwlist +server=/xbabe.com/127.0.0.1#5335 +ipset=/xbabe.com/gfwlist +server=/xxxporn123.com/127.0.0.1#5335 +ipset=/xxxporn123.com/gfwlist +server=/volvotrucks.in/127.0.0.1#5335 +ipset=/volvotrucks.in/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=/hentaihere.com/127.0.0.1#5335 +ipset=/hentaihere.com/gfwlist +server=/beatsdrdrekaufenschweiz.net/127.0.0.1#5335 +ipset=/beatsdrdrekaufenschweiz.net/gfwlist +server=/apple.net/127.0.0.1#5335 +ipset=/apple.net/gfwlist +server=/riotgames.net/127.0.0.1#5335 +ipset=/riotgames.net/gfwlist +server=/tsyum.com/127.0.0.1#5335 +ipset=/tsyum.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=/asianpornonly.com/127.0.0.1#5335 +ipset=/asianpornonly.com/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=/uwpcommunitytoolkit.com/127.0.0.1#5335 +ipset=/uwpcommunitytoolkit.com/gfwlist +server=/ebay.es/127.0.0.1#5335 +ipset=/ebay.es/gfwlist +server=/getfedora.org/127.0.0.1#5335 +ipset=/getfedora.org/gfwlist +server=/pacopacomama.com/127.0.0.1#5335 +ipset=/pacopacomama.com/gfwlist +server=/blizzard.com/127.0.0.1#5335 +ipset=/blizzard.com/gfwlist +server=/foxpoker.com/127.0.0.1#5335 +ipset=/foxpoker.com/gfwlist +server=/30plusgirls.com/127.0.0.1#5335 +ipset=/30plusgirls.com/gfwlist +server=/iphone-zh.com/127.0.0.1#5335 +ipset=/iphone-zh.com/gfwlist +server=/radiotavisupleba.ge/127.0.0.1#5335 +ipset=/radiotavisupleba.ge/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=/minilat.com/127.0.0.1#5335 +ipset=/minilat.com/gfwlist +server=/9anime.to/127.0.0.1#5335 +ipset=/9anime.to/gfwlist +server=/dmmrex.com/127.0.0.1#5335 +ipset=/dmmrex.com/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=/aboutamazon.pl/127.0.0.1#5335 +ipset=/aboutamazon.pl/gfwlist +server=/next.hk/127.0.0.1#5335 +ipset=/next.hk/gfwlist +server=/applepay.co.rs/127.0.0.1#5335 +ipset=/applepay.co.rs/gfwlist +server=/madonna-av.com/127.0.0.1#5335 +ipset=/madonna-av.com/gfwlist +server=/firebaseapp.com/127.0.0.1#5335 +ipset=/firebaseapp.com/gfwlist +server=/yourporn.sexy/127.0.0.1#5335 +ipset=/yourporn.sexy/gfwlist +server=/porngem.com/127.0.0.1#5335 +ipset=/porngem.com/gfwlist +server=/gayheaven.org/127.0.0.1#5335 +ipset=/gayheaven.org/gfwlist +server=/bustymerilyn.com/127.0.0.1#5335 +ipset=/bustymerilyn.com/gfwlist +server=/qqgamedesign.com/127.0.0.1#5335 +ipset=/qqgamedesign.com/gfwlist +server=/ooni.org/127.0.0.1#5335 +ipset=/ooni.org/gfwlist +server=/viralporn.com/127.0.0.1#5335 +ipset=/viralporn.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=/a2z.com/127.0.0.1#5335 +ipset=/a2z.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=/getoutline.org/127.0.0.1#5335 +ipset=/getoutline.org/gfwlist +server=/exs8fkw0.xyz/127.0.0.1#5335 +ipset=/exs8fkw0.xyz/gfwlist +server=/xxeronetxx.info/127.0.0.1#5335 +ipset=/xxeronetxx.info/gfwlist +server=/youtube.com.my/127.0.0.1#5335 +ipset=/youtube.com.my/gfwlist +server=/hdgaytube.xxx/127.0.0.1#5335 +ipset=/hdgaytube.xxx/gfwlist +server=/ntdimg.com/127.0.0.1#5335 +ipset=/ntdimg.com/gfwlist +server=/flagrasamadores.net/127.0.0.1#5335 +ipset=/flagrasamadores.net/gfwlist +server=/jizzonline.com/127.0.0.1#5335 +ipset=/jizzonline.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=/pickinguppussy.com/127.0.0.1#5335 +ipset=/pickinguppussy.com/gfwlist +server=/burstly.net/127.0.0.1#5335 +ipset=/burstly.net/gfwlist +server=/intelfreepress.com/127.0.0.1#5335 +ipset=/intelfreepress.com/gfwlist +server=/ikea.co.de/127.0.0.1#5335 +ipset=/ikea.co.de/gfwlist +server=/sonypictures.com/127.0.0.1#5335 +ipset=/sonypictures.com/gfwlist +server=/pornojefe.com/127.0.0.1#5335 +ipset=/pornojefe.com/gfwlist +server=/amd.com.cn/127.0.0.1#5335 +ipset=/amd.com.cn/gfwlist +server=/gigaporn.org/127.0.0.1#5335 +ipset=/gigaporn.org/gfwlist +server=/prpops.com/127.0.0.1#5335 +ipset=/prpops.com/gfwlist +server=/itcfonts.com/127.0.0.1#5335 +ipset=/itcfonts.com/gfwlist +server=/sh-xuxingda.com/127.0.0.1#5335 +ipset=/sh-xuxingda.com/gfwlist +server=/public-sex-porn.com/127.0.0.1#5335 +ipset=/public-sex-porn.com/gfwlist +server=/instagram-press.net/127.0.0.1#5335 +ipset=/instagram-press.net/gfwlist +server=/uun78.com/127.0.0.1#5335 +ipset=/uun78.com/gfwlist +server=/bmwgroupclassic.com/127.0.0.1#5335 +ipset=/bmwgroupclassic.com/gfwlist +server=/beatsbydrdre-store.us/127.0.0.1#5335 +ipset=/beatsbydrdre-store.us/gfwlist +server=/seemygf.com/127.0.0.1#5335 +ipset=/seemygf.com/gfwlist +server=/javdisk.com/127.0.0.1#5335 +ipset=/javdisk.com/gfwlist +server=/castro.fm/127.0.0.1#5335 +ipset=/castro.fm/gfwlist +server=/startupjournal.com/127.0.0.1#5335 +ipset=/startupjournal.com/gfwlist +server=/attonlineoffers.com/127.0.0.1#5335 +ipset=/attonlineoffers.com/gfwlist +server=/protondb.com/127.0.0.1#5335 +ipset=/protondb.com/gfwlist +server=/washingtondcbmw.com/127.0.0.1#5335 +ipset=/washingtondcbmw.com/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=/fantasiasguatemala.com/127.0.0.1#5335 +ipset=/fantasiasguatemala.com/gfwlist +server=/ahtranny.com/127.0.0.1#5335 +ipset=/ahtranny.com/gfwlist +server=/code.org/127.0.0.1#5335 +ipset=/code.org/gfwlist +server=/niketracking.com/127.0.0.1#5335 +ipset=/niketracking.com/gfwlist +server=/xbahis44.com/127.0.0.1#5335 +ipset=/xbahis44.com/gfwlist +server=/paypal-recargacelular.com/127.0.0.1#5335 +ipset=/paypal-recargacelular.com/gfwlist +server=/ciscospark.com/127.0.0.1#5335 +ipset=/ciscospark.com/gfwlist +server=/18commic.com/127.0.0.1#5335 +ipset=/18commic.com/gfwlist +server=/spankingstudio.com/127.0.0.1#5335 +ipset=/spankingstudio.com/gfwlist +server=/facebookook.com/127.0.0.1#5335 +ipset=/facebookook.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=/vk-cdn.me/127.0.0.1#5335 +ipset=/vk-cdn.me/gfwlist +server=/zopim.com/127.0.0.1#5335 +ipset=/zopim.com/gfwlist +server=/libgen.is/127.0.0.1#5335 +ipset=/libgen.is/gfwlist +server=/omekinteractive.com/127.0.0.1#5335 +ipset=/omekinteractive.com/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=/hnext.jp/127.0.0.1#5335 +ipset=/hnext.jp/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=/rude.com/127.0.0.1#5335 +ipset=/rude.com/gfwlist +server=/rbrandlibrary.com/127.0.0.1#5335 +ipset=/rbrandlibrary.com/gfwlist +server=/iyalc.com/127.0.0.1#5335 +ipset=/iyalc.com/gfwlist +server=/sankei-tours.com/127.0.0.1#5335 +ipset=/sankei-tours.com/gfwlist +server=/asexdoll.com/127.0.0.1#5335 +ipset=/asexdoll.com/gfwlist +server=/sibreal.org/127.0.0.1#5335 +ipset=/sibreal.org/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=/sexemulator.com/127.0.0.1#5335 +ipset=/sexemulator.com/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=/emerald.com/127.0.0.1#5335 +ipset=/emerald.com/gfwlist +server=/kristenbjorn.com/127.0.0.1#5335 +ipset=/kristenbjorn.com/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=/bitnamiapp.com/127.0.0.1#5335 +ipset=/bitnamiapp.com/gfwlist +server=/shahvani.com/127.0.0.1#5335 +ipset=/shahvani.com/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=/yandex.eu/127.0.0.1#5335 +ipset=/yandex.eu/gfwlist +server=/appdynamics.info/127.0.0.1#5335 +ipset=/appdynamics.info/gfwlist +server=/flutterapp.com/127.0.0.1#5335 +ipset=/flutterapp.com/gfwlist +server=/amazon-fashions.com/127.0.0.1#5335 +ipset=/amazon-fashions.com/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=/bigcharts.com/127.0.0.1#5335 +ipset=/bigcharts.com/gfwlist +server=/mybeatsbydreuk.com/127.0.0.1#5335 +ipset=/mybeatsbydreuk.com/gfwlist +server=/emome.net/127.0.0.1#5335 +ipset=/emome.net/gfwlist +server=/pornfu.tv/127.0.0.1#5335 +ipset=/pornfu.tv/gfwlist +server=/sexflexible.com/127.0.0.1#5335 +ipset=/sexflexible.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=/sexsiam.com/127.0.0.1#5335 +ipset=/sexsiam.com/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=/xxx18teen.net/127.0.0.1#5335 +ipset=/xxx18teen.net/gfwlist +server=/anypornhd.com/127.0.0.1#5335 +ipset=/anypornhd.com/gfwlist +server=/yahoo.cd/127.0.0.1#5335 +ipset=/yahoo.cd/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=/nike.com/127.0.0.1#5335 +ipset=/nike.com/gfwlist +server=/like.com/127.0.0.1#5335 +ipset=/like.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=/cygames.co.jp/127.0.0.1#5335 +ipset=/cygames.co.jp/gfwlist +server=/3dsexplay.xyz/127.0.0.1#5335 +ipset=/3dsexplay.xyz/gfwlist +server=/nudedrawer.com/127.0.0.1#5335 +ipset=/nudedrawer.com/gfwlist +server=/definefetish.com/127.0.0.1#5335 +ipset=/definefetish.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=/wirelessreach.com/127.0.0.1#5335 +ipset=/wirelessreach.com/gfwlist +server=/ferabook.com/127.0.0.1#5335 +ipset=/ferabook.com/gfwlist +server=/mini-connected.pt/127.0.0.1#5335 +ipset=/mini-connected.pt/gfwlist +server=/mangahome.com/127.0.0.1#5335 +ipset=/mangahome.com/gfwlist +server=/blubrry.com/127.0.0.1#5335 +ipset=/blubrry.com/gfwlist +server=/toomadporn.pro/127.0.0.1#5335 +ipset=/toomadporn.pro/gfwlist +server=/verisign.com.hk/127.0.0.1#5335 +ipset=/verisign.com.hk/gfwlist +server=/uun85.com/127.0.0.1#5335 +ipset=/uun85.com/gfwlist +server=/tacamateurs.com/127.0.0.1#5335 +ipset=/tacamateurs.com/gfwlist +server=/akam.net/127.0.0.1#5335 +ipset=/akam.net/gfwlist +server=/infura.io/127.0.0.1#5335 +ipset=/infura.io/gfwlist +server=/dtsell.com/127.0.0.1#5335 +ipset=/dtsell.com/gfwlist +server=/missav.com/127.0.0.1#5335 +ipset=/missav.com/gfwlist +server=/mcdonalds.ca/127.0.0.1#5335 +ipset=/mcdonalds.ca/gfwlist +server=/atypi.org/127.0.0.1#5335 +ipset=/atypi.org/gfwlist +server=/msn.net/127.0.0.1#5335 +ipset=/msn.net/gfwlist +server=/nsfw.xxx/127.0.0.1#5335 +ipset=/nsfw.xxx/gfwlist +server=/discord.dev/127.0.0.1#5335 +ipset=/discord.dev/gfwlist +server=/kompoz2.com/127.0.0.1#5335 +ipset=/kompoz2.com/gfwlist +server=/pornovideow.com/127.0.0.1#5335 +ipset=/pornovideow.com/gfwlist +server=/sneakerskick.com/127.0.0.1#5335 +ipset=/sneakerskick.com/gfwlist +server=/firstasianpussy.com/127.0.0.1#5335 +ipset=/firstasianpussy.com/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=/metacpan.org/127.0.0.1#5335 +ipset=/metacpan.org/gfwlist +server=/hentaipros.com/127.0.0.1#5335 +ipset=/hentaipros.com/gfwlist +server=/real-mature-porn.com/127.0.0.1#5335 +ipset=/real-mature-porn.com/gfwlist +server=/hsex.men/127.0.0.1#5335 +ipset=/hsex.men/gfwlist +server=/stickofjoy.com/127.0.0.1#5335 +ipset=/stickofjoy.com/gfwlist +server=/wsj.jobs/127.0.0.1#5335 +ipset=/wsj.jobs/gfwlist +server=/dx9527.cc/127.0.0.1#5335 +ipset=/dx9527.cc/gfwlist +server=/studywatchbyverily.com/127.0.0.1#5335 +ipset=/studywatchbyverily.com/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=/hot-gayporn.com/127.0.0.1#5335 +ipset=/hot-gayporn.com/gfwlist +server=/flipfap.com/127.0.0.1#5335 +ipset=/flipfap.com/gfwlist +server=/sukebelinks.com/127.0.0.1#5335 +ipset=/sukebelinks.com/gfwlist +server=/vercel.app/127.0.0.1#5335 +ipset=/vercel.app/gfwlist +server=/imilfs.com/127.0.0.1#5335 +ipset=/imilfs.com/gfwlist +server=/bravotube.tv/127.0.0.1#5335 +ipset=/bravotube.tv/gfwlist +server=/neweconomyforum.com/127.0.0.1#5335 +ipset=/neweconomyforum.com/gfwlist +server=/volvotrucks.com.au/127.0.0.1#5335 +ipset=/volvotrucks.com.au/gfwlist +server=/princesscum.com/127.0.0.1#5335 +ipset=/princesscum.com/gfwlist +server=/my20dc.com/127.0.0.1#5335 +ipset=/my20dc.com/gfwlist +server=/xpornplease.com/127.0.0.1#5335 +ipset=/xpornplease.com/gfwlist +server=/applemusic.hamburg/127.0.0.1#5335 +ipset=/applemusic.hamburg/gfwlist +server=/verizonwireless.com/127.0.0.1#5335 +ipset=/verizonwireless.com/gfwlist +server=/qorno.com/127.0.0.1#5335 +ipset=/qorno.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=/ipfs.lain.la/127.0.0.1#5335 +ipset=/ipfs.lain.la/gfwlist +server=/googl.com/127.0.0.1#5335 +ipset=/googl.com/gfwlist +server=/beatsbydretoutlet.com/127.0.0.1#5335 +ipset=/beatsbydretoutlet.com/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=/swapsmut.com/127.0.0.1#5335 +ipset=/swapsmut.com/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=/dirtyasiantube.com/127.0.0.1#5335 +ipset=/dirtyasiantube.com/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=/mickybells.com/127.0.0.1#5335 +ipset=/mickybells.com/gfwlist +server=/fluidpreview.com/127.0.0.1#5335 +ipset=/fluidpreview.com/gfwlist +server=/vercel.com/127.0.0.1#5335 +ipset=/vercel.com/gfwlist +server=/kikdirty.com/127.0.0.1#5335 +ipset=/kikdirty.com/gfwlist +server=/pccwglobal.com/127.0.0.1#5335 +ipset=/pccwglobal.com/gfwlist +server=/nickscipio.com/127.0.0.1#5335 +ipset=/nickscipio.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=/gigantits.com/127.0.0.1#5335 +ipset=/gigantits.com/gfwlist +server=/nhentai.to/127.0.0.1#5335 +ipset=/nhentai.to/gfwlist +server=/nurofen.ru/127.0.0.1#5335 +ipset=/nurofen.ru/gfwlist +server=/facbeok.com/127.0.0.1#5335 +ipset=/facbeok.com/gfwlist +server=/lucahmelayu.club/127.0.0.1#5335 +ipset=/lucahmelayu.club/gfwlist +server=/conquerwithcharacter.com/127.0.0.1#5335 +ipset=/conquerwithcharacter.com/gfwlist +server=/wnoaissulli1.com/127.0.0.1#5335 +ipset=/wnoaissulli1.com/gfwlist +server=/sexnaweb.net/127.0.0.1#5335 +ipset=/sexnaweb.net/gfwlist +server=/blackmonsterterror.com/127.0.0.1#5335 +ipset=/blackmonsterterror.com/gfwlist +server=/porn-images-xxx.com/127.0.0.1#5335 +ipset=/porn-images-xxx.com/gfwlist +server=/intelcloudfinder.com/127.0.0.1#5335 +ipset=/intelcloudfinder.com/gfwlist +server=/xvideosincesto.com/127.0.0.1#5335 +ipset=/xvideosincesto.com/gfwlist +server=/highdefinitionbeatsbydre.com/127.0.0.1#5335 +ipset=/highdefinitionbeatsbydre.com/gfwlist +server=/eroshiko.net/127.0.0.1#5335 +ipset=/eroshiko.net/gfwlist +server=/momo.dm/127.0.0.1#5335 +ipset=/momo.dm/gfwlist +server=/ads.yahoo.com/127.0.0.1#5335 +ipset=/ads.yahoo.com/gfwlist +server=/lolislove.info/127.0.0.1#5335 +ipset=/lolislove.info/gfwlist +server=/facebookappcenter.info/127.0.0.1#5335 +ipset=/facebookappcenter.info/gfwlist +server=/pornguz.com/127.0.0.1#5335 +ipset=/pornguz.com/gfwlist +server=/hentai.tv/127.0.0.1#5335 +ipset=/hentai.tv/gfwlist +server=/javhard.net/127.0.0.1#5335 +ipset=/javhard.net/gfwlist +server=/facebooklikeexchange.com/127.0.0.1#5335 +ipset=/facebooklikeexchange.com/gfwlist +server=/hcaptchastatus.com/127.0.0.1#5335 +ipset=/hcaptchastatus.com/gfwlist +server=/t66y.com/127.0.0.1#5335 +ipset=/t66y.com/gfwlist +server=/mtalk.google.com/127.0.0.1#5335 +ipset=/mtalk.google.com/gfwlist +server=/9hentai.to/127.0.0.1#5335 +ipset=/9hentai.to/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=/onlyindianporn.tv/127.0.0.1#5335 +ipset=/onlyindianporn.tv/gfwlist +server=/apple.cm/127.0.0.1#5335 +ipset=/apple.cm/gfwlist +server=/edgemeplease.com/127.0.0.1#5335 +ipset=/edgemeplease.com/gfwlist +server=/githubstatus.com/127.0.0.1#5335 +ipset=/githubstatus.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=/ikea.ro/127.0.0.1#5335 +ipset=/ikea.ro/gfwlist +server=/ebay-course.com/127.0.0.1#5335 +ipset=/ebay-course.com/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=/ckck.fun/127.0.0.1#5335 +ipset=/ckck.fun/gfwlist +server=/news.net.au/127.0.0.1#5335 +ipset=/news.net.au/gfwlist +server=/playporngames.com/127.0.0.1#5335 +ipset=/playporngames.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=/erotikaweb.hu/127.0.0.1#5335 +ipset=/erotikaweb.hu/gfwlist +server=/marketing-nirvana.com/127.0.0.1#5335 +ipset=/marketing-nirvana.com/gfwlist +server=/dropboxinsiders.com/127.0.0.1#5335 +ipset=/dropboxinsiders.com/gfwlist +server=/slack-edge.com/127.0.0.1#5335 +ipset=/slack-edge.com/gfwlist +server=/cyyeshb.com/127.0.0.1#5335 +ipset=/cyyeshb.com/gfwlist +server=/hp3dmetals.com/127.0.0.1#5335 +ipset=/hp3dmetals.com/gfwlist +server=/buycheapbeatsbydre.com/127.0.0.1#5335 +ipset=/buycheapbeatsbydre.com/gfwlist +server=/voazimbabwe.com/127.0.0.1#5335 +ipset=/voazimbabwe.com/gfwlist +server=/adultblogranking.com/127.0.0.1#5335 +ipset=/adultblogranking.com/gfwlist +server=/visa.com.ng/127.0.0.1#5335 +ipset=/visa.com.ng/gfwlist +server=/theatlantic.com/127.0.0.1#5335 +ipset=/theatlantic.com/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=/3arabporn.com/127.0.0.1#5335 +ipset=/3arabporn.com/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=/bacsitinhyeu.vn/127.0.0.1#5335 +ipset=/bacsitinhyeu.vn/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=/youtube.co.ae/127.0.0.1#5335 +ipset=/youtube.co.ae/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=/hbogo.co.th/127.0.0.1#5335 +ipset=/hbogo.co.th/gfwlist +server=/rabbitsreviews.com/127.0.0.1#5335 +ipset=/rabbitsreviews.com/gfwlist +server=/jgg18.xyz/127.0.0.1#5335 +ipset=/jgg18.xyz/gfwlist +server=/vk.design/127.0.0.1#5335 +ipset=/vk.design/gfwlist +server=/xn--90wwvt03e.com/127.0.0.1#5335 +ipset=/xn--90wwvt03e.com/gfwlist +server=/thunderbird.net/127.0.0.1#5335 +ipset=/thunderbird.net/gfwlist +server=/tubxporn.xxx/127.0.0.1#5335 +ipset=/tubxporn.xxx/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=/bdsmcafe.com/127.0.0.1#5335 +ipset=/bdsmcafe.com/gfwlist +server=/pornogratis.vlog.br/127.0.0.1#5335 +ipset=/pornogratis.vlog.br/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=/groups.com/127.0.0.1#5335 +ipset=/groups.com/gfwlist +server=/go141.com/127.0.0.1#5335 +ipset=/go141.com/gfwlist +server=/nikeinc.com/127.0.0.1#5335 +ipset=/nikeinc.com/gfwlist +server=/awsglobalaccelerator.com/127.0.0.1#5335 +ipset=/awsglobalaccelerator.com/gfwlist +server=/playshowtv.com/127.0.0.1#5335 +ipset=/playshowtv.com/gfwlist +server=/24porn.pro/127.0.0.1#5335 +ipset=/24porn.pro/gfwlist +server=/hippyhillscomix.com/127.0.0.1#5335 +ipset=/hippyhillscomix.com/gfwlist +server=/anyshemale.com/127.0.0.1#5335 +ipset=/anyshemale.com/gfwlist +server=/findvrporn.com/127.0.0.1#5335 +ipset=/findvrporn.com/gfwlist +server=/pearsonclinical.es/127.0.0.1#5335 +ipset=/pearsonclinical.es/gfwlist +server=/monsterbeatsale.com/127.0.0.1#5335 +ipset=/monsterbeatsale.com/gfwlist +server=/porn300.online/127.0.0.1#5335 +ipset=/porn300.online/gfwlist +server=/catalinacruz.com/127.0.0.1#5335 +ipset=/catalinacruz.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=/twister.net.co/127.0.0.1#5335 +ipset=/twister.net.co/gfwlist +server=/binancezh.ink/127.0.0.1#5335 +ipset=/binancezh.ink/gfwlist +server=/qualcommhalo.com/127.0.0.1#5335 +ipset=/qualcommhalo.com/gfwlist +server=/visaeurope.at/127.0.0.1#5335 +ipset=/visaeurope.at/gfwlist +server=/porntrex.com/127.0.0.1#5335 +ipset=/porntrex.com/gfwlist +server=/hotteenfreecam.com/127.0.0.1#5335 +ipset=/hotteenfreecam.com/gfwlist +server=/flathub.org/127.0.0.1#5335 +ipset=/flathub.org/gfwlist +server=/fulldesisex.com/127.0.0.1#5335 +ipset=/fulldesisex.com/gfwlist +server=/monstersexporn.net/127.0.0.1#5335 +ipset=/monstersexporn.net/gfwlist +server=/gaito.xyz/127.0.0.1#5335 +ipset=/gaito.xyz/gfwlist +server=/hornybitches.org/127.0.0.1#5335 +ipset=/hornybitches.org/gfwlist +server=/misshotgirls.com/127.0.0.1#5335 +ipset=/misshotgirls.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=/heavy-r.com/127.0.0.1#5335 +ipset=/heavy-r.com/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=/vanish.dk/127.0.0.1#5335 +ipset=/vanish.dk/gfwlist +server=/hoyo.link/127.0.0.1#5335 +ipset=/hoyo.link/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=/gayasianxxx.com/127.0.0.1#5335 +ipset=/gayasianxxx.com/gfwlist +server=/tumblr.com/127.0.0.1#5335 +ipset=/tumblr.com/gfwlist +server=/dirtypornvids.com/127.0.0.1#5335 +ipset=/dirtypornvids.com/gfwlist +server=/69tubesex.com/127.0.0.1#5335 +ipset=/69tubesex.com/gfwlist +server=/ibm.us/127.0.0.1#5335 +ipset=/ibm.us/gfwlist +server=/fececbook.com/127.0.0.1#5335 +ipset=/fececbook.com/gfwlist +server=/oiobbs.com/127.0.0.1#5335 +ipset=/oiobbs.com/gfwlist +server=/jerkmate.tv/127.0.0.1#5335 +ipset=/jerkmate.tv/gfwlist +server=/disney-studio.net/127.0.0.1#5335 +ipset=/disney-studio.net/gfwlist +server=/shadowsocks.nl/127.0.0.1#5335 +ipset=/shadowsocks.nl/gfwlist +server=/acebooik.com/127.0.0.1#5335 +ipset=/acebooik.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=/vixen.com/127.0.0.1#5335 +ipset=/vixen.com/gfwlist +server=/namethatporn.com/127.0.0.1#5335 +ipset=/namethatporn.com/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=/sony.si/127.0.0.1#5335 +ipset=/sony.si/gfwlist +server=/beatsbydrehd.net/127.0.0.1#5335 +ipset=/beatsbydrehd.net/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=/amateur-cougar.com/127.0.0.1#5335 +ipset=/amateur-cougar.com/gfwlist +server=/beatsbydrdredanmark.com/127.0.0.1#5335 +ipset=/beatsbydrdredanmark.com/gfwlist +server=/pornelephant.com/127.0.0.1#5335 +ipset=/pornelephant.com/gfwlist +server=/vodafone.com.au/127.0.0.1#5335 +ipset=/vodafone.com.au/gfwlist +server=/camsoda.com/127.0.0.1#5335 +ipset=/camsoda.com/gfwlist +server=/appdynamics.com/127.0.0.1#5335 +ipset=/appdynamics.com/gfwlist +server=/scaleflex.com/127.0.0.1#5335 +ipset=/scaleflex.com/gfwlist +server=/absolutewhores.com/127.0.0.1#5335 +ipset=/absolutewhores.com/gfwlist +server=/wixipedia.net/127.0.0.1#5335 +ipset=/wixipedia.net/gfwlist +server=/ironna.jp/127.0.0.1#5335 +ipset=/ironna.jp/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=/beatsshop-usa.com/127.0.0.1#5335 +ipset=/beatsshop-usa.com/gfwlist +server=/greenend.org.uk/127.0.0.1#5335 +ipset=/greenend.org.uk/gfwlist +server=/gifnuki.com/127.0.0.1#5335 +ipset=/gifnuki.com/gfwlist +server=/sway.com/127.0.0.1#5335 +ipset=/sway.com/gfwlist +server=/lanasbigboobs.com/127.0.0.1#5335 +ipset=/lanasbigboobs.com/gfwlist +server=/hotpornfile.org/127.0.0.1#5335 +ipset=/hotpornfile.org/gfwlist +server=/bbcfmt.s.llnwi.net/127.0.0.1#5335 +ipset=/bbcfmt.s.llnwi.net/gfwlist +server=/freesexvideos2k.com/127.0.0.1#5335 +ipset=/freesexvideos2k.com/gfwlist +server=/whatboyswant.com/127.0.0.1#5335 +ipset=/whatboyswant.com/gfwlist +server=/fuckvideos.biz/127.0.0.1#5335 +ipset=/fuckvideos.biz/gfwlist +server=/clinical-videos.com/127.0.0.1#5335 +ipset=/clinical-videos.com/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=/content-ause1-ur-discovery1.uplynk.com/127.0.0.1#5335 +ipset=/content-ause1-ur-discovery1.uplynk.com/gfwlist +server=/hayabusa.io/127.0.0.1#5335 +ipset=/hayabusa.io/gfwlist +server=/ciscolearningsociety.org/127.0.0.1#5335 +ipset=/ciscolearningsociety.org/gfwlist +server=/yahoo.no/127.0.0.1#5335 +ipset=/yahoo.no/gfwlist +server=/fapsafari.com/127.0.0.1#5335 +ipset=/fapsafari.com/gfwlist +server=/lewdweb.net/127.0.0.1#5335 +ipset=/lewdweb.net/gfwlist +server=/coursera.org/127.0.0.1#5335 +ipset=/coursera.org/gfwlist +server=/cosplayporntube.com/127.0.0.1#5335 +ipset=/cosplayporntube.com/gfwlist +server=/stackoverflow.com/127.0.0.1#5335 +ipset=/stackoverflow.com/gfwlist +server=/tgtube.com/127.0.0.1#5335 +ipset=/tgtube.com/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=/canon.az/127.0.0.1#5335 +ipset=/canon.az/gfwlist +server=/hktshop.com/127.0.0.1#5335 +ipset=/hktshop.com/gfwlist +server=/hentai-vostfr.net/127.0.0.1#5335 +ipset=/hentai-vostfr.net/gfwlist +server=/manhwa24h.com/127.0.0.1#5335 +ipset=/manhwa24h.com/gfwlist +server=/incesto.blog.br/127.0.0.1#5335 +ipset=/incesto.blog.br/gfwlist +server=/ebay.co.uk/127.0.0.1#5335 +ipset=/ebay.co.uk/gfwlist +server=/rule34.xyz/127.0.0.1#5335 +ipset=/rule34.xyz/gfwlist +server=/xzxxporn.com/127.0.0.1#5335 +ipset=/xzxxporn.com/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=/sexypornpictures.org/127.0.0.1#5335 +ipset=/sexypornpictures.org/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=/mom50.com/127.0.0.1#5335 +ipset=/mom50.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=/sexjobs.it/127.0.0.1#5335 +ipset=/sexjobs.it/gfwlist +server=/ifuckedtheboss.com/127.0.0.1#5335 +ipset=/ifuckedtheboss.com/gfwlist +server=/bigboobswives.com/127.0.0.1#5335 +ipset=/bigboobswives.com/gfwlist +server=/finishinfo.cz/127.0.0.1#5335 +ipset=/finishinfo.cz/gfwlist +server=/oursexgames.com/127.0.0.1#5335 +ipset=/oursexgames.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=/myfonts.com/127.0.0.1#5335 +ipset=/myfonts.com/gfwlist +server=/fastindianporn.com/127.0.0.1#5335 +ipset=/fastindianporn.com/gfwlist +server=/kindleoasis.com/127.0.0.1#5335 +ipset=/kindleoasis.com/gfwlist +server=/facebook-privacy.com/127.0.0.1#5335 +ipset=/facebook-privacy.com/gfwlist +server=/enemasexfetish.com/127.0.0.1#5335 +ipset=/enemasexfetish.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=/cloudlatex.io/127.0.0.1#5335 +ipset=/cloudlatex.io/gfwlist +server=/paypal-signin.com/127.0.0.1#5335 +ipset=/paypal-signin.com/gfwlist +server=/topfantasyart.com/127.0.0.1#5335 +ipset=/topfantasyart.com/gfwlist +server=/intelcloudbuilders.com/127.0.0.1#5335 +ipset=/intelcloudbuilders.com/gfwlist +server=/mysims.com/127.0.0.1#5335 +ipset=/mysims.com/gfwlist +server=/foxsports.com.br/127.0.0.1#5335 +ipset=/foxsports.com.br/gfwlist +server=/mcdonalds.it/127.0.0.1#5335 +ipset=/mcdonalds.it/gfwlist +server=/take2games.com/127.0.0.1#5335 +ipset=/take2games.com/gfwlist +server=/water-and-power.com/127.0.0.1#5335 +ipset=/water-and-power.com/gfwlist +server=/mynike.com/127.0.0.1#5335 +ipset=/mynike.com/gfwlist +server=/binance.co/127.0.0.1#5335 +ipset=/binance.co/gfwlist +server=/milftugs.com/127.0.0.1#5335 +ipset=/milftugs.com/gfwlist +server=/youtube.in/127.0.0.1#5335 +ipset=/youtube.in/gfwlist +server=/sabuibo.net/127.0.0.1#5335 +ipset=/sabuibo.net/gfwlist +server=/ikea.fi/127.0.0.1#5335 +ipset=/ikea.fi/gfwlist +server=/picsee.co/127.0.0.1#5335 +ipset=/picsee.co/gfwlist +server=/zettai-ero.com/127.0.0.1#5335 +ipset=/zettai-ero.com/gfwlist +server=/taradinhos.com/127.0.0.1#5335 +ipset=/taradinhos.com/gfwlist +server=/mastercard.gr/127.0.0.1#5335 +ipset=/mastercard.gr/gfwlist +server=/wankz.com/127.0.0.1#5335 +ipset=/wankz.com/gfwlist +server=/voanews.com/127.0.0.1#5335 +ipset=/voanews.com/gfwlist +server=/sohfrance.org/127.0.0.1#5335 +ipset=/sohfrance.org/gfwlist +server=/madthumbs.com/127.0.0.1#5335 +ipset=/madthumbs.com/gfwlist +server=/bookshome.world/127.0.0.1#5335 +ipset=/bookshome.world/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=/letmejerk.com/127.0.0.1#5335 +ipset=/letmejerk.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=/fappenist.com/127.0.0.1#5335 +ipset=/fappenist.com/gfwlist +server=/paypalhere.net/127.0.0.1#5335 +ipset=/paypalhere.net/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=/javvids.com/127.0.0.1#5335 +ipset=/javvids.com/gfwlist +server=/mirailab.tech/127.0.0.1#5335 +ipset=/mirailab.tech/gfwlist +server=/cerdas.com/127.0.0.1#5335 +ipset=/cerdas.com/gfwlist +server=/mpweekly.com/127.0.0.1#5335 +ipset=/mpweekly.com/gfwlist +server=/erotic-artsites.com/127.0.0.1#5335 +ipset=/erotic-artsites.com/gfwlist +server=/yandex.org/127.0.0.1#5335 +ipset=/yandex.org/gfwlist +server=/userapi.com/127.0.0.1#5335 +ipset=/userapi.com/gfwlist +server=/amateurpornhouse.com/127.0.0.1#5335 +ipset=/amateurpornhouse.com/gfwlist +server=/myradio.hk/127.0.0.1#5335 +ipset=/myradio.hk/gfwlist +server=/pornstripgames.com/127.0.0.1#5335 +ipset=/pornstripgames.com/gfwlist +server=/100beatscheap.com/127.0.0.1#5335 +ipset=/100beatscheap.com/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=/intel.bi/127.0.0.1#5335 +ipset=/intel.bi/gfwlist +server=/vanishstains.com.au/127.0.0.1#5335 +ipset=/vanishstains.com.au/gfwlist +server=/exiporn.com/127.0.0.1#5335 +ipset=/exiporn.com/gfwlist +server=/bmwcustomapparel.com/127.0.0.1#5335 +ipset=/bmwcustomapparel.com/gfwlist +server=/pornhun.xyz/127.0.0.1#5335 +ipset=/pornhun.xyz/gfwlist +server=/pornoxo.com/127.0.0.1#5335 +ipset=/pornoxo.com/gfwlist +server=/fuckteenvids.com/127.0.0.1#5335 +ipset=/fuckteenvids.com/gfwlist +server=/walmart.pharmacy/127.0.0.1#5335 +ipset=/walmart.pharmacy/gfwlist +server=/facerbook.com/127.0.0.1#5335 +ipset=/facerbook.com/gfwlist +server=/kama-nk.ru/127.0.0.1#5335 +ipset=/kama-nk.ru/gfwlist +server=/cashify.com/127.0.0.1#5335 +ipset=/cashify.com/gfwlist +server=/cuckold69.com/127.0.0.1#5335 +ipset=/cuckold69.com/gfwlist +server=/cool-comics.com/127.0.0.1#5335 +ipset=/cool-comics.com/gfwlist +server=/realtype.co.jp/127.0.0.1#5335 +ipset=/realtype.co.jp/gfwlist +server=/karinahart.com/127.0.0.1#5335 +ipset=/karinahart.com/gfwlist +server=/cs.co/127.0.0.1#5335 +ipset=/cs.co/gfwlist +server=/rb.net/127.0.0.1#5335 +ipset=/rb.net/gfwlist +server=/redxxxvideos.com/127.0.0.1#5335 +ipset=/redxxxvideos.com/gfwlist +server=/dettol.cl/127.0.0.1#5335 +ipset=/dettol.cl/gfwlist +server=/xvideosup.com.br/127.0.0.1#5335 +ipset=/xvideosup.com.br/gfwlist +server=/applebk.net/127.0.0.1#5335 +ipset=/applebk.net/gfwlist +server=/flaru.com/127.0.0.1#5335 +ipset=/flaru.com/gfwlist +server=/intel.eg/127.0.0.1#5335 +ipset=/intel.eg/gfwlist +server=/hentaitk.com/127.0.0.1#5335 +ipset=/hentaitk.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=/sexpornpictures.com/127.0.0.1#5335 +ipset=/sexpornpictures.com/gfwlist +server=/bmw-worldfinal.com/127.0.0.1#5335 +ipset=/bmw-worldfinal.com/gfwlist +server=/chyoa.com/127.0.0.1#5335 +ipset=/chyoa.com/gfwlist +server=/townofsins.com/127.0.0.1#5335 +ipset=/townofsins.com/gfwlist +server=/bdsmsexgame.com/127.0.0.1#5335 +ipset=/bdsmsexgame.com/gfwlist +server=/u.nu/127.0.0.1#5335 +ipset=/u.nu/gfwlist +server=/xxx2022.com/127.0.0.1#5335 +ipset=/xxx2022.com/gfwlist +server=/sheshaft.com/127.0.0.1#5335 +ipset=/sheshaft.com/gfwlist +server=/picasaweb.com/127.0.0.1#5335 +ipset=/picasaweb.com/gfwlist +server=/hummingbird.ms/127.0.0.1#5335 +ipset=/hummingbird.ms/gfwlist +server=/jdavsp.pw/127.0.0.1#5335 +ipset=/jdavsp.pw/gfwlist +server=/bvdinfo.com/127.0.0.1#5335 +ipset=/bvdinfo.com/gfwlist +server=/trycuckold.com/127.0.0.1#5335 +ipset=/trycuckold.com/gfwlist +server=/erocurves.com/127.0.0.1#5335 +ipset=/erocurves.com/gfwlist +server=/onlinefucktube.com/127.0.0.1#5335 +ipset=/onlinefucktube.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=/moemax.net/127.0.0.1#5335 +ipset=/moemax.net/gfwlist +server=/whatthefox.com/127.0.0.1#5335 +ipset=/whatthefox.com/gfwlist +server=/terragraph.com/127.0.0.1#5335 +ipset=/terragraph.com/gfwlist +server=/facebook.us/127.0.0.1#5335 +ipset=/facebook.us/gfwlist +server=/logitech.biz/127.0.0.1#5335 +ipset=/logitech.biz/gfwlist +server=/messenger.com/127.0.0.1#5335 +ipset=/messenger.com/gfwlist +server=/wifehomeporn.com/127.0.0.1#5335 +ipset=/wifehomeporn.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=/eromangajukujo.com/127.0.0.1#5335 +ipset=/eromangajukujo.com/gfwlist +server=/39group.info/127.0.0.1#5335 +ipset=/39group.info/gfwlist +server=/ero-labs.site/127.0.0.1#5335 +ipset=/ero-labs.site/gfwlist +server=/womenwill.com.br/127.0.0.1#5335 +ipset=/womenwill.com.br/gfwlist +server=/my13la.com/127.0.0.1#5335 +ipset=/my13la.com/gfwlist +server=/quanben-xiaoshuo.com/127.0.0.1#5335 +ipset=/quanben-xiaoshuo.com/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=/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=/nikeswim.com/127.0.0.1#5335 +ipset=/nikeswim.com/gfwlist +server=/adobecc.com/127.0.0.1#5335 +ipset=/adobecc.com/gfwlist +server=/businesstoday.com.tw/127.0.0.1#5335 +ipset=/businesstoday.com.tw/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=/bustydustystash.com/127.0.0.1#5335 +ipset=/bustydustystash.com/gfwlist +server=/acasadasbrasileirinhas.com.br/127.0.0.1#5335 +ipset=/acasadasbrasileirinhas.com.br/gfwlist +server=/lbtube.com/127.0.0.1#5335 +ipset=/lbtube.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=/paypal-center.net/127.0.0.1#5335 +ipset=/paypal-center.net/gfwlist +server=/watchout.tw/127.0.0.1#5335 +ipset=/watchout.tw/gfwlist +server=/banned.video/127.0.0.1#5335 +ipset=/banned.video/gfwlist +server=/sf.net/127.0.0.1#5335 +ipset=/sf.net/gfwlist +server=/popjav.tv/127.0.0.1#5335 +ipset=/popjav.tv/gfwlist +server=/he.net/127.0.0.1#5335 +ipset=/he.net/gfwlist +server=/xx9.app/127.0.0.1#5335 +ipset=/xx9.app/gfwlist +server=/ebay.co.nz/127.0.0.1#5335 +ipset=/ebay.co.nz/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=/brandproducts1688.com/127.0.0.1#5335 +ipset=/brandproducts1688.com/gfwlist +server=/sextube.desi/127.0.0.1#5335 +ipset=/sextube.desi/gfwlist +server=/shops-disney.com/127.0.0.1#5335 +ipset=/shops-disney.com/gfwlist +server=/instagram-help.com/127.0.0.1#5335 +ipset=/instagram-help.com/gfwlist +server=/justusboys.com/127.0.0.1#5335 +ipset=/justusboys.com/gfwlist +server=/lnstagram-help.com/127.0.0.1#5335 +ipset=/lnstagram-help.com/gfwlist +server=/sexwithhorse.net/127.0.0.1#5335 +ipset=/sexwithhorse.net/gfwlist +server=/instagramm.com/127.0.0.1#5335 +ipset=/instagramm.com/gfwlist +server=/new3dcomics.com/127.0.0.1#5335 +ipset=/new3dcomics.com/gfwlist +server=/xxxbule.com/127.0.0.1#5335 +ipset=/xxxbule.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=/sex-douga.jp/127.0.0.1#5335 +ipset=/sex-douga.jp/gfwlist +server=/appstore.ph/127.0.0.1#5335 +ipset=/appstore.ph/gfwlist +server=/nvidia.com.br/127.0.0.1#5335 +ipset=/nvidia.com.br/gfwlist +server=/topless.com.ua/127.0.0.1#5335 +ipset=/topless.com.ua/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=/steamcommunity-a.akamaihd.net/127.0.0.1#5335 +ipset=/steamcommunity-a.akamaihd.net/gfwlist +server=/volvotrucks.no/127.0.0.1#5335 +ipset=/volvotrucks.no/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=/hentaifox.tv/127.0.0.1#5335 +ipset=/hentaifox.tv/gfwlist +server=/sleazyneasy.com/127.0.0.1#5335 +ipset=/sleazyneasy.com/gfwlist +server=/sikiswap.com/127.0.0.1#5335 +ipset=/sikiswap.com/gfwlist +server=/magentocommerce.com/127.0.0.1#5335 +ipset=/magentocommerce.com/gfwlist +server=/xamarin.com/127.0.0.1#5335 +ipset=/xamarin.com/gfwlist +server=/ipfs.fleek.co/127.0.0.1#5335 +ipset=/ipfs.fleek.co/gfwlist +server=/dailymail.com.au/127.0.0.1#5335 +ipset=/dailymail.com.au/gfwlist +server=/mini-clubs-international.com/127.0.0.1#5335 +ipset=/mini-clubs-international.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=/japan18tube.com/127.0.0.1#5335 +ipset=/japan18tube.com/gfwlist +server=/qualphone.com/127.0.0.1#5335 +ipset=/qualphone.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=/pussymomsex.com/127.0.0.1#5335 +ipset=/pussymomsex.com/gfwlist +server=/skate2.com/127.0.0.1#5335 +ipset=/skate2.com/gfwlist +server=/faceobok.com/127.0.0.1#5335 +ipset=/faceobok.com/gfwlist +server=/thai69.com/127.0.0.1#5335 +ipset=/thai69.com/gfwlist +server=/aka-ai.com/127.0.0.1#5335 +ipset=/aka-ai.com/gfwlist +server=/boobieblog.com/127.0.0.1#5335 +ipset=/boobieblog.com/gfwlist +server=/askfacebook.net/127.0.0.1#5335 +ipset=/askfacebook.net/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=/mininanaimo.ca/127.0.0.1#5335 +ipset=/mininanaimo.ca/gfwlist +server=/greatergothammini.com/127.0.0.1#5335 +ipset=/greatergothammini.com/gfwlist +server=/facebookpoke.net/127.0.0.1#5335 +ipset=/facebookpoke.net/gfwlist +server=/gaypornhdfree.com/127.0.0.1#5335 +ipset=/gaypornhdfree.com/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=/chinese-porn-videos.com/127.0.0.1#5335 +ipset=/chinese-porn-videos.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=/microbit.org/127.0.0.1#5335 +ipset=/microbit.org/gfwlist +server=/ikea.co.om/127.0.0.1#5335 +ipset=/ikea.co.om/gfwlist +server=/hentai.pink/127.0.0.1#5335 +ipset=/hentai.pink/gfwlist +server=/asto.re/127.0.0.1#5335 +ipset=/asto.re/gfwlist +server=/cern.ch/127.0.0.1#5335 +ipset=/cern.ch/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=/mixasiansex.com/127.0.0.1#5335 +ipset=/mixasiansex.com/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=/agu.org/127.0.0.1#5335 +ipset=/agu.org/gfwlist +server=/ferronetwork.com/127.0.0.1#5335 +ipset=/ferronetwork.com/gfwlist +server=/motherless.com/127.0.0.1#5335 +ipset=/motherless.com/gfwlist +server=/paypal-forward.com/127.0.0.1#5335 +ipset=/paypal-forward.com/gfwlist +server=/xn--6eup7j.com/127.0.0.1#5335 +ipset=/xn--6eup7j.com/gfwlist +server=/londonmithraeum.com/127.0.0.1#5335 +ipset=/londonmithraeum.com/gfwlist +server=/dettol.co.id/127.0.0.1#5335 +ipset=/dettol.co.id/gfwlist +server=/doseofporn.com/127.0.0.1#5335 +ipset=/doseofporn.com/gfwlist +server=/paxful.com/127.0.0.1#5335 +ipset=/paxful.com/gfwlist +server=/vfsco.no/127.0.0.1#5335 +ipset=/vfsco.no/gfwlist +server=/lotcrap.com/127.0.0.1#5335 +ipset=/lotcrap.com/gfwlist +server=/digitalpack.com/127.0.0.1#5335 +ipset=/digitalpack.com/gfwlist +server=/bmwgroup-werke.com/127.0.0.1#5335 +ipset=/bmwgroup-werke.com/gfwlist +server=/finish.co.kr/127.0.0.1#5335 +ipset=/finish.co.kr/gfwlist +server=/mrskin.com/127.0.0.1#5335 +ipset=/mrskin.com/gfwlist +server=/comicunivers.com/127.0.0.1#5335 +ipset=/comicunivers.com/gfwlist +server=/haplorrhini.com/127.0.0.1#5335 +ipset=/haplorrhini.com/gfwlist +server=/intellij.org/127.0.0.1#5335 +ipset=/intellij.org/gfwlist +server=/zhaimankan.com/127.0.0.1#5335 +ipset=/zhaimankan.com/gfwlist +server=/youngamateursporn.com/127.0.0.1#5335 +ipset=/youngamateursporn.com/gfwlist +server=/lbfmaddiction.com/127.0.0.1#5335 +ipset=/lbfmaddiction.com/gfwlist +server=/theclub.com.hk/127.0.0.1#5335 +ipset=/theclub.com.hk/gfwlist +server=/google.com.ai/127.0.0.1#5335 +ipset=/google.com.ai/gfwlist +server=/solarcity.com/127.0.0.1#5335 +ipset=/solarcity.com/gfwlist +server=/kslive.tv/127.0.0.1#5335 +ipset=/kslive.tv/gfwlist +server=/pinimg.com/127.0.0.1#5335 +ipset=/pinimg.com/gfwlist +server=/xnxxarabsex.com/127.0.0.1#5335 +ipset=/xnxxarabsex.com/gfwlist +server=/realpornclip.com/127.0.0.1#5335 +ipset=/realpornclip.com/gfwlist +server=/vimeobusiness.com/127.0.0.1#5335 +ipset=/vimeobusiness.com/gfwlist +server=/eroxia.com/127.0.0.1#5335 +ipset=/eroxia.com/gfwlist +server=/sextube.fm/127.0.0.1#5335 +ipset=/sextube.fm/gfwlist +server=/bmwgroup.at/127.0.0.1#5335 +ipset=/bmwgroup.at/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=/ebay.pl/127.0.0.1#5335 +ipset=/ebay.pl/gfwlist +server=/fullsexmovs.com/127.0.0.1#5335 +ipset=/fullsexmovs.com/gfwlist +server=/sss.xxx/127.0.0.1#5335 +ipset=/sss.xxx/gfwlist +server=/quatrowireless.com/127.0.0.1#5335 +ipset=/quatrowireless.com/gfwlist +server=/123-hp.com/127.0.0.1#5335 +ipset=/123-hp.com/gfwlist +server=/hotasianbabes.com/127.0.0.1#5335 +ipset=/hotasianbabes.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=/cumswappingsis.com/127.0.0.1#5335 +ipset=/cumswappingsis.com/gfwlist +server=/dfp6rglgjqszk.cloudfront.net/127.0.0.1#5335 +ipset=/dfp6rglgjqszk.cloudfront.net/gfwlist +server=/clients1.google.com/127.0.0.1#5335 +ipset=/clients1.google.com/gfwlist +server=/vod-hls-uk-live.akamaized.net/127.0.0.1#5335 +ipset=/vod-hls-uk-live.akamaized.net/gfwlist +server=/bmw-motorrad.co.nz/127.0.0.1#5335 +ipset=/bmw-motorrad.co.nz/gfwlist +server=/applecarbon.com/127.0.0.1#5335 +ipset=/applecarbon.com/gfwlist +server=/nudevista.club/127.0.0.1#5335 +ipset=/nudevista.club/gfwlist +server=/amazon.com.tr/127.0.0.1#5335 +ipset=/amazon.com.tr/gfwlist +server=/javtorrent.tk/127.0.0.1#5335 +ipset=/javtorrent.tk/gfwlist +server=/boodigo.com/127.0.0.1#5335 +ipset=/boodigo.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=/scatvids.club/127.0.0.1#5335 +ipset=/scatvids.club/gfwlist +server=/ebayjob.com/127.0.0.1#5335 +ipset=/ebayjob.com/gfwlist +server=/viacomcbspressexpress.com/127.0.0.1#5335 +ipset=/viacomcbspressexpress.com/gfwlist +server=/nhentai.net/127.0.0.1#5335 +ipset=/nhentai.net/gfwlist +server=/holloporn.com/127.0.0.1#5335 +ipset=/holloporn.com/gfwlist +server=/foxnetworksinfo.com/127.0.0.1#5335 +ipset=/foxnetworksinfo.com/gfwlist +server=/swoo.sh/127.0.0.1#5335 +ipset=/swoo.sh/gfwlist +server=/fox28media.com/127.0.0.1#5335 +ipset=/fox28media.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=/arcadewank.com/127.0.0.1#5335 +ipset=/arcadewank.com/gfwlist +server=/epochtime.com/127.0.0.1#5335 +ipset=/epochtime.com/gfwlist +server=/1337xto.to/127.0.0.1#5335 +ipset=/1337xto.to/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=/ads-twitter.com/127.0.0.1#5335 +ipset=/ads-twitter.com/gfwlist +server=/myboylove.com/127.0.0.1#5335 +ipset=/myboylove.com/gfwlist +server=/xandr.com/127.0.0.1#5335 +ipset=/xandr.com/gfwlist +server=/mybmw.com/127.0.0.1#5335 +ipset=/mybmw.com/gfwlist +server=/rolls-roycemotorcarsna.com/127.0.0.1#5335 +ipset=/rolls-roycemotorcarsna.com/gfwlist +server=/drebeats-singaporecheap.com/127.0.0.1#5335 +ipset=/drebeats-singaporecheap.com/gfwlist +server=/ladyboypornonly.com/127.0.0.1#5335 +ipset=/ladyboypornonly.com/gfwlist +server=/ijavhd.com/127.0.0.1#5335 +ipset=/ijavhd.com/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=/truyen18.xyz/127.0.0.1#5335 +ipset=/truyen18.xyz/gfwlist +server=/firesidegatherings.com/127.0.0.1#5335 +ipset=/firesidegatherings.com/gfwlist +server=/x6av.com/127.0.0.1#5335 +ipset=/x6av.com/gfwlist +server=/nudistvoyeurbeach.com/127.0.0.1#5335 +ipset=/nudistvoyeurbeach.com/gfwlist +server=/3hentai.net/127.0.0.1#5335 +ipset=/3hentai.net/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=/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=/90seconds.asia/127.0.0.1#5335 +ipset=/90seconds.asia/gfwlist +server=/ikea.lt/127.0.0.1#5335 +ipset=/ikea.lt/gfwlist +server=/flexsig.com/127.0.0.1#5335 +ipset=/flexsig.com/gfwlist +server=/babesource.com/127.0.0.1#5335 +ipset=/babesource.com/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=/hpcomputerservices.com/127.0.0.1#5335 +ipset=/hpcomputerservices.com/gfwlist +server=/avstar07.com/127.0.0.1#5335 +ipset=/avstar07.com/gfwlist +server=/ywbclx.top/127.0.0.1#5335 +ipset=/ywbclx.top/gfwlist +server=/yahoo.com.my/127.0.0.1#5335 +ipset=/yahoo.com.my/gfwlist +server=/egghead.io/127.0.0.1#5335 +ipset=/egghead.io/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=/addthis.com/127.0.0.1#5335 +ipset=/addthis.com/gfwlist +server=/bmw.ch/127.0.0.1#5335 +ipset=/bmw.ch/gfwlist +server=/slutdump.com/127.0.0.1#5335 +ipset=/slutdump.com/gfwlist +server=/visa.com.lk/127.0.0.1#5335 +ipset=/visa.com.lk/gfwlist +server=/airav.wiki/127.0.0.1#5335 +ipset=/airav.wiki/gfwlist +server=/accessfacebookfromschool.com/127.0.0.1#5335 +ipset=/accessfacebookfromschool.com/gfwlist +server=/teensloveporn.net/127.0.0.1#5335 +ipset=/teensloveporn.net/gfwlist +server=/fbcdn.net/127.0.0.1#5335 +ipset=/fbcdn.net/gfwlist +server=/edx-cdn.org/127.0.0.1#5335 +ipset=/edx-cdn.org/gfwlist +server=/footseen.com/127.0.0.1#5335 +ipset=/footseen.com/gfwlist +server=/pornoscanner.com/127.0.0.1#5335 +ipset=/pornoscanner.com/gfwlist +server=/javhdporn.net/127.0.0.1#5335 +ipset=/javhdporn.net/gfwlist +server=/ebay-inc.com/127.0.0.1#5335 +ipset=/ebay-inc.com/gfwlist +server=/avstar5.com/127.0.0.1#5335 +ipset=/avstar5.com/gfwlist +server=/topsexart.com/127.0.0.1#5335 +ipset=/topsexart.com/gfwlist +server=/calgon.pt/127.0.0.1#5335 +ipset=/calgon.pt/gfwlist +server=/91se.fun/127.0.0.1#5335 +ipset=/91se.fun/gfwlist +server=/karlajames.com/127.0.0.1#5335 +ipset=/karlajames.com/gfwlist +server=/sexmovies24.com/127.0.0.1#5335 +ipset=/sexmovies24.com/gfwlist +server=/nike.gy/127.0.0.1#5335 +ipset=/nike.gy/gfwlist +server=/milehighmedia.com/127.0.0.1#5335 +ipset=/milehighmedia.com/gfwlist +server=/xn--3et96bj49ahpq.com/127.0.0.1#5335 +ipset=/xn--3et96bj49ahpq.com/gfwlist +server=/trueamateurmodels.com/127.0.0.1#5335 +ipset=/trueamateurmodels.com/gfwlist +server=/volvogroup.pe/127.0.0.1#5335 +ipset=/volvogroup.pe/gfwlist +server=/engineeringvillage.com/127.0.0.1#5335 +ipset=/engineeringvillage.com/gfwlist +server=/youtube.fi/127.0.0.1#5335 +ipset=/youtube.fi/gfwlist +server=/ebay.vn/127.0.0.1#5335 +ipset=/ebay.vn/gfwlist +server=/livecamclips.com/127.0.0.1#5335 +ipset=/livecamclips.com/gfwlist +server=/flirtyhoookup.com/127.0.0.1#5335 +ipset=/flirtyhoookup.com/gfwlist +server=/microsofthouse.com/127.0.0.1#5335 +ipset=/microsofthouse.com/gfwlist +server=/speedxtra.com/127.0.0.1#5335 +ipset=/speedxtra.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=/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=/ems-ph.org/127.0.0.1#5335 +ipset=/ems-ph.org/gfwlist +server=/pornwhite.com/127.0.0.1#5335 +ipset=/pornwhite.com/gfwlist +server=/gettyimages.in/127.0.0.1#5335 +ipset=/gettyimages.in/gfwlist +server=/hardcoregayblog.com/127.0.0.1#5335 +ipset=/hardcoregayblog.com/gfwlist +server=/bestescortgirls.nl/127.0.0.1#5335 +ipset=/bestescortgirls.nl/gfwlist +server=/nightclub.eu/127.0.0.1#5335 +ipset=/nightclub.eu/gfwlist +server=/ukwhoswho.com/127.0.0.1#5335 +ipset=/ukwhoswho.com/gfwlist +server=/coitustube.com/127.0.0.1#5335 +ipset=/coitustube.com/gfwlist +server=/beats4salecheap.com/127.0.0.1#5335 +ipset=/beats4salecheap.com/gfwlist +server=/pornmagnet.org/127.0.0.1#5335 +ipset=/pornmagnet.org/gfwlist +server=/applecare.wang/127.0.0.1#5335 +ipset=/applecare.wang/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=/cliphayho.com/127.0.0.1#5335 +ipset=/cliphayho.com/gfwlist +server=/runwayescorts.com/127.0.0.1#5335 +ipset=/runwayescorts.com/gfwlist +server=/riotforgegames.com/127.0.0.1#5335 +ipset=/riotforgegames.com/gfwlist +server=/x-fetish.org/127.0.0.1#5335 +ipset=/x-fetish.org/gfwlist +server=/s-xoom.com/127.0.0.1#5335 +ipset=/s-xoom.com/gfwlist +server=/gfleaks.com/127.0.0.1#5335 +ipset=/gfleaks.com/gfwlist +server=/eamythic.com/127.0.0.1#5335 +ipset=/eamythic.com/gfwlist +server=/tiffany-towers.com/127.0.0.1#5335 +ipset=/tiffany-towers.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=/hbogoasia.tw/127.0.0.1#5335 +ipset=/hbogoasia.tw/gfwlist +server=/wiifitu.com/127.0.0.1#5335 +ipset=/wiifitu.com/gfwlist +server=/airwatchqa.com/127.0.0.1#5335 +ipset=/airwatchqa.com/gfwlist +server=/futunited.com/127.0.0.1#5335 +ipset=/futunited.com/gfwlist +server=/spermyporn.com/127.0.0.1#5335 +ipset=/spermyporn.com/gfwlist +server=/eskimotube.com/127.0.0.1#5335 +ipset=/eskimotube.com/gfwlist +server=/slutclit.com/127.0.0.1#5335 +ipset=/slutclit.com/gfwlist +server=/adidas.com/127.0.0.1#5335 +ipset=/adidas.com/gfwlist +server=/durex-shop.ch/127.0.0.1#5335 +ipset=/durex-shop.ch/gfwlist +server=/iphonexs.tv/127.0.0.1#5335 +ipset=/iphonexs.tv/gfwlist +server=/yahoo.lu/127.0.0.1#5335 +ipset=/yahoo.lu/gfwlist +server=/myfoxtampabay.com/127.0.0.1#5335 +ipset=/myfoxtampabay.com/gfwlist +server=/gloryholefucking.com/127.0.0.1#5335 +ipset=/gloryholefucking.com/gfwlist +server=/microsoftnews.com/127.0.0.1#5335 +ipset=/microsoftnews.com/gfwlist +server=/standardsuniversity.org/127.0.0.1#5335 +ipset=/standardsuniversity.org/gfwlist +server=/gate.cc/127.0.0.1#5335 +ipset=/gate.cc/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=/swiftfinancial.com/127.0.0.1#5335 +ipset=/swiftfinancial.com/gfwlist +server=/zb.app/127.0.0.1#5335 +ipset=/zb.app/gfwlist +server=/sex.sex/127.0.0.1#5335 +ipset=/sex.sex/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=/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=/get.app/127.0.0.1#5335 +ipset=/get.app/gfwlist +server=/scholar.google.ch/127.0.0.1#5335 +ipset=/scholar.google.ch/gfwlist +server=/mylittlenieces.com/127.0.0.1#5335 +ipset=/mylittlenieces.com/gfwlist +server=/megahdporno.net/127.0.0.1#5335 +ipset=/megahdporno.net/gfwlist +server=/adidas.it/127.0.0.1#5335 +ipset=/adidas.it/gfwlist +server=/youngheaven.com/127.0.0.1#5335 +ipset=/youngheaven.com/gfwlist +server=/pearson.com.ar/127.0.0.1#5335 +ipset=/pearson.com.ar/gfwlist +server=/alt4-mtalk.google.com/127.0.0.1#5335 +ipset=/alt4-mtalk.google.com/gfwlist +server=/gettyimages.se/127.0.0.1#5335 +ipset=/gettyimages.se/gfwlist +server=/nuddess.com/127.0.0.1#5335 +ipset=/nuddess.com/gfwlist +server=/onani-daisuki.com/127.0.0.1#5335 +ipset=/onani-daisuki.com/gfwlist +server=/coursera-for-business.org/127.0.0.1#5335 +ipset=/coursera-for-business.org/gfwlist +server=/gamesathletes.com/127.0.0.1#5335 +ipset=/gamesathletes.com/gfwlist +server=/alphabet.com.lv/127.0.0.1#5335 +ipset=/alphabet.com.lv/gfwlist +server=/hdreporn.com/127.0.0.1#5335 +ipset=/hdreporn.com/gfwlist +server=/decrypt.day/127.0.0.1#5335 +ipset=/decrypt.day/gfwlist +server=/espn.co.uk/127.0.0.1#5335 +ipset=/espn.co.uk/gfwlist +server=/sandisk.id/127.0.0.1#5335 +ipset=/sandisk.id/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=/tesla.com/127.0.0.1#5335 +ipset=/tesla.com/gfwlist +server=/dickhardon.com/127.0.0.1#5335 +ipset=/dickhardon.com/gfwlist +server=/imageshack.us/127.0.0.1#5335 +ipset=/imageshack.us/gfwlist +server=/baselinestudy.org/127.0.0.1#5335 +ipset=/baselinestudy.org/gfwlist +server=/mucinex.co.nz/127.0.0.1#5335 +ipset=/mucinex.co.nz/gfwlist +server=/xingrz.me/127.0.0.1#5335 +ipset=/xingrz.me/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=/jwplayer.com/127.0.0.1#5335 +ipset=/jwplayer.com/gfwlist +server=/swingercuckoldporn.com/127.0.0.1#5335 +ipset=/swingercuckoldporn.com/gfwlist +server=/pagespeedmobilizer.com/127.0.0.1#5335 +ipset=/pagespeedmobilizer.com/gfwlist +server=/casquebeatsdre2013.com/127.0.0.1#5335 +ipset=/casquebeatsdre2013.com/gfwlist +server=/homepornking.com/127.0.0.1#5335 +ipset=/homepornking.com/gfwlist +server=/iphone.net.gr/127.0.0.1#5335 +ipset=/iphone.net.gr/gfwlist +server=/blogspot.lu/127.0.0.1#5335 +ipset=/blogspot.lu/gfwlist +server=/intel.com/127.0.0.1#5335 +ipset=/intel.com/gfwlist +server=/bdsm-mov.net/127.0.0.1#5335 +ipset=/bdsm-mov.net/gfwlist +server=/iwaponline.com/127.0.0.1#5335 +ipset=/iwaponline.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=/69luolie.com/127.0.0.1#5335 +ipset=/69luolie.com/gfwlist +server=/ieee-into-focus.org/127.0.0.1#5335 +ipset=/ieee-into-focus.org/gfwlist +server=/hotladsworld.com/127.0.0.1#5335 +ipset=/hotladsworld.com/gfwlist +server=/edengay.net/127.0.0.1#5335 +ipset=/edengay.net/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=/jabcomix.com/127.0.0.1#5335 +ipset=/jabcomix.com/gfwlist +server=/fujinkoron.jp/127.0.0.1#5335 +ipset=/fujinkoron.jp/gfwlist +server=/ponyanimalsex.com/127.0.0.1#5335 +ipset=/ponyanimalsex.com/gfwlist +server=/facebookappcenter.net/127.0.0.1#5335 +ipset=/facebookappcenter.net/gfwlist +server=/bigtitsgallery.net/127.0.0.1#5335 +ipset=/bigtitsgallery.net/gfwlist +server=/crazyxxx3dworld.org/127.0.0.1#5335 +ipset=/crazyxxx3dworld.org/gfwlist +server=/gitbook.com/127.0.0.1#5335 +ipset=/gitbook.com/gfwlist +server=/absoluporn.com/127.0.0.1#5335 +ipset=/absoluporn.com/gfwlist +server=/paypal.com.hk/127.0.0.1#5335 +ipset=/paypal.com.hk/gfwlist +server=/worldpornvideos.com/127.0.0.1#5335 +ipset=/worldpornvideos.com/gfwlist +server=/indiansexstories.net/127.0.0.1#5335 +ipset=/indiansexstories.net/gfwlist +server=/nvidia.com.mx/127.0.0.1#5335 +ipset=/nvidia.com.mx/gfwlist +server=/qdiehzz7.me/127.0.0.1#5335 +ipset=/qdiehzz7.me/gfwlist +server=/arabnek.com/127.0.0.1#5335 +ipset=/arabnek.com/gfwlist +server=/nonktube.com/127.0.0.1#5335 +ipset=/nonktube.com/gfwlist +server=/nlm.io/127.0.0.1#5335 +ipset=/nlm.io/gfwlist +server=/pokemonultrasunmoon.com/127.0.0.1#5335 +ipset=/pokemonultrasunmoon.com/gfwlist +server=/sp.cool/127.0.0.1#5335 +ipset=/sp.cool/gfwlist +server=/facetook.com/127.0.0.1#5335 +ipset=/facetook.com/gfwlist +server=/animalporn.me/127.0.0.1#5335 +ipset=/animalporn.me/gfwlist +server=/desipornfilms.com/127.0.0.1#5335 +ipset=/desipornfilms.com/gfwlist +server=/casquedrdrebeatssfr.com/127.0.0.1#5335 +ipset=/casquedrdrebeatssfr.com/gfwlist +server=/milfmaturesex.net/127.0.0.1#5335 +ipset=/milfmaturesex.net/gfwlist +server=/bbc.in/127.0.0.1#5335 +ipset=/bbc.in/gfwlist +server=/hypnohub.net/127.0.0.1#5335 +ipset=/hypnohub.net/gfwlist +server=/paypal-online.info/127.0.0.1#5335 +ipset=/paypal-online.info/gfwlist +server=/scholar.google.com.bo/127.0.0.1#5335 +ipset=/scholar.google.com.bo/gfwlist +server=/masalabin.com/127.0.0.1#5335 +ipset=/masalabin.com/gfwlist +server=/twttr.com/127.0.0.1#5335 +ipset=/twttr.com/gfwlist +server=/mafia-linkz.to/127.0.0.1#5335 +ipset=/mafia-linkz.to/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=/bmw.ma/127.0.0.1#5335 +ipset=/bmw.ma/gfwlist +server=/pise.pw/127.0.0.1#5335 +ipset=/pise.pw/gfwlist +server=/pornobae.com/127.0.0.1#5335 +ipset=/pornobae.com/gfwlist +server=/minnano-av.com/127.0.0.1#5335 +ipset=/minnano-av.com/gfwlist +server=/gamesofdesire.com/127.0.0.1#5335 +ipset=/gamesofdesire.com/gfwlist +server=/xxxgratisfilms.com/127.0.0.1#5335 +ipset=/xxxgratisfilms.com/gfwlist +server=/autodesk.com/127.0.0.1#5335 +ipset=/autodesk.com/gfwlist +server=/tearapeak.com/127.0.0.1#5335 +ipset=/tearapeak.com/gfwlist +server=/foxphiladelphia.com/127.0.0.1#5335 +ipset=/foxphiladelphia.com/gfwlist +server=/livejasmin.com/127.0.0.1#5335 +ipset=/livejasmin.com/gfwlist +server=/bmw-motorrad.com.ar/127.0.0.1#5335 +ipset=/bmw-motorrad.com.ar/gfwlist +server=/nudelive.com/127.0.0.1#5335 +ipset=/nudelive.com/gfwlist +server=/gtv.org/127.0.0.1#5335 +ipset=/gtv.org/gfwlist +server=/blizzardgearstore.com/127.0.0.1#5335 +ipset=/blizzardgearstore.com/gfwlist +server=/hotsexydolls.com/127.0.0.1#5335 +ipset=/hotsexydolls.com/gfwlist +server=/thomsonreuters.co.jp/127.0.0.1#5335 +ipset=/thomsonreuters.co.jp/gfwlist +server=/oreilly.com/127.0.0.1#5335 +ipset=/oreilly.com/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=/visa.com.hr/127.0.0.1#5335 +ipset=/visa.com.hr/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=/steampipe.akamaized.net/127.0.0.1#5335 +ipset=/steampipe.akamaized.net/gfwlist +server=/travelex.com.tr/127.0.0.1#5335 +ipset=/travelex.com.tr/gfwlist +server=/takens.tw/127.0.0.1#5335 +ipset=/takens.tw/gfwlist +server=/moviesanywhere.com/127.0.0.1#5335 +ipset=/moviesanywhere.com/gfwlist +server=/youjizz.com/127.0.0.1#5335 +ipset=/youjizz.com/gfwlist +server=/tubemovies4k.com/127.0.0.1#5335 +ipset=/tubemovies4k.com/gfwlist +server=/superjapanesesex.com/127.0.0.1#5335 +ipset=/superjapanesesex.com/gfwlist +server=/kinklive.com/127.0.0.1#5335 +ipset=/kinklive.com/gfwlist +server=/pornone.com/127.0.0.1#5335 +ipset=/pornone.com/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=/ingka.com/127.0.0.1#5335 +ipset=/ingka.com/gfwlist +server=/facebocke.com/127.0.0.1#5335 +ipset=/facebocke.com/gfwlist +server=/realclearhealth.com/127.0.0.1#5335 +ipset=/realclearhealth.com/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=/now.com/127.0.0.1#5335 +ipset=/now.com/gfwlist +server=/bmw-connecteddrive.com.br/127.0.0.1#5335 +ipset=/bmw-connecteddrive.com.br/gfwlist +server=/xnxxporn.de/127.0.0.1#5335 +ipset=/xnxxporn.de/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=/faronics.eu/127.0.0.1#5335 +ipset=/faronics.eu/gfwlist +server=/adultvideotop.com/127.0.0.1#5335 +ipset=/adultvideotop.com/gfwlist +server=/abc.xyz/127.0.0.1#5335 +ipset=/abc.xyz/gfwlist +server=/linuxmint.com/127.0.0.1#5335 +ipset=/linuxmint.com/gfwlist +server=/girlswelustfor.com/127.0.0.1#5335 +ipset=/girlswelustfor.com/gfwlist +server=/wikawika.xyz/127.0.0.1#5335 +ipset=/wikawika.xyz/gfwlist +server=/intel.lu/127.0.0.1#5335 +ipset=/intel.lu/gfwlist +server=/zeit-world.co.uk/127.0.0.1#5335 +ipset=/zeit-world.co.uk/gfwlist +server=/realteengirls.com/127.0.0.1#5335 +ipset=/realteengirls.com/gfwlist +server=/unkoscene.com/127.0.0.1#5335 +ipset=/unkoscene.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=/47news.jp/127.0.0.1#5335 +ipset=/47news.jp/gfwlist +server=/rbgraduates.com/127.0.0.1#5335 +ipset=/rbgraduates.com/gfwlist +server=/google.lv/127.0.0.1#5335 +ipset=/google.lv/gfwlist +server=/mymasturbators.com/127.0.0.1#5335 +ipset=/mymasturbators.com/gfwlist +server=/8thstreetlatinas.com/127.0.0.1#5335 +ipset=/8thstreetlatinas.com/gfwlist +server=/juliamovies.com/127.0.0.1#5335 +ipset=/juliamovies.com/gfwlist +server=/nmbmw.com/127.0.0.1#5335 +ipset=/nmbmw.com/gfwlist +server=/trellocdn.com/127.0.0.1#5335 +ipset=/trellocdn.com/gfwlist +server=/devtools-paypal.com/127.0.0.1#5335 +ipset=/devtools-paypal.com/gfwlist +server=/swingers.theadulthub.com/127.0.0.1#5335 +ipset=/swingers.theadulthub.com/gfwlist +server=/qwant.de/127.0.0.1#5335 +ipset=/qwant.de/gfwlist +server=/wifewantstoplay.com/127.0.0.1#5335 +ipset=/wifewantstoplay.com/gfwlist +server=/vfsco.ee/127.0.0.1#5335 +ipset=/vfsco.ee/gfwlist +server=/youtube.am/127.0.0.1#5335 +ipset=/youtube.am/gfwlist +server=/pornoreino.com/127.0.0.1#5335 +ipset=/pornoreino.com/gfwlist +server=/vmw.com/127.0.0.1#5335 +ipset=/vmw.com/gfwlist +server=/canon.se/127.0.0.1#5335 +ipset=/canon.se/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=/camgirlfinder.net/127.0.0.1#5335 +ipset=/camgirlfinder.net/gfwlist +server=/ssx3.com/127.0.0.1#5335 +ipset=/ssx3.com/gfwlist +server=/candycumcity.com/127.0.0.1#5335 +ipset=/candycumcity.com/gfwlist +server=/scatville.com/127.0.0.1#5335 +ipset=/scatville.com/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=/skyoceanrescue.it/127.0.0.1#5335 +ipset=/skyoceanrescue.it/gfwlist +server=/withyoutube.com/127.0.0.1#5335 +ipset=/withyoutube.com/gfwlist +server=/pornqd.com/127.0.0.1#5335 +ipset=/pornqd.com/gfwlist +server=/moozporn.com/127.0.0.1#5335 +ipset=/moozporn.com/gfwlist +server=/sandisk.ae/127.0.0.1#5335 +ipset=/sandisk.ae/gfwlist +server=/hentaicomics.asia/127.0.0.1#5335 +ipset=/hentaicomics.asia/gfwlist +server=/bmw.co.th/127.0.0.1#5335 +ipset=/bmw.co.th/gfwlist +server=/bestcamsites.net/127.0.0.1#5335 +ipset=/bestcamsites.net/gfwlist +server=/boundhub.com/127.0.0.1#5335 +ipset=/boundhub.com/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=/xchina.co/127.0.0.1#5335 +ipset=/xchina.co/gfwlist +server=/bmw-i.jp/127.0.0.1#5335 +ipset=/bmw-i.jp/gfwlist +server=/tryengineering.org/127.0.0.1#5335 +ipset=/tryengineering.org/gfwlist +server=/hbogoasia.ph/127.0.0.1#5335 +ipset=/hbogoasia.ph/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=/faronics.com/127.0.0.1#5335 +ipset=/faronics.com/gfwlist +server=/88gals.com/127.0.0.1#5335 +ipset=/88gals.com/gfwlist +server=/zencdn.net/127.0.0.1#5335 +ipset=/zencdn.net/gfwlist +server=/mini-srilanka.com/127.0.0.1#5335 +ipset=/mini-srilanka.com/gfwlist +server=/mrporngeek.com/127.0.0.1#5335 +ipset=/mrporngeek.com/gfwlist +server=/visafulfillment.com/127.0.0.1#5335 +ipset=/visafulfillment.com/gfwlist +server=/volvobuses.ca/127.0.0.1#5335 +ipset=/volvobuses.ca/gfwlist +server=/selectyourgame.com/127.0.0.1#5335 +ipset=/selectyourgame.com/gfwlist +server=/q10.jp/127.0.0.1#5335 +ipset=/q10.jp/gfwlist +server=/tubetubetube.com/127.0.0.1#5335 +ipset=/tubetubetube.com/gfwlist +server=/tubous.com/127.0.0.1#5335 +ipset=/tubous.com/gfwlist +server=/spotify-everywhere.com/127.0.0.1#5335 +ipset=/spotify-everywhere.com/gfwlist +server=/dvdtrailertube.com/127.0.0.1#5335 +ipset=/dvdtrailertube.com/gfwlist +server=/friendfeed.com/127.0.0.1#5335 +ipset=/friendfeed.com/gfwlist +server=/hifixxx.fun/127.0.0.1#5335 +ipset=/hifixxx.fun/gfwlist +server=/google.co/127.0.0.1#5335 +ipset=/google.co/gfwlist +server=/kichikuou.com/127.0.0.1#5335 +ipset=/kichikuou.com/gfwlist +server=/babes34.com/127.0.0.1#5335 +ipset=/babes34.com/gfwlist +server=/elsevier.com/127.0.0.1#5335 +ipset=/elsevier.com/gfwlist +server=/tsquare.tv/127.0.0.1#5335 +ipset=/tsquare.tv/gfwlist +server=/starbucksslovakia.sk/127.0.0.1#5335 +ipset=/starbucksslovakia.sk/gfwlist +server=/darkageofcamelot.com/127.0.0.1#5335 +ipset=/darkageofcamelot.com/gfwlist +server=/starbucksromania.ro/127.0.0.1#5335 +ipset=/starbucksromania.ro/gfwlist +server=/avstar06.me/127.0.0.1#5335 +ipset=/avstar06.me/gfwlist +server=/cuckoldwifetube.com/127.0.0.1#5335 +ipset=/cuckoldwifetube.com/gfwlist +server=/yzzk.com/127.0.0.1#5335 +ipset=/yzzk.com/gfwlist +server=/mediawiki.org/127.0.0.1#5335 +ipset=/mediawiki.org/gfwlist +server=/starbucksreserve.com/127.0.0.1#5335 +ipset=/starbucksreserve.com/gfwlist +server=/starbucksforlife.ca/127.0.0.1#5335 +ipset=/starbucksforlife.ca/gfwlist +server=/starbuckscoffeegearstore.com/127.0.0.1#5335 +ipset=/starbuckscoffeegearstore.com/gfwlist +server=/sharks-lagoon.fr/127.0.0.1#5335 +ipset=/sharks-lagoon.fr/gfwlist +server=/starbuckscoffee.cz/127.0.0.1#5335 +ipset=/starbuckscoffee.cz/gfwlist +server=/starbuckscardb2b.com/127.0.0.1#5335 +ipset=/starbuckscardb2b.com/gfwlist +server=/volvobrandshop.com/127.0.0.1#5335 +ipset=/volvobrandshop.com/gfwlist +server=/starbucksavie.ca/127.0.0.1#5335 +ipset=/starbucksavie.ca/gfwlist +server=/ebayworlds.com/127.0.0.1#5335 +ipset=/ebayworlds.com/gfwlist +server=/starbucksathome.com/127.0.0.1#5335 +ipset=/starbucksathome.com/gfwlist +server=/insidevoa.com/127.0.0.1#5335 +ipset=/insidevoa.com/gfwlist +server=/starbucks.tt/127.0.0.1#5335 +ipset=/starbucks.tt/gfwlist +server=/webgirlsonline.net/127.0.0.1#5335 +ipset=/webgirlsonline.net/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=/freecodecamp.org/127.0.0.1#5335 +ipset=/freecodecamp.org/gfwlist +server=/starbucks.pt/127.0.0.1#5335 +ipset=/starbucks.pt/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=/starbucks.pl/127.0.0.1#5335 +ipset=/starbucks.pl/gfwlist +server=/apple.me/127.0.0.1#5335 +ipset=/apple.me/gfwlist +server=/b-ok.global/127.0.0.1#5335 +ipset=/b-ok.global/gfwlist +server=/kendralist.com/127.0.0.1#5335 +ipset=/kendralist.com/gfwlist +server=/erohentai.net/127.0.0.1#5335 +ipset=/erohentai.net/gfwlist +server=/screenwisetrends.com/127.0.0.1#5335 +ipset=/screenwisetrends.com/gfwlist +server=/starbucks.nl/127.0.0.1#5335 +ipset=/starbucks.nl/gfwlist +server=/cuckoldwifesexxx.com/127.0.0.1#5335 +ipset=/cuckoldwifesexxx.com/gfwlist +server=/sexfilmstube.com/127.0.0.1#5335 +ipset=/sexfilmstube.com/gfwlist +server=/starbucks.it/127.0.0.1#5335 +ipset=/starbucks.it/gfwlist +server=/ebayd.com/127.0.0.1#5335 +ipset=/ebayd.com/gfwlist +server=/xxxhd.pro/127.0.0.1#5335 +ipset=/xxxhd.pro/gfwlist +server=/ebay-fashion.com/127.0.0.1#5335 +ipset=/ebay-fashion.com/gfwlist +server=/starbucks.in/127.0.0.1#5335 +ipset=/starbucks.in/gfwlist +server=/koalaporn.com/127.0.0.1#5335 +ipset=/koalaporn.com/gfwlist +server=/pornofiles.ru/127.0.0.1#5335 +ipset=/pornofiles.ru/gfwlist +server=/zoomobileporn.com/127.0.0.1#5335 +ipset=/zoomobileporn.com/gfwlist +server=/paypalcreditcard.com/127.0.0.1#5335 +ipset=/paypalcreditcard.com/gfwlist +server=/starbucks.hu/127.0.0.1#5335 +ipset=/starbucks.hu/gfwlist +server=/faceboik.com/127.0.0.1#5335 +ipset=/faceboik.com/gfwlist +server=/bestbuyphotoworkshoptours.com/127.0.0.1#5335 +ipset=/bestbuyphotoworkshoptours.com/gfwlist +server=/starbucks.com.uy/127.0.0.1#5335 +ipset=/starbucks.com.uy/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=/starbucks.com.kh/127.0.0.1#5335 +ipset=/starbucks.com.kh/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=/durex.fr/127.0.0.1#5335 +ipset=/durex.fr/gfwlist +server=/starbucks.com/127.0.0.1#5335 +ipset=/starbucks.com/gfwlist +server=/hxdoll.com/127.0.0.1#5335 +ipset=/hxdoll.com/gfwlist +server=/starbucks.co.jp/127.0.0.1#5335 +ipset=/starbucks.co.jp/gfwlist +server=/starbucks.bg/127.0.0.1#5335 +ipset=/starbucks.bg/gfwlist +server=/starbucks.be/127.0.0.1#5335 +ipset=/starbucks.be/gfwlist +server=/starbucks.at/127.0.0.1#5335 +ipset=/starbucks.at/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=/starbucks-stars.com/127.0.0.1#5335 +ipset=/starbucks-stars.com/gfwlist +server=/sbuxcard.com/127.0.0.1#5335 +ipset=/sbuxcard.com/gfwlist +server=/hpto.net/127.0.0.1#5335 +ipset=/hpto.net/gfwlist +server=/sbux.com.my/127.0.0.1#5335 +ipset=/sbux.com.my/gfwlist +server=/hulu.tv/127.0.0.1#5335 +ipset=/hulu.tv/gfwlist +server=/scenesource.me/127.0.0.1#5335 +ipset=/scenesource.me/gfwlist +server=/thinkofliving.com/127.0.0.1#5335 +ipset=/thinkofliving.com/gfwlist +server=/javheroine.com/127.0.0.1#5335 +ipset=/javheroine.com/gfwlist +server=/realtor.com/127.0.0.1#5335 +ipset=/realtor.com/gfwlist +server=/caribbeancompr.com/127.0.0.1#5335 +ipset=/caribbeancompr.com/gfwlist +server=/porn-portal.com/127.0.0.1#5335 +ipset=/porn-portal.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=/adblockplus.org/127.0.0.1#5335 +ipset=/adblockplus.org/gfwlist +server=/rea.global/127.0.0.1#5335 +ipset=/rea.global/gfwlist +server=/rea-group.com/127.0.0.1#5335 +ipset=/rea-group.com/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=/8008206616.com/127.0.0.1#5335 +ipset=/8008206616.com/gfwlist +server=/adbkm.com/127.0.0.1#5335 +ipset=/adbkm.com/gfwlist +server=/proptiger.com/127.0.0.1#5335 +ipset=/proptiger.com/gfwlist +server=/myfun.com/127.0.0.1#5335 +ipset=/myfun.com/gfwlist +server=/move.com/127.0.0.1#5335 +ipset=/move.com/gfwlist +server=/technews.tw/127.0.0.1#5335 +ipset=/technews.tw/gfwlist +server=/makaan.com/127.0.0.1#5335 +ipset=/makaan.com/gfwlist +server=/iproperty.com.my/127.0.0.1#5335 +ipset=/iproperty.com.my/gfwlist +server=/housingcdn.com/127.0.0.1#5335 +ipset=/housingcdn.com/gfwlist +server=/hometrack.com.au/127.0.0.1#5335 +ipset=/hometrack.com.au/gfwlist +server=/bmwi.jp/127.0.0.1#5335 +ipset=/bmwi.jp/gfwlist +server=/facesounds.com/127.0.0.1#5335 +ipset=/facesounds.com/gfwlist +server=/azathabar.com/127.0.0.1#5335 +ipset=/azathabar.com/gfwlist +server=/playboyplus.com/127.0.0.1#5335 +ipset=/playboyplus.com/gfwlist +server=/123videos.tv/127.0.0.1#5335 +ipset=/123videos.tv/gfwlist +server=/shemalemodelstube.com/127.0.0.1#5335 +ipset=/shemalemodelstube.com/gfwlist +server=/reckittbenckiser.net/127.0.0.1#5335 +ipset=/reckittbenckiser.net/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=/rbplc.com/127.0.0.1#5335 +ipset=/rbplc.com/gfwlist +server=/rbgrads.com/127.0.0.1#5335 +ipset=/rbgrads.com/gfwlist +server=/pplusstatic.com/127.0.0.1#5335 +ipset=/pplusstatic.com/gfwlist +server=/rb.com/127.0.0.1#5335 +ipset=/rb.com/gfwlist +server=/porntry.com/127.0.0.1#5335 +ipset=/porntry.com/gfwlist +server=/offerairjordanlebron.com/127.0.0.1#5335 +ipset=/offerairjordanlebron.com/gfwlist +server=/gettr.com/127.0.0.1#5335 +ipset=/gettr.com/gfwlist +server=/avxhm.se/127.0.0.1#5335 +ipset=/avxhm.se/gfwlist +server=/woolite.us/127.0.0.1#5335 +ipset=/woolite.us/gfwlist +server=/kobe-pastel.com/127.0.0.1#5335 +ipset=/kobe-pastel.com/gfwlist +server=/woolite.pl/127.0.0.1#5335 +ipset=/woolite.pl/gfwlist +server=/woolite.ca/127.0.0.1#5335 +ipset=/woolite.ca/gfwlist +server=/veetcentroamerica.com/127.0.0.1#5335 +ipset=/veetcentroamerica.com/gfwlist +server=/veet.ru/127.0.0.1#5335 +ipset=/veet.ru/gfwlist +server=/visa.gp/127.0.0.1#5335 +ipset=/visa.gp/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=/creativecloud.com/127.0.0.1#5335 +ipset=/creativecloud.com/gfwlist +server=/veet.jp/127.0.0.1#5335 +ipset=/veet.jp/gfwlist +server=/thesffblog.com/127.0.0.1#5335 +ipset=/thesffblog.com/gfwlist +server=/nudevista.com/127.0.0.1#5335 +ipset=/nudevista.com/gfwlist +server=/veet.hu/127.0.0.1#5335 +ipset=/veet.hu/gfwlist +server=/sexbomba.ru/127.0.0.1#5335 +ipset=/sexbomba.ru/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=/myhentaicomics.com/127.0.0.1#5335 +ipset=/myhentaicomics.com/gfwlist +server=/newxxx24.cc/127.0.0.1#5335 +ipset=/newxxx24.cc/gfwlist +server=/veet.dk/127.0.0.1#5335 +ipset=/veet.dk/gfwlist +server=/veet.com.tr/127.0.0.1#5335 +ipset=/veet.com.tr/gfwlist +server=/veet.com.ph/127.0.0.1#5335 +ipset=/veet.com.ph/gfwlist +server=/beatsfactoryoutles.com/127.0.0.1#5335 +ipset=/beatsfactoryoutles.com/gfwlist +server=/veet.com.hk/127.0.0.1#5335 +ipset=/veet.com.hk/gfwlist +server=/veet.com.co/127.0.0.1#5335 +ipset=/veet.com.co/gfwlist +server=/veet.com.br/127.0.0.1#5335 +ipset=/veet.com.br/gfwlist +server=/swisssigngroup.com/127.0.0.1#5335 +ipset=/swisssigngroup.com/gfwlist +server=/veet.com.bd/127.0.0.1#5335 +ipset=/veet.com.bd/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=/veet.com.au/127.0.0.1#5335 +ipset=/veet.com.au/gfwlist +server=/discordapp.com/127.0.0.1#5335 +ipset=/discordapp.com/gfwlist +server=/veet.co.za/127.0.0.1#5335 +ipset=/veet.co.za/gfwlist +server=/18porncomic.com/127.0.0.1#5335 +ipset=/18porncomic.com/gfwlist +server=/mastercard.com.ve/127.0.0.1#5335 +ipset=/mastercard.com.ve/gfwlist +server=/veet.co.id/127.0.0.1#5335 +ipset=/veet.co.id/gfwlist +server=/veet.ch/127.0.0.1#5335 +ipset=/veet.ch/gfwlist +server=/porndeals.com/127.0.0.1#5335 +ipset=/porndeals.com/gfwlist +server=/icloudo.de/127.0.0.1#5335 +ipset=/icloudo.de/gfwlist +server=/phncdn.com/127.0.0.1#5335 +ipset=/phncdn.com/gfwlist +server=/tubepornup.com/127.0.0.1#5335 +ipset=/tubepornup.com/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=/renovacionxboxlive.com/127.0.0.1#5335 +ipset=/renovacionxboxlive.com/gfwlist +server=/mastercardbusinessnetwork.com/127.0.0.1#5335 +ipset=/mastercardbusinessnetwork.com/gfwlist +server=/vanish.hu/127.0.0.1#5335 +ipset=/vanish.hu/gfwlist +server=/nudefiles.net/127.0.0.1#5335 +ipset=/nudefiles.net/gfwlist +server=/abematv.akamaized.net/127.0.0.1#5335 +ipset=/abematv.akamaized.net/gfwlist +server=/milfthreesomes.com/127.0.0.1#5335 +ipset=/milfthreesomes.com/gfwlist +server=/vanish.fi/127.0.0.1#5335 +ipset=/vanish.fi/gfwlist +server=/xxxgames.biz/127.0.0.1#5335 +ipset=/xxxgames.biz/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=/nikeproduct.com/127.0.0.1#5335 +ipset=/nikeproduct.com/gfwlist +server=/vanish.com.my/127.0.0.1#5335 +ipset=/vanish.com.my/gfwlist +server=/royalcams.com/127.0.0.1#5335 +ipset=/royalcams.com/gfwlist +server=/niceanimegames.com/127.0.0.1#5335 +ipset=/niceanimegames.com/gfwlist +server=/epochtimestr.com/127.0.0.1#5335 +ipset=/epochtimestr.com/gfwlist +server=/seaporn.org/127.0.0.1#5335 +ipset=/seaporn.org/gfwlist +server=/mail.ru/127.0.0.1#5335 +ipset=/mail.ru/gfwlist +server=/hayabusa.media/127.0.0.1#5335 +ipset=/hayabusa.media/gfwlist +server=/mucinex.ca/127.0.0.1#5335 +ipset=/mucinex.ca/gfwlist +server=/vanish.co.nz/127.0.0.1#5335 +ipset=/vanish.co.nz/gfwlist +server=/game-platform.net/127.0.0.1#5335 +ipset=/game-platform.net/gfwlist +server=/ciscopartnermarketing.com/127.0.0.1#5335 +ipset=/ciscopartnermarketing.com/gfwlist +server=/vanish.co.il/127.0.0.1#5335 +ipset=/vanish.co.il/gfwlist +server=/sexei.net/127.0.0.1#5335 +ipset=/sexei.net/gfwlist +server=/area120.com/127.0.0.1#5335 +ipset=/area120.com/gfwlist +server=/vanish.cl/127.0.0.1#5335 +ipset=/vanish.cl/gfwlist +server=/verisign.co.uk/127.0.0.1#5335 +ipset=/verisign.co.uk/gfwlist +server=/static-hamivideo.cdn.hinet.net/127.0.0.1#5335 +ipset=/static-hamivideo.cdn.hinet.net/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=/vanish.be/127.0.0.1#5335 +ipset=/vanish.be/gfwlist +server=/pornerbros.com/127.0.0.1#5335 +ipset=/pornerbros.com/gfwlist +server=/spraynwash.com/127.0.0.1#5335 +ipset=/spraynwash.com/gfwlist +server=/google.iq/127.0.0.1#5335 +ipset=/google.iq/gfwlist +server=/strepsils.us/127.0.0.1#5335 +ipset=/strepsils.us/gfwlist +server=/xn--hhr917d3fecva.xyz/127.0.0.1#5335 +ipset=/xn--hhr917d3fecva.xyz/gfwlist +server=/ntdca.com/127.0.0.1#5335 +ipset=/ntdca.com/gfwlist +server=/grabpussy.com/127.0.0.1#5335 +ipset=/grabpussy.com/gfwlist +server=/strepsils.ro/127.0.0.1#5335 +ipset=/strepsils.ro/gfwlist +server=/strepsils.pl/127.0.0.1#5335 +ipset=/strepsils.pl/gfwlist +server=/strepsils.net/127.0.0.1#5335 +ipset=/strepsils.net/gfwlist +server=/sextubehub.com/127.0.0.1#5335 +ipset=/sextubehub.com/gfwlist +server=/strepsils.ie/127.0.0.1#5335 +ipset=/strepsils.ie/gfwlist +server=/strepsils.hu/127.0.0.1#5335 +ipset=/strepsils.hu/gfwlist +server=/javfv.com/127.0.0.1#5335 +ipset=/javfv.com/gfwlist +server=/vhx.tv/127.0.0.1#5335 +ipset=/vhx.tv/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=/strepsils.com.au/127.0.0.1#5335 +ipset=/strepsils.com.au/gfwlist +server=/bustynudebabes.com/127.0.0.1#5335 +ipset=/bustynudebabes.com/gfwlist +server=/mastercard.com.bh/127.0.0.1#5335 +ipset=/mastercard.com.bh/gfwlist +server=/getfappy.com/127.0.0.1#5335 +ipset=/getfappy.com/gfwlist +server=/strepsils.com.br/127.0.0.1#5335 +ipset=/strepsils.com.br/gfwlist +server=/strepsils.co.za/127.0.0.1#5335 +ipset=/strepsils.co.za/gfwlist +server=/cdninstagram.com/127.0.0.1#5335 +ipset=/cdninstagram.com/gfwlist +server=/strepsils.co.nz/127.0.0.1#5335 +ipset=/strepsils.co.nz/gfwlist +server=/thtmod1.com/127.0.0.1#5335 +ipset=/thtmod1.com/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=/beatsdresolo2013.com/127.0.0.1#5335 +ipset=/beatsdresolo2013.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=/nurofensk-prod-env.eu-west-1.elasticbeanstalk.com/127.0.0.1#5335 +ipset=/nurofensk-prod-env.eu-west-1.elasticbeanstalk.com/gfwlist +server=/nurofen.sk/127.0.0.1#5335 +ipset=/nurofen.sk/gfwlist +server=/nurofen.ro/127.0.0.1#5335 +ipset=/nurofen.ro/gfwlist +server=/cmhalq.com/127.0.0.1#5335 +ipset=/cmhalq.com/gfwlist +server=/nurofen.pt/127.0.0.1#5335 +ipset=/nurofen.pt/gfwlist +server=/icloud.jp/127.0.0.1#5335 +ipset=/icloud.jp/gfwlist +server=/nurofen.pl/127.0.0.1#5335 +ipset=/nurofen.pl/gfwlist +server=/desktopmovie.com/127.0.0.1#5335 +ipset=/desktopmovie.com/gfwlist +server=/bridgestone.co.cr/127.0.0.1#5335 +ipset=/bridgestone.co.cr/gfwlist +server=/hentaiasmr.moe/127.0.0.1#5335 +ipset=/hentaiasmr.moe/gfwlist +server=/nurofen.co.za/127.0.0.1#5335 +ipset=/nurofen.co.za/gfwlist +server=/beatbydrekopen.com/127.0.0.1#5335 +ipset=/beatbydrekopen.com/gfwlist +server=/puresexmovies.com/127.0.0.1#5335 +ipset=/puresexmovies.com/gfwlist +server=/dldlinks.com/127.0.0.1#5335 +ipset=/dldlinks.com/gfwlist +server=/sorcerersarena.com/127.0.0.1#5335 +ipset=/sorcerersarena.com/gfwlist +server=/nurofen.fr/127.0.0.1#5335 +ipset=/nurofen.fr/gfwlist +server=/sandisk.sg/127.0.0.1#5335 +ipset=/sandisk.sg/gfwlist +server=/nurofen.com.sg/127.0.0.1#5335 +ipset=/nurofen.com.sg/gfwlist +server=/w3schools.com/127.0.0.1#5335 +ipset=/w3schools.com/gfwlist +server=/nurofen.com.au/127.0.0.1#5335 +ipset=/nurofen.com.au/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=/google.com.mm/127.0.0.1#5335 +ipset=/google.com.mm/gfwlist +server=/myfreepaysite.com/127.0.0.1#5335 +ipset=/myfreepaysite.com/gfwlist +server=/nurofen.co.il/127.0.0.1#5335 +ipset=/nurofen.co.il/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=/mucinex.com/127.0.0.1#5335 +ipset=/mucinex.com/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=/schiffvitamins.com/127.0.0.1#5335 +ipset=/schiffvitamins.com/gfwlist +server=/bestialityvideo.us/127.0.0.1#5335 +ipset=/bestialityvideo.us/gfwlist +server=/pifpafarabia.com/127.0.0.1#5335 +ipset=/pifpafarabia.com/gfwlist +server=/toosexyvaginas.com/127.0.0.1#5335 +ipset=/toosexyvaginas.com/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=/playnft.es.ht/127.0.0.1#5335 +ipset=/playnft.es.ht/gfwlist +server=/toppornguide.com/127.0.0.1#5335 +ipset=/toppornguide.com/gfwlist +server=/mortein.com/127.0.0.1#5335 +ipset=/mortein.com/gfwlist +server=/foxsportsracing.com/127.0.0.1#5335 +ipset=/foxsportsracing.com/gfwlist +server=/akasha.world/127.0.0.1#5335 +ipset=/akasha.world/gfwlist +server=/meadjohnson.com.hk/127.0.0.1#5335 +ipset=/meadjohnson.com.hk/gfwlist +server=/intel.gr/127.0.0.1#5335 +ipset=/intel.gr/gfwlist +server=/meadjohnson.com/127.0.0.1#5335 +ipset=/meadjohnson.com/gfwlist +server=/sandisk.com.au/127.0.0.1#5335 +ipset=/sandisk.com.au/gfwlist +server=/lysol.ca/127.0.0.1#5335 +ipset=/lysol.ca/gfwlist +server=/finishinfo.fi/127.0.0.1#5335 +ipset=/finishinfo.fi/gfwlist +server=/finishinfo.com.ar/127.0.0.1#5335 +ipset=/finishinfo.com.ar/gfwlist +server=/mini.com.co/127.0.0.1#5335 +ipset=/mini.com.co/gfwlist +server=/registry.google/127.0.0.1#5335 +ipset=/registry.google/gfwlist +server=/finishdishwashing.com/127.0.0.1#5335 +ipset=/finishdishwashing.com/gfwlist +server=/whengirlsplay.com/127.0.0.1#5335 +ipset=/whengirlsplay.com/gfwlist +server=/finishdishwashing.ca/127.0.0.1#5335 +ipset=/finishdishwashing.ca/gfwlist +server=/finisharabia.com/127.0.0.1#5335 +ipset=/finisharabia.com/gfwlist +server=/myfoxboston.com/127.0.0.1#5335 +ipset=/myfoxboston.com/gfwlist +server=/finish.sk/127.0.0.1#5335 +ipset=/finish.sk/gfwlist +server=/japanfist.org/127.0.0.1#5335 +ipset=/japanfist.org/gfwlist +server=/finish.si/127.0.0.1#5335 +ipset=/finish.si/gfwlist +server=/perverse.sex/127.0.0.1#5335 +ipset=/perverse.sex/gfwlist +server=/youtube.com.gr/127.0.0.1#5335 +ipset=/youtube.com.gr/gfwlist +server=/infinitetube.com/127.0.0.1#5335 +ipset=/infinitetube.com/gfwlist +server=/bridgestonegolf.com/127.0.0.1#5335 +ipset=/bridgestonegolf.com/gfwlist +server=/finish.pl/127.0.0.1#5335 +ipset=/finish.pl/gfwlist +server=/finish.hu/127.0.0.1#5335 +ipset=/finish.hu/gfwlist +server=/prostores.com/127.0.0.1#5335 +ipset=/prostores.com/gfwlist +server=/finish.gr/127.0.0.1#5335 +ipset=/finish.gr/gfwlist +server=/grannylovesyoungcock.com/127.0.0.1#5335 +ipset=/grannylovesyoungcock.com/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=/finish.de/127.0.0.1#5335 +ipset=/finish.de/gfwlist +server=/hqporner.com/127.0.0.1#5335 +ipset=/hqporner.com/gfwlist +server=/google.co.vi/127.0.0.1#5335 +ipset=/google.co.vi/gfwlist +server=/finish.com.hr/127.0.0.1#5335 +ipset=/finish.com.hr/gfwlist +server=/yahoo.com.tr/127.0.0.1#5335 +ipset=/yahoo.com.tr/gfwlist +server=/finish.co.nz/127.0.0.1#5335 +ipset=/finish.co.nz/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=/buyminibeatbox.com/127.0.0.1#5335 +ipset=/buyminibeatbox.com/gfwlist +server=/pornobrasil.com/127.0.0.1#5335 +ipset=/pornobrasil.com/gfwlist +server=/nutramigen.pl/127.0.0.1#5335 +ipset=/nutramigen.pl/gfwlist +server=/pornoecuadorxxx.com/127.0.0.1#5335 +ipset=/pornoecuadorxxx.com/gfwlist +server=/enspireformula.com/127.0.0.1#5335 +ipset=/enspireformula.com/gfwlist +server=/huobiasia.vip/127.0.0.1#5335 +ipset=/huobiasia.vip/gfwlist +server=/enfamil.pt/127.0.0.1#5335 +ipset=/enfamil.pt/gfwlist +server=/enfamil.ca/127.0.0.1#5335 +ipset=/enfamil.ca/gfwlist +server=/enfamama.com.ph/127.0.0.1#5335 +ipset=/enfamama.com.ph/gfwlist +server=/facebooll.com/127.0.0.1#5335 +ipset=/facebooll.com/gfwlist +server=/thomsonreuters.ca/127.0.0.1#5335 +ipset=/thomsonreuters.ca/gfwlist +server=/enfagrow.com.sg/127.0.0.1#5335 +ipset=/enfagrow.com.sg/gfwlist +server=/enfagrow.com.my/127.0.0.1#5335 +ipset=/enfagrow.com.my/gfwlist +server=/applestore.net.gr/127.0.0.1#5335 +ipset=/applestore.net.gr/gfwlist +server=/enfagrow.co.in/127.0.0.1#5335 +ipset=/enfagrow.co.in/gfwlist +server=/enfabebe3.com.ar/127.0.0.1#5335 +ipset=/enfabebe3.com.ar/gfwlist +server=/mini.at/127.0.0.1#5335 +ipset=/mini.at/gfwlist +server=/sexhd.pics/127.0.0.1#5335 +ipset=/sexhd.pics/gfwlist +server=/hentaiplay.net/127.0.0.1#5335 +ipset=/hentaiplay.net/gfwlist +server=/enfabebe.com.ve/127.0.0.1#5335 +ipset=/enfabebe.com.ve/gfwlist +server=/enfabebe.com.pe/127.0.0.1#5335 +ipset=/enfabebe.com.pe/gfwlist +server=/enfabebe.com.ec/127.0.0.1#5335 +ipset=/enfabebe.com.ec/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=/enfababy.com/127.0.0.1#5335 +ipset=/enfababy.com/gfwlist +server=/enfaaplus.com/127.0.0.1#5335 +ipset=/enfaaplus.com/gfwlist +server=/xxxn.tv/127.0.0.1#5335 +ipset=/xxxn.tv/gfwlist +server=/enfa.co.id/127.0.0.1#5335 +ipset=/enfa.co.id/gfwlist +server=/zoos.gold/127.0.0.1#5335 +ipset=/zoos.gold/gfwlist +server=/bannedbook.org/127.0.0.1#5335 +ipset=/bannedbook.org/gfwlist +server=/bebepremium3.com.bo/127.0.0.1#5335 +ipset=/bebepremium3.com.bo/gfwlist +server=/mrpinks.com/127.0.0.1#5335 +ipset=/mrpinks.com/gfwlist +server=/drdreheadphonebeats.com/127.0.0.1#5335 +ipset=/drdreheadphonebeats.com/gfwlist +server=/trydurex.tv/127.0.0.1#5335 +ipset=/trydurex.tv/gfwlist +server=/trydurex.net/127.0.0.1#5335 +ipset=/trydurex.net/gfwlist +server=/hooloo.tv/127.0.0.1#5335 +ipset=/hooloo.tv/gfwlist +server=/playbydurex.com/127.0.0.1#5335 +ipset=/playbydurex.com/gfwlist +server=/durexchina.com/127.0.0.1#5335 +ipset=/durexchina.com/gfwlist +server=/brutalfetish.com/127.0.0.1#5335 +ipset=/brutalfetish.com/gfwlist +server=/microsoft.it/127.0.0.1#5335 +ipset=/microsoft.it/gfwlist +server=/durexcam.com/127.0.0.1#5335 +ipset=/durexcam.com/gfwlist +server=/amateurarchiver.com/127.0.0.1#5335 +ipset=/amateurarchiver.com/gfwlist +server=/hentai4free.net/127.0.0.1#5335 +ipset=/hentai4free.net/gfwlist +server=/gputechconf.com.tw/127.0.0.1#5335 +ipset=/gputechconf.com.tw/gfwlist +server=/dodgersexcartoons.com/127.0.0.1#5335 +ipset=/dodgersexcartoons.com/gfwlist +server=/watchinese.com/127.0.0.1#5335 +ipset=/watchinese.com/gfwlist +server=/quanben.io/127.0.0.1#5335 +ipset=/quanben.io/gfwlist +server=/docs.com/127.0.0.1#5335 +ipset=/docs.com/gfwlist +server=/marketo.net/127.0.0.1#5335 +ipset=/marketo.net/gfwlist +server=/xxx-videos.tv/127.0.0.1#5335 +ipset=/xxx-videos.tv/gfwlist +server=/durex.mx/127.0.0.1#5335 +ipset=/durex.mx/gfwlist +server=/awsedstart.com/127.0.0.1#5335 +ipset=/awsedstart.com/gfwlist +server=/google.bf/127.0.0.1#5335 +ipset=/google.bf/gfwlist +server=/durex.it/127.0.0.1#5335 +ipset=/durex.it/gfwlist +server=/durex.hu/127.0.0.1#5335 +ipset=/durex.hu/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=/amateuranalporn.com/127.0.0.1#5335 +ipset=/amateuranalporn.com/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=/durex.fi/127.0.0.1#5335 +ipset=/durex.fi/gfwlist +server=/durex.ee/127.0.0.1#5335 +ipset=/durex.ee/gfwlist +server=/verisign.biz/127.0.0.1#5335 +ipset=/verisign.biz/gfwlist +server=/durex.de/127.0.0.1#5335 +ipset=/durex.de/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=/fap666.com/127.0.0.1#5335 +ipset=/fap666.com/gfwlist +server=/durex.com.pk/127.0.0.1#5335 +ipset=/durex.com.pk/gfwlist +server=/durex.com.ph/127.0.0.1#5335 +ipset=/durex.com.ph/gfwlist +server=/intel.yt/127.0.0.1#5335 +ipset=/intel.yt/gfwlist +server=/naughtymag.com/127.0.0.1#5335 +ipset=/naughtymag.com/gfwlist +server=/adhelpnews.com/127.0.0.1#5335 +ipset=/adhelpnews.com/gfwlist +server=/durex.com.bd/127.0.0.1#5335 +ipset=/durex.com.bd/gfwlist +server=/bmw.cz/127.0.0.1#5335 +ipset=/bmw.cz/gfwlist +server=/visiontimesjp.com/127.0.0.1#5335 +ipset=/visiontimesjp.com/gfwlist +server=/durex.com.au/127.0.0.1#5335 +ipset=/durex.com.au/gfwlist +server=/disney.com.hk/127.0.0.1#5335 +ipset=/disney.com.hk/gfwlist +server=/2buybeatsbydre.com/127.0.0.1#5335 +ipset=/2buybeatsbydre.com/gfwlist +server=/durex.co.uk/127.0.0.1#5335 +ipset=/durex.co.uk/gfwlist +server=/durex.co.id/127.0.0.1#5335 +ipset=/durex.co.id/gfwlist +server=/aimsciences.org/127.0.0.1#5335 +ipset=/aimsciences.org/gfwlist +server=/popcap.com/127.0.0.1#5335 +ipset=/popcap.com/gfwlist +server=/iphoneclaro.com.br/127.0.0.1#5335 +ipset=/iphoneclaro.com.br/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=/economistgroup.com/127.0.0.1#5335 +ipset=/economistgroup.com/gfwlist +server=/pricelesshonolulu.com/127.0.0.1#5335 +ipset=/pricelesshonolulu.com/gfwlist +server=/durex-shopline.com/127.0.0.1#5335 +ipset=/durex-shopline.com/gfwlist +server=/dotherex.com/127.0.0.1#5335 +ipset=/dotherex.com/gfwlist +server=/dewitwithdurex.com/127.0.0.1#5335 +ipset=/dewitwithdurex.com/gfwlist +server=/bloomberglive.com/127.0.0.1#5335 +ipset=/bloomberglive.com/gfwlist +server=/parler.com/127.0.0.1#5335 +ipset=/parler.com/gfwlist +server=/bmw.cw/127.0.0.1#5335 +ipset=/bmw.cw/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=/dettol.pl/127.0.0.1#5335 +ipset=/dettol.pl/gfwlist +server=/dettol.pk/127.0.0.1#5335 +ipset=/dettol.pk/gfwlist +server=/dettol.nl/127.0.0.1#5335 +ipset=/dettol.nl/gfwlist +server=/dettol.fr/127.0.0.1#5335 +ipset=/dettol.fr/gfwlist +server=/dettol.com.ng/127.0.0.1#5335 +ipset=/dettol.com.ng/gfwlist +server=/dettol.com.eg/127.0.0.1#5335 +ipset=/dettol.com.eg/gfwlist +server=/dettol.com.bd/127.0.0.1#5335 +ipset=/dettol.com.bd/gfwlist +server=/dettol.com/127.0.0.1#5335 +ipset=/dettol.com/gfwlist +server=/dettol.co.uk/127.0.0.1#5335 +ipset=/dettol.co.uk/gfwlist +server=/dettol.co.in/127.0.0.1#5335 +ipset=/dettol.co.in/gfwlist +server=/dettol.at/127.0.0.1#5335 +ipset=/dettol.at/gfwlist +server=/dettol-prize.com/127.0.0.1#5335 +ipset=/dettol-prize.com/gfwlist +server=/paypalbrasil.com/127.0.0.1#5335 +ipset=/paypalbrasil.com/gfwlist +server=/calgon.nl/127.0.0.1#5335 +ipset=/calgon.nl/gfwlist +server=/goldsexvideos.com/127.0.0.1#5335 +ipset=/goldsexvideos.com/gfwlist +server=/calgon.it/127.0.0.1#5335 +ipset=/calgon.it/gfwlist +server=/calgon.ie/127.0.0.1#5335 +ipset=/calgon.ie/gfwlist +server=/cht.com.tw/127.0.0.1#5335 +ipset=/cht.com.tw/gfwlist +server=/calgon.es/127.0.0.1#5335 +ipset=/calgon.es/gfwlist +server=/famousinternetgirlsgalleries.com/127.0.0.1#5335 +ipset=/famousinternetgirlsgalleries.com/gfwlist +server=/calgon.de/127.0.0.1#5335 +ipset=/calgon.de/gfwlist +server=/swiftbank.info/127.0.0.1#5335 +ipset=/swiftbank.info/gfwlist +server=/calgon.com.tr/127.0.0.1#5335 +ipset=/calgon.com.tr/gfwlist +server=/yahoo.com.nf/127.0.0.1#5335 +ipset=/yahoo.com.nf/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=/calgon.com/127.0.0.1#5335 +ipset=/calgon.com/gfwlist +server=/calgon.co.uk/127.0.0.1#5335 +ipset=/calgon.co.uk/gfwlist +server=/calgon.be/127.0.0.1#5335 +ipset=/calgon.be/gfwlist +server=/mobatek.net/127.0.0.1#5335 +ipset=/mobatek.net/gfwlist +server=/nvidia.com.pe/127.0.0.1#5335 +ipset=/nvidia.com.pe/gfwlist +server=/calgon.at/127.0.0.1#5335 +ipset=/calgon.at/gfwlist +server=/iphone-sh.com/127.0.0.1#5335 +ipset=/iphone-sh.com/gfwlist +server=/dotfreesex.com/127.0.0.1#5335 +ipset=/dotfreesex.com/gfwlist +server=/ipadair.com.es/127.0.0.1#5335 +ipset=/ipadair.com.es/gfwlist +server=/airwickarabia.com/127.0.0.1#5335 +ipset=/airwickarabia.com/gfwlist +server=/vfsco.mx/127.0.0.1#5335 +ipset=/vfsco.mx/gfwlist +server=/airwick.tv/127.0.0.1#5335 +ipset=/airwick.tv/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=/airwick.se/127.0.0.1#5335 +ipset=/airwick.se/gfwlist +server=/airwick.ru/127.0.0.1#5335 +ipset=/airwick.ru/gfwlist +server=/airwick.no/127.0.0.1#5335 +ipset=/airwick.no/gfwlist +server=/oxfordreference.com/127.0.0.1#5335 +ipset=/oxfordreference.com/gfwlist +server=/hotnudegirls.net/127.0.0.1#5335 +ipset=/hotnudegirls.net/gfwlist +server=/applecentar.rs/127.0.0.1#5335 +ipset=/applecentar.rs/gfwlist +server=/google.com.bz/127.0.0.1#5335 +ipset=/google.com.bz/gfwlist +server=/applestore.wang/127.0.0.1#5335 +ipset=/applestore.wang/gfwlist +server=/airwick.net/127.0.0.1#5335 +ipset=/airwick.net/gfwlist +server=/wifesexorgy.com/127.0.0.1#5335 +ipset=/wifesexorgy.com/gfwlist +server=/foxcorporation.com/127.0.0.1#5335 +ipset=/foxcorporation.com/gfwlist +server=/volvopenta.nl/127.0.0.1#5335 +ipset=/volvopenta.nl/gfwlist +server=/microsoft-give.com/127.0.0.1#5335 +ipset=/microsoft-give.com/gfwlist +server=/apple-online.com/127.0.0.1#5335 +ipset=/apple-online.com/gfwlist +server=/airwick.ie/127.0.0.1#5335 +ipset=/airwick.ie/gfwlist +server=/cheaperbeatsbydresale.com/127.0.0.1#5335 +ipset=/cheaperbeatsbydresale.com/gfwlist +server=/ethiosex2.wordpress.com/127.0.0.1#5335 +ipset=/ethiosex2.wordpress.com/gfwlist +server=/taknai.com/127.0.0.1#5335 +ipset=/taknai.com/gfwlist +server=/kobbeatssbydredk.com/127.0.0.1#5335 +ipset=/kobbeatssbydredk.com/gfwlist +server=/sony.ie/127.0.0.1#5335 +ipset=/sony.ie/gfwlist +server=/airwick.hr/127.0.0.1#5335 +ipset=/airwick.hr/gfwlist +server=/rarbgmirror.org/127.0.0.1#5335 +ipset=/rarbgmirror.org/gfwlist +server=/airwick.fr/127.0.0.1#5335 +ipset=/airwick.fr/gfwlist +server=/airwick.fi/127.0.0.1#5335 +ipset=/airwick.fi/gfwlist +server=/airwick.dk/127.0.0.1#5335 +ipset=/airwick.dk/gfwlist +server=/redtub3xxx.com/127.0.0.1#5335 +ipset=/redtub3xxx.com/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=/chinesespanking.com/127.0.0.1#5335 +ipset=/chinesespanking.com/gfwlist +server=/airwick.com/127.0.0.1#5335 +ipset=/airwick.com/gfwlist +server=/airwick.co.za/127.0.0.1#5335 +ipset=/airwick.co.za/gfwlist +server=/universalpictures.com/127.0.0.1#5335 +ipset=/universalpictures.com/gfwlist +server=/ktvu.com/127.0.0.1#5335 +ipset=/ktvu.com/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=/xn--qhrx81fxh2a.xn--55qx5d.hk/127.0.0.1#5335 +ipset=/xn--qhrx81fxh2a.xn--55qx5d.hk/gfwlist +server=/stackpath.dev/127.0.0.1#5335 +ipset=/stackpath.dev/gfwlist +server=/cnnmoney.ch/127.0.0.1#5335 +ipset=/cnnmoney.ch/gfwlist +server=/steamusercontent-a.akamaihd.net/127.0.0.1#5335 +ipset=/steamusercontent-a.akamaihd.net/gfwlist +server=/akafms.net/127.0.0.1#5335 +ipset=/akafms.net/gfwlist +server=/amazonliterarypartnership.com/127.0.0.1#5335 +ipset=/amazonliterarypartnership.com/gfwlist +server=/mcdonalds.co.uk/127.0.0.1#5335 +ipset=/mcdonalds.co.uk/gfwlist +server=/golang.net/127.0.0.1#5335 +ipset=/golang.net/gfwlist +server=/mcdelivery.com.sg/127.0.0.1#5335 +ipset=/mcdelivery.com.sg/gfwlist +server=/doubleclick.net/127.0.0.1#5335 +ipset=/doubleclick.net/gfwlist +server=/instagor.com/127.0.0.1#5335 +ipset=/instagor.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=/hkreadingcity.net/127.0.0.1#5335 +ipset=/hkreadingcity.net/gfwlist +server=/xn--r8jwklh769h2mc880dk1o431a.com/127.0.0.1#5335 +ipset=/xn--r8jwklh769h2mc880dk1o431a.com/gfwlist +server=/fffdm.com/127.0.0.1#5335 +ipset=/fffdm.com/gfwlist +server=/fzdm.com/127.0.0.1#5335 +ipset=/fzdm.com/gfwlist +server=/familymart.com.ph/127.0.0.1#5335 +ipset=/familymart.com.ph/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=/family.com.tw/127.0.0.1#5335 +ipset=/family.com.tw/gfwlist +server=/apina.biz/127.0.0.1#5335 +ipset=/apina.biz/gfwlist +server=/ikea.it/127.0.0.1#5335 +ipset=/ikea.it/gfwlist +server=/esp8266.com/127.0.0.1#5335 +ipset=/esp8266.com/gfwlist +server=/nijiyome.jp/127.0.0.1#5335 +ipset=/nijiyome.jp/gfwlist +server=/dlsite.com.tw/127.0.0.1#5335 +ipset=/dlsite.com.tw/gfwlist +server=/dlsite.com/127.0.0.1#5335 +ipset=/dlsite.com/gfwlist +server=/ci-en.net/127.0.0.1#5335 +ipset=/ci-en.net/gfwlist +server=/sankeibiz.jp/127.0.0.1#5335 +ipset=/sankeibiz.jp/gfwlist +server=/114av.xyz/127.0.0.1#5335 +ipset=/114av.xyz/gfwlist +server=/swtor.net/127.0.0.1#5335 +ipset=/swtor.net/gfwlist +server=/lilith-soft.com/127.0.0.1#5335 +ipset=/lilith-soft.com/gfwlist +server=/fackebook.com/127.0.0.1#5335 +ipset=/fackebook.com/gfwlist +server=/itasoftware.com/127.0.0.1#5335 +ipset=/itasoftware.com/gfwlist +server=/avxhm.is/127.0.0.1#5335 +ipset=/avxhm.is/gfwlist +server=/beatsbydrdreus.com/127.0.0.1#5335 +ipset=/beatsbydrdreus.com/gfwlist +server=/paipal.com/127.0.0.1#5335 +ipset=/paipal.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=/toolforge.org/127.0.0.1#5335 +ipset=/toolforge.org/gfwlist +server=/wiktionary.org/127.0.0.1#5335 +ipset=/wiktionary.org/gfwlist +server=/globalsign.com.hk/127.0.0.1#5335 +ipset=/globalsign.com.hk/gfwlist +server=/wikivoyage.org/127.0.0.1#5335 +ipset=/wikivoyage.org/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=/wikiversity.org/127.0.0.1#5335 +ipset=/wikiversity.org/gfwlist +server=/wikisource.org/127.0.0.1#5335 +ipset=/wikisource.org/gfwlist +server=/wikipedia.org/127.0.0.1#5335 +ipset=/wikipedia.org/gfwlist +server=/cinepornogratis.com/127.0.0.1#5335 +ipset=/cinepornogratis.com/gfwlist +server=/sexharlot.com/127.0.0.1#5335 +ipset=/sexharlot.com/gfwlist +server=/wikimedia.org/127.0.0.1#5335 +ipset=/wikimedia.org/gfwlist +server=/wikimediafoundation.org/127.0.0.1#5335 +ipset=/wikimediafoundation.org/gfwlist +server=/truyenkk1.com/127.0.0.1#5335 +ipset=/truyenkk1.com/gfwlist +server=/wikidata.org/127.0.0.1#5335 +ipset=/wikidata.org/gfwlist +server=/wikibooks.org/127.0.0.1#5335 +ipset=/wikibooks.org/gfwlist +server=/ebc.net.tw/127.0.0.1#5335 +ipset=/ebc.net.tw/gfwlist +server=/starbucksrewardsstarland.ca/127.0.0.1#5335 +ipset=/starbucksrewardsstarland.ca/gfwlist +server=/wdfiles.com/127.0.0.1#5335 +ipset=/wdfiles.com/gfwlist +server=/nftstorage.link/127.0.0.1#5335 +ipset=/nftstorage.link/gfwlist +server=/firstgynexam.com/127.0.0.1#5335 +ipset=/firstgynexam.com/gfwlist +server=/twcomix.com/127.0.0.1#5335 +ipset=/twcomix.com/gfwlist +server=/wholesaleonlinemart.com/127.0.0.1#5335 +ipset=/wholesaleonlinemart.com/gfwlist +server=/cortexrpg.com/127.0.0.1#5335 +ipset=/cortexrpg.com/gfwlist +server=/muthead.com/127.0.0.1#5335 +ipset=/muthead.com/gfwlist +server=/beatscheapforsale.com/127.0.0.1#5335 +ipset=/beatscheapforsale.com/gfwlist +server=/hutao.cloud/127.0.0.1#5335 +ipset=/hutao.cloud/gfwlist +server=/disney.hu/127.0.0.1#5335 +ipset=/disney.hu/gfwlist +server=/sweetsext.com/127.0.0.1#5335 +ipset=/sweetsext.com/gfwlist +server=/yabang.org/127.0.0.1#5335 +ipset=/yabang.org/gfwlist +server=/bmw-connecteddrive.es/127.0.0.1#5335 +ipset=/bmw-connecteddrive.es/gfwlist +server=/pornkai.com/127.0.0.1#5335 +ipset=/pornkai.com/gfwlist +server=/zeeentertainment.com/127.0.0.1#5335 +ipset=/zeeentertainment.com/gfwlist +server=/stc-server.com/127.0.0.1#5335 +ipset=/stc-server.com/gfwlist +server=/paper-attachments.s3.amazonaws.com/127.0.0.1#5335 +ipset=/paper-attachments.s3.amazonaws.com/gfwlist +server=/mailonsunday.ie/127.0.0.1#5335 +ipset=/mailonsunday.ie/gfwlist +server=/ssrpass.pw/127.0.0.1#5335 +ipset=/ssrpass.pw/gfwlist +server=/bmwmyanmar.com/127.0.0.1#5335 +ipset=/bmwmyanmar.com/gfwlist +server=/ssplive.pw/127.0.0.1#5335 +ipset=/ssplive.pw/gfwlist +server=/visa.lt/127.0.0.1#5335 +ipset=/visa.lt/gfwlist +server=/sony.com.gt/127.0.0.1#5335 +ipset=/sony.com.gt/gfwlist +server=/maying.co/127.0.0.1#5335 +ipset=/maying.co/gfwlist +server=/vaultify.net/127.0.0.1#5335 +ipset=/vaultify.net/gfwlist +server=/intel.wf/127.0.0.1#5335 +ipset=/intel.wf/gfwlist +server=/gfw.press/127.0.0.1#5335 +ipset=/gfw.press/gfwlist +server=/geph.io/127.0.0.1#5335 +ipset=/geph.io/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=/cloudn.me/127.0.0.1#5335 +ipset=/cloudn.me/gfwlist +server=/pinflix.com/127.0.0.1#5335 +ipset=/pinflix.com/gfwlist +server=/ark.to/127.0.0.1#5335 +ipset=/ark.to/gfwlist +server=/amytele.com/127.0.0.1#5335 +ipset=/amytele.com/gfwlist +server=/aaex.uk/127.0.0.1#5335 +ipset=/aaex.uk/gfwlist +server=/slack.com/127.0.0.1#5335 +ipset=/slack.com/gfwlist +server=/xcg123.com/127.0.0.1#5335 +ipset=/xcg123.com/gfwlist +server=/vilavpn7.xyz/127.0.0.1#5335 +ipset=/vilavpn7.xyz/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=/msfteducation.ca/127.0.0.1#5335 +ipset=/msfteducation.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=/vilavpn1.xyz/127.0.0.1#5335 +ipset=/vilavpn1.xyz/gfwlist +server=/watchdisneyfe.com/127.0.0.1#5335 +ipset=/watchdisneyfe.com/gfwlist +server=/surflite.net/127.0.0.1#5335 +ipset=/surflite.net/gfwlist +server=/molesports.com/127.0.0.1#5335 +ipset=/molesports.com/gfwlist +server=/visa.com.ag/127.0.0.1#5335 +ipset=/visa.com.ag/gfwlist +server=/geek-squad.org/127.0.0.1#5335 +ipset=/geek-squad.org/gfwlist +server=/swisstsa.ch/127.0.0.1#5335 +ipset=/swisstsa.ch/gfwlist +server=/crunchyroll.com/127.0.0.1#5335 +ipset=/crunchyroll.com/gfwlist +server=/nexitcore.com/127.0.0.1#5335 +ipset=/nexitcore.com/gfwlist +server=/sexfilm.al.ru/127.0.0.1#5335 +ipset=/sexfilm.al.ru/gfwlist +server=/nexitallysafe.com/127.0.0.1#5335 +ipset=/nexitallysafe.com/gfwlist +server=/intel.mn/127.0.0.1#5335 +ipset=/intel.mn/gfwlist +server=/gog-statics.com/127.0.0.1#5335 +ipset=/gog-statics.com/gfwlist +server=/n3ro.net/127.0.0.1#5335 +ipset=/n3ro.net/gfwlist +server=/n3ro.lol/127.0.0.1#5335 +ipset=/n3ro.lol/gfwlist +server=/justmysocks2.net/127.0.0.1#5335 +ipset=/justmysocks2.net/gfwlist +server=/justmysocks.net/127.0.0.1#5335 +ipset=/justmysocks.net/gfwlist +server=/hitun.io/127.0.0.1#5335 +ipset=/hitun.io/gfwlist +server=/duyaossr.com/127.0.0.1#5335 +ipset=/duyaossr.com/gfwlist +server=/dleris.best/127.0.0.1#5335 +ipset=/dleris.best/gfwlist +server=/dlercloud.me/127.0.0.1#5335 +ipset=/dlercloud.me/gfwlist +server=/gyakusimei.com/127.0.0.1#5335 +ipset=/gyakusimei.com/gfwlist +server=/cortanaskills.com/127.0.0.1#5335 +ipset=/cortanaskills.com/gfwlist +server=/youtube.com.sa/127.0.0.1#5335 +ipset=/youtube.com.sa/gfwlist +server=/cylink.pro/127.0.0.1#5335 +ipset=/cylink.pro/gfwlist +server=/geeksquad.cc/127.0.0.1#5335 +ipset=/geeksquad.cc/gfwlist +server=/bmw-motorrad-abudhabi.com/127.0.0.1#5335 +ipset=/bmw-motorrad-abudhabi.com/gfwlist +server=/ubisoft-orbit-savegames.s3.amazonaws.com/127.0.0.1#5335 +ipset=/ubisoft-orbit-savegames.s3.amazonaws.com/gfwlist +server=/twinkboyfriends.tv/127.0.0.1#5335 +ipset=/twinkboyfriends.tv/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=/springerlink.com/127.0.0.1#5335 +ipset=/springerlink.com/gfwlist +server=/geodesummit.com/127.0.0.1#5335 +ipset=/geodesummit.com/gfwlist +server=/rarbgunblock.com/127.0.0.1#5335 +ipset=/rarbgunblock.com/gfwlist +server=/youtubei.googleapis.com/127.0.0.1#5335 +ipset=/youtubei.googleapis.com/gfwlist +server=/escapestudios.co.uk/127.0.0.1#5335 +ipset=/escapestudios.co.uk/gfwlist +server=/yimg.com/127.0.0.1#5335 +ipset=/yimg.com/gfwlist +server=/rarbgproxy.org/127.0.0.1#5335 +ipset=/rarbgproxy.org/gfwlist +server=/rarbgaccessed.org/127.0.0.1#5335 +ipset=/rarbgaccessed.org/gfwlist +server=/proxyrarbg.org/127.0.0.1#5335 +ipset=/proxyrarbg.org/gfwlist +server=/mamacitaz.com/127.0.0.1#5335 +ipset=/mamacitaz.com/gfwlist +server=/shapelcounset.xyz/127.0.0.1#5335 +ipset=/shapelcounset.xyz/gfwlist +server=/xdporner.com/127.0.0.1#5335 +ipset=/xdporner.com/gfwlist +server=/pornhub00.com/127.0.0.1#5335 +ipset=/pornhub00.com/gfwlist +server=/xjavporn.com/127.0.0.1#5335 +ipset=/xjavporn.com/gfwlist +server=/rarbg.to/127.0.0.1#5335 +ipset=/rarbg.to/gfwlist +server=/thepiratebay.org/127.0.0.1#5335 +ipset=/thepiratebay.org/gfwlist +server=/gayforit.eu/127.0.0.1#5335 +ipset=/gayforit.eu/gfwlist +server=/pirates-forum.org/127.0.0.1#5335 +ipset=/pirates-forum.org/gfwlist +server=/mastercard.com.ge/127.0.0.1#5335 +ipset=/mastercard.com.ge/gfwlist +server=/demonoid.is/127.0.0.1#5335 +ipset=/demonoid.is/gfwlist +server=/btdig.com/127.0.0.1#5335 +ipset=/btdig.com/gfwlist +server=/porntitan.com/127.0.0.1#5335 +ipset=/porntitan.com/gfwlist +server=/1337x.tw/127.0.0.1#5335 +ipset=/1337x.tw/gfwlist +server=/1337x.st/127.0.0.1#5335 +ipset=/1337x.st/gfwlist +server=/truyenwk.com/127.0.0.1#5335 +ipset=/truyenwk.com/gfwlist +server=/1337x.to/127.0.0.1#5335 +ipset=/1337x.to/gfwlist +server=/porkbun.com/127.0.0.1#5335 +ipset=/porkbun.com/gfwlist +server=/volvotrucks.kz/127.0.0.1#5335 +ipset=/volvotrucks.kz/gfwlist +server=/yastatic.net/127.0.0.1#5335 +ipset=/yastatic.net/gfwlist +server=/fcebook.com/127.0.0.1#5335 +ipset=/fcebook.com/gfwlist +server=/ebayaustralia.com/127.0.0.1#5335 +ipset=/ebayaustralia.com/gfwlist +server=/binanceapi.com/127.0.0.1#5335 +ipset=/binanceapi.com/gfwlist +server=/yandex.tm/127.0.0.1#5335 +ipset=/yandex.tm/gfwlist +server=/yandex.net/127.0.0.1#5335 +ipset=/yandex.net/gfwlist +server=/yandex.md/127.0.0.1#5335 +ipset=/yandex.md/gfwlist +server=/cnnikebrand.com/127.0.0.1#5335 +ipset=/cnnikebrand.com/gfwlist +server=/porndish.com/127.0.0.1#5335 +ipset=/porndish.com/gfwlist +server=/yandex.kg/127.0.0.1#5335 +ipset=/yandex.kg/gfwlist +server=/yandex.com.tr/127.0.0.1#5335 +ipset=/yandex.com.tr/gfwlist +server=/yandex.com.ru/127.0.0.1#5335 +ipset=/yandex.com.ru/gfwlist +server=/looporn.com/127.0.0.1#5335 +ipset=/looporn.com/gfwlist +server=/yandex.com/127.0.0.1#5335 +ipset=/yandex.com/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=/alicloud.com/127.0.0.1#5335 +ipset=/alicloud.com/gfwlist +server=/elephantsdream.org/127.0.0.1#5335 +ipset=/elephantsdream.org/gfwlist +server=/yimg.jp/127.0.0.1#5335 +ipset=/yimg.jp/gfwlist +server=/rarbgprx.org/127.0.0.1#5335 +ipset=/rarbgprx.org/gfwlist +server=/yho.com/127.0.0.1#5335 +ipset=/yho.com/gfwlist +server=/yahoomusic.com/127.0.0.1#5335 +ipset=/yahoomusic.com/gfwlist +server=/xvxx.stream/127.0.0.1#5335 +ipset=/xvxx.stream/gfwlist +server=/yahoohealth.com/127.0.0.1#5335 +ipset=/yahoohealth.com/gfwlist +server=/kavkazr.com/127.0.0.1#5335 +ipset=/kavkazr.com/gfwlist +server=/nikeitaly.com/127.0.0.1#5335 +ipset=/nikeitaly.com/gfwlist +server=/yahooapis.com/127.0.0.1#5335 +ipset=/yahooapis.com/gfwlist +server=/techcrunch.com/127.0.0.1#5335 +ipset=/techcrunch.com/gfwlist +server=/yasarang.net/127.0.0.1#5335 +ipset=/yasarang.net/gfwlist +server=/myguide.hk/127.0.0.1#5335 +ipset=/myguide.hk/gfwlist +server=/yahoo.ws/127.0.0.1#5335 +ipset=/yahoo.ws/gfwlist +server=/yahoo.tn/127.0.0.1#5335 +ipset=/yahoo.tn/gfwlist +server=/yahoo.tm/127.0.0.1#5335 +ipset=/yahoo.tm/gfwlist +server=/yahoo.tk/127.0.0.1#5335 +ipset=/yahoo.tk/gfwlist +server=/mastercardcenter.org/127.0.0.1#5335 +ipset=/mastercardcenter.org/gfwlist +server=/yahoo.sr/127.0.0.1#5335 +ipset=/yahoo.sr/gfwlist +server=/pornobox.net/127.0.0.1#5335 +ipset=/pornobox.net/gfwlist +server=/finish.co.uk/127.0.0.1#5335 +ipset=/finish.co.uk/gfwlist +server=/yahoo.sk/127.0.0.1#5335 +ipset=/yahoo.sk/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=/yahoo.ru/127.0.0.1#5335 +ipset=/yahoo.ru/gfwlist +server=/ggdiao.com/127.0.0.1#5335 +ipset=/ggdiao.com/gfwlist +server=/yahoo.pn/127.0.0.1#5335 +ipset=/yahoo.pn/gfwlist +server=/pearsonelt.com/127.0.0.1#5335 +ipset=/pearsonelt.com/gfwlist +server=/yahoo.net/127.0.0.1#5335 +ipset=/yahoo.net/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=/yahoo.mx/127.0.0.1#5335 +ipset=/yahoo.mx/gfwlist +server=/dailymailonline.com/127.0.0.1#5335 +ipset=/dailymailonline.com/gfwlist +server=/llnw.com/127.0.0.1#5335 +ipset=/llnw.com/gfwlist +server=/bmwgroup.com/127.0.0.1#5335 +ipset=/bmwgroup.com/gfwlist +server=/sverigebeatsbydrdre.com/127.0.0.1#5335 +ipset=/sverigebeatsbydrdre.com/gfwlist +server=/elog-ch.com/127.0.0.1#5335 +ipset=/elog-ch.com/gfwlist +server=/igoshopping.net/127.0.0.1#5335 +ipset=/igoshopping.net/gfwlist +server=/cumshotlist.com/127.0.0.1#5335 +ipset=/cumshotlist.com/gfwlist +server=/intel.sr/127.0.0.1#5335 +ipset=/intel.sr/gfwlist +server=/ikea.be/127.0.0.1#5335 +ipset=/ikea.be/gfwlist +server=/yahoo.mk/127.0.0.1#5335 +ipset=/yahoo.mk/gfwlist +server=/yahoo.md/127.0.0.1#5335 +ipset=/yahoo.md/gfwlist +server=/movenetworks.com/127.0.0.1#5335 +ipset=/movenetworks.com/gfwlist +server=/wisekey.com/127.0.0.1#5335 +ipset=/wisekey.com/gfwlist +server=/yahoo.lt/127.0.0.1#5335 +ipset=/yahoo.lt/gfwlist +server=/yahoo.jo/127.0.0.1#5335 +ipset=/yahoo.jo/gfwlist +server=/yahoo.je/127.0.0.1#5335 +ipset=/yahoo.je/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=/dogecoin.com/127.0.0.1#5335 +ipset=/dogecoin.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=/ahegao.online/127.0.0.1#5335 +ipset=/ahegao.online/gfwlist +server=/yahoo.hk/127.0.0.1#5335 +ipset=/yahoo.hk/gfwlist +server=/apexprint.com.hk/127.0.0.1#5335 +ipset=/apexprint.com.hk/gfwlist +server=/yahoo.gy/127.0.0.1#5335 +ipset=/yahoo.gy/gfwlist +server=/snapkit.co/127.0.0.1#5335 +ipset=/snapkit.co/gfwlist +server=/gettyimages.es/127.0.0.1#5335 +ipset=/gettyimages.es/gfwlist +server=/night.livedoor.biz/127.0.0.1#5335 +ipset=/night.livedoor.biz/gfwlist +server=/bmw.com.py/127.0.0.1#5335 +ipset=/bmw.com.py/gfwlist +server=/yahoo.gr/127.0.0.1#5335 +ipset=/yahoo.gr/gfwlist +server=/yahoo.gp/127.0.0.1#5335 +ipset=/yahoo.gp/gfwlist +server=/verizonfios.com/127.0.0.1#5335 +ipset=/verizonfios.com/gfwlist +server=/yahoo.gm/127.0.0.1#5335 +ipset=/yahoo.gm/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=/javmany.com/127.0.0.1#5335 +ipset=/javmany.com/gfwlist +server=/drunkenstepfather.com/127.0.0.1#5335 +ipset=/drunkenstepfather.com/gfwlist +server=/520aa.tv/127.0.0.1#5335 +ipset=/520aa.tv/gfwlist +server=/sony.rs/127.0.0.1#5335 +ipset=/sony.rs/gfwlist +server=/yahoo.gg/127.0.0.1#5335 +ipset=/yahoo.gg/gfwlist +server=/yahoo.fm/127.0.0.1#5335 +ipset=/yahoo.fm/gfwlist +server=/fbredex.com/127.0.0.1#5335 +ipset=/fbredex.com/gfwlist +server=/yahoo.ee/127.0.0.1#5335 +ipset=/yahoo.ee/gfwlist +server=/wballiance.com/127.0.0.1#5335 +ipset=/wballiance.com/gfwlist +server=/nvidia.lu/127.0.0.1#5335 +ipset=/nvidia.lu/gfwlist +server=/urukawa.com/127.0.0.1#5335 +ipset=/urukawa.com/gfwlist +server=/roughman.net/127.0.0.1#5335 +ipset=/roughman.net/gfwlist +server=/wapm.io/127.0.0.1#5335 +ipset=/wapm.io/gfwlist +server=/yahoo.com.vc/127.0.0.1#5335 +ipset=/yahoo.com.vc/gfwlist +server=/zlib.life/127.0.0.1#5335 +ipset=/zlib.life/gfwlist +server=/dreambmw.ca/127.0.0.1#5335 +ipset=/dreambmw.ca/gfwlist +server=/yahoo.com.ua/127.0.0.1#5335 +ipset=/yahoo.com.ua/gfwlist +server=/yahoo.sm/127.0.0.1#5335 +ipset=/yahoo.sm/gfwlist +server=/iw8j.cc/127.0.0.1#5335 +ipset=/iw8j.cc/gfwlist +server=/yahoo.com.sv/127.0.0.1#5335 +ipset=/yahoo.com.sv/gfwlist +server=/chickteases.com/127.0.0.1#5335 +ipset=/chickteases.com/gfwlist +server=/jwplatform.com/127.0.0.1#5335 +ipset=/jwplatform.com/gfwlist +server=/mypornolab.click/127.0.0.1#5335 +ipset=/mypornolab.click/gfwlist +server=/yahoo.com.py/127.0.0.1#5335 +ipset=/yahoo.com.py/gfwlist +server=/yahoo.com.ph/127.0.0.1#5335 +ipset=/yahoo.com.ph/gfwlist +server=/proporn.com/127.0.0.1#5335 +ipset=/proporn.com/gfwlist +server=/yahoo.com.pe/127.0.0.1#5335 +ipset=/yahoo.com.pe/gfwlist +server=/youporn-germany.com/127.0.0.1#5335 +ipset=/youporn-germany.com/gfwlist +server=/kubeapps.com/127.0.0.1#5335 +ipset=/kubeapps.com/gfwlist +server=/jerkdude.com/127.0.0.1#5335 +ipset=/jerkdude.com/gfwlist +server=/yahoo.com.ly/127.0.0.1#5335 +ipset=/yahoo.com.ly/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=/codecademy.com/127.0.0.1#5335 +ipset=/codecademy.com/gfwlist +server=/squareup.com/127.0.0.1#5335 +ipset=/squareup.com/gfwlist +server=/homedepot.com/127.0.0.1#5335 +ipset=/homedepot.com/gfwlist +server=/visa.com.tt/127.0.0.1#5335 +ipset=/visa.com.tt/gfwlist +server=/dragonagemovie.com/127.0.0.1#5335 +ipset=/dragonagemovie.com/gfwlist +server=/casquemonsterbeats.com/127.0.0.1#5335 +ipset=/casquemonsterbeats.com/gfwlist +server=/yahoo.com.eg/127.0.0.1#5335 +ipset=/yahoo.com.eg/gfwlist +server=/officecdn-microsoft-com.akamaized.net/127.0.0.1#5335 +ipset=/officecdn-microsoft-com.akamaized.net/gfwlist +server=/yahoo.com.co/127.0.0.1#5335 +ipset=/yahoo.com.co/gfwlist +server=/yahoo.com.bz/127.0.0.1#5335 +ipset=/yahoo.com.bz/gfwlist +server=/mastercard.inc/127.0.0.1#5335 +ipset=/mastercard.inc/gfwlist +server=/yahoo.com.br/127.0.0.1#5335 +ipset=/yahoo.com.br/gfwlist +server=/sony.com.tw/127.0.0.1#5335 +ipset=/sony.com.tw/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=/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=/porn1videos.com/127.0.0.1#5335 +ipset=/porn1videos.com/gfwlist +server=/yahoo.com.ai/127.0.0.1#5335 +ipset=/yahoo.com.ai/gfwlist +server=/yahoo.com.af/127.0.0.1#5335 +ipset=/yahoo.com.af/gfwlist +server=/bmw-sudan.com/127.0.0.1#5335 +ipset=/bmw-sudan.com/gfwlist +server=/yahoo.co.za/127.0.0.1#5335 +ipset=/yahoo.co.za/gfwlist +server=/cloudburstresearch.com/127.0.0.1#5335 +ipset=/cloudburstresearch.com/gfwlist +server=/offrezdesipods.com/127.0.0.1#5335 +ipset=/offrezdesipods.com/gfwlist +server=/nude-share.com/127.0.0.1#5335 +ipset=/nude-share.com/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.nz/127.0.0.1#5335 +ipset=/yahoo.co.nz/gfwlist +server=/yahoo.co.kr/127.0.0.1#5335 +ipset=/yahoo.co.kr/gfwlist +server=/yahoo.co.cr/127.0.0.1#5335 +ipset=/yahoo.co.cr/gfwlist +server=/yahoo.co.ck/127.0.0.1#5335 +ipset=/yahoo.co.ck/gfwlist +server=/cheapwireless04.com/127.0.0.1#5335 +ipset=/cheapwireless04.com/gfwlist +server=/yahoo.co.ao/127.0.0.1#5335 +ipset=/yahoo.co.ao/gfwlist +server=/yahoo.cg/127.0.0.1#5335 +ipset=/yahoo.cg/gfwlist +server=/lustteens.net/127.0.0.1#5335 +ipset=/lustteens.net/gfwlist +server=/themarvelexperiencetour.com/127.0.0.1#5335 +ipset=/themarvelexperiencetour.com/gfwlist +server=/yahoo.cat/127.0.0.1#5335 +ipset=/yahoo.cat/gfwlist +server=/yahoo.ca/127.0.0.1#5335 +ipset=/yahoo.ca/gfwlist +server=/beatsinsingapore.com/127.0.0.1#5335 +ipset=/beatsinsingapore.com/gfwlist +server=/yahoo.bs/127.0.0.1#5335 +ipset=/yahoo.bs/gfwlist +server=/yahoo.bg/127.0.0.1#5335 +ipset=/yahoo.bg/gfwlist +server=/xxxstreams.watch/127.0.0.1#5335 +ipset=/xxxstreams.watch/gfwlist +server=/trannygem.com/127.0.0.1#5335 +ipset=/trannygem.com/gfwlist +server=/yahoo.ba/127.0.0.1#5335 +ipset=/yahoo.ba/gfwlist +server=/riotpoints.com/127.0.0.1#5335 +ipset=/riotpoints.com/gfwlist +server=/xv1.monster/127.0.0.1#5335 +ipset=/xv1.monster/gfwlist +server=/yahoo.am/127.0.0.1#5335 +ipset=/yahoo.am/gfwlist +server=/lanternal.com/127.0.0.1#5335 +ipset=/lanternal.com/gfwlist +server=/javhd.pro/127.0.0.1#5335 +ipset=/javhd.pro/gfwlist +server=/rapefilms.net/127.0.0.1#5335 +ipset=/rapefilms.net/gfwlist +server=/accountpaypal.org/127.0.0.1#5335 +ipset=/accountpaypal.org/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=/aps.org/127.0.0.1#5335 +ipset=/aps.org/gfwlist +server=/intel.com.ph/127.0.0.1#5335 +ipset=/intel.com.ph/gfwlist +server=/sandisk.nl/127.0.0.1#5335 +ipset=/sandisk.nl/gfwlist +server=/sandisk.hk/127.0.0.1#5335 +ipset=/sandisk.hk/gfwlist +server=/welcometobestbuy.ca/127.0.0.1#5335 +ipset=/welcometobestbuy.ca/gfwlist +server=/mini.co.uk/127.0.0.1#5335 +ipset=/mini.co.uk/gfwlist +server=/sandisk.de/127.0.0.1#5335 +ipset=/sandisk.de/gfwlist +server=/ichineseporn.com/127.0.0.1#5335 +ipset=/ichineseporn.com/gfwlist +server=/sandisk.com.tw/127.0.0.1#5335 +ipset=/sandisk.com.tw/gfwlist +server=/qwapi.com/127.0.0.1#5335 +ipset=/qwapi.com/gfwlist +server=/sandisk.com.tr/127.0.0.1#5335 +ipset=/sandisk.com.tr/gfwlist +server=/attsavings.com/127.0.0.1#5335 +ipset=/attsavings.com/gfwlist +server=/sandisk.com.br/127.0.0.1#5335 +ipset=/sandisk.com.br/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=/vmware-techcenter.com/127.0.0.1#5335 +ipset=/vmware-techcenter.com/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=/g-technology.com/127.0.0.1#5335 +ipset=/g-technology.com/gfwlist +server=/uber.com/127.0.0.1#5335 +ipset=/uber.com/gfwlist +server=/tonec.com/127.0.0.1#5335 +ipset=/tonec.com/gfwlist +server=/registeridm.com/127.0.0.1#5335 +ipset=/registeridm.com/gfwlist +server=/hornyelephant.com/127.0.0.1#5335 +ipset=/hornyelephant.com/gfwlist +server=/hairy-women-pussy.net/127.0.0.1#5335 +ipset=/hairy-women-pussy.net/gfwlist +server=/lewdthots.com/127.0.0.1#5335 +ipset=/lewdthots.com/gfwlist +server=/internetdownloadmanager.com/127.0.0.1#5335 +ipset=/internetdownloadmanager.com/gfwlist +server=/x.com/127.0.0.1#5335 +ipset=/x.com/gfwlist +server=/sonylatvija.com/127.0.0.1#5335 +ipset=/sonylatvija.com/gfwlist +server=/disneymagicmoments.gen.tr/127.0.0.1#5335 +ipset=/disneymagicmoments.gen.tr/gfwlist +server=/sonyglobalsolutions.jp/127.0.0.1#5335 +ipset=/sonyglobalsolutions.jp/gfwlist +server=/monster-beats-by-dr-dre.com/127.0.0.1#5335 +ipset=/monster-beats-by-dr-dre.com/gfwlist +server=/sonydna.com/127.0.0.1#5335 +ipset=/sonydna.com/gfwlist +server=/japanbeast.com/127.0.0.1#5335 +ipset=/japanbeast.com/gfwlist +server=/amazon-lantern.com/127.0.0.1#5335 +ipset=/amazon-lantern.com/gfwlist +server=/sony.se/127.0.0.1#5335 +ipset=/sony.se/gfwlist +server=/cheapbeatsshopbydre.com/127.0.0.1#5335 +ipset=/cheapbeatsshopbydre.com/gfwlist +server=/visakorea.com/127.0.0.1#5335 +ipset=/visakorea.com/gfwlist +server=/sony.nl/127.0.0.1#5335 +ipset=/sony.nl/gfwlist +server=/sony.net/127.0.0.1#5335 +ipset=/sony.net/gfwlist +server=/sony.lv/127.0.0.1#5335 +ipset=/sony.lv/gfwlist +server=/sony.hu/127.0.0.1#5335 +ipset=/sony.hu/gfwlist +server=/sony.hr/127.0.0.1#5335 +ipset=/sony.hr/gfwlist +server=/appexchange.com/127.0.0.1#5335 +ipset=/appexchange.com/gfwlist +server=/sony.gr/127.0.0.1#5335 +ipset=/sony.gr/gfwlist +server=/yaburi.men/127.0.0.1#5335 +ipset=/yaburi.men/gfwlist +server=/cnbeta.com/127.0.0.1#5335 +ipset=/cnbeta.com/gfwlist +server=/sony.fr/127.0.0.1#5335 +ipset=/sony.fr/gfwlist +server=/yibei.org/127.0.0.1#5335 +ipset=/yibei.org/gfwlist +server=/sony.fi/127.0.0.1#5335 +ipset=/sony.fi/gfwlist +server=/realamericanstories.org/127.0.0.1#5335 +ipset=/realamericanstories.org/gfwlist +server=/intel.ro/127.0.0.1#5335 +ipset=/intel.ro/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=/boyfriendtv.com/127.0.0.1#5335 +ipset=/boyfriendtv.com/gfwlist +server=/sony.dk/127.0.0.1#5335 +ipset=/sony.dk/gfwlist +server=/onlygayvideo.com/127.0.0.1#5335 +ipset=/onlygayvideo.com/gfwlist +server=/sony.de/127.0.0.1#5335 +ipset=/sony.de/gfwlist +server=/naked-girls.me/127.0.0.1#5335 +ipset=/naked-girls.me/gfwlist +server=/sony.com.tr/127.0.0.1#5335 +ipset=/sony.com.tr/gfwlist +server=/adidas.ch/127.0.0.1#5335 +ipset=/adidas.ch/gfwlist +server=/twvid.com/127.0.0.1#5335 +ipset=/twvid.com/gfwlist +server=/get.page/127.0.0.1#5335 +ipset=/get.page/gfwlist +server=/vmworld2010.com/127.0.0.1#5335 +ipset=/vmworld2010.com/gfwlist +server=/sony.com.ph/127.0.0.1#5335 +ipset=/sony.com.ph/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=/adultartlinks.supertop-100.com/127.0.0.1#5335 +ipset=/adultartlinks.supertop-100.com/gfwlist +server=/sony.com.pe/127.0.0.1#5335 +ipset=/sony.com.pe/gfwlist +server=/atom.io/127.0.0.1#5335 +ipset=/atom.io/gfwlist +server=/sony.com.pa/127.0.0.1#5335 +ipset=/sony.com.pa/gfwlist +server=/sony.com.my/127.0.0.1#5335 +ipset=/sony.com.my/gfwlist +server=/sony.com.mk/127.0.0.1#5335 +ipset=/sony.com.mk/gfwlist +server=/sony.com.do/127.0.0.1#5335 +ipset=/sony.com.do/gfwlist +server=/dependabot.com/127.0.0.1#5335 +ipset=/dependabot.com/gfwlist +server=/peacocktv.com/127.0.0.1#5335 +ipset=/peacocktv.com/gfwlist +server=/sony.co.uk/127.0.0.1#5335 +ipset=/sony.co.uk/gfwlist +server=/sony.co.th/127.0.0.1#5335 +ipset=/sony.co.th/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=/sony.co.id/127.0.0.1#5335 +ipset=/sony.co.id/gfwlist +server=/sony.co.cr/127.0.0.1#5335 +ipset=/sony.co.cr/gfwlist +server=/sony.ch/127.0.0.1#5335 +ipset=/sony.ch/gfwlist +server=/sony.ca/127.0.0.1#5335 +ipset=/sony.ca/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=/sony.bg/127.0.0.1#5335 +ipset=/sony.bg/gfwlist +server=/sony.ba/127.0.0.1#5335 +ipset=/sony.ba/gfwlist +server=/sony-promotion.eu/127.0.0.1#5335 +ipset=/sony-promotion.eu/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=/tensorflow.org/127.0.0.1#5335 +ipset=/tensorflow.org/gfwlist +server=/sony-europe.com/127.0.0.1#5335 +ipset=/sony-europe.com/gfwlist +server=/camwhoresbay.com/127.0.0.1#5335 +ipset=/camwhoresbay.com/gfwlist +server=/whychoosevmwareeuc.com/127.0.0.1#5335 +ipset=/whychoosevmwareeuc.com/gfwlist +server=/momsteachsex.info/127.0.0.1#5335 +ipset=/momsteachsex.info/gfwlist +server=/df-bet.com/127.0.0.1#5335 +ipset=/df-bet.com/gfwlist +server=/worldescortindex.com/127.0.0.1#5335 +ipset=/worldescortindex.com/gfwlist +server=/snap.com/127.0.0.1#5335 +ipset=/snap.com/gfwlist +server=/pornaxo.com/127.0.0.1#5335 +ipset=/pornaxo.com/gfwlist +server=/sc-cdn.net/127.0.0.1#5335 +ipset=/sc-cdn.net/gfwlist +server=/wise-research.com/127.0.0.1#5335 +ipset=/wise-research.com/gfwlist +server=/smartonerobotics.com/127.0.0.1#5335 +ipset=/smartonerobotics.com/gfwlist +server=/dialogflow.com/127.0.0.1#5335 +ipset=/dialogflow.com/gfwlist +server=/sony.com.sv/127.0.0.1#5335 +ipset=/sony.com.sv/gfwlist +server=/wiisports.com/127.0.0.1#5335 +ipset=/wiisports.com/gfwlist +server=/s-rewards.hk/127.0.0.1#5335 +ipset=/s-rewards.hk/gfwlist +server=/s-cashonmobile.com/127.0.0.1#5335 +ipset=/s-cashonmobile.com/gfwlist +server=/ip73.com/127.0.0.1#5335 +ipset=/ip73.com/gfwlist +server=/12diasderegalosdeitunes.co.ve/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.co.ve/gfwlist +server=/hkcircleapp.com/127.0.0.1#5335 +ipset=/hkcircleapp.com/gfwlist +server=/barkadahansasmartone.com/127.0.0.1#5335 +ipset=/barkadahansasmartone.com/gfwlist +server=/appleone.community/127.0.0.1#5335 +ipset=/appleone.community/gfwlist +server=/samsunggalaxyfriends.com/127.0.0.1#5335 +ipset=/samsunggalaxyfriends.com/gfwlist +server=/canon-cee.com/127.0.0.1#5335 +ipset=/canon-cee.com/gfwlist +server=/fcfacebook.com/127.0.0.1#5335 +ipset=/fcfacebook.com/gfwlist +server=/ntc.party/127.0.0.1#5335 +ipset=/ntc.party/gfwlist +server=/nuvid.com/127.0.0.1#5335 +ipset=/nuvid.com/gfwlist +server=/vmwarelearning.com/127.0.0.1#5335 +ipset=/vmwarelearning.com/gfwlist +server=/samsungapps.com/127.0.0.1#5335 +ipset=/samsungapps.com/gfwlist +server=/bloombergprep.com/127.0.0.1#5335 +ipset=/bloombergprep.com/gfwlist +server=/samsung.com/127.0.0.1#5335 +ipset=/samsung.com/gfwlist +server=/vanish.co.in/127.0.0.1#5335 +ipset=/vanish.co.in/gfwlist +server=/galaxyappstore.com/127.0.0.1#5335 +ipset=/galaxyappstore.com/gfwlist +server=/steelbrick.com/127.0.0.1#5335 +ipset=/steelbrick.com/gfwlist +server=/xvideosnovinha.com.br/127.0.0.1#5335 +ipset=/xvideosnovinha.com.br/gfwlist +server=/sforce.com/127.0.0.1#5335 +ipset=/sforce.com/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=/dataliberation.org/127.0.0.1#5335 +ipset=/dataliberation.org/gfwlist +server=/google.com.ni/127.0.0.1#5335 +ipset=/google.com.ni/gfwlist +server=/salesforceliveagent.com/127.0.0.1#5335 +ipset=/salesforceliveagent.com/gfwlist +server=/salesforceiq.com/127.0.0.1#5335 +ipset=/salesforceiq.com/gfwlist +server=/line-apps-beta.com/127.0.0.1#5335 +ipset=/line-apps-beta.com/gfwlist +server=/straightpornstuds.com/127.0.0.1#5335 +ipset=/straightpornstuds.com/gfwlist +server=/2chav.com/127.0.0.1#5335 +ipset=/2chav.com/gfwlist +server=/pearsonclinical.eu/127.0.0.1#5335 +ipset=/pearsonclinical.eu/gfwlist +server=/salesforce.org/127.0.0.1#5335 +ipset=/salesforce.org/gfwlist +server=/faceboook.com/127.0.0.1#5335 +ipset=/faceboook.com/gfwlist +server=/unbrandedproducts.com/127.0.0.1#5335 +ipset=/unbrandedproducts.com/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=/microsoft.ca/127.0.0.1#5335 +ipset=/microsoft.ca/gfwlist +server=/force.com/127.0.0.1#5335 +ipset=/force.com/gfwlist +server=/exacttarget.com/127.0.0.1#5335 +ipset=/exacttarget.com/gfwlist +server=/liboggirls.net/127.0.0.1#5335 +ipset=/liboggirls.net/gfwlist +server=/minikelowna.ca/127.0.0.1#5335 +ipset=/minikelowna.ca/gfwlist +server=/einstein.com/127.0.0.1#5335 +ipset=/einstein.com/gfwlist +server=/desk.com/127.0.0.1#5335 +ipset=/desk.com/gfwlist +server=/google.mk/127.0.0.1#5335 +ipset=/google.mk/gfwlist +server=/demandware.com/127.0.0.1#5335 +ipset=/demandware.com/gfwlist +server=/drdrebeatsforu.com/127.0.0.1#5335 +ipset=/drdrebeatsforu.com/gfwlist +server=/ilife.gr/127.0.0.1#5335 +ipset=/ilife.gr/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=/beyondcore.com/127.0.0.1#5335 +ipset=/beyondcore.com/gfwlist +server=/razerzone.jp/127.0.0.1#5335 +ipset=/razerzone.jp/gfwlist +server=/razerzone.com/127.0.0.1#5335 +ipset=/razerzone.com/gfwlist +server=/newhentai.org/127.0.0.1#5335 +ipset=/newhentai.org/gfwlist +server=/qwant.fr/127.0.0.1#5335 +ipset=/qwant.fr/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=/shemalestardb.com/127.0.0.1#5335 +ipset=/shemalestardb.com/gfwlist +server=/qwant.com/127.0.0.1#5335 +ipset=/qwant.com/gfwlist +server=/intel.ag/127.0.0.1#5335 +ipset=/intel.ag/gfwlist +server=/mongodb.org/127.0.0.1#5335 +ipset=/mongodb.org/gfwlist +server=/uplinq.com/127.0.0.1#5335 +ipset=/uplinq.com/gfwlist +server=/bestialitysextaboo.com/127.0.0.1#5335 +ipset=/bestialitysextaboo.com/gfwlist +server=/snapdragonbooth.com/127.0.0.1#5335 +ipset=/snapdragonbooth.com/gfwlist +server=/snapdragon.cn/127.0.0.1#5335 +ipset=/snapdragon.cn/gfwlist +server=/minilangley.ca/127.0.0.1#5335 +ipset=/minilangley.ca/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=/avfox.cc/127.0.0.1#5335 +ipset=/avfox.cc/gfwlist +server=/sexxxhd.com/127.0.0.1#5335 +ipset=/sexxxhd.com/gfwlist +server=/volvobuses.pk/127.0.0.1#5335 +ipset=/volvobuses.pk/gfwlist +server=/qualcommmea.com/127.0.0.1#5335 +ipset=/qualcommmea.com/gfwlist +server=/qualcomm.fr/127.0.0.1#5335 +ipset=/qualcomm.fr/gfwlist +server=/lexisnexis.com/127.0.0.1#5335 +ipset=/lexisnexis.com/gfwlist +server=/qualcomm.com.tw/127.0.0.1#5335 +ipset=/qualcomm.com.tw/gfwlist +server=/qualcomm.co.kr/127.0.0.1#5335 +ipset=/qualcomm.co.kr/gfwlist +server=/qualcomm.co.in/127.0.0.1#5335 +ipset=/qualcomm.co.in/gfwlist +server=/whatsapp-plus.net/127.0.0.1#5335 +ipset=/whatsapp-plus.net/gfwlist +server=/mypearson.com/127.0.0.1#5335 +ipset=/mypearson.com/gfwlist +server=/qctconnect.com/127.0.0.1#5335 +ipset=/qctconnect.com/gfwlist +server=/patenttruth.org/127.0.0.1#5335 +ipset=/patenttruth.org/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=/imod.com/127.0.0.1#5335 +ipset=/imod.com/gfwlist +server=/vip-beats.com/127.0.0.1#5335 +ipset=/vip-beats.com/gfwlist +server=/gobianywhere.com/127.0.0.1#5335 +ipset=/gobianywhere.com/gfwlist +server=/cdmatech.com/127.0.0.1#5335 +ipset=/cdmatech.com/gfwlist +server=/sexgames.xxx/127.0.0.1#5335 +ipset=/sexgames.xxx/gfwlist +server=/donmai.us/127.0.0.1#5335 +ipset=/donmai.us/gfwlist +server=/berkanawireless.com/127.0.0.1#5335 +ipset=/berkanawireless.com/gfwlist +server=/bridgestonemerchandise.com/127.0.0.1#5335 +ipset=/bridgestonemerchandise.com/gfwlist +server=/cheap-nike.com/127.0.0.1#5335 +ipset=/cheap-nike.com/gfwlist +server=/jpg4us.net/127.0.0.1#5335 +ipset=/jpg4us.net/gfwlist +server=/volvotrucks.az/127.0.0.1#5335 +ipset=/volvotrucks.az/gfwlist +server=/stockingfetishvideo.com/127.0.0.1#5335 +ipset=/stockingfetishvideo.com/gfwlist +server=/ebayfashion.com/127.0.0.1#5335 +ipset=/ebayfashion.com/gfwlist +server=/genkai-hounyo.com/127.0.0.1#5335 +ipset=/genkai-hounyo.com/gfwlist +server=/bmw-motorrad.ua/127.0.0.1#5335 +ipset=/bmw-motorrad.ua/gfwlist +server=/pccw.com/127.0.0.1#5335 +ipset=/pccw.com/gfwlist +server=/hktpremier.com/127.0.0.1#5335 +ipset=/hktpremier.com/gfwlist +server=/hkt.com/127.0.0.1#5335 +ipset=/hkt.com/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=/hkt-eye.com/127.0.0.1#5335 +ipset=/hkt-eye.com/gfwlist +server=/esmarthealth.com/127.0.0.1#5335 +ipset=/esmarthealth.com/gfwlist +server=/drdrebeats-headphone.com/127.0.0.1#5335 +ipset=/drdrebeats-headphone.com/gfwlist +server=/panasonic.com/127.0.0.1#5335 +ipset=/panasonic.com/gfwlist +server=/facebookofsex.com/127.0.0.1#5335 +ipset=/facebookofsex.com/gfwlist +server=/oracleinfinity.io/127.0.0.1#5335 +ipset=/oracleinfinity.io/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=/oracle.com/127.0.0.1#5335 +ipset=/oracle.com/gfwlist +server=/jquerymobile.com/127.0.0.1#5335 +ipset=/jquerymobile.com/gfwlist +server=/openweathermap.org/127.0.0.1#5335 +ipset=/openweathermap.org/gfwlist +server=/nvidia.tt.omtrdc.net/127.0.0.1#5335 +ipset=/nvidia.tt.omtrdc.net/gfwlist +server=/tegrazone.kr/127.0.0.1#5335 +ipset=/tegrazone.kr/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=/tegrazone.com/127.0.0.1#5335 +ipset=/tegrazone.com/gfwlist +server=/deno.land/127.0.0.1#5335 +ipset=/deno.land/gfwlist +server=/hdready.xxx/127.0.0.1#5335 +ipset=/hdready.xxx/gfwlist +server=/pensions-expert.com/127.0.0.1#5335 +ipset=/pensions-expert.com/gfwlist +server=/nvidiagrid.net/127.0.0.1#5335 +ipset=/nvidiagrid.net/gfwlist +server=/fans-here.com/127.0.0.1#5335 +ipset=/fans-here.com/gfwlist +server=/nvidia.tw/127.0.0.1#5335 +ipset=/nvidia.tw/gfwlist +server=/nvidia.se/127.0.0.1#5335 +ipset=/nvidia.se/gfwlist +server=/reckittprofessional.com/127.0.0.1#5335 +ipset=/reckittprofessional.com/gfwlist +server=/pornoprive.xxx/127.0.0.1#5335 +ipset=/pornoprive.xxx/gfwlist +server=/nvidia.mx/127.0.0.1#5335 +ipset=/nvidia.mx/gfwlist +server=/yahoo.de/127.0.0.1#5335 +ipset=/yahoo.de/gfwlist +server=/nvidia.in/127.0.0.1#5335 +ipset=/nvidia.in/gfwlist +server=/microsoft.pt/127.0.0.1#5335 +ipset=/microsoft.pt/gfwlist +server=/nvidia.fi/127.0.0.1#5335 +ipset=/nvidia.fi/gfwlist +server=/candidforum-videos.com/127.0.0.1#5335 +ipset=/candidforum-videos.com/gfwlist +server=/nvidia.de/127.0.0.1#5335 +ipset=/nvidia.de/gfwlist +server=/cncrivals.com/127.0.0.1#5335 +ipset=/cncrivals.com/gfwlist +server=/nvidia.cz/127.0.0.1#5335 +ipset=/nvidia.cz/gfwlist +server=/love-sextoys.co.uk/127.0.0.1#5335 +ipset=/love-sextoys.co.uk/gfwlist +server=/nvidia.com.tw/127.0.0.1#5335 +ipset=/nvidia.com.tw/gfwlist +server=/enemaprocedure.com/127.0.0.1#5335 +ipset=/enemaprocedure.com/gfwlist +server=/thunderbolttechnology.net/127.0.0.1#5335 +ipset=/thunderbolttechnology.net/gfwlist +server=/nvidia.co.uk/127.0.0.1#5335 +ipset=/nvidia.co.uk/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=/gputechconf.in/127.0.0.1#5335 +ipset=/gputechconf.in/gfwlist +server=/durex.se/127.0.0.1#5335 +ipset=/durex.se/gfwlist +server=/anon-v.lol/127.0.0.1#5335 +ipset=/anon-v.lol/gfwlist +server=/lolespor.com/127.0.0.1#5335 +ipset=/lolespor.com/gfwlist +server=/taxidrivermovie.com/127.0.0.1#5335 +ipset=/taxidrivermovie.com/gfwlist +server=/instagramtakipcisatinal.net/127.0.0.1#5335 +ipset=/instagramtakipcisatinal.net/gfwlist +server=/geforce.co.uk/127.0.0.1#5335 +ipset=/geforce.co.uk/gfwlist +server=/hdxx.tv/127.0.0.1#5335 +ipset=/hdxx.tv/gfwlist +server=/megaporno.com.br/127.0.0.1#5335 +ipset=/megaporno.com.br/gfwlist +server=/pstatic.net/127.0.0.1#5335 +ipset=/pstatic.net/gfwlist +server=/famosascalvas.com/127.0.0.1#5335 +ipset=/famosascalvas.com/gfwlist +server=/maxis.com/127.0.0.1#5335 +ipset=/maxis.com/gfwlist +server=/ywoos.com/127.0.0.1#5335 +ipset=/ywoos.com/gfwlist +server=/springernature.com/127.0.0.1#5335 +ipset=/springernature.com/gfwlist +server=/grafolio.com/127.0.0.1#5335 +ipset=/grafolio.com/gfwlist +server=/mxmcdn.net/127.0.0.1#5335 +ipset=/mxmcdn.net/gfwlist +server=/musixmatch.com/127.0.0.1#5335 +ipset=/musixmatch.com/gfwlist +server=/cafr.ca/127.0.0.1#5335 +ipset=/cafr.ca/gfwlist +server=/paypalinsuranceservices.org/127.0.0.1#5335 +ipset=/paypalinsuranceservices.org/gfwlist +server=/poofetish.com/127.0.0.1#5335 +ipset=/poofetish.com/gfwlist +server=/mozilla.org/127.0.0.1#5335 +ipset=/mozilla.org/gfwlist +server=/mozilla.net/127.0.0.1#5335 +ipset=/mozilla.net/gfwlist +server=/crocotube.com/127.0.0.1#5335 +ipset=/crocotube.com/gfwlist +server=/nordstrommedia.com/127.0.0.1#5335 +ipset=/nordstrommedia.com/gfwlist +server=/illusion111.com/127.0.0.1#5335 +ipset=/illusion111.com/gfwlist +server=/mozilla.com/127.0.0.1#5335 +ipset=/mozilla.com/gfwlist +server=/developer.mozilla.org/127.0.0.1#5335 +ipset=/developer.mozilla.org/gfwlist +server=/quoracdn.net/127.0.0.1#5335 +ipset=/quoracdn.net/gfwlist +server=/indiansexstories2.net/127.0.0.1#5335 +ipset=/indiansexstories2.net/gfwlist +server=/yahoo.com.ec/127.0.0.1#5335 +ipset=/yahoo.com.ec/gfwlist +server=/beatsoutletanytime.com/127.0.0.1#5335 +ipset=/beatsoutletanytime.com/gfwlist +server=/img-s-msn-com.akamaized.net/127.0.0.1#5335 +ipset=/img-s-msn-com.akamaized.net/gfwlist +server=/media-imdb.com/127.0.0.1#5335 +ipset=/media-imdb.com/gfwlist +server=/cityoflove.com/127.0.0.1#5335 +ipset=/cityoflove.com/gfwlist +server=/intelinsight.com/127.0.0.1#5335 +ipset=/intelinsight.com/gfwlist +server=/thinkquarterly.co.uk/127.0.0.1#5335 +ipset=/thinkquarterly.co.uk/gfwlist +server=/winhec.net/127.0.0.1#5335 +ipset=/winhec.net/gfwlist +server=/jadult.net/127.0.0.1#5335 +ipset=/jadult.net/gfwlist +server=/jerkmatelive.org/127.0.0.1#5335 +ipset=/jerkmatelive.org/gfwlist +server=/windowssearch.com/127.0.0.1#5335 +ipset=/windowssearch.com/gfwlist +server=/windows.nl/127.0.0.1#5335 +ipset=/windows.nl/gfwlist +server=/alphabet.lt/127.0.0.1#5335 +ipset=/alphabet.lt/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=/paypal-mainstreet.net/127.0.0.1#5335 +ipset=/paypal-mainstreet.net/gfwlist +server=/wbd.ms/127.0.0.1#5335 +ipset=/wbd.ms/gfwlist +server=/facebooksafety.com/127.0.0.1#5335 +ipset=/facebooksafety.com/gfwlist +server=/hsxhr.cc/127.0.0.1#5335 +ipset=/hsxhr.cc/gfwlist +server=/vsallin.net/127.0.0.1#5335 +ipset=/vsallin.net/gfwlist +server=/userpxt.io/127.0.0.1#5335 +ipset=/userpxt.io/gfwlist +server=/google.az/127.0.0.1#5335 +ipset=/google.az/gfwlist +server=/tfsallin.net/127.0.0.1#5335 +ipset=/tfsallin.net/gfwlist +server=/cruel-furies.com/127.0.0.1#5335 +ipset=/cruel-furies.com/gfwlist +server=/facebookshop.com/127.0.0.1#5335 +ipset=/facebookshop.com/gfwlist +server=/castingcouch-x.com/127.0.0.1#5335 +ipset=/castingcouch-x.com/gfwlist +server=/ipostnaked.com/127.0.0.1#5335 +ipset=/ipostnaked.com/gfwlist +server=/motorshowblog.com/127.0.0.1#5335 +ipset=/motorshowblog.com/gfwlist +server=/headphoneshotsales.com/127.0.0.1#5335 +ipset=/headphoneshotsales.com/gfwlist +server=/perfectjizz.com/127.0.0.1#5335 +ipset=/perfectjizz.com/gfwlist +server=/geceguby.ru/127.0.0.1#5335 +ipset=/geceguby.ru/gfwlist +server=/staffhub.ms/127.0.0.1#5335 +ipset=/staffhub.ms/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=/sharepointonline.com/127.0.0.1#5335 +ipset=/sharepointonline.com/gfwlist +server=/rou.video/127.0.0.1#5335 +ipset=/rou.video/gfwlist +server=/mini.mq/127.0.0.1#5335 +ipset=/mini.mq/gfwlist +server=/girlscanner.cc/127.0.0.1#5335 +ipset=/girlscanner.cc/gfwlist +server=/alt2-mtalk.google.com/127.0.0.1#5335 +ipset=/alt2-mtalk.google.com/gfwlist +server=/viacom.com/127.0.0.1#5335 +ipset=/viacom.com/gfwlist +server=/sfbassets.net/127.0.0.1#5335 +ipset=/sfbassets.net/gfwlist +server=/pinterest.com.ec/127.0.0.1#5335 +ipset=/pinterest.com.ec/gfwlist +server=/eyny.com/127.0.0.1#5335 +ipset=/eyny.com/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=/akamaietpcnctest.com/127.0.0.1#5335 +ipset=/akamaietpcnctest.com/gfwlist +server=/beatsbydreonlines-uk.com/127.0.0.1#5335 +ipset=/beatsbydreonlines-uk.com/gfwlist +server=/pearson-schule.ch/127.0.0.1#5335 +ipset=/pearson-schule.ch/gfwlist +server=/projectsangam.com/127.0.0.1#5335 +ipset=/projectsangam.com/gfwlist +server=/pixapp.net/127.0.0.1#5335 +ipset=/pixapp.net/gfwlist +server=/54647.org/127.0.0.1#5335 +ipset=/54647.org/gfwlist +server=/lowergiseries.com/127.0.0.1#5335 +ipset=/lowergiseries.com/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=/outingsapp.com/127.0.0.1#5335 +ipset=/outingsapp.com/gfwlist +server=/tubepatrol.org/127.0.0.1#5335 +ipset=/tubepatrol.org/gfwlist +server=/opticsforthecloud.net/127.0.0.1#5335 +ipset=/opticsforthecloud.net/gfwlist +server=/runningnike.com/127.0.0.1#5335 +ipset=/runningnike.com/gfwlist +server=/bitballoon.com/127.0.0.1#5335 +ipset=/bitballoon.com/gfwlist +server=/illusionas.com/127.0.0.1#5335 +ipset=/illusionas.com/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=/mymicrosoft.com/127.0.0.1#5335 +ipset=/mymicrosoft.com/gfwlist +server=/bmwgroupdesignworks.com/127.0.0.1#5335 +ipset=/bmwgroupdesignworks.com/gfwlist +server=/msudalosti.com/127.0.0.1#5335 +ipset=/msudalosti.com/gfwlist +server=/msturing.org/127.0.0.1#5335 +ipset=/msturing.org/gfwlist +server=/adanaatikhaber.com/127.0.0.1#5335 +ipset=/adanaatikhaber.com/gfwlist +server=/vilavpn3.xyz/127.0.0.1#5335 +ipset=/vilavpn3.xyz/gfwlist +server=/topporn.me/127.0.0.1#5335 +ipset=/topporn.me/gfwlist +server=/msft.info/127.0.0.1#5335 +ipset=/msft.info/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=/msedge.net/127.0.0.1#5335 +ipset=/msedge.net/gfwlist +server=/mschallenge2018.com/127.0.0.1#5335 +ipset=/mschallenge2018.com/gfwlist +server=/binancezh.info/127.0.0.1#5335 +ipset=/binancezh.info/gfwlist +server=/ms365surfaceoffer.com/127.0.0.1#5335 +ipset=/ms365surfaceoffer.com/gfwlist +server=/ms-studiosmedia.com/127.0.0.1#5335 +ipset=/ms-studiosmedia.com/gfwlist +server=/disneymagicmoments.pl/127.0.0.1#5335 +ipset=/disneymagicmoments.pl/gfwlist +server=/mpnevolution.com/127.0.0.1#5335 +ipset=/mpnevolution.com/gfwlist +server=/manoramaonline.com/127.0.0.1#5335 +ipset=/manoramaonline.com/gfwlist +server=/vepornhd.club/127.0.0.1#5335 +ipset=/vepornhd.club/gfwlist +server=/morphcharts.com/127.0.0.1#5335 +ipset=/morphcharts.com/gfwlist +server=/freeviewplus.net.au/127.0.0.1#5335 +ipset=/freeviewplus.net.au/gfwlist +server=/microsoftstream.com/127.0.0.1#5335 +ipset=/microsoftstream.com/gfwlist +server=/microsoftsiteselection.com/127.0.0.1#5335 +ipset=/microsoftsiteselection.com/gfwlist +server=/microsoftready.com/127.0.0.1#5335 +ipset=/microsoftready.com/gfwlist +server=/telegra.ph/127.0.0.1#5335 +ipset=/telegra.ph/gfwlist +server=/microsoftpartnercommunity.com/127.0.0.1#5335 +ipset=/microsoftpartnercommunity.com/gfwlist +server=/microsoftlinc.com/127.0.0.1#5335 +ipset=/microsoftlinc.com/gfwlist +server=/microsofthouse.net/127.0.0.1#5335 +ipset=/microsofthouse.net/gfwlist +server=/beatsdanmark2013.com/127.0.0.1#5335 +ipset=/beatsdanmark2013.com/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=/theporndude.vip/127.0.0.1#5335 +ipset=/theporndude.vip/gfwlist +server=/megacamz.com/127.0.0.1#5335 +ipset=/megacamz.com/gfwlist +server=/microsoftadvertisingregionalawards.com/127.0.0.1#5335 +ipset=/microsoftadvertisingregionalawards.com/gfwlist +server=/microsoft-sbs-domains.com/127.0.0.1#5335 +ipset=/microsoft-sbs-domains.com/gfwlist +server=/easportsfootball.com/127.0.0.1#5335 +ipset=/easportsfootball.com/gfwlist +server=/microsoft-int.com/127.0.0.1#5335 +ipset=/microsoft-int.com/gfwlist +server=/live.net/127.0.0.1#5335 +ipset=/live.net/gfwlist +server=/live.com/127.0.0.1#5335 +ipset=/live.com/gfwlist +server=/ameba.jp/127.0.0.1#5335 +ipset=/ameba.jp/gfwlist +server=/anthemgame.com/127.0.0.1#5335 +ipset=/anthemgame.com/gfwlist +server=/celeron.net/127.0.0.1#5335 +ipset=/celeron.net/gfwlist +server=/figma.com/127.0.0.1#5335 +ipset=/figma.com/gfwlist +server=/applecomputers.co.nz/127.0.0.1#5335 +ipset=/applecomputers.co.nz/gfwlist +server=/rink.hockeyapp.net/127.0.0.1#5335 +ipset=/rink.hockeyapp.net/gfwlist +server=/aka-ai.net/127.0.0.1#5335 +ipset=/aka-ai.net/gfwlist +server=/18comic.cc/127.0.0.1#5335 +ipset=/18comic.cc/gfwlist +server=/lgbtq.games/127.0.0.1#5335 +ipset=/lgbtq.games/gfwlist +server=/hamivideo.hinet.net/127.0.0.1#5335 +ipset=/hamivideo.hinet.net/gfwlist +server=/entrustdatacard.com/127.0.0.1#5335 +ipset=/entrustdatacard.com/gfwlist +server=/fundfire.com/127.0.0.1#5335 +ipset=/fundfire.com/gfwlist +server=/beats-headphones-buy-cheap.com/127.0.0.1#5335 +ipset=/beats-headphones-buy-cheap.com/gfwlist +server=/nintendo.nl/127.0.0.1#5335 +ipset=/nintendo.nl/gfwlist +server=/nubiles.net/127.0.0.1#5335 +ipset=/nubiles.net/gfwlist +server=/tik-tokapi.com/127.0.0.1#5335 +ipset=/tik-tokapi.com/gfwlist +server=/tvmost.com.hk/127.0.0.1#5335 +ipset=/tvmost.com.hk/gfwlist +server=/facebookadvertisingsecrets.com/127.0.0.1#5335 +ipset=/facebookadvertisingsecrets.com/gfwlist +server=/bmw-vancouver.ca/127.0.0.1#5335 +ipset=/bmw-vancouver.ca/gfwlist +server=/ieeeusa.org/127.0.0.1#5335 +ipset=/ieeeusa.org/gfwlist +server=/lspimg.com/127.0.0.1#5335 +ipset=/lspimg.com/gfwlist +server=/hoodamateurs.com/127.0.0.1#5335 +ipset=/hoodamateurs.com/gfwlist +server=/huffpostmaghreb.com/127.0.0.1#5335 +ipset=/huffpostmaghreb.com/gfwlist +server=/ingads.com/127.0.0.1#5335 +ipset=/ingads.com/gfwlist +server=/imaginecup.pl/127.0.0.1#5335 +ipset=/imaginecup.pl/gfwlist +server=/32bm.cc/127.0.0.1#5335 +ipset=/32bm.cc/gfwlist +server=/internetexplorer.com/127.0.0.1#5335 +ipset=/internetexplorer.com/gfwlist +server=/xb18.me/127.0.0.1#5335 +ipset=/xb18.me/gfwlist +server=/beatsbydresolohdonline-canada.com/127.0.0.1#5335 +ipset=/beatsbydresolohdonline-canada.com/gfwlist +server=/touchid.tv/127.0.0.1#5335 +ipset=/touchid.tv/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=/cambridgemaths.org/127.0.0.1#5335 +ipset=/cambridgemaths.org/gfwlist +server=/beatsbydrdre4sale.com/127.0.0.1#5335 +ipset=/beatsbydrdre4sale.com/gfwlist +server=/drebeatsoldes.com/127.0.0.1#5335 +ipset=/drebeatsoldes.com/gfwlist +server=/onahodouga.com/127.0.0.1#5335 +ipset=/onahodouga.com/gfwlist +server=/bmw.com.gt/127.0.0.1#5335 +ipset=/bmw.com.gt/gfwlist +server=/hotmail.org/127.0.0.1#5335 +ipset=/hotmail.org/gfwlist +server=/tvappstore.net/127.0.0.1#5335 +ipset=/tvappstore.net/gfwlist +server=/hotmail.eu/127.0.0.1#5335 +ipset=/hotmail.eu/gfwlist +server=/foxcredit.com/127.0.0.1#5335 +ipset=/foxcredit.com/gfwlist +server=/adulttoontube.com/127.0.0.1#5335 +ipset=/adulttoontube.com/gfwlist +server=/smutstone.com/127.0.0.1#5335 +ipset=/smutstone.com/gfwlist +server=/hololens.com/127.0.0.1#5335 +ipset=/hololens.com/gfwlist +server=/lepornofrais.com/127.0.0.1#5335 +ipset=/lepornofrais.com/gfwlist +server=/gigjam.com/127.0.0.1#5335 +ipset=/gigjam.com/gfwlist +server=/jpavcom.com/127.0.0.1#5335 +ipset=/jpavcom.com/gfwlist +server=/9to5toys.com/127.0.0.1#5335 +ipset=/9to5toys.com/gfwlist +server=/gearstactics.com/127.0.0.1#5335 +ipset=/gearstactics.com/gfwlist +server=/washingtonpost.com/127.0.0.1#5335 +ipset=/washingtonpost.com/gfwlist +server=/management-azure-devices-int.net/127.0.0.1#5335 +ipset=/management-azure-devices-int.net/gfwlist +server=/applehongkong.com/127.0.0.1#5335 +ipset=/applehongkong.com/gfwlist +server=/gears5.com/127.0.0.1#5335 +ipset=/gears5.com/gfwlist +server=/foxsports.co.ve/127.0.0.1#5335 +ipset=/foxsports.co.ve/gfwlist +server=/gettyimages.ae/127.0.0.1#5335 +ipset=/gettyimages.ae/gfwlist +server=/magento.net/127.0.0.1#5335 +ipset=/magento.net/gfwlist +server=/ulifestyle.com.hk/127.0.0.1#5335 +ipset=/ulifestyle.com.hk/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=/bmw-connecteddrive.com/127.0.0.1#5335 +ipset=/bmw-connecteddrive.com/gfwlist +server=/efproject.net/127.0.0.1#5335 +ipset=/efproject.net/gfwlist +server=/dat.foundation/127.0.0.1#5335 +ipset=/dat.foundation/gfwlist +server=/ebayauction.com/127.0.0.1#5335 +ipset=/ebayauction.com/gfwlist +server=/bookshome.info/127.0.0.1#5335 +ipset=/bookshome.info/gfwlist +server=/am730.com.hk/127.0.0.1#5335 +ipset=/am730.com.hk/gfwlist +server=/beats4outlets.com/127.0.0.1#5335 +ipset=/beats4outlets.com/gfwlist +server=/disney.ch/127.0.0.1#5335 +ipset=/disney.ch/gfwlist +server=/jav01.cc/127.0.0.1#5335 +ipset=/jav01.cc/gfwlist +server=/bmw-rrdays.com/127.0.0.1#5335 +ipset=/bmw-rrdays.com/gfwlist +server=/mini.fr/127.0.0.1#5335 +ipset=/mini.fr/gfwlist +server=/crmdynint.com/127.0.0.1#5335 +ipset=/crmdynint.com/gfwlist +server=/ciscoresearch.com/127.0.0.1#5335 +ipset=/ciscoresearch.com/gfwlist +server=/hentai-moon.com/127.0.0.1#5335 +ipset=/hentai-moon.com/gfwlist +server=/crmdynint-gcc.com/127.0.0.1#5335 +ipset=/crmdynint-gcc.com/gfwlist +server=/entermediadb.net/127.0.0.1#5335 +ipset=/entermediadb.net/gfwlist +server=/gu-web.net/127.0.0.1#5335 +ipset=/gu-web.net/gfwlist +server=/4u4c.com/127.0.0.1#5335 +ipset=/4u4c.com/gfwlist +server=/paypalindia.com/127.0.0.1#5335 +ipset=/paypalindia.com/gfwlist +server=/coreml.net/127.0.0.1#5335 +ipset=/coreml.net/gfwlist +server=/cloudappsecurity.com/127.0.0.1#5335 +ipset=/cloudappsecurity.com/gfwlist +server=/amateurwifefuck.com/127.0.0.1#5335 +ipset=/amateurwifefuck.com/gfwlist +server=/cloudapp.net/127.0.0.1#5335 +ipset=/cloudapp.net/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=/applecom.com/127.0.0.1#5335 +ipset=/applecom.com/gfwlist +server=/now-tv.com/127.0.0.1#5335 +ipset=/now-tv.com/gfwlist +server=/coinglass.com/127.0.0.1#5335 +ipset=/coinglass.com/gfwlist +server=/youtube.cz/127.0.0.1#5335 +ipset=/youtube.cz/gfwlist +server=/mini.ua/127.0.0.1#5335 +ipset=/mini.ua/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=/centralvalidation.com/127.0.0.1#5335 +ipset=/centralvalidation.com/gfwlist +server=/bmwgroup.net/127.0.0.1#5335 +ipset=/bmwgroup.net/gfwlist +server=/thesims4.com/127.0.0.1#5335 +ipset=/thesims4.com/gfwlist +server=/brazilpartneruniversity.com/127.0.0.1#5335 +ipset=/brazilpartneruniversity.com/gfwlist +server=/heroku.com/127.0.0.1#5335 +ipset=/heroku.com/gfwlist +server=/osakamotion.net/127.0.0.1#5335 +ipset=/osakamotion.net/gfwlist +server=/collector.xhamster.com/127.0.0.1#5335 +ipset=/collector.xhamster.com/gfwlist +server=/asp.net/127.0.0.1#5335 +ipset=/asp.net/gfwlist +server=/princeton.edu/127.0.0.1#5335 +ipset=/princeton.edu/gfwlist +server=/gdsrx888.com/127.0.0.1#5335 +ipset=/gdsrx888.com/gfwlist +server=/barelist.com/127.0.0.1#5335 +ipset=/barelist.com/gfwlist +server=/battlelog.com/127.0.0.1#5335 +ipset=/battlelog.com/gfwlist +server=/applicationinsights.net/127.0.0.1#5335 +ipset=/applicationinsights.net/gfwlist +server=/camfinder.com/127.0.0.1#5335 +ipset=/camfinder.com/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=/blogspot.com.ar/127.0.0.1#5335 +ipset=/blogspot.com.ar/gfwlist +server=/aka.ms/127.0.0.1#5335 +ipset=/aka.ms/gfwlist +server=/m12.vc/127.0.0.1#5335 +ipset=/m12.vc/gfwlist +server=/teensnow.link/127.0.0.1#5335 +ipset=/teensnow.link/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=/91sesex.xyz/127.0.0.1#5335 +ipset=/91sesex.xyz/gfwlist +server=/webcammedellin.co/127.0.0.1#5335 +ipset=/webcammedellin.co/gfwlist +server=/paypall.com/127.0.0.1#5335 +ipset=/paypall.com/gfwlist +server=/steam.eca.qtlglb.com/127.0.0.1#5335 +ipset=/steam.eca.qtlglb.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=/hdsexxx.net/127.0.0.1#5335 +ipset=/hdsexxx.net/gfwlist +server=/egotastic.com/127.0.0.1#5335 +ipset=/egotastic.com/gfwlist +server=/xn--hckl3e1e8a8ajin0czf.net/127.0.0.1#5335 +ipset=/xn--hckl3e1e8a8ajin0czf.net/gfwlist +server=/nike.ci/127.0.0.1#5335 +ipset=/nike.ci/gfwlist +server=/naughtyhentai.biz/127.0.0.1#5335 +ipset=/naughtyhentai.biz/gfwlist +server=/microsoft.si/127.0.0.1#5335 +ipset=/microsoft.si/gfwlist +server=/convrgencegame.com/127.0.0.1#5335 +ipset=/convrgencegame.com/gfwlist +server=/yourpelvicultrasound.com/127.0.0.1#5335 +ipset=/yourpelvicultrasound.com/gfwlist +server=/goodporno.cc/127.0.0.1#5335 +ipset=/goodporno.cc/gfwlist +server=/microsoft.red/127.0.0.1#5335 +ipset=/microsoft.red/gfwlist +server=/curbed.com/127.0.0.1#5335 +ipset=/curbed.com/gfwlist +server=/shemaleleaks.com/127.0.0.1#5335 +ipset=/shemaleleaks.com/gfwlist +server=/googlearth.com/127.0.0.1#5335 +ipset=/googlearth.com/gfwlist +server=/urduvoa.com/127.0.0.1#5335 +ipset=/urduvoa.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=/youtube.pl/127.0.0.1#5335 +ipset=/youtube.pl/gfwlist +server=/microsoft.net/127.0.0.1#5335 +ipset=/microsoft.net/gfwlist +server=/relateiq.com/127.0.0.1#5335 +ipset=/relateiq.com/gfwlist +server=/amateurest.com/127.0.0.1#5335 +ipset=/amateurest.com/gfwlist +server=/paypal-specialoffers.com/127.0.0.1#5335 +ipset=/paypal-specialoffers.com/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=/nudewifeporn.com/127.0.0.1#5335 +ipset=/nudewifeporn.com/gfwlist +server=/microsoft.lt/127.0.0.1#5335 +ipset=/microsoft.lt/gfwlist +server=/microsoft.jp/127.0.0.1#5335 +ipset=/microsoft.jp/gfwlist +server=/fdiintelligence.com/127.0.0.1#5335 +ipset=/fdiintelligence.com/gfwlist +server=/w3.org/127.0.0.1#5335 +ipset=/w3.org/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=/beatsbydre-store.com/127.0.0.1#5335 +ipset=/beatsbydre-store.com/gfwlist +server=/avbebe.com/127.0.0.1#5335 +ipset=/avbebe.com/gfwlist +server=/autodraw.com/127.0.0.1#5335 +ipset=/autodraw.com/gfwlist +server=/microsoft.io/127.0.0.1#5335 +ipset=/microsoft.io/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=/vaginal-ultrasound.com/127.0.0.1#5335 +ipset=/vaginal-ultrasound.com/gfwlist +server=/mac.com.au/127.0.0.1#5335 +ipset=/mac.com.au/gfwlist +server=/momsboysmovies.net/127.0.0.1#5335 +ipset=/momsboysmovies.net/gfwlist +server=/microsoft.eu/127.0.0.1#5335 +ipset=/microsoft.eu/gfwlist +server=/microsoft.es/127.0.0.1#5335 +ipset=/microsoft.es/gfwlist +server=/google.bg/127.0.0.1#5335 +ipset=/google.bg/gfwlist +server=/voatour.com/127.0.0.1#5335 +ipset=/voatour.com/gfwlist +server=/disneymovieinsiders.com/127.0.0.1#5335 +ipset=/disneymovieinsiders.com/gfwlist +server=/pypl.net/127.0.0.1#5335 +ipset=/pypl.net/gfwlist +server=/swisssign.ch/127.0.0.1#5335 +ipset=/swisssign.ch/gfwlist +server=/fbthirdpartypixel.net/127.0.0.1#5335 +ipset=/fbthirdpartypixel.net/gfwlist +server=/pieceofplastic.com/127.0.0.1#5335 +ipset=/pieceofplastic.com/gfwlist +server=/heaven-burns-red.com/127.0.0.1#5335 +ipset=/heaven-burns-red.com/gfwlist +server=/visa.pl/127.0.0.1#5335 +ipset=/visa.pl/gfwlist +server=/fantasticyoungporn.com/127.0.0.1#5335 +ipset=/fantasticyoungporn.com/gfwlist +server=/rocksdb.net/127.0.0.1#5335 +ipset=/rocksdb.net/gfwlist +server=/sony.com/127.0.0.1#5335 +ipset=/sony.com/gfwlist +server=/b-ok.africa/127.0.0.1#5335 +ipset=/b-ok.africa/gfwlist +server=/nikeincchemistry.com/127.0.0.1#5335 +ipset=/nikeincchemistry.com/gfwlist +server=/pornpair.com/127.0.0.1#5335 +ipset=/pornpair.com/gfwlist +server=/half.com/127.0.0.1#5335 +ipset=/half.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=/xxxclub.club/127.0.0.1#5335 +ipset=/xxxclub.club/gfwlist +server=/pornhat.tv/127.0.0.1#5335 +ipset=/pornhat.tv/gfwlist +server=/microsoft.ch/127.0.0.1#5335 +ipset=/microsoft.ch/gfwlist +server=/virtualrealgay.com/127.0.0.1#5335 +ipset=/virtualrealgay.com/gfwlist +server=/cbsnews.com/127.0.0.1#5335 +ipset=/cbsnews.com/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=/greginhollywood.com/127.0.0.1#5335 +ipset=/greginhollywood.com/gfwlist +server=/foxsportsgo.com/127.0.0.1#5335 +ipset=/foxsportsgo.com/gfwlist +server=/youtube.com.co/127.0.0.1#5335 +ipset=/youtube.com.co/gfwlist +server=/discountporn.club/127.0.0.1#5335 +ipset=/discountporn.club/gfwlist +server=/areyoucreditwise.com/127.0.0.1#5335 +ipset=/areyoucreditwise.com/gfwlist +server=/enemabasics.com/127.0.0.1#5335 +ipset=/enemabasics.com/gfwlist +server=/amateuroldsluts.com/127.0.0.1#5335 +ipset=/amateuroldsluts.com/gfwlist +server=/walmart.com/127.0.0.1#5335 +ipset=/walmart.com/gfwlist +server=/analpornhouse.com/127.0.0.1#5335 +ipset=/analpornhouse.com/gfwlist +server=/nikekd.com/127.0.0.1#5335 +ipset=/nikekd.com/gfwlist +server=/9to5mac.com/127.0.0.1#5335 +ipset=/9to5mac.com/gfwlist +server=/bubbaporn.com/127.0.0.1#5335 +ipset=/bubbaporn.com/gfwlist +server=/udemy.com/127.0.0.1#5335 +ipset=/udemy.com/gfwlist +server=/ozodi.org/127.0.0.1#5335 +ipset=/ozodi.org/gfwlist +server=/faronicslabs.com/127.0.0.1#5335 +ipset=/faronicslabs.com/gfwlist +server=/playerjs.io/127.0.0.1#5335 +ipset=/playerjs.io/gfwlist +server=/sprinklesapp.com/127.0.0.1#5335 +ipset=/sprinklesapp.com/gfwlist +server=/microsoft.az/127.0.0.1#5335 +ipset=/microsoft.az/gfwlist +server=/canon.de/127.0.0.1#5335 +ipset=/canon.de/gfwlist +server=/naoconto.com/127.0.0.1#5335 +ipset=/naoconto.com/gfwlist +server=/onedrive.org/127.0.0.1#5335 +ipset=/onedrive.org/gfwlist +server=/pvp.net/127.0.0.1#5335 +ipset=/pvp.net/gfwlist +server=/onedrive.net/127.0.0.1#5335 +ipset=/onedrive.net/gfwlist +server=/onedrive.eu/127.0.0.1#5335 +ipset=/onedrive.eu/gfwlist +server=/packagist.org/127.0.0.1#5335 +ipset=/packagist.org/gfwlist +server=/onedrive.com/127.0.0.1#5335 +ipset=/onedrive.com/gfwlist +server=/livefilestore.com/127.0.0.1#5335 +ipset=/livefilestore.com/gfwlist +server=/zoophilist.net/127.0.0.1#5335 +ipset=/zoophilist.net/gfwlist +server=/ebaymotors.ca/127.0.0.1#5335 +ipset=/ebaymotors.ca/gfwlist +server=/msnkids.com/127.0.0.1#5335 +ipset=/msnkids.com/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=/msnewskids.org/127.0.0.1#5335 +ipset=/msnewskids.org/gfwlist +server=/fecbook.com/127.0.0.1#5335 +ipset=/fecbook.com/gfwlist +server=/embl-hamburg.de/127.0.0.1#5335 +ipset=/embl-hamburg.de/gfwlist +server=/msnewskids.net/127.0.0.1#5335 +ipset=/msnewskids.net/gfwlist +server=/msnewskids.com/127.0.0.1#5335 +ipset=/msnewskids.com/gfwlist +server=/enjoyfuck.com/127.0.0.1#5335 +ipset=/enjoyfuck.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=/microsoftnewskids.org/127.0.0.1#5335 +ipset=/microsoftnewskids.org/gfwlist +server=/microsoftnewskids.net/127.0.0.1#5335 +ipset=/microsoftnewskids.net/gfwlist +server=/kimogirl.cc/127.0.0.1#5335 +ipset=/kimogirl.cc/gfwlist +server=/microsoftnewsforkids.org/127.0.0.1#5335 +ipset=/microsoftnewsforkids.org/gfwlist +server=/swiftfinancial.info/127.0.0.1#5335 +ipset=/swiftfinancial.info/gfwlist +server=/svaboda.org/127.0.0.1#5335 +ipset=/svaboda.org/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=/ahorsecock.com/127.0.0.1#5335 +ipset=/ahorsecock.com/gfwlist +server=/foxnation.com/127.0.0.1#5335 +ipset=/foxnation.com/gfwlist +server=/wiseid.com/127.0.0.1#5335 +ipset=/wiseid.com/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=/renovacionoffice.com/127.0.0.1#5335 +ipset=/renovacionoffice.com/gfwlist +server=/sstatic.net/127.0.0.1#5335 +ipset=/sstatic.net/gfwlist +server=/microsoftmxfilantropia.com/127.0.0.1#5335 +ipset=/microsoftmxfilantropia.com/gfwlist +server=/monsterbeatsbydrdre-nz.com/127.0.0.1#5335 +ipset=/monsterbeatsbydrdre-nz.com/gfwlist +server=/amabitch.com/127.0.0.1#5335 +ipset=/amabitch.com/gfwlist +server=/zeit-world.org/127.0.0.1#5335 +ipset=/zeit-world.org/gfwlist +server=/amateurpages.com/127.0.0.1#5335 +ipset=/amateurpages.com/gfwlist +server=/cilk.net/127.0.0.1#5335 +ipset=/cilk.net/gfwlist +server=/cheapbeatsaustraliasale.com/127.0.0.1#5335 +ipset=/cheapbeatsaustraliasale.com/gfwlist +server=/airwick.it/127.0.0.1#5335 +ipset=/airwick.it/gfwlist +server=/masalladeloslimites.com/127.0.0.1#5335 +ipset=/masalladeloslimites.com/gfwlist +server=/afriboyz.com/127.0.0.1#5335 +ipset=/afriboyz.com/gfwlist +server=/voanoticias.com/127.0.0.1#5335 +ipset=/voanoticias.com/gfwlist +server=/guambmw.com/127.0.0.1#5335 +ipset=/guambmw.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=/wellfuckedwife.com/127.0.0.1#5335 +ipset=/wellfuckedwife.com/gfwlist +server=/subscene.com/127.0.0.1#5335 +ipset=/subscene.com/gfwlist +server=/hentaix.me/127.0.0.1#5335 +ipset=/hentaix.me/gfwlist +server=/kkbox.com/127.0.0.1#5335 +ipset=/kkbox.com/gfwlist +server=/ads.pubmatic.com/127.0.0.1#5335 +ipset=/ads.pubmatic.com/gfwlist +server=/exgirlfriendmarket.com/127.0.0.1#5335 +ipset=/exgirlfriendmarket.com/gfwlist +server=/lepornochaud.com/127.0.0.1#5335 +ipset=/lepornochaud.com/gfwlist +server=/bisyoujyogyaruge.topaz.ne.jp/127.0.0.1#5335 +ipset=/bisyoujyogyaruge.topaz.ne.jp/gfwlist +server=/adobesign.com/127.0.0.1#5335 +ipset=/adobesign.com/gfwlist +server=/minihalifax.ca/127.0.0.1#5335 +ipset=/minihalifax.ca/gfwlist +server=/dailybasis.com/127.0.0.1#5335 +ipset=/dailybasis.com/gfwlist +server=/harpercollins.co.uk/127.0.0.1#5335 +ipset=/harpercollins.co.uk/gfwlist +server=/bing.net/127.0.0.1#5335 +ipset=/bing.net/gfwlist +server=/theinstagramhack.com/127.0.0.1#5335 +ipset=/theinstagramhack.com/gfwlist +server=/azure-dns.org/127.0.0.1#5335 +ipset=/azure-dns.org/gfwlist +server=/azure-dns.info/127.0.0.1#5335 +ipset=/azure-dns.info/gfwlist +server=/mocloudplus.com/127.0.0.1#5335 +ipset=/mocloudplus.com/gfwlist +server=/ebayincconnectedcommerce.net/127.0.0.1#5335 +ipset=/ebayincconnectedcommerce.net/gfwlist +server=/disney.it/127.0.0.1#5335 +ipset=/disney.it/gfwlist +server=/steamofporn.com/127.0.0.1#5335 +ipset=/steamofporn.com/gfwlist +server=/tomatespodres.com/127.0.0.1#5335 +ipset=/tomatespodres.com/gfwlist +server=/gsuite.com/127.0.0.1#5335 +ipset=/gsuite.com/gfwlist +server=/windowsazure.com/127.0.0.1#5335 +ipset=/windowsazure.com/gfwlist +server=/workspaceone.com/127.0.0.1#5335 +ipset=/workspaceone.com/gfwlist +server=/picacomic.com/127.0.0.1#5335 +ipset=/picacomic.com/gfwlist +server=/trafficmanager.net/127.0.0.1#5335 +ipset=/trafficmanager.net/gfwlist +server=/bestpornsites.eu/127.0.0.1#5335 +ipset=/bestpornsites.eu/gfwlist +server=/awsloft-johannesburg.com/127.0.0.1#5335 +ipset=/awsloft-johannesburg.com/gfwlist +server=/foxsoccermatchpass.com/127.0.0.1#5335 +ipset=/foxsoccermatchpass.com/gfwlist +server=/starbucks.co.za/127.0.0.1#5335 +ipset=/starbucks.co.za/gfwlist +server=/jetbrains.com/127.0.0.1#5335 +ipset=/jetbrains.com/gfwlist +server=/hotcumporn.com/127.0.0.1#5335 +ipset=/hotcumporn.com/gfwlist +server=/huffingtonpost.it/127.0.0.1#5335 +ipset=/huffingtonpost.it/gfwlist +server=/direcpath.com/127.0.0.1#5335 +ipset=/direcpath.com/gfwlist +server=/gotcosmos.com/127.0.0.1#5335 +ipset=/gotcosmos.com/gfwlist +server=/devopsms.com/127.0.0.1#5335 +ipset=/devopsms.com/gfwlist +server=/beats-bydreuk.com/127.0.0.1#5335 +ipset=/beats-bydreuk.com/gfwlist +server=/pricelesssantiago.com/127.0.0.1#5335 +ipset=/pricelesssantiago.com/gfwlist +server=/printeron.com/127.0.0.1#5335 +ipset=/printeron.com/gfwlist +server=/visa.com.ph/127.0.0.1#5335 +ipset=/visa.com.ph/gfwlist +server=/embed-cdn.com/127.0.0.1#5335 +ipset=/embed-cdn.com/gfwlist +server=/minidowntown.com/127.0.0.1#5335 +ipset=/minidowntown.com/gfwlist +server=/azurewebsites.net/127.0.0.1#5335 +ipset=/azurewebsites.net/gfwlist +server=/ebaypark.com/127.0.0.1#5335 +ipset=/ebaypark.com/gfwlist +server=/azuresmartspaces.net/127.0.0.1#5335 +ipset=/azuresmartspaces.net/gfwlist +server=/md.hkgolden.com/127.0.0.1#5335 +ipset=/md.hkgolden.com/gfwlist +server=/ero-mangalife.com/127.0.0.1#5335 +ipset=/ero-mangalife.com/gfwlist +server=/newbrazz.com/127.0.0.1#5335 +ipset=/newbrazz.com/gfwlist +server=/javdb.com/127.0.0.1#5335 +ipset=/javdb.com/gfwlist +server=/azureserviceprofiler.com/127.0.0.1#5335 +ipset=/azureserviceprofiler.com/gfwlist +server=/msgamesresearch.com/127.0.0.1#5335 +ipset=/msgamesresearch.com/gfwlist +server=/youlucky.com/127.0.0.1#5335 +ipset=/youlucky.com/gfwlist +server=/enemahistory.com/127.0.0.1#5335 +ipset=/enemahistory.com/gfwlist +server=/lovemarca.com/127.0.0.1#5335 +ipset=/lovemarca.com/gfwlist +server=/cheapbeatsdrdresolo.com/127.0.0.1#5335 +ipset=/cheapbeatsdrdresolo.com/gfwlist +server=/anal-pantyhose.com/127.0.0.1#5335 +ipset=/anal-pantyhose.com/gfwlist +server=/maddenseason.info/127.0.0.1#5335 +ipset=/maddenseason.info/gfwlist +server=/steampipe-partner.akamaized.net/127.0.0.1#5335 +ipset=/steampipe-partner.akamaized.net/gfwlist +server=/poisontube.com/127.0.0.1#5335 +ipset=/poisontube.com/gfwlist +server=/hpstore.corpmerchandise.com/127.0.0.1#5335 +ipset=/hpstore.corpmerchandise.com/gfwlist +server=/eafootballworld.com/127.0.0.1#5335 +ipset=/eafootballworld.com/gfwlist +server=/yahoo.com.es/127.0.0.1#5335 +ipset=/yahoo.com.es/gfwlist +server=/cam69.com/127.0.0.1#5335 +ipset=/cam69.com/gfwlist +server=/azuredns-prd.info/127.0.0.1#5335 +ipset=/azuredns-prd.info/gfwlist +server=/largecamtube.com/127.0.0.1#5335 +ipset=/largecamtube.com/gfwlist +server=/siri.com/127.0.0.1#5335 +ipset=/siri.com/gfwlist +server=/prd-priconne-redive.akamaized.net/127.0.0.1#5335 +ipset=/prd-priconne-redive.akamaized.net/gfwlist +server=/azuredigitaltwins.com/127.0.0.1#5335 +ipset=/azuredigitaltwins.com/gfwlist +server=/openapiplatform.com/127.0.0.1#5335 +ipset=/openapiplatform.com/gfwlist +server=/azuredigitaltwin.com/127.0.0.1#5335 +ipset=/azuredigitaltwin.com/gfwlist +server=/get.how/127.0.0.1#5335 +ipset=/get.how/gfwlist +server=/azuredatabricks.net/127.0.0.1#5335 +ipset=/azuredatabricks.net/gfwlist +server=/facebkkk.com/127.0.0.1#5335 +ipset=/facebkkk.com/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=/veryshortintroductions.com/127.0.0.1#5335 +ipset=/veryshortintroductions.com/gfwlist +server=/typekit.com/127.0.0.1#5335 +ipset=/typekit.com/gfwlist +server=/paypal-exchanges.com/127.0.0.1#5335 +ipset=/paypal-exchanges.com/gfwlist +server=/mini-e.com/127.0.0.1#5335 +ipset=/mini-e.com/gfwlist +server=/azurecosmosdb.com/127.0.0.1#5335 +ipset=/azurecosmosdb.com/gfwlist +server=/mobilepornmovies.com/127.0.0.1#5335 +ipset=/mobilepornmovies.com/gfwlist +server=/azurecosmos.net/127.0.0.1#5335 +ipset=/azurecosmos.net/gfwlist +server=/azurecontainer.io/127.0.0.1#5335 +ipset=/azurecontainer.io/gfwlist +server=/stadia.dev/127.0.0.1#5335 +ipset=/stadia.dev/gfwlist +server=/redkix.com/127.0.0.1#5335 +ipset=/redkix.com/gfwlist +server=/attwatchtv.com/127.0.0.1#5335 +ipset=/attwatchtv.com/gfwlist +server=/pearson.com.au/127.0.0.1#5335 +ipset=/pearson.com.au/gfwlist +server=/brokenteens.com/127.0.0.1#5335 +ipset=/brokenteens.com/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=/sexycandidgirls.com/127.0.0.1#5335 +ipset=/sexycandidgirls.com/gfwlist +server=/fullbookmm.blogspot.com/127.0.0.1#5335 +ipset=/fullbookmm.blogspot.com/gfwlist +server=/aflamsex.net/127.0.0.1#5335 +ipset=/aflamsex.net/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=/verilystudyhub.com/127.0.0.1#5335 +ipset=/verilystudyhub.com/gfwlist +server=/2014cheapbeatsbydre.com/127.0.0.1#5335 +ipset=/2014cheapbeatsbydre.com/gfwlist +server=/azure.com/127.0.0.1#5335 +ipset=/azure.com/gfwlist +server=/minivilledequebec.ca/127.0.0.1#5335 +ipset=/minivilledequebec.ca/gfwlist +server=/azure-test.net/127.0.0.1#5335 +ipset=/azure-test.net/gfwlist +server=/pki.goog/127.0.0.1#5335 +ipset=/pki.goog/gfwlist +server=/braintreepayments.com/127.0.0.1#5335 +ipset=/braintreepayments.com/gfwlist +server=/azure-devices-int.net/127.0.0.1#5335 +ipset=/azure-devices-int.net/gfwlist +server=/translatetheweb.com/127.0.0.1#5335 +ipset=/translatetheweb.com/gfwlist +server=/londonhotescort.com/127.0.0.1#5335 +ipset=/londonhotescort.com/gfwlist +server=/oculusvr.com/127.0.0.1#5335 +ipset=/oculusvr.com/gfwlist +server=/inaporn.com/127.0.0.1#5335 +ipset=/inaporn.com/gfwlist +server=/paypal-knowledge.com/127.0.0.1#5335 +ipset=/paypal-knowledge.com/gfwlist +server=/oculusconnect.com/127.0.0.1#5335 +ipset=/oculusconnect.com/gfwlist +server=/managed-pki.de/127.0.0.1#5335 +ipset=/managed-pki.de/gfwlist +server=/wiiugamepad.com/127.0.0.1#5335 +ipset=/wiiugamepad.com/gfwlist +server=/oculusbrand.com/127.0.0.1#5335 +ipset=/oculusbrand.com/gfwlist +server=/googlecompare.co.uk/127.0.0.1#5335 +ipset=/googlecompare.co.uk/gfwlist +server=/nikebetrue.com/127.0.0.1#5335 +ipset=/nikebetrue.com/gfwlist +server=/bmw-pakistan.com/127.0.0.1#5335 +ipset=/bmw-pakistan.com/gfwlist +server=/superadultgames.com/127.0.0.1#5335 +ipset=/superadultgames.com/gfwlist +server=/youtube.googleapis.com/127.0.0.1#5335 +ipset=/youtube.googleapis.com/gfwlist +server=/x18r.com/127.0.0.1#5335 +ipset=/x18r.com/gfwlist +server=/wsjbarrons.com/127.0.0.1#5335 +ipset=/wsjbarrons.com/gfwlist +server=/volvotrucks.com.pt/127.0.0.1#5335 +ipset=/volvotrucks.com.pt/gfwlist +server=/streamate.com/127.0.0.1#5335 +ipset=/streamate.com/gfwlist +server=/thisispolaris.com/127.0.0.1#5335 +ipset=/thisispolaris.com/gfwlist +server=/cloudflarestorage.com/127.0.0.1#5335 +ipset=/cloudflarestorage.com/gfwlist +server=/ikea.co.ca/127.0.0.1#5335 +ipset=/ikea.co.ca/gfwlist +server=/binoculus.com/127.0.0.1#5335 +ipset=/binoculus.com/gfwlist +server=/intel.pa/127.0.0.1#5335 +ipset=/intel.pa/gfwlist +server=/mycdn.me/127.0.0.1#5335 +ipset=/mycdn.me/gfwlist +server=/1degree.com.au/127.0.0.1#5335 +ipset=/1degree.com.au/gfwlist +server=/webgata.net/127.0.0.1#5335 +ipset=/webgata.net/gfwlist +server=/mydirectvchannels.com/127.0.0.1#5335 +ipset=/mydirectvchannels.com/gfwlist +server=/rocksextube.com/127.0.0.1#5335 +ipset=/rocksextube.com/gfwlist +server=/volvobuses.kr/127.0.0.1#5335 +ipset=/volvobuses.kr/gfwlist +server=/tube8.fr/127.0.0.1#5335 +ipset=/tube8.fr/gfwlist +server=/filmeporno.xxx/127.0.0.1#5335 +ipset=/filmeporno.xxx/gfwlist +server=/iutunes.com/127.0.0.1#5335 +ipset=/iutunes.com/gfwlist +server=/cartoontube.com/127.0.0.1#5335 +ipset=/cartoontube.com/gfwlist +server=/logitech.fr/127.0.0.1#5335 +ipset=/logitech.fr/gfwlist +server=/theaustralian.com.au/127.0.0.1#5335 +ipset=/theaustralian.com.au/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=/xxxtubedot.com/127.0.0.1#5335 +ipset=/xxxtubedot.com/gfwlist +server=/logitech.com/127.0.0.1#5335 +ipset=/logitech.com/gfwlist +server=/comicbox.xyz/127.0.0.1#5335 +ipset=/comicbox.xyz/gfwlist +server=/supersexeamateur.com/127.0.0.1#5335 +ipset=/supersexeamateur.com/gfwlist +server=/headphoneses.com/127.0.0.1#5335 +ipset=/headphoneses.com/gfwlist +server=/mini-connected.pl/127.0.0.1#5335 +ipset=/mini-connected.pl/gfwlist +server=/youtube.lv/127.0.0.1#5335 +ipset=/youtube.lv/gfwlist +server=/logi.com/127.0.0.1#5335 +ipset=/logi.com/gfwlist +server=/pinterest.dk/127.0.0.1#5335 +ipset=/pinterest.dk/gfwlist +server=/lgelectronics.122.2o7.net/127.0.0.1#5335 +ipset=/lgelectronics.122.2o7.net/gfwlist +server=/freesexgames.ws/127.0.0.1#5335 +ipset=/freesexgames.ws/gfwlist +server=/vipshoes2.com/127.0.0.1#5335 +ipset=/vipshoes2.com/gfwlist +server=/baazee.com/127.0.0.1#5335 +ipset=/baazee.com/gfwlist +server=/hotfucktube.com/127.0.0.1#5335 +ipset=/hotfucktube.com/gfwlist +server=/lgrecyclingprogram.com/127.0.0.1#5335 +ipset=/lgrecyclingprogram.com/gfwlist +server=/avple.tv/127.0.0.1#5335 +ipset=/avple.tv/gfwlist +server=/lghvac.com/127.0.0.1#5335 +ipset=/lghvac.com/gfwlist +server=/mandatewire.com/127.0.0.1#5335 +ipset=/mandatewire.com/gfwlist +server=/google.com.vc/127.0.0.1#5335 +ipset=/google.com.vc/gfwlist +server=/nintendo.fr/127.0.0.1#5335 +ipset=/nintendo.fr/gfwlist +server=/vcloudair.net/127.0.0.1#5335 +ipset=/vcloudair.net/gfwlist +server=/bmw.nc/127.0.0.1#5335 +ipset=/bmw.nc/gfwlist +server=/jfengtime.com/127.0.0.1#5335 +ipset=/jfengtime.com/gfwlist +server=/erotictube.me/127.0.0.1#5335 +ipset=/erotictube.me/gfwlist +server=/vfsco.com.au/127.0.0.1#5335 +ipset=/vfsco.com.au/gfwlist +server=/lg.com/127.0.0.1#5335 +ipset=/lg.com/gfwlist +server=/trustisfps.com/127.0.0.1#5335 +ipset=/trustisfps.com/gfwlist +server=/public-trust.com/127.0.0.1#5335 +ipset=/public-trust.com/gfwlist +server=/yaoimangaonline.com/127.0.0.1#5335 +ipset=/yaoimangaonline.com/gfwlist +server=/trustedanalytics.com/127.0.0.1#5335 +ipset=/trustedanalytics.com/gfwlist +server=/nvidia.com.au/127.0.0.1#5335 +ipset=/nvidia.com.au/gfwlist +server=/kink.com/127.0.0.1#5335 +ipset=/kink.com/gfwlist +server=/openvinotoolkit.org/127.0.0.1#5335 +ipset=/openvinotoolkit.org/gfwlist +server=/gothdporn.com/127.0.0.1#5335 +ipset=/gothdporn.com/gfwlist +server=/shopee.com.br/127.0.0.1#5335 +ipset=/shopee.com.br/gfwlist +server=/beatsdreus.com/127.0.0.1#5335 +ipset=/beatsdreus.com/gfwlist +server=/nextfilm.com.hk/127.0.0.1#5335 +ipset=/nextfilm.com.hk/gfwlist +server=/2adultflashgames.com/127.0.0.1#5335 +ipset=/2adultflashgames.com/gfwlist +server=/foxcollegesports.com/127.0.0.1#5335 +ipset=/foxcollegesports.com/gfwlist +server=/siport.com/127.0.0.1#5335 +ipset=/siport.com/gfwlist +server=/htvncdn.net/127.0.0.1#5335 +ipset=/htvncdn.net/gfwlist +server=/sensorynetworks.com/127.0.0.1#5335 +ipset=/sensorynetworks.com/gfwlist +server=/patreoncommunity.com/127.0.0.1#5335 +ipset=/patreoncommunity.com/gfwlist +server=/bloombergpolarlake.com/127.0.0.1#5335 +ipset=/bloombergpolarlake.com/gfwlist +server=/azattyq.org/127.0.0.1#5335 +ipset=/azattyq.org/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=/researchintel.com/127.0.0.1#5335 +ipset=/researchintel.com/gfwlist +server=/pintool.com/127.0.0.1#5335 +ipset=/pintool.com/gfwlist +server=/apnews.com/127.0.0.1#5335 +ipset=/apnews.com/gfwlist +server=/pentium.net/127.0.0.1#5335 +ipset=/pentium.net/gfwlist +server=/pc.com/127.0.0.1#5335 +ipset=/pc.com/gfwlist +server=/optanedifference.com/127.0.0.1#5335 +ipset=/optanedifference.com/gfwlist +server=/opendroneid.org/127.0.0.1#5335 +ipset=/opendroneid.org/gfwlist +server=/google.pl/127.0.0.1#5335 +ipset=/google.pl/gfwlist +server=/249dw7.cn/127.0.0.1#5335 +ipset=/249dw7.cn/gfwlist +server=/ibook.co.nz/127.0.0.1#5335 +ipset=/ibook.co.nz/gfwlist +server=/mastercard.com.br/127.0.0.1#5335 +ipset=/mastercard.com.br/gfwlist +server=/booksc.org/127.0.0.1#5335 +ipset=/booksc.org/gfwlist +server=/niken7.com/127.0.0.1#5335 +ipset=/niken7.com/gfwlist +server=/pornoaid.com/127.0.0.1#5335 +ipset=/pornoaid.com/gfwlist +server=/nextgenerationcenter.com/127.0.0.1#5335 +ipset=/nextgenerationcenter.com/gfwlist +server=/ciscocontest.com/127.0.0.1#5335 +ipset=/ciscocontest.com/gfwlist +server=/loverslab.com/127.0.0.1#5335 +ipset=/loverslab.com/gfwlist +server=/hipzoom.net/127.0.0.1#5335 +ipset=/hipzoom.net/gfwlist +server=/nevex.com/127.0.0.1#5335 +ipset=/nevex.com/gfwlist +server=/nist.gov/127.0.0.1#5335 +ipset=/nist.gov/gfwlist +server=/geelongadvertiser.com.au/127.0.0.1#5335 +ipset=/geelongadvertiser.com.au/gfwlist +server=/instantfap.com/127.0.0.1#5335 +ipset=/instantfap.com/gfwlist +server=/movidius.com/127.0.0.1#5335 +ipset=/movidius.com/gfwlist +server=/hpstorethailand.com/127.0.0.1#5335 +ipset=/hpstorethailand.com/gfwlist +server=/headphones-dre.com/127.0.0.1#5335 +ipset=/headphones-dre.com/gfwlist +server=/zeit-world.net/127.0.0.1#5335 +ipset=/zeit-world.net/gfwlist +server=/lookinside.com/127.0.0.1#5335 +ipset=/lookinside.com/gfwlist +server=/inteltechnologyprovider.com/127.0.0.1#5335 +ipset=/inteltechnologyprovider.com/gfwlist +server=/intelstore.com/127.0.0.1#5335 +ipset=/intelstore.com/gfwlist +server=/yaoyaomumu.com/127.0.0.1#5335 +ipset=/yaoyaomumu.com/gfwlist +server=/postimg.cc/127.0.0.1#5335 +ipset=/postimg.cc/gfwlist +server=/eu-consumer-empowerment.com/127.0.0.1#5335 +ipset=/eu-consumer-empowerment.com/gfwlist +server=/monsterbeatssydneyaustralia.com/127.0.0.1#5335 +ipset=/monsterbeatssydneyaustralia.com/gfwlist +server=/intelsoftwarenetwork.com/127.0.0.1#5335 +ipset=/intelsoftwarenetwork.com/gfwlist +server=/myavfun.com/127.0.0.1#5335 +ipset=/myavfun.com/gfwlist +server=/brew.sh/127.0.0.1#5335 +ipset=/brew.sh/gfwlist +server=/blogspot.sn/127.0.0.1#5335 +ipset=/blogspot.sn/gfwlist +server=/porn555.com/127.0.0.1#5335 +ipset=/porn555.com/gfwlist +server=/foxacrossamerica.com/127.0.0.1#5335 +ipset=/foxacrossamerica.com/gfwlist +server=/intelsalestraining.com/127.0.0.1#5335 +ipset=/intelsalestraining.com/gfwlist +server=/costco.com/127.0.0.1#5335 +ipset=/costco.com/gfwlist +server=/tittykings.com/127.0.0.1#5335 +ipset=/tittykings.com/gfwlist +server=/poringa.net/127.0.0.1#5335 +ipset=/poringa.net/gfwlist +server=/pypa.io/127.0.0.1#5335 +ipset=/pypa.io/gfwlist +server=/intelrealsense.com/127.0.0.1#5335 +ipset=/intelrealsense.com/gfwlist +server=/intelquark.com/127.0.0.1#5335 +ipset=/intelquark.com/gfwlist +server=/bmwmotorradhk.com/127.0.0.1#5335 +ipset=/bmwmotorradhk.com/gfwlist +server=/xxxjapanesemovies.com/127.0.0.1#5335 +ipset=/xxxjapanesemovies.com/gfwlist +server=/newsmart.jp/127.0.0.1#5335 +ipset=/newsmart.jp/gfwlist +server=/nhentai.io/127.0.0.1#5335 +ipset=/nhentai.io/gfwlist +server=/thomsonreutersmexico.com/127.0.0.1#5335 +ipset=/thomsonreutersmexico.com/gfwlist +server=/intelnervana.com/127.0.0.1#5335 +ipset=/intelnervana.com/gfwlist +server=/wankgames.com/127.0.0.1#5335 +ipset=/wankgames.com/gfwlist +server=/naughtyblog.org/127.0.0.1#5335 +ipset=/naughtyblog.org/gfwlist +server=/cuntempire.com/127.0.0.1#5335 +ipset=/cuntempire.com/gfwlist +server=/fbsupport-covid.net/127.0.0.1#5335 +ipset=/fbsupport-covid.net/gfwlist +server=/realzoomovies.com/127.0.0.1#5335 +ipset=/realzoomovies.com/gfwlist +server=/avnana5.com/127.0.0.1#5335 +ipset=/avnana5.com/gfwlist +server=/hcpdts.com/127.0.0.1#5335 +ipset=/hcpdts.com/gfwlist +server=/logicool.co.jp/127.0.0.1#5335 +ipset=/logicool.co.jp/gfwlist +server=/sexy3dtoon.com/127.0.0.1#5335 +ipset=/sexy3dtoon.com/gfwlist +server=/intelgo.net/127.0.0.1#5335 +ipset=/intelgo.net/gfwlist +server=/iphone4.com/127.0.0.1#5335 +ipset=/iphone4.com/gfwlist +server=/bandgirlz.com/127.0.0.1#5335 +ipset=/bandgirlz.com/gfwlist +server=/intelforchange.com/127.0.0.1#5335 +ipset=/intelforchange.com/gfwlist +server=/inteleventexpress.com/127.0.0.1#5335 +ipset=/inteleventexpress.com/gfwlist +server=/vpngate.jp/127.0.0.1#5335 +ipset=/vpngate.jp/gfwlist +server=/benliton.com/127.0.0.1#5335 +ipset=/benliton.com/gfwlist +server=/intelcapital.com/127.0.0.1#5335 +ipset=/intelcapital.com/gfwlist +server=/thepornlist.com/127.0.0.1#5335 +ipset=/thepornlist.com/gfwlist +server=/nikelink.com/127.0.0.1#5335 +ipset=/nikelink.com/gfwlist +server=/intelapacstore.com/127.0.0.1#5335 +ipset=/intelapacstore.com/gfwlist +server=/bmw-connecteddrive.ie/127.0.0.1#5335 +ipset=/bmw-connecteddrive.ie/gfwlist +server=/radiomarsho.com/127.0.0.1#5335 +ipset=/radiomarsho.com/gfwlist +server=/intelamericasstore.com/127.0.0.1#5335 +ipset=/intelamericasstore.com/gfwlist +server=/bmwlat.com/127.0.0.1#5335 +ipset=/bmwlat.com/gfwlist +server=/adobepress.ch/127.0.0.1#5335 +ipset=/adobepress.ch/gfwlist +server=/amazon.com.br/127.0.0.1#5335 +ipset=/amazon.com.br/gfwlist +server=/bttzyw.net/127.0.0.1#5335 +ipset=/bttzyw.net/gfwlist +server=/intel-university-collaboration.net/127.0.0.1#5335 +ipset=/intel-university-collaboration.net/gfwlist +server=/payypal.com/127.0.0.1#5335 +ipset=/payypal.com/gfwlist +server=/pornorips.com/127.0.0.1#5335 +ipset=/pornorips.com/gfwlist +server=/dandanzan.cc/127.0.0.1#5335 +ipset=/dandanzan.cc/gfwlist +server=/mini.dk/127.0.0.1#5335 +ipset=/mini.dk/gfwlist +server=/intel.tj/127.0.0.1#5335 +ipset=/intel.tj/gfwlist +server=/comicuniverse.org/127.0.0.1#5335 +ipset=/comicuniverse.org/gfwlist +server=/protonstatus.com/127.0.0.1#5335 +ipset=/protonstatus.com/gfwlist +server=/blogspot.hk/127.0.0.1#5335 +ipset=/blogspot.hk/gfwlist +server=/alterauserforums.net/127.0.0.1#5335 +ipset=/alterauserforums.net/gfwlist +server=/easic.com/127.0.0.1#5335 +ipset=/easic.com/gfwlist +server=/akamai-trials.com/127.0.0.1#5335 +ipset=/akamai-trials.com/gfwlist +server=/foxsoccerplus.net/127.0.0.1#5335 +ipset=/foxsoccerplus.net/gfwlist +server=/machigle-sp.com/127.0.0.1#5335 +ipset=/machigle-sp.com/gfwlist +server=/coreextreme.com/127.0.0.1#5335 +ipset=/coreextreme.com/gfwlist +server=/bmw.kz/127.0.0.1#5335 +ipset=/bmw.kz/gfwlist +server=/amateurcool.com/127.0.0.1#5335 +ipset=/amateurcool.com/gfwlist +server=/faacebook.com/127.0.0.1#5335 +ipset=/faacebook.com/gfwlist +server=/rentaride.com/127.0.0.1#5335 +ipset=/rentaride.com/gfwlist +server=/clusterconnection.com/127.0.0.1#5335 +ipset=/clusterconnection.com/gfwlist +server=/imhentai.xxx/127.0.0.1#5335 +ipset=/imhentai.xxx/gfwlist +server=/mrloli.com/127.0.0.1#5335 +ipset=/mrloli.com/gfwlist +server=/facebookexchange.net/127.0.0.1#5335 +ipset=/facebookexchange.net/gfwlist +server=/mini-connected.ee/127.0.0.1#5335 +ipset=/mini-connected.ee/gfwlist +server=/chips.com/127.0.0.1#5335 +ipset=/chips.com/gfwlist +server=/newyorker.com/127.0.0.1#5335 +ipset=/newyorker.com/gfwlist +server=/akami.com/127.0.0.1#5335 +ipset=/akami.com/gfwlist +server=/marvelsdoubleagent.com/127.0.0.1#5335 +ipset=/marvelsdoubleagent.com/gfwlist +server=/iwantavnow.com/127.0.0.1#5335 +ipset=/iwantavnow.com/gfwlist +server=/alphera.com.my/127.0.0.1#5335 +ipset=/alphera.com.my/gfwlist +server=/bigboss.video/127.0.0.1#5335 +ipset=/bigboss.video/gfwlist +server=/bmw-motorrad.bo/127.0.0.1#5335 +ipset=/bmw-motorrad.bo/gfwlist +server=/ipod.com/127.0.0.1#5335 +ipset=/ipod.com/gfwlist +server=/starbucksrtd.com/127.0.0.1#5335 +ipset=/starbucksrtd.com/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=/vfsco.hu/127.0.0.1#5335 +ipset=/vfsco.hu/gfwlist +server=/mini.com.tr/127.0.0.1#5335 +ipset=/mini.com.tr/gfwlist +server=/monsterbeatsalestore.com/127.0.0.1#5335 +ipset=/monsterbeatsalestore.com/gfwlist +server=/alterauserforum.net/127.0.0.1#5335 +ipset=/alterauserforum.net/gfwlist +server=/kingextre.me/127.0.0.1#5335 +ipset=/kingextre.me/gfwlist +server=/alteraforums.net/127.0.0.1#5335 +ipset=/alteraforums.net/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=/foxfaq.com/127.0.0.1#5335 +ipset=/foxfaq.com/gfwlist +server=/evilangel.com/127.0.0.1#5335 +ipset=/evilangel.com/gfwlist +server=/worldemojiawards.com/127.0.0.1#5335 +ipset=/worldemojiawards.com/gfwlist +server=/mini.com.ar/127.0.0.1#5335 +ipset=/mini.com.ar/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=/beats-bydreoutletsale.net/127.0.0.1#5335 +ipset=/beats-bydreoutletsale.net/gfwlist +server=/cbscorporation.com/127.0.0.1#5335 +ipset=/cbscorporation.com/gfwlist +server=/garenanow.com/127.0.0.1#5335 +ipset=/garenanow.com/gfwlist +server=/overcast.fm/127.0.0.1#5335 +ipset=/overcast.fm/gfwlist +server=/airwatchexpress.com/127.0.0.1#5335 +ipset=/airwatchexpress.com/gfwlist +server=/findmybeats.com/127.0.0.1#5335 +ipset=/findmybeats.com/gfwlist +server=/durex.com.co/127.0.0.1#5335 +ipset=/durex.com.co/gfwlist +server=/yourvoyeurvideos.com/127.0.0.1#5335 +ipset=/yourvoyeurvideos.com/gfwlist +server=/topsexygames.com/127.0.0.1#5335 +ipset=/topsexygames.com/gfwlist +server=/assylum.com/127.0.0.1#5335 +ipset=/assylum.com/gfwlist +server=/paypalcommunity.org/127.0.0.1#5335 +ipset=/paypalcommunity.org/gfwlist +server=/nikebetterworld.net/127.0.0.1#5335 +ipset=/nikebetterworld.net/gfwlist +server=/southfloridamini.com/127.0.0.1#5335 +ipset=/southfloridamini.com/gfwlist +server=/hkgolden.com/127.0.0.1#5335 +ipset=/hkgolden.com/gfwlist +server=/pogo.com/127.0.0.1#5335 +ipset=/pogo.com/gfwlist +server=/intel.vn/127.0.0.1#5335 +ipset=/intel.vn/gfwlist +server=/visualarts.gr.jp/127.0.0.1#5335 +ipset=/visualarts.gr.jp/gfwlist +server=/intel.vg/127.0.0.1#5335 +ipset=/intel.vg/gfwlist +server=/masterpassteststore.com/127.0.0.1#5335 +ipset=/masterpassteststore.com/gfwlist +server=/maximumerotica.com/127.0.0.1#5335 +ipset=/maximumerotica.com/gfwlist +server=/intel.lc/127.0.0.1#5335 +ipset=/intel.lc/gfwlist +server=/nextmgz.com/127.0.0.1#5335 +ipset=/nextmgz.com/gfwlist +server=/intel.uy/127.0.0.1#5335 +ipset=/intel.uy/gfwlist +server=/javscreens.com/127.0.0.1#5335 +ipset=/javscreens.com/gfwlist +server=/digicert-cn.com/127.0.0.1#5335 +ipset=/digicert-cn.com/gfwlist +server=/yahoo.com.hk/127.0.0.1#5335 +ipset=/yahoo.com.hk/gfwlist +server=/voandebele.com/127.0.0.1#5335 +ipset=/voandebele.com/gfwlist +server=/cyber-bay.info/127.0.0.1#5335 +ipset=/cyber-bay.info/gfwlist +server=/intel.tt/127.0.0.1#5335 +ipset=/intel.tt/gfwlist +server=/ebayseller.com/127.0.0.1#5335 +ipset=/ebayseller.com/gfwlist +server=/hentaivideos.net/127.0.0.1#5335 +ipset=/hentaivideos.net/gfwlist +server=/foxnewsgo.net/127.0.0.1#5335 +ipset=/foxnewsgo.net/gfwlist +server=/voyeurpapa.com/127.0.0.1#5335 +ipset=/voyeurpapa.com/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=/intel.tn/127.0.0.1#5335 +ipset=/intel.tn/gfwlist +server=/intel.tm/127.0.0.1#5335 +ipset=/intel.tm/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=/intel.tl/127.0.0.1#5335 +ipset=/intel.tl/gfwlist +server=/intel.tf/127.0.0.1#5335 +ipset=/intel.tf/gfwlist +server=/foxbet.com/127.0.0.1#5335 +ipset=/foxbet.com/gfwlist +server=/facebookads.com/127.0.0.1#5335 +ipset=/facebookads.com/gfwlist +server=/libgen.life/127.0.0.1#5335 +ipset=/libgen.life/gfwlist +server=/element.io/127.0.0.1#5335 +ipset=/element.io/gfwlist +server=/hentairank.supertop-100.com/127.0.0.1#5335 +ipset=/hentairank.supertop-100.com/gfwlist +server=/amazon.ca/127.0.0.1#5335 +ipset=/amazon.ca/gfwlist +server=/bestfreetube.net/127.0.0.1#5335 +ipset=/bestfreetube.net/gfwlist +server=/intel.st/127.0.0.1#5335 +ipset=/intel.st/gfwlist +server=/gold-gay.com/127.0.0.1#5335 +ipset=/gold-gay.com/gfwlist +server=/theindianleaks.com/127.0.0.1#5335 +ipset=/theindianleaks.com/gfwlist +server=/account-paypal.net/127.0.0.1#5335 +ipset=/account-paypal.net/gfwlist +server=/intel.sk/127.0.0.1#5335 +ipset=/intel.sk/gfwlist +server=/mywifecuckold.com/127.0.0.1#5335 +ipset=/mywifecuckold.com/gfwlist +server=/softbankbb.net/127.0.0.1#5335 +ipset=/softbankbb.net/gfwlist +server=/tex-talk.net/127.0.0.1#5335 +ipset=/tex-talk.net/gfwlist +server=/applecare.eu/127.0.0.1#5335 +ipset=/applecare.eu/gfwlist +server=/icloudpay.net/127.0.0.1#5335 +ipset=/icloudpay.net/gfwlist +server=/otbm.com/127.0.0.1#5335 +ipset=/otbm.com/gfwlist +server=/facevbook.com/127.0.0.1#5335 +ipset=/facevbook.com/gfwlist +server=/huffingtonpost.es/127.0.0.1#5335 +ipset=/huffingtonpost.es/gfwlist +server=/edgefonts.net/127.0.0.1#5335 +ipset=/edgefonts.net/gfwlist +server=/sony.eu/127.0.0.1#5335 +ipset=/sony.eu/gfwlist +server=/20thcenturystudios.jp/127.0.0.1#5335 +ipset=/20thcenturystudios.jp/gfwlist +server=/petardas.com/127.0.0.1#5335 +ipset=/petardas.com/gfwlist +server=/intel.pn/127.0.0.1#5335 +ipset=/intel.pn/gfwlist +server=/ahtops.com/127.0.0.1#5335 +ipset=/ahtops.com/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=/hqbutt.com/127.0.0.1#5335 +ipset=/hqbutt.com/gfwlist +server=/iloveinterracial.com/127.0.0.1#5335 +ipset=/iloveinterracial.com/gfwlist +server=/ftcdn.net/127.0.0.1#5335 +ipset=/ftcdn.net/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=/drdrebeatssale7.com/127.0.0.1#5335 +ipset=/drdrebeatssale7.com/gfwlist +server=/faceabook.com/127.0.0.1#5335 +ipset=/faceabook.com/gfwlist +server=/leagueoflegends.org/127.0.0.1#5335 +ipset=/leagueoflegends.org/gfwlist +server=/foxbusiness.com/127.0.0.1#5335 +ipset=/foxbusiness.com/gfwlist +server=/watchmygirlfriend.tv/127.0.0.1#5335 +ipset=/watchmygirlfriend.tv/gfwlist +server=/yespornplease.com/127.0.0.1#5335 +ipset=/yespornplease.com/gfwlist +server=/blpcareers.com/127.0.0.1#5335 +ipset=/blpcareers.com/gfwlist +server=/headphonepubs.com/127.0.0.1#5335 +ipset=/headphonepubs.com/gfwlist +server=/womenwill.id/127.0.0.1#5335 +ipset=/womenwill.id/gfwlist +server=/pearsonclinical.de/127.0.0.1#5335 +ipset=/pearsonclinical.de/gfwlist +server=/brazzers.xxx/127.0.0.1#5335 +ipset=/brazzers.xxx/gfwlist +server=/paxlicense.org/127.0.0.1#5335 +ipset=/paxlicense.org/gfwlist +server=/intel.mu/127.0.0.1#5335 +ipset=/intel.mu/gfwlist +server=/experiencebillmelater.com/127.0.0.1#5335 +ipset=/experiencebillmelater.com/gfwlist +server=/intel.mt/127.0.0.1#5335 +ipset=/intel.mt/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=/truefi.io/127.0.0.1#5335 +ipset=/truefi.io/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=/bmwlifestyle.ca/127.0.0.1#5335 +ipset=/bmwlifestyle.ca/gfwlist +server=/erabaru.net/127.0.0.1#5335 +ipset=/erabaru.net/gfwlist +server=/discord.co/127.0.0.1#5335 +ipset=/discord.co/gfwlist +server=/nhentaihaven.com/127.0.0.1#5335 +ipset=/nhentaihaven.com/gfwlist +server=/buyfast-paysmart.net/127.0.0.1#5335 +ipset=/buyfast-paysmart.net/gfwlist +server=/intel.mg/127.0.0.1#5335 +ipset=/intel.mg/gfwlist +server=/instagramci.com/127.0.0.1#5335 +ipset=/instagramci.com/gfwlist +server=/facebooknude.com/127.0.0.1#5335 +ipset=/facebooknude.com/gfwlist +server=/gauleporno.xxx/127.0.0.1#5335 +ipset=/gauleporno.xxx/gfwlist +server=/orlandohurricane.com/127.0.0.1#5335 +ipset=/orlandohurricane.com/gfwlist +server=/intel.me/127.0.0.1#5335 +ipset=/intel.me/gfwlist +server=/volvobuses.pl/127.0.0.1#5335 +ipset=/volvobuses.pl/gfwlist +server=/porndoepremium.com/127.0.0.1#5335 +ipset=/porndoepremium.com/gfwlist +server=/knovel.com/127.0.0.1#5335 +ipset=/knovel.com/gfwlist +server=/intel.ke/127.0.0.1#5335 +ipset=/intel.ke/gfwlist +server=/intel.jp/127.0.0.1#5335 +ipset=/intel.jp/gfwlist +server=/stripe.com/127.0.0.1#5335 +ipset=/stripe.com/gfwlist +server=/ebaytechblog.com/127.0.0.1#5335 +ipset=/ebaytechblog.com/gfwlist +server=/intel.je/127.0.0.1#5335 +ipset=/intel.je/gfwlist +server=/intel.io/127.0.0.1#5335 +ipset=/intel.io/gfwlist +server=/nivod.tv/127.0.0.1#5335 +ipset=/nivod.tv/gfwlist +server=/avcar.vip/127.0.0.1#5335 +ipset=/avcar.vip/gfwlist +server=/bingvisualsearch.com/127.0.0.1#5335 +ipset=/bingvisualsearch.com/gfwlist +server=/fucktube.com/127.0.0.1#5335 +ipset=/fucktube.com/gfwlist +server=/huffingtonpost.jp/127.0.0.1#5335 +ipset=/huffingtonpost.jp/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=/monitrix.net/127.0.0.1#5335 +ipset=/monitrix.net/gfwlist +server=/intel.hk/127.0.0.1#5335 +ipset=/intel.hk/gfwlist +server=/microsoft.cl/127.0.0.1#5335 +ipset=/microsoft.cl/gfwlist +server=/intel.gy/127.0.0.1#5335 +ipset=/intel.gy/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=/intel.gt/127.0.0.1#5335 +ipset=/intel.gt/gfwlist +server=/alphabet.uk/127.0.0.1#5335 +ipset=/alphabet.uk/gfwlist +server=/xshaker.net/127.0.0.1#5335 +ipset=/xshaker.net/gfwlist +server=/viralcum.com/127.0.0.1#5335 +ipset=/viralcum.com/gfwlist +server=/ebay.ch/127.0.0.1#5335 +ipset=/ebay.ch/gfwlist +server=/youtube.com.ni/127.0.0.1#5335 +ipset=/youtube.com.ni/gfwlist +server=/intel.gm/127.0.0.1#5335 +ipset=/intel.gm/gfwlist +server=/walmartimages.com/127.0.0.1#5335 +ipset=/walmartimages.com/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=/fc2ppv.tv/127.0.0.1#5335 +ipset=/fc2ppv.tv/gfwlist +server=/startpath.com/127.0.0.1#5335 +ipset=/startpath.com/gfwlist +server=/smartcommunitiescoalition.org/127.0.0.1#5335 +ipset=/smartcommunitiescoalition.org/gfwlist +server=/applepaysupplies.info/127.0.0.1#5335 +ipset=/applepaysupplies.info/gfwlist +server=/avstar02.me/127.0.0.1#5335 +ipset=/avstar02.me/gfwlist +server=/jav-legend.com/127.0.0.1#5335 +ipset=/jav-legend.com/gfwlist +server=/enterprisessl.com/127.0.0.1#5335 +ipset=/enterprisessl.com/gfwlist +server=/intel.es/127.0.0.1#5335 +ipset=/intel.es/gfwlist +server=/vitukali.com/127.0.0.1#5335 +ipset=/vitukali.com/gfwlist +server=/cheapbeatsbydre-au.com/127.0.0.1#5335 +ipset=/cheapbeatsbydre-au.com/gfwlist +server=/fssta.com/127.0.0.1#5335 +ipset=/fssta.com/gfwlist +server=/facebooksecurity.net/127.0.0.1#5335 +ipset=/facebooksecurity.net/gfwlist +server=/anaconda.cloud/127.0.0.1#5335 +ipset=/anaconda.cloud/gfwlist +server=/madvagina.com/127.0.0.1#5335 +ipset=/madvagina.com/gfwlist +server=/gigabyte.com/127.0.0.1#5335 +ipset=/gigabyte.com/gfwlist +server=/serving-sys.com/127.0.0.1#5335 +ipset=/serving-sys.com/gfwlist +server=/babes.com/127.0.0.1#5335 +ipset=/babes.com/gfwlist +server=/intel.com.ve/127.0.0.1#5335 +ipset=/intel.com.ve/gfwlist +server=/dachix.com/127.0.0.1#5335 +ipset=/dachix.com/gfwlist +server=/intel.com.uy/127.0.0.1#5335 +ipset=/intel.com.uy/gfwlist +server=/intel.com.tw/127.0.0.1#5335 +ipset=/intel.com.tw/gfwlist +server=/intel.com.tr/127.0.0.1#5335 +ipset=/intel.com.tr/gfwlist +server=/icloudo.com/127.0.0.1#5335 +ipset=/icloudo.com/gfwlist +server=/pichunter.com/127.0.0.1#5335 +ipset=/pichunter.com/gfwlist +server=/amzn.asia/127.0.0.1#5335 +ipset=/amzn.asia/gfwlist +server=/nunuyy.cc/127.0.0.1#5335 +ipset=/nunuyy.cc/gfwlist +server=/jav.guru/127.0.0.1#5335 +ipset=/jav.guru/gfwlist +server=/tellmewhygame.com/127.0.0.1#5335 +ipset=/tellmewhygame.com/gfwlist +server=/kemono.party/127.0.0.1#5335 +ipset=/kemono.party/gfwlist +server=/bridge-studio.co.uk/127.0.0.1#5335 +ipset=/bridge-studio.co.uk/gfwlist +server=/intel.com.pr/127.0.0.1#5335 +ipset=/intel.com.pr/gfwlist +server=/visaglobalfinance.com/127.0.0.1#5335 +ipset=/visaglobalfinance.com/gfwlist +server=/sxyprn.com/127.0.0.1#5335 +ipset=/sxyprn.com/gfwlist +server=/malvastudios.com/127.0.0.1#5335 +ipset=/malvastudios.com/gfwlist +server=/needforspeedproven.com/127.0.0.1#5335 +ipset=/needforspeedproven.com/gfwlist +server=/fxporn.net/127.0.0.1#5335 +ipset=/fxporn.net/gfwlist +server=/intel.com.mx/127.0.0.1#5335 +ipset=/intel.com.mx/gfwlist +server=/intel.com.jm/127.0.0.1#5335 +ipset=/intel.com.jm/gfwlist +server=/bmw.ro/127.0.0.1#5335 +ipset=/bmw.ro/gfwlist +server=/intel.com.hk/127.0.0.1#5335 +ipset=/intel.com.hk/gfwlist +server=/intel.com.co/127.0.0.1#5335 +ipset=/intel.com.co/gfwlist +server=/google.tt/127.0.0.1#5335 +ipset=/google.tt/gfwlist +server=/nuita.net/127.0.0.1#5335 +ipset=/nuita.net/gfwlist +server=/intel.com.bo/127.0.0.1#5335 +ipset=/intel.com.bo/gfwlist +server=/vercel.pub/127.0.0.1#5335 +ipset=/vercel.pub/gfwlist +server=/intel.com.au/127.0.0.1#5335 +ipset=/intel.com.au/gfwlist +server=/google.mw/127.0.0.1#5335 +ipset=/google.mw/gfwlist +server=/mangahentai.me/127.0.0.1#5335 +ipset=/mangahentai.me/gfwlist +server=/bmwgroupna.com/127.0.0.1#5335 +ipset=/bmwgroupna.com/gfwlist +server=/monsterbeatsbydrdre-usa.com/127.0.0.1#5335 +ipset=/monsterbeatsbydrdre-usa.com/gfwlist +server=/pugpig.com/127.0.0.1#5335 +ipset=/pugpig.com/gfwlist +server=/intel.co.il/127.0.0.1#5335 +ipset=/intel.co.il/gfwlist +server=/toget.com.tw/127.0.0.1#5335 +ipset=/toget.com.tw/gfwlist +server=/fapphub.com/127.0.0.1#5335 +ipset=/fapphub.com/gfwlist +server=/skypedata.akadns.net/127.0.0.1#5335 +ipset=/skypedata.akadns.net/gfwlist +server=/qmov.net/127.0.0.1#5335 +ipset=/qmov.net/gfwlist +server=/intel.co.id/127.0.0.1#5335 +ipset=/intel.co.id/gfwlist +server=/pornxxxplace.com/127.0.0.1#5335 +ipset=/pornxxxplace.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=/intel.co.ae/127.0.0.1#5335 +ipset=/intel.co.ae/gfwlist +server=/redtube.com.br/127.0.0.1#5335 +ipset=/redtube.com.br/gfwlist +server=/ieee-uffc.org/127.0.0.1#5335 +ipset=/ieee-uffc.org/gfwlist +server=/intel.cm/127.0.0.1#5335 +ipset=/intel.cm/gfwlist +server=/iphone-vip4.com/127.0.0.1#5335 +ipset=/iphone-vip4.com/gfwlist +server=/intel.cg/127.0.0.1#5335 +ipset=/intel.cg/gfwlist +server=/intel.cc/127.0.0.1#5335 +ipset=/intel.cc/gfwlist +server=/huobi.me/127.0.0.1#5335 +ipset=/huobi.me/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=/appleafrica.com/127.0.0.1#5335 +ipset=/appleafrica.com/gfwlist +server=/brepolis.net/127.0.0.1#5335 +ipset=/brepolis.net/gfwlist +server=/paypalcommunity.com/127.0.0.1#5335 +ipset=/paypalcommunity.com/gfwlist +server=/vagabundasdoorkut.net/127.0.0.1#5335 +ipset=/vagabundasdoorkut.net/gfwlist +server=/gayporno.fm/127.0.0.1#5335 +ipset=/gayporno.fm/gfwlist +server=/whoreteensex.com/127.0.0.1#5335 +ipset=/whoreteensex.com/gfwlist +server=/intel.bg/127.0.0.1#5335 +ipset=/intel.bg/gfwlist +server=/akamci.com/127.0.0.1#5335 +ipset=/akamci.com/gfwlist +server=/peach-cherry.com/127.0.0.1#5335 +ipset=/peach-cherry.com/gfwlist +server=/intel.at/127.0.0.1#5335 +ipset=/intel.at/gfwlist +server=/analdin.com/127.0.0.1#5335 +ipset=/analdin.com/gfwlist +server=/intel.ai/127.0.0.1#5335 +ipset=/intel.ai/gfwlist +server=/brewmp.com/127.0.0.1#5335 +ipset=/brewmp.com/gfwlist +server=/cocktailsandcocktalk.com/127.0.0.1#5335 +ipset=/cocktailsandcocktalk.com/gfwlist +server=/1vwapi4d.xyz/127.0.0.1#5335 +ipset=/1vwapi4d.xyz/gfwlist +server=/mgo.com/127.0.0.1#5335 +ipset=/mgo.com/gfwlist +server=/dailymail.dk/127.0.0.1#5335 +ipset=/dailymail.dk/gfwlist +server=/stripcamfun.com/127.0.0.1#5335 +ipset=/stripcamfun.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=/intel.ac/127.0.0.1#5335 +ipset=/intel.ac/gfwlist +server=/s81c.com/127.0.0.1#5335 +ipset=/s81c.com/gfwlist +server=/haveibeenpwned.com/127.0.0.1#5335 +ipset=/haveibeenpwned.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=/ibm.net/127.0.0.1#5335 +ipset=/ibm.net/gfwlist +server=/hq69.com/127.0.0.1#5335 +ipset=/hq69.com/gfwlist +server=/minuporno.com/127.0.0.1#5335 +ipset=/minuporno.com/gfwlist +server=/bnext.com.tw/127.0.0.1#5335 +ipset=/bnext.com.tw/gfwlist +server=/driving.co.uk/127.0.0.1#5335 +ipset=/driving.co.uk/gfwlist +server=/ivintageporn.com/127.0.0.1#5335 +ipset=/ivintageporn.com/gfwlist +server=/sunbingo.co.uk/127.0.0.1#5335 +ipset=/sunbingo.co.uk/gfwlist +server=/voakorea.com/127.0.0.1#5335 +ipset=/voakorea.com/gfwlist +server=/hpbundle.com/127.0.0.1#5335 +ipset=/hpbundle.com/gfwlist +server=/miktex.org/127.0.0.1#5335 +ipset=/miktex.org/gfwlist +server=/www8-hp.com/127.0.0.1#5335 +ipset=/www8-hp.com/gfwlist +server=/mini-me.com/127.0.0.1#5335 +ipset=/mini-me.com/gfwlist +server=/hbogoasia.com/127.0.0.1#5335 +ipset=/hbogoasia.com/gfwlist +server=/touchsmartpc.org/127.0.0.1#5335 +ipset=/touchsmartpc.org/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=/premobay.com/127.0.0.1#5335 +ipset=/premobay.com/gfwlist +server=/pornmz.com/127.0.0.1#5335 +ipset=/pornmz.com/gfwlist +server=/adulters.org/127.0.0.1#5335 +ipset=/adulters.org/gfwlist +server=/pinterest.id/127.0.0.1#5335 +ipset=/pinterest.id/gfwlist +server=/serviceshp.com/127.0.0.1#5335 +ipset=/serviceshp.com/gfwlist +server=/printspots.net/127.0.0.1#5335 +ipset=/printspots.net/gfwlist +server=/printspots.com/127.0.0.1#5335 +ipset=/printspots.com/gfwlist +server=/jenporno.cz/127.0.0.1#5335 +ipset=/jenporno.cz/gfwlist +server=/bmw-ksa.com/127.0.0.1#5335 +ipset=/bmw-ksa.com/gfwlist +server=/printersetupsupport.com/127.0.0.1#5335 +ipset=/printersetupsupport.com/gfwlist +server=/wholefoodsmarket.co.uk/127.0.0.1#5335 +ipset=/wholefoodsmarket.co.uk/gfwlist +server=/intel.by/127.0.0.1#5335 +ipset=/intel.by/gfwlist +server=/starbucks.no/127.0.0.1#5335 +ipset=/starbucks.no/gfwlist +server=/heads-ak-spotify-com.akamaized.net/127.0.0.1#5335 +ipset=/heads-ak-spotify-com.akamaized.net/gfwlist +server=/porstoporno.site/127.0.0.1#5335 +ipset=/porstoporno.site/gfwlist +server=/instantink.com/127.0.0.1#5335 +ipset=/instantink.com/gfwlist +server=/i-123-hp.com/127.0.0.1#5335 +ipset=/i-123-hp.com/gfwlist +server=/vivaldi.com/127.0.0.1#5335 +ipset=/vivaldi.com/gfwlist +server=/hpwallart.com/127.0.0.1#5335 +ipset=/hpwallart.com/gfwlist +server=/wsj.net/127.0.0.1#5335 +ipset=/wsj.net/gfwlist +server=/fbmarketing.com/127.0.0.1#5335 +ipset=/fbmarketing.com/gfwlist +server=/google.com.ly/127.0.0.1#5335 +ipset=/google.com.ly/gfwlist +server=/hpveer.com/127.0.0.1#5335 +ipset=/hpveer.com/gfwlist +server=/freeav.tv/127.0.0.1#5335 +ipset=/freeav.tv/gfwlist +server=/hptrainingcenter.com/127.0.0.1#5335 +ipset=/hptrainingcenter.com/gfwlist +server=/chatwhores.tv/127.0.0.1#5335 +ipset=/chatwhores.tv/gfwlist +server=/hptouch.com/127.0.0.1#5335 +ipset=/hptouch.com/gfwlist +server=/scholar.google.co.kr/127.0.0.1#5335 +ipset=/scholar.google.co.kr/gfwlist +server=/deiightfuidates.net/127.0.0.1#5335 +ipset=/deiightfuidates.net/gfwlist +server=/didilist.com/127.0.0.1#5335 +ipset=/didilist.com/gfwlist +server=/acces-vod.com/127.0.0.1#5335 +ipset=/acces-vod.com/gfwlist +server=/amodoll.com/127.0.0.1#5335 +ipset=/amodoll.com/gfwlist +server=/azureplanetscale.net/127.0.0.1#5335 +ipset=/azureplanetscale.net/gfwlist +server=/scnsrc.me/127.0.0.1#5335 +ipset=/scnsrc.me/gfwlist +server=/privatemarketplaces.net/127.0.0.1#5335 +ipset=/privatemarketplaces.net/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=/xvidzz.com/127.0.0.1#5335 +ipset=/xvidzz.com/gfwlist +server=/elog-ch.net/127.0.0.1#5335 +ipset=/elog-ch.net/gfwlist +server=/hpstore-china.com/127.0.0.1#5335 +ipset=/hpstore-china.com/gfwlist +server=/aflamporn.com/127.0.0.1#5335 +ipset=/aflamporn.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=/mini-ksa.com/127.0.0.1#5335 +ipset=/mini-ksa.com/gfwlist +server=/badvirtue.com/127.0.0.1#5335 +ipset=/badvirtue.com/gfwlist +server=/nextmedia.com/127.0.0.1#5335 +ipset=/nextmedia.com/gfwlist +server=/hpsprocket.com/127.0.0.1#5335 +ipset=/hpsprocket.com/gfwlist +server=/sandisk.it/127.0.0.1#5335 +ipset=/sandisk.it/gfwlist +server=/bby.com/127.0.0.1#5335 +ipset=/bby.com/gfwlist +server=/lolstatic-a.akamaihd.net/127.0.0.1#5335 +ipset=/lolstatic-a.akamaihd.net/gfwlist +server=/inikesneakers.com/127.0.0.1#5335 +ipset=/inikesneakers.com/gfwlist +server=/ghostgames.com/127.0.0.1#5335 +ipset=/ghostgames.com/gfwlist +server=/omafotze.com/127.0.0.1#5335 +ipset=/omafotze.com/gfwlist +server=/youtube.sk/127.0.0.1#5335 +ipset=/youtube.sk/gfwlist +server=/91tv.tw/127.0.0.1#5335 +ipset=/91tv.tw/gfwlist +server=/hpsmartupdate.com/127.0.0.1#5335 +ipset=/hpsmartupdate.com/gfwlist +server=/youtube.pe/127.0.0.1#5335 +ipset=/youtube.pe/gfwlist +server=/foxhq.com/127.0.0.1#5335 +ipset=/foxhq.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=/nsfw247.to/127.0.0.1#5335 +ipset=/nsfw247.to/gfwlist +server=/fosebook.com/127.0.0.1#5335 +ipset=/fosebook.com/gfwlist +server=/hpsmarts.com/127.0.0.1#5335 +ipset=/hpsmarts.com/gfwlist +server=/symcb.com/127.0.0.1#5335 +ipset=/symcb.com/gfwlist +server=/adsense.com/127.0.0.1#5335 +ipset=/adsense.com/gfwlist +server=/hpsmart.com/127.0.0.1#5335 +ipset=/hpsmart.com/gfwlist +server=/want-media.com/127.0.0.1#5335 +ipset=/want-media.com/gfwlist +server=/hpshopping.hk/127.0.0.1#5335 +ipset=/hpshopping.hk/gfwlist +server=/nikeairmax.com/127.0.0.1#5335 +ipset=/nikeairmax.com/gfwlist +server=/ratedgross.com/127.0.0.1#5335 +ipset=/ratedgross.com/gfwlist +server=/hpshoping.com/127.0.0.1#5335 +ipset=/hpshoping.com/gfwlist +server=/toppornoduro.com/127.0.0.1#5335 +ipset=/toppornoduro.com/gfwlist +server=/inmediahk.net/127.0.0.1#5335 +ipset=/inmediahk.net/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=/hpshop.com/127.0.0.1#5335 +ipset=/hpshop.com/gfwlist +server=/hpdesignjetl25500.com/127.0.0.1#5335 +ipset=/hpdesignjetl25500.com/gfwlist +server=/asiancamgirllive.com/127.0.0.1#5335 +ipset=/asiancamgirllive.com/gfwlist +server=/fapmovz.com/127.0.0.1#5335 +ipset=/fapmovz.com/gfwlist +server=/crowdtangle.com/127.0.0.1#5335 +ipset=/crowdtangle.com/gfwlist +server=/currenttime.tv/127.0.0.1#5335 +ipset=/currenttime.tv/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=/volvobuses.co/127.0.0.1#5335 +ipset=/volvobuses.co/gfwlist +server=/pornocomic.net/127.0.0.1#5335 +ipset=/pornocomic.net/gfwlist +server=/ipfs.io/127.0.0.1#5335 +ipset=/ipfs.io/gfwlist +server=/directvadsales.com/127.0.0.1#5335 +ipset=/directvadsales.com/gfwlist +server=/volvotrucks.com/127.0.0.1#5335 +ipset=/volvotrucks.com/gfwlist +server=/hentaiz.vip/127.0.0.1#5335 +ipset=/hentaiz.vip/gfwlist +server=/hpprinterdrivers.com/127.0.0.1#5335 +ipset=/hpprinterdrivers.com/gfwlist +server=/hpphotoscanners.com/127.0.0.1#5335 +ipset=/hpphotoscanners.com/gfwlist +server=/hppage5000.com/127.0.0.1#5335 +ipset=/hppage5000.com/gfwlist +server=/slack-redir.net/127.0.0.1#5335 +ipset=/slack-redir.net/gfwlist +server=/youtube.com.by/127.0.0.1#5335 +ipset=/youtube.com.by/gfwlist +server=/thaicuties.com/127.0.0.1#5335 +ipset=/thaicuties.com/gfwlist +server=/hponlinehelp.com/127.0.0.1#5335 +ipset=/hponlinehelp.com/gfwlist +server=/dengeamerika.com/127.0.0.1#5335 +ipset=/dengeamerika.com/gfwlist +server=/mastercardmoments.com/127.0.0.1#5335 +ipset=/mastercardmoments.com/gfwlist +server=/fesebook.com/127.0.0.1#5335 +ipset=/fesebook.com/gfwlist +server=/hpmobile.com/127.0.0.1#5335 +ipset=/hpmobile.com/gfwlist +server=/twitcomike.jp/127.0.0.1#5335 +ipset=/twitcomike.jp/gfwlist +server=/mut.ch/127.0.0.1#5335 +ipset=/mut.ch/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=/apple.be/127.0.0.1#5335 +ipset=/apple.be/gfwlist +server=/youtube.com.uy/127.0.0.1#5335 +ipset=/youtube.com.uy/gfwlist +server=/verizonbusinessfios.com/127.0.0.1#5335 +ipset=/verizonbusinessfios.com/gfwlist +server=/iphone4s.com/127.0.0.1#5335 +ipset=/iphone4s.com/gfwlist +server=/eporner.com/127.0.0.1#5335 +ipset=/eporner.com/gfwlist +server=/alibabacloud.com/127.0.0.1#5335 +ipset=/alibabacloud.com/gfwlist +server=/dettolthailand.com/127.0.0.1#5335 +ipset=/dettolthailand.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=/hpkeyboard.com/127.0.0.1#5335 +ipset=/hpkeyboard.com/gfwlist +server=/hpinstantink.com/127.0.0.1#5335 +ipset=/hpinstantink.com/gfwlist +server=/facebooklive.com/127.0.0.1#5335 +ipset=/facebooklive.com/gfwlist +server=/hpinc.net/127.0.0.1#5335 +ipset=/hpinc.net/gfwlist +server=/foxsports.com.gt/127.0.0.1#5335 +ipset=/foxsports.com.gt/gfwlist +server=/hpinc.info/127.0.0.1#5335 +ipset=/hpinc.info/gfwlist +server=/crystalmiss.com/127.0.0.1#5335 +ipset=/crystalmiss.com/gfwlist +server=/ekhokavkaza.com/127.0.0.1#5335 +ipset=/ekhokavkaza.com/gfwlist +server=/paypaly.com/127.0.0.1#5335 +ipset=/paypaly.com/gfwlist +server=/images-amazon.com/127.0.0.1#5335 +ipset=/images-amazon.com/gfwlist +server=/hpgpas.com/127.0.0.1#5335 +ipset=/hpgpas.com/gfwlist +server=/pornovesem.tv/127.0.0.1#5335 +ipset=/pornovesem.tv/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=/tube188.com/127.0.0.1#5335 +ipset=/tube188.com/gfwlist +server=/pornmate.com/127.0.0.1#5335 +ipset=/pornmate.com/gfwlist +server=/facebookmobile.com/127.0.0.1#5335 +ipset=/facebookmobile.com/gfwlist +server=/cashpassport.net/127.0.0.1#5335 +ipset=/cashpassport.net/gfwlist +server=/cheapdrebeats8.net/127.0.0.1#5335 +ipset=/cheapdrebeats8.net/gfwlist +server=/cnnmoney.com/127.0.0.1#5335 +ipset=/cnnmoney.com/gfwlist +server=/ntdtv.kr/127.0.0.1#5335 +ipset=/ntdtv.kr/gfwlist +server=/hpfaqs.com/127.0.0.1#5335 +ipset=/hpfaqs.com/gfwlist +server=/itunes.com/127.0.0.1#5335 +ipset=/itunes.com/gfwlist +server=/stripe.network/127.0.0.1#5335 +ipset=/stripe.network/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=/auricularemonsterbeats.com/127.0.0.1#5335 +ipset=/auricularemonsterbeats.com/gfwlist +server=/amazon-launchpad.com/127.0.0.1#5335 +ipset=/amazon-launchpad.com/gfwlist +server=/ubistatic3-a.akamaihd.net/127.0.0.1#5335 +ipset=/ubistatic3-a.akamaihd.net/gfwlist +server=/hpdownloadstore.com/127.0.0.1#5335 +ipset=/hpdownloadstore.com/gfwlist +server=/datawav.club/127.0.0.1#5335 +ipset=/datawav.club/gfwlist +server=/asus.com/127.0.0.1#5335 +ipset=/asus.com/gfwlist +server=/hpdesktopcomputer.com/127.0.0.1#5335 +ipset=/hpdesktopcomputer.com/gfwlist +server=/hpdaas.com/127.0.0.1#5335 +ipset=/hpdaas.com/gfwlist +server=/tvcastlive-hamivideo.cdn.hinet.net/127.0.0.1#5335 +ipset=/tvcastlive-hamivideo.cdn.hinet.net/gfwlist +server=/bridgestone.cl/127.0.0.1#5335 +ipset=/bridgestone.cl/gfwlist +server=/hpcustomersupport.com/127.0.0.1#5335 +ipset=/hpcustomersupport.com/gfwlist +server=/hpcu.org/127.0.0.1#5335 +ipset=/hpcu.org/gfwlist +server=/your-server.de/127.0.0.1#5335 +ipset=/your-server.de/gfwlist +server=/bingads.com/127.0.0.1#5335 +ipset=/bingads.com/gfwlist +server=/scholar.google.is/127.0.0.1#5335 +ipset=/scholar.google.is/gfwlist +server=/eilieili.cc/127.0.0.1#5335 +ipset=/eilieili.cc/gfwlist +server=/scholar.google.com.pe/127.0.0.1#5335 +ipset=/scholar.google.com.pe/gfwlist +server=/foxsports.uy/127.0.0.1#5335 +ipset=/foxsports.uy/gfwlist +server=/jav19.com/127.0.0.1#5335 +ipset=/jav19.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=/hpconnectedstage.com/127.0.0.1#5335 +ipset=/hpconnectedstage.com/gfwlist +server=/bikaios.xyz/127.0.0.1#5335 +ipset=/bikaios.xyz/gfwlist +server=/freeporn.com/127.0.0.1#5335 +ipset=/freeporn.com/gfwlist +server=/dvdstudiopro.org/127.0.0.1#5335 +ipset=/dvdstudiopro.org/gfwlist +server=/hpconnected.org/127.0.0.1#5335 +ipset=/hpconnected.org/gfwlist +server=/coova.org/127.0.0.1#5335 +ipset=/coova.org/gfwlist +server=/kundun1069.com/127.0.0.1#5335 +ipset=/kundun1069.com/gfwlist +server=/hpcmw.net/127.0.0.1#5335 +ipset=/hpcmw.net/gfwlist +server=/ikea.co.il/127.0.0.1#5335 +ipset=/ikea.co.il/gfwlist +server=/shoers.com/127.0.0.1#5335 +ipset=/shoers.com/gfwlist +server=/vnanchoi.ca/127.0.0.1#5335 +ipset=/vnanchoi.ca/gfwlist +server=/change.org/127.0.0.1#5335 +ipset=/change.org/gfwlist +server=/google.so/127.0.0.1#5335 +ipset=/google.so/gfwlist +server=/paily.net/127.0.0.1#5335 +ipset=/paily.net/gfwlist +server=/wsjwine.com/127.0.0.1#5335 +ipset=/wsjwine.com/gfwlist +server=/hpbluecarpet.net/127.0.0.1#5335 +ipset=/hpbluecarpet.net/gfwlist +server=/hpbluecarpet.com/127.0.0.1#5335 +ipset=/hpbluecarpet.com/gfwlist +server=/ecert.gov.hk/127.0.0.1#5335 +ipset=/ecert.gov.hk/gfwlist +server=/9hentai.ru/127.0.0.1#5335 +ipset=/9hentai.ru/gfwlist +server=/fuckbookecuador.com/127.0.0.1#5335 +ipset=/fuckbookecuador.com/gfwlist +server=/hpallinoneprinter.com/127.0.0.1#5335 +ipset=/hpallinoneprinter.com/gfwlist +server=/mastercard.co.il/127.0.0.1#5335 +ipset=/mastercard.co.il/gfwlist +server=/bmw-motorrad.ca/127.0.0.1#5335 +ipset=/bmw-motorrad.ca/gfwlist +server=/adultcamslover.com/127.0.0.1#5335 +ipset=/adultcamslover.com/gfwlist +server=/ikea.hk/127.0.0.1#5335 +ipset=/ikea.hk/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=/mofos.com/127.0.0.1#5335 +ipset=/mofos.com/gfwlist +server=/mwf-service.akamaized.net/127.0.0.1#5335 +ipset=/mwf-service.akamaized.net/gfwlist +server=/unusualporn.net/127.0.0.1#5335 +ipset=/unusualporn.net/gfwlist +server=/financeleadsonline.com/127.0.0.1#5335 +ipset=/financeleadsonline.com/gfwlist +server=/hp.io/127.0.0.1#5335 +ipset=/hp.io/gfwlist +server=/adultmagazinespdf.com/127.0.0.1#5335 +ipset=/adultmagazinespdf.com/gfwlist +server=/4myminicard.com/127.0.0.1#5335 +ipset=/4myminicard.com/gfwlist +server=/69vj.com/127.0.0.1#5335 +ipset=/69vj.com/gfwlist +server=/sa78gs.wpc.edgecastcdn.net/127.0.0.1#5335 +ipset=/sa78gs.wpc.edgecastcdn.net/gfwlist +server=/alpherafs.in/127.0.0.1#5335 +ipset=/alpherafs.in/gfwlist +server=/duckduckgo.org/127.0.0.1#5335 +ipset=/duckduckgo.org/gfwlist +server=/hotmail.com/127.0.0.1#5335 +ipset=/hotmail.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=/hp-infolab.com/127.0.0.1#5335 +ipset=/hp-infolab.com/gfwlist +server=/nhentaihaven.org/127.0.0.1#5335 +ipset=/nhentaihaven.org/gfwlist +server=/hp-imagine.com/127.0.0.1#5335 +ipset=/hp-imagine.com/gfwlist +server=/gaming-notebooks.com/127.0.0.1#5335 +ipset=/gaming-notebooks.com/gfwlist +server=/e-cba.org/127.0.0.1#5335 +ipset=/e-cba.org/gfwlist +server=/cheapshoesvip.com/127.0.0.1#5335 +ipset=/cheapshoesvip.com/gfwlist +server=/optica.org/127.0.0.1#5335 +ipset=/optica.org/gfwlist +server=/businessinsider.de/127.0.0.1#5335 +ipset=/businessinsider.de/gfwlist +server=/compaq.org/127.0.0.1#5335 +ipset=/compaq.org/gfwlist +server=/filesmonster.vip/127.0.0.1#5335 +ipset=/filesmonster.vip/gfwlist +server=/dianepoppos.com/127.0.0.1#5335 +ipset=/dianepoppos.com/gfwlist +server=/campushp.com/127.0.0.1#5335 +ipset=/campushp.com/gfwlist +server=/pornlistdude.com/127.0.0.1#5335 +ipset=/pornlistdude.com/gfwlist +server=/diyarbakirescort.com/127.0.0.1#5335 +ipset=/diyarbakirescort.com/gfwlist +server=/supermariorun.com/127.0.0.1#5335 +ipset=/supermariorun.com/gfwlist +server=/faebookc.com/127.0.0.1#5335 +ipset=/faebookc.com/gfwlist +server=/fox5atlanta.com/127.0.0.1#5335 +ipset=/fox5atlanta.com/gfwlist +server=/fecbbok.com/127.0.0.1#5335 +ipset=/fecbbok.com/gfwlist +server=/hexdocs.pm/127.0.0.1#5335 +ipset=/hexdocs.pm/gfwlist +server=/travelex.qa/127.0.0.1#5335 +ipset=/travelex.qa/gfwlist +server=/nudeeroticteens.com/127.0.0.1#5335 +ipset=/nudeeroticteens.com/gfwlist +server=/scdn.co/127.0.0.1#5335 +ipset=/scdn.co/gfwlist +server=/fantasti.cc/127.0.0.1#5335 +ipset=/fantasti.cc/gfwlist +server=/ntdtv.com.tw/127.0.0.1#5335 +ipset=/ntdtv.com.tw/gfwlist +server=/fawgaf.xyz/127.0.0.1#5335 +ipset=/fawgaf.xyz/gfwlist +server=/jos.com/127.0.0.1#5335 +ipset=/jos.com/gfwlist +server=/coupang.com/127.0.0.1#5335 +ipset=/coupang.com/gfwlist +server=/bmw.ps/127.0.0.1#5335 +ipset=/bmw.ps/gfwlist +server=/analvids.com/127.0.0.1#5335 +ipset=/analvids.com/gfwlist +server=/fpacebook.com/127.0.0.1#5335 +ipset=/fpacebook.com/gfwlist +server=/damduc.org/127.0.0.1#5335 +ipset=/damduc.org/gfwlist +server=/vod-thumb-ww-live.akamaized.net/127.0.0.1#5335 +ipset=/vod-thumb-ww-live.akamaized.net/gfwlist +server=/kraken.com/127.0.0.1#5335 +ipset=/kraken.com/gfwlist +server=/instagramtips.com/127.0.0.1#5335 +ipset=/instagramtips.com/gfwlist +server=/csifund.org/127.0.0.1#5335 +ipset=/csifund.org/gfwlist +server=/durex.co.za/127.0.0.1#5335 +ipset=/durex.co.za/gfwlist +server=/shopminiusa.com/127.0.0.1#5335 +ipset=/shopminiusa.com/gfwlist +server=/thepervs.com/127.0.0.1#5335 +ipset=/thepervs.com/gfwlist +server=/chtf.org.tw/127.0.0.1#5335 +ipset=/chtf.org.tw/gfwlist +server=/steam.cdn.webra.ru/127.0.0.1#5335 +ipset=/steam.cdn.webra.ru/gfwlist +server=/onlyprime.ru/127.0.0.1#5335 +ipset=/onlyprime.ru/gfwlist +server=/orgyxxxhub.com/127.0.0.1#5335 +ipset=/orgyxxxhub.com/gfwlist +server=/16honeys.com/127.0.0.1#5335 +ipset=/16honeys.com/gfwlist +server=/appleiservices.com/127.0.0.1#5335 +ipset=/appleiservices.com/gfwlist +server=/love6.tv/127.0.0.1#5335 +ipset=/love6.tv/gfwlist +server=/kimchi.tv/127.0.0.1#5335 +ipset=/kimchi.tv/gfwlist +server=/bedstegratisporno.com/127.0.0.1#5335 +ipset=/bedstegratisporno.com/gfwlist +server=/hetzner.com/127.0.0.1#5335 +ipset=/hetzner.com/gfwlist +server=/hetzner.cloud/127.0.0.1#5335 +ipset=/hetzner.cloud/gfwlist +server=/dropboxusercontent.com/127.0.0.1#5335 +ipset=/dropboxusercontent.com/gfwlist +server=/quicktime.tv/127.0.0.1#5335 +ipset=/quicktime.tv/gfwlist +server=/att-idns.net/127.0.0.1#5335 +ipset=/att-idns.net/gfwlist +server=/lollipopescorts.com/127.0.0.1#5335 +ipset=/lollipopescorts.com/gfwlist +server=/nbcudigitaladops.com/127.0.0.1#5335 +ipset=/nbcudigitaladops.com/gfwlist +server=/authy.com/127.0.0.1#5335 +ipset=/authy.com/gfwlist +server=/mini-stjohns.com/127.0.0.1#5335 +ipset=/mini-stjohns.com/gfwlist +server=/bmw-motorrad.at/127.0.0.1#5335 +ipset=/bmw-motorrad.at/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=/mastercard.ie/127.0.0.1#5335 +ipset=/mastercard.ie/gfwlist +server=/swisssign.li/127.0.0.1#5335 +ipset=/swisssign.li/gfwlist +server=/pinkporno.com/127.0.0.1#5335 +ipset=/pinkporno.com/gfwlist +server=/oreil.ly/127.0.0.1#5335 +ipset=/oreil.ly/gfwlist +server=/intellinuxgraphics.net/127.0.0.1#5335 +ipset=/intellinuxgraphics.net/gfwlist +server=/lencr.org/127.0.0.1#5335 +ipset=/lencr.org/gfwlist +server=/avstar04.me/127.0.0.1#5335 +ipset=/avstar04.me/gfwlist +server=/waterdamagesandiego.org/127.0.0.1#5335 +ipset=/waterdamagesandiego.org/gfwlist +server=/ibeats-uk.com/127.0.0.1#5335 +ipset=/ibeats-uk.com/gfwlist +server=/homepornvideo.net/127.0.0.1#5335 +ipset=/homepornvideo.net/gfwlist +server=/reactjs.com/127.0.0.1#5335 +ipset=/reactjs.com/gfwlist +server=/apornotube.net/127.0.0.1#5335 +ipset=/apornotube.net/gfwlist +server=/ebay.com.au/127.0.0.1#5335 +ipset=/ebay.com.au/gfwlist +server=/gay.bingo/127.0.0.1#5335 +ipset=/gay.bingo/gfwlist +server=/withgoogle.com/127.0.0.1#5335 +ipset=/withgoogle.com/gfwlist +server=/hentai01.com/127.0.0.1#5335 +ipset=/hentai01.com/gfwlist +server=/apple.us/127.0.0.1#5335 +ipset=/apple.us/gfwlist +server=/keiba.net/127.0.0.1#5335 +ipset=/keiba.net/gfwlist +server=/dns.sb/127.0.0.1#5335 +ipset=/dns.sb/gfwlist +server=/erolabs.game/127.0.0.1#5335 +ipset=/erolabs.game/gfwlist +server=/launchpad.wang/127.0.0.1#5335 +ipset=/launchpad.wang/gfwlist +server=/forhertube.com/127.0.0.1#5335 +ipset=/forhertube.com/gfwlist +server=/teamskeet.com/127.0.0.1#5335 +ipset=/teamskeet.com/gfwlist +server=/mac-mini.com/127.0.0.1#5335 +ipset=/mac-mini.com/gfwlist +server=/stripecdn.com/127.0.0.1#5335 +ipset=/stripecdn.com/gfwlist +server=/koreanpornmovie.com/127.0.0.1#5335 +ipset=/koreanpornmovie.com/gfwlist +server=/vscode-sync-insiders.trafficmanager.net/127.0.0.1#5335 +ipset=/vscode-sync-insiders.trafficmanager.net/gfwlist +server=/bmw-motorrad-dubai.com/127.0.0.1#5335 +ipset=/bmw-motorrad-dubai.com/gfwlist +server=/webappfieldguide.com/127.0.0.1#5335 +ipset=/webappfieldguide.com/gfwlist +server=/vmwidm.com/127.0.0.1#5335 +ipset=/vmwidm.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=/fnacebook.com/127.0.0.1#5335 +ipset=/fnacebook.com/gfwlist +server=/fox10.tv/127.0.0.1#5335 +ipset=/fox10.tv/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=/bmw-grouparchiv.de/127.0.0.1#5335 +ipset=/bmw-grouparchiv.de/gfwlist +server=/verilystudywatch.org/127.0.0.1#5335 +ipset=/verilystudywatch.org/gfwlist +server=/casoneexchange.com/127.0.0.1#5335 +ipset=/casoneexchange.com/gfwlist +server=/verilystudywatch.com/127.0.0.1#5335 +ipset=/verilystudywatch.com/gfwlist +server=/aokwholesale.net/127.0.0.1#5335 +ipset=/aokwholesale.net/gfwlist +server=/fapcat.com/127.0.0.1#5335 +ipset=/fapcat.com/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=/cumteenporn.com/127.0.0.1#5335 +ipset=/cumteenporn.com/gfwlist +server=/seiroganmania.com/127.0.0.1#5335 +ipset=/seiroganmania.com/gfwlist +server=/watchindianporn.net/127.0.0.1#5335 +ipset=/watchindianporn.net/gfwlist +server=/discord.com/127.0.0.1#5335 +ipset=/discord.com/gfwlist +server=/hotmonsterbeats.com/127.0.0.1#5335 +ipset=/hotmonsterbeats.com/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=/pornaroma.com/127.0.0.1#5335 +ipset=/pornaroma.com/gfwlist +server=/unfiltered.news/127.0.0.1#5335 +ipset=/unfiltered.news/gfwlist +server=/aclweb.org/127.0.0.1#5335 +ipset=/aclweb.org/gfwlist +server=/ffprofile.com/127.0.0.1#5335 +ipset=/ffprofile.com/gfwlist +server=/scholar.google.com.ni/127.0.0.1#5335 +ipset=/scholar.google.com.ni/gfwlist +server=/txvia.com/127.0.0.1#5335 +ipset=/txvia.com/gfwlist +server=/cbsiam.com/127.0.0.1#5335 +ipset=/cbsiam.com/gfwlist +server=/vbejeyv.shop/127.0.0.1#5335 +ipset=/vbejeyv.shop/gfwlist +server=/youtube.com.mk/127.0.0.1#5335 +ipset=/youtube.com.mk/gfwlist +server=/mysocialworklab.com/127.0.0.1#5335 +ipset=/mysocialworklab.com/gfwlist +server=/thinkquarterly.com/127.0.0.1#5335 +ipset=/thinkquarterly.com/gfwlist +server=/youtube.co.ve/127.0.0.1#5335 +ipset=/youtube.co.ve/gfwlist +server=/vscode.dev/127.0.0.1#5335 +ipset=/vscode.dev/gfwlist +server=/yammer.com/127.0.0.1#5335 +ipset=/yammer.com/gfwlist +server=/analpornonly.com/127.0.0.1#5335 +ipset=/analpornonly.com/gfwlist +server=/02weqj32.com/127.0.0.1#5335 +ipset=/02weqj32.com/gfwlist +server=/volvogroup.jp/127.0.0.1#5335 +ipset=/volvogroup.jp/gfwlist +server=/launchpadlibrarian.com/127.0.0.1#5335 +ipset=/launchpadlibrarian.com/gfwlist +server=/vs-cmaf-push-uk-live.akamaized.net/127.0.0.1#5335 +ipset=/vs-cmaf-push-uk-live.akamaized.net/gfwlist +server=/hath.network/127.0.0.1#5335 +ipset=/hath.network/gfwlist +server=/mathoverflow.net/127.0.0.1#5335 +ipset=/mathoverflow.net/gfwlist +server=/sony-hes.co.jp/127.0.0.1#5335 +ipset=/sony-hes.co.jp/gfwlist +server=/synergyse.com/127.0.0.1#5335 +ipset=/synergyse.com/gfwlist +server=/blogspot.sg/127.0.0.1#5335 +ipset=/blogspot.sg/gfwlist +server=/matureladiesxxx.com/127.0.0.1#5335 +ipset=/matureladiesxxx.com/gfwlist +server=/casque-fr.com/127.0.0.1#5335 +ipset=/casque-fr.com/gfwlist +server=/stxmosquitoproject.com/127.0.0.1#5335 +ipset=/stxmosquitoproject.com/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=/getbraintree.com/127.0.0.1#5335 +ipset=/getbraintree.com/gfwlist +server=/realclearpublicaffairs.com/127.0.0.1#5335 +ipset=/realclearpublicaffairs.com/gfwlist +server=/webex.co.kr/127.0.0.1#5335 +ipset=/webex.co.kr/gfwlist +server=/animalpornxxx.me/127.0.0.1#5335 +ipset=/animalpornxxx.me/gfwlist +server=/faceboo.com/127.0.0.1#5335 +ipset=/faceboo.com/gfwlist +server=/stcroixmosquitoproject.com/127.0.0.1#5335 +ipset=/stcroixmosquitoproject.com/gfwlist +server=/beddit.tv/127.0.0.1#5335 +ipset=/beddit.tv/gfwlist +server=/stcroixmosquito.com/127.0.0.1#5335 +ipset=/stcroixmosquito.com/gfwlist +server=/mottainai.info/127.0.0.1#5335 +ipset=/mottainai.info/gfwlist +server=/mirrorsedge.com/127.0.0.1#5335 +ipset=/mirrorsedge.com/gfwlist +server=/realclearscience.com/127.0.0.1#5335 +ipset=/realclearscience.com/gfwlist +server=/fictionmania.tv/127.0.0.1#5335 +ipset=/fictionmania.tv/gfwlist +server=/solveforx.com/127.0.0.1#5335 +ipset=/solveforx.com/gfwlist +server=/cashpassport.com.br/127.0.0.1#5335 +ipset=/cashpassport.com.br/gfwlist +server=/alohatube.com/127.0.0.1#5335 +ipset=/alohatube.com/gfwlist +server=/xnxx18.pro/127.0.0.1#5335 +ipset=/xnxx18.pro/gfwlist +server=/screenwisetrendspanel.com/127.0.0.1#5335 +ipset=/screenwisetrendspanel.com/gfwlist +server=/webobjects.de/127.0.0.1#5335 +ipset=/webobjects.de/gfwlist +server=/saynow.com/127.0.0.1#5335 +ipset=/saynow.com/gfwlist +server=/fi11.cn/127.0.0.1#5335 +ipset=/fi11.cn/gfwlist +server=/run.app/127.0.0.1#5335 +ipset=/run.app/gfwlist +server=/ridepenguin.com/127.0.0.1#5335 +ipset=/ridepenguin.com/gfwlist +server=/setn.com/127.0.0.1#5335 +ipset=/setn.com/gfwlist +server=/revolv.com/127.0.0.1#5335 +ipset=/revolv.com/gfwlist +server=/gettyimages.de/127.0.0.1#5335 +ipset=/gettyimages.de/gfwlist +server=/bmwmotorsport.com/127.0.0.1#5335 +ipset=/bmwmotorsport.com/gfwlist +server=/colegialasdeverdad.com/127.0.0.1#5335 +ipset=/colegialasdeverdad.com/gfwlist +server=/pvr-hamivideo.cdn.hinet.net/127.0.0.1#5335 +ipset=/pvr-hamivideo.cdn.hinet.net/gfwlist +server=/adwordsexpress.com/127.0.0.1#5335 +ipset=/adwordsexpress.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=/publishproxy.com/127.0.0.1#5335 +ipset=/publishproxy.com/gfwlist +server=/google.com.au/127.0.0.1#5335 +ipset=/google.com.au/gfwlist +server=/heavyfetish.com/127.0.0.1#5335 +ipset=/heavyfetish.com/gfwlist +server=/thehealthsite.com/127.0.0.1#5335 +ipset=/thehealthsite.com/gfwlist +server=/21naturals.com/127.0.0.1#5335 +ipset=/21naturals.com/gfwlist +server=/mytokenapi.com/127.0.0.1#5335 +ipset=/mytokenapi.com/gfwlist +server=/projectara.com/127.0.0.1#5335 +ipset=/projectara.com/gfwlist +server=/privacysandbox.com/127.0.0.1#5335 +ipset=/privacysandbox.com/gfwlist +server=/arewereadyyet.com/127.0.0.1#5335 +ipset=/arewereadyyet.com/gfwlist +server=/pixate.com/127.0.0.1#5335 +ipset=/pixate.com/gfwlist +server=/canon.com.au/127.0.0.1#5335 +ipset=/canon.com.au/gfwlist +server=/sorairi.info/127.0.0.1#5335 +ipset=/sorairi.info/gfwlist +server=/picnik.com/127.0.0.1#5335 +ipset=/picnik.com/gfwlist +server=/bejav.net/127.0.0.1#5335 +ipset=/bejav.net/gfwlist +server=/pornma.com/127.0.0.1#5335 +ipset=/pornma.com/gfwlist +server=/myyoungmomisnude.com/127.0.0.1#5335 +ipset=/myyoungmomisnude.com/gfwlist +server=/economistgroupcareers.com/127.0.0.1#5335 +ipset=/economistgroupcareers.com/gfwlist +server=/charmescorts.com/127.0.0.1#5335 +ipset=/charmescorts.com/gfwlist +server=/kijijii.ca/127.0.0.1#5335 +ipset=/kijijii.ca/gfwlist +server=/dogofcum.com/127.0.0.1#5335 +ipset=/dogofcum.com/gfwlist +server=/guo.media/127.0.0.1#5335 +ipset=/guo.media/gfwlist +server=/youtube.cl/127.0.0.1#5335 +ipset=/youtube.cl/gfwlist +server=/botframework.com/127.0.0.1#5335 +ipset=/botframework.com/gfwlist +server=/epochtimes.se/127.0.0.1#5335 +ipset=/epochtimes.se/gfwlist +server=/singlelogin.me/127.0.0.1#5335 +ipset=/singlelogin.me/gfwlist +server=/visiontimes.com/127.0.0.1#5335 +ipset=/visiontimes.com/gfwlist +server=/actalis.it/127.0.0.1#5335 +ipset=/actalis.it/gfwlist +server=/google.is/127.0.0.1#5335 +ipset=/google.is/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=/ebayca.org/127.0.0.1#5335 +ipset=/ebayca.org/gfwlist +server=/grandfuckauto.xxx/127.0.0.1#5335 +ipset=/grandfuckauto.xxx/gfwlist +server=/18schoolgirlz.me/127.0.0.1#5335 +ipset=/18schoolgirlz.me/gfwlist +server=/oneworldmanystories.com/127.0.0.1#5335 +ipset=/oneworldmanystories.com/gfwlist +server=/hpapplicationscenter.com/127.0.0.1#5335 +ipset=/hpapplicationscenter.com/gfwlist +server=/mastercard.com.my/127.0.0.1#5335 +ipset=/mastercard.com.my/gfwlist +server=/pornfuck.net/127.0.0.1#5335 +ipset=/pornfuck.net/gfwlist +server=/on2.com/127.0.0.1#5335 +ipset=/on2.com/gfwlist +server=/on.here/127.0.0.1#5335 +ipset=/on.here/gfwlist +server=/cbsi.com/127.0.0.1#5335 +ipset=/cbsi.com/gfwlist +server=/avseesee.com/127.0.0.1#5335 +ipset=/avseesee.com/gfwlist +server=/titsbox.com/127.0.0.1#5335 +ipset=/titsbox.com/gfwlist +server=/nest.com/127.0.0.1#5335 +ipset=/nest.com/gfwlist +server=/near.by/127.0.0.1#5335 +ipset=/near.by/gfwlist +server=/6sextube.com/127.0.0.1#5335 +ipset=/6sextube.com/gfwlist +server=/girlfur.com/127.0.0.1#5335 +ipset=/girlfur.com/gfwlist +server=/moodstocks.com/127.0.0.1#5335 +ipset=/moodstocks.com/gfwlist +server=/appleclub.com.hk/127.0.0.1#5335 +ipset=/appleclub.com.hk/gfwlist +server=/beatsdrdre-headphones.com/127.0.0.1#5335 +ipset=/beatsdrdre-headphones.com/gfwlist +server=/mfg-inspector.com/127.0.0.1#5335 +ipset=/mfg-inspector.com/gfwlist +server=/fucksexhub.com/127.0.0.1#5335 +ipset=/fucksexhub.com/gfwlist +server=/dragonhentai.net/127.0.0.1#5335 +ipset=/dragonhentai.net/gfwlist +server=/meet.new/127.0.0.1#5335 +ipset=/meet.new/gfwlist +server=/hifiporn.fun/127.0.0.1#5335 +ipset=/hifiporn.fun/gfwlist +server=/tx5ptbp7.com/127.0.0.1#5335 +ipset=/tx5ptbp7.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=/madewithcode.com/127.0.0.1#5335 +ipset=/madewithcode.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=/keytransparency.org/127.0.0.1#5335 +ipset=/keytransparency.org/gfwlist +server=/xcity.jp/127.0.0.1#5335 +ipset=/xcity.jp/gfwlist +server=/sexcord.com/127.0.0.1#5335 +ipset=/sexcord.com/gfwlist +server=/alpherafs.com.my/127.0.0.1#5335 +ipset=/alpherafs.com.my/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=/op.gg/127.0.0.1#5335 +ipset=/op.gg/gfwlist +server=/ebaya.com/127.0.0.1#5335 +ipset=/ebaya.com/gfwlist +server=/impermium.com/127.0.0.1#5335 +ipset=/impermium.com/gfwlist +server=/only3x.com/127.0.0.1#5335 +ipset=/only3x.com/gfwlist +server=/topadultgames.biz/127.0.0.1#5335 +ipset=/topadultgames.biz/gfwlist +server=/amateurbdsmporn.com/127.0.0.1#5335 +ipset=/amateurbdsmporn.com/gfwlist +server=/hwgo.com/127.0.0.1#5335 +ipset=/hwgo.com/gfwlist +server=/hereistheporn.com/127.0.0.1#5335 +ipset=/hereistheporn.com/gfwlist +server=/hentailabs.com/127.0.0.1#5335 +ipset=/hentailabs.com/gfwlist +server=/playforceone.com/127.0.0.1#5335 +ipset=/playforceone.com/gfwlist +server=/deepfake-porn.com/127.0.0.1#5335 +ipset=/deepfake-porn.com/gfwlist +server=/adorable-teens.net/127.0.0.1#5335 +ipset=/adorable-teens.net/gfwlist +server=/metro.co.uk/127.0.0.1#5335 +ipset=/metro.co.uk/gfwlist +server=/ikea.com.kw/127.0.0.1#5335 +ipset=/ikea.com.kw/gfwlist +server=/bmw-motorrad.it/127.0.0.1#5335 +ipset=/bmw-motorrad.it/gfwlist +server=/beatbydreheadphonesonsale.com/127.0.0.1#5335 +ipset=/beatbydreheadphonesonsale.com/gfwlist +server=/girls.xyz/127.0.0.1#5335 +ipset=/girls.xyz/gfwlist +server=/hobonichielog.com/127.0.0.1#5335 +ipset=/hobonichielog.com/gfwlist +server=/scholar.google.co.in/127.0.0.1#5335 +ipset=/scholar.google.co.in/gfwlist +server=/luscious.net/127.0.0.1#5335 +ipset=/luscious.net/gfwlist +server=/blogspot.ch/127.0.0.1#5335 +ipset=/blogspot.ch/gfwlist +server=/smartone.com/127.0.0.1#5335 +ipset=/smartone.com/gfwlist +server=/mobilelive-hamivideo.cdn.hinet.net/127.0.0.1#5335 +ipset=/mobilelive-hamivideo.cdn.hinet.net/gfwlist +server=/gvt9.com/127.0.0.1#5335 +ipset=/gvt9.com/gfwlist +server=/funshemale.com/127.0.0.1#5335 +ipset=/funshemale.com/gfwlist +server=/wwwapplemusic.com/127.0.0.1#5335 +ipset=/wwwapplemusic.com/gfwlist +server=/elephantlist.com/127.0.0.1#5335 +ipset=/elephantlist.com/gfwlist +server=/tidal.com/127.0.0.1#5335 +ipset=/tidal.com/gfwlist +server=/gvt6.com/127.0.0.1#5335 +ipset=/gvt6.com/gfwlist +server=/bmwmotorrad.co.kr/127.0.0.1#5335 +ipset=/bmwmotorrad.co.kr/gfwlist +server=/2013newbeatsworld.com/127.0.0.1#5335 +ipset=/2013newbeatsworld.com/gfwlist +server=/springer.com/127.0.0.1#5335 +ipset=/springer.com/gfwlist +server=/battlefield1943.com/127.0.0.1#5335 +ipset=/battlefield1943.com/gfwlist +server=/gvt2.com/127.0.0.1#5335 +ipset=/gvt2.com/gfwlist +server=/volvobuses.my/127.0.0.1#5335 +ipset=/volvobuses.my/gfwlist +server=/4everland.io/127.0.0.1#5335 +ipset=/4everland.io/gfwlist +server=/gvt1.com/127.0.0.1#5335 +ipset=/gvt1.com/gfwlist +server=/bmw.dz/127.0.0.1#5335 +ipset=/bmw.dz/gfwlist +server=/gstatic.com/127.0.0.1#5335 +ipset=/gstatic.com/gfwlist +server=/friendfed.com/127.0.0.1#5335 +ipset=/friendfed.com/gfwlist +server=/buyitnow.tv/127.0.0.1#5335 +ipset=/buyitnow.tv/gfwlist +server=/ysporn.com/127.0.0.1#5335 +ipset=/ysporn.com/gfwlist +server=/gooogle.com/127.0.0.1#5335 +ipset=/gooogle.com/gfwlist +server=/6twseb.com/127.0.0.1#5335 +ipset=/6twseb.com/gfwlist +server=/goolge.com/127.0.0.1#5335 +ipset=/goolge.com/gfwlist +server=/googlr.com/127.0.0.1#5335 +ipset=/googlr.com/gfwlist +server=/espadoldettol.com.ar/127.0.0.1#5335 +ipset=/espadoldettol.com.ar/gfwlist +server=/pornobrasil.blog.br/127.0.0.1#5335 +ipset=/pornobrasil.blog.br/gfwlist +server=/e621.net/127.0.0.1#5335 +ipset=/e621.net/gfwlist +server=/mini-connected.be/127.0.0.1#5335 +ipset=/mini-connected.be/gfwlist +server=/fasebook.com/127.0.0.1#5335 +ipset=/fasebook.com/gfwlist +server=/cloudflarewarp.com/127.0.0.1#5335 +ipset=/cloudflarewarp.com/gfwlist +server=/googlesverige.com/127.0.0.1#5335 +ipset=/googlesverige.com/gfwlist +server=/indaznlab.com/127.0.0.1#5335 +ipset=/indaznlab.com/gfwlist +server=/nikesku.com/127.0.0.1#5335 +ipset=/nikesku.com/gfwlist +server=/projectapex.com/127.0.0.1#5335 +ipset=/projectapex.com/gfwlist +server=/anime-pictures.net/127.0.0.1#5335 +ipset=/anime-pictures.net/gfwlist +server=/cheapnikedunks.com/127.0.0.1#5335 +ipset=/cheapnikedunks.com/gfwlist +server=/wariolandshakeit.com/127.0.0.1#5335 +ipset=/wariolandshakeit.com/gfwlist +server=/hentai24h.tv/127.0.0.1#5335 +ipset=/hentai24h.tv/gfwlist +server=/teenrave.org/127.0.0.1#5335 +ipset=/teenrave.org/gfwlist +server=/primeindianporn.com/127.0.0.1#5335 +ipset=/primeindianporn.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=/herringnetwork.com/127.0.0.1#5335 +ipset=/herringnetwork.com/gfwlist +server=/opinionjournal.com/127.0.0.1#5335 +ipset=/opinionjournal.com/gfwlist +server=/rule34.us/127.0.0.1#5335 +ipset=/rule34.us/gfwlist +server=/monsterbeatscommunity.com/127.0.0.1#5335 +ipset=/monsterbeatscommunity.com/gfwlist +server=/dynafleetonline.com/127.0.0.1#5335 +ipset=/dynafleetonline.com/gfwlist +server=/googleplus.com/127.0.0.1#5335 +ipset=/googleplus.com/gfwlist +server=/googleplay.com/127.0.0.1#5335 +ipset=/googleplay.com/gfwlist +server=/googlephotos.com/127.0.0.1#5335 +ipset=/googlephotos.com/gfwlist +server=/playmation.com/127.0.0.1#5335 +ipset=/playmation.com/gfwlist +server=/googlepagecreator.com/127.0.0.1#5335 +ipset=/googlepagecreator.com/gfwlist +server=/googlemaps.com/127.0.0.1#5335 +ipset=/googlemaps.com/gfwlist +server=/fgacebook.com/127.0.0.1#5335 +ipset=/fgacebook.com/gfwlist +server=/bestbuycanada.ca/127.0.0.1#5335 +ipset=/bestbuycanada.ca/gfwlist +server=/xfockers.com/127.0.0.1#5335 +ipset=/xfockers.com/gfwlist +server=/avinetworks.com/127.0.0.1#5335 +ipset=/avinetworks.com/gfwlist +server=/googlefiber.com/127.0.0.1#5335 +ipset=/googlefiber.com/gfwlist +server=/weiyuksj.com/127.0.0.1#5335 +ipset=/weiyuksj.com/gfwlist +server=/volvotrucks.net/127.0.0.1#5335 +ipset=/volvotrucks.net/gfwlist +server=/nikeoutletstores.com/127.0.0.1#5335 +ipset=/nikeoutletstores.com/gfwlist +server=/mastercardacademy.com/127.0.0.1#5335 +ipset=/mastercardacademy.com/gfwlist +server=/thefappeningblog.com/127.0.0.1#5335 +ipset=/thefappeningblog.com/gfwlist +server=/visabank.org/127.0.0.1#5335 +ipset=/visabank.org/gfwlist +server=/apple.news/127.0.0.1#5335 +ipset=/apple.news/gfwlist +server=/wenzhao.ca/127.0.0.1#5335 +ipset=/wenzhao.ca/gfwlist +server=/microad.co.jp/127.0.0.1#5335 +ipset=/microad.co.jp/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=/myfoxhouston.com/127.0.0.1#5335 +ipset=/myfoxhouston.com/gfwlist +server=/bmw.tm/127.0.0.1#5335 +ipset=/bmw.tm/gfwlist +server=/bitstream.com/127.0.0.1#5335 +ipset=/bitstream.com/gfwlist +server=/savitabhabhi.com/127.0.0.1#5335 +ipset=/savitabhabhi.com/gfwlist +server=/googlecommerce.com/127.0.0.1#5335 +ipset=/googlecommerce.com/gfwlist +server=/ikea.com.hk/127.0.0.1#5335 +ipset=/ikea.com.hk/gfwlist +server=/facebol.com/127.0.0.1#5335 +ipset=/facebol.com/gfwlist +server=/libraryofthumbs.com/127.0.0.1#5335 +ipset=/libraryofthumbs.com/gfwlist +server=/statuspage.io/127.0.0.1#5335 +ipset=/statuspage.io/gfwlist +server=/epochtimes.jp/127.0.0.1#5335 +ipset=/epochtimes.jp/gfwlist +server=/googlebot.com/127.0.0.1#5335 +ipset=/googlebot.com/gfwlist +server=/google.ventures/127.0.0.1#5335 +ipset=/google.ventures/gfwlist +server=/google.dev/127.0.0.1#5335 +ipset=/google.dev/gfwlist +server=/google.berlin/127.0.0.1#5335 +ipset=/google.berlin/gfwlist +server=/google-access.net/127.0.0.1#5335 +ipset=/google-access.net/gfwlist +server=/pornoincreible.com/127.0.0.1#5335 +ipset=/pornoincreible.com/gfwlist +server=/priceless.org/127.0.0.1#5335 +ipset=/priceless.org/gfwlist +server=/ffacebook.com/127.0.0.1#5335 +ipset=/ffacebook.com/gfwlist +server=/goo.gl/127.0.0.1#5335 +ipset=/goo.gl/gfwlist +server=/napiszex.com/127.0.0.1#5335 +ipset=/napiszex.com/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=/instagramtr.com/127.0.0.1#5335 +ipset=/instagramtr.com/gfwlist +server=/gmodules.com/127.0.0.1#5335 +ipset=/gmodules.com/gfwlist +server=/awsautopilot.com/127.0.0.1#5335 +ipset=/awsautopilot.com/gfwlist +server=/gipscorp.com/127.0.0.1#5335 +ipset=/gipscorp.com/gfwlist +server=/c-span.org/127.0.0.1#5335 +ipset=/c-span.org/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=/videodelivery.net/127.0.0.1#5335 +ipset=/videodelivery.net/gfwlist +server=/gimy.tv/127.0.0.1#5335 +ipset=/gimy.tv/gfwlist +server=/g.page/127.0.0.1#5335 +ipset=/g.page/gfwlist +server=/ctv.com.tw/127.0.0.1#5335 +ipset=/ctv.com.tw/gfwlist +server=/porngameshub.com/127.0.0.1#5335 +ipset=/porngameshub.com/gfwlist +server=/g-tun.com/127.0.0.1#5335 +ipset=/g-tun.com/gfwlist +server=/fuchsia.dev/127.0.0.1#5335 +ipset=/fuchsia.dev/gfwlist +server=/volvopenta.se/127.0.0.1#5335 +ipset=/volvopenta.se/gfwlist +server=/enf-cmnf.com/127.0.0.1#5335 +ipset=/enf-cmnf.com/gfwlist +server=/zooporn.video/127.0.0.1#5335 +ipset=/zooporn.video/gfwlist +server=/ad.games.dmm.com/127.0.0.1#5335 +ipset=/ad.games.dmm.com/gfwlist +server=/ikea.com/127.0.0.1#5335 +ipset=/ikea.com/gfwlist +server=/pinyinxiang.com/127.0.0.1#5335 +ipset=/pinyinxiang.com/gfwlist +server=/workplaceusecases.com/127.0.0.1#5335 +ipset=/workplaceusecases.com/gfwlist +server=/okkisokuho.com/127.0.0.1#5335 +ipset=/okkisokuho.com/gfwlist +server=/fflick.com/127.0.0.1#5335 +ipset=/fflick.com/gfwlist +server=/episodic.com/127.0.0.1#5335 +ipset=/episodic.com/gfwlist +server=/udndata.com/127.0.0.1#5335 +ipset=/udndata.com/gfwlist +server=/paidpornsites.com/127.0.0.1#5335 +ipset=/paidpornsites.com/gfwlist +server=/ganjingworld.com/127.0.0.1#5335 +ipset=/ganjingworld.com/gfwlist +server=/needforspeedoverdrive.com/127.0.0.1#5335 +ipset=/needforspeedoverdrive.com/gfwlist +server=/myfappening.org/127.0.0.1#5335 +ipset=/myfappening.org/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=/cherrynudes.com/127.0.0.1#5335 +ipset=/cherrynudes.com/gfwlist +server=/icloud.lv/127.0.0.1#5335 +ipset=/icloud.lv/gfwlist +server=/twnextdigital.com/127.0.0.1#5335 +ipset=/twnextdigital.com/gfwlist +server=/2013beatshdcybermonday.com/127.0.0.1#5335 +ipset=/2013beatshdcybermonday.com/gfwlist +server=/acgdg.com/127.0.0.1#5335 +ipset=/acgdg.com/gfwlist +server=/fuckmypakistanigf.com/127.0.0.1#5335 +ipset=/fuckmypakistanigf.com/gfwlist +server=/salesforcemarketingcloud.com/127.0.0.1#5335 +ipset=/salesforcemarketingcloud.com/gfwlist +server=/nubilesunscripted.com/127.0.0.1#5335 +ipset=/nubilesunscripted.com/gfwlist +server=/crossmediapanel.com/127.0.0.1#5335 +ipset=/crossmediapanel.com/gfwlist +server=/coova.net/127.0.0.1#5335 +ipset=/coova.net/gfwlist +server=/purelyceleb.com/127.0.0.1#5335 +ipset=/purelyceleb.com/gfwlist +server=/cookiechoices.org/127.0.0.1#5335 +ipset=/cookiechoices.org/gfwlist +server=/nekora.main.jp/127.0.0.1#5335 +ipset=/nekora.main.jp/gfwlist +server=/ieeecsc.org/127.0.0.1#5335 +ipset=/ieeecsc.org/gfwlist +server=/smpte.org/127.0.0.1#5335 +ipset=/smpte.org/gfwlist +server=/google.gr/127.0.0.1#5335 +ipset=/google.gr/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=/ciscowebseminars.com/127.0.0.1#5335 +ipset=/ciscowebseminars.com/gfwlist +server=/ixxx.com/127.0.0.1#5335 +ipset=/ixxx.com/gfwlist +server=/chronicle.security/127.0.0.1#5335 +ipset=/chronicle.security/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=/steam.cdn.orcon.net.nz/127.0.0.1#5335 +ipset=/steam.cdn.orcon.net.nz/gfwlist +server=/mastercard.md/127.0.0.1#5335 +ipset=/mastercard.md/gfwlist +server=/hbrowse.com/127.0.0.1#5335 +ipset=/hbrowse.com/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=/mini-antilles.fr/127.0.0.1#5335 +ipset=/mini-antilles.fr/gfwlist +server=/grandepornogratis.com/127.0.0.1#5335 +ipset=/grandepornogratis.com/gfwlist +server=/5ch.net/127.0.0.1#5335 +ipset=/5ch.net/gfwlist +server=/mzstatic.com/127.0.0.1#5335 +ipset=/mzstatic.com/gfwlist +server=/winticket.jp/127.0.0.1#5335 +ipset=/winticket.jp/gfwlist +server=/bumptunes.com/127.0.0.1#5335 +ipset=/bumptunes.com/gfwlist +server=/buycheapbeatsdreuk.com/127.0.0.1#5335 +ipset=/buycheapbeatsdreuk.com/gfwlist +server=/foxnewsradio.com/127.0.0.1#5335 +ipset=/foxnewsradio.com/gfwlist +server=/bumptop.net/127.0.0.1#5335 +ipset=/bumptop.net/gfwlist +server=/bumptop.com/127.0.0.1#5335 +ipset=/bumptop.com/gfwlist +server=/javpost.net/127.0.0.1#5335 +ipset=/javpost.net/gfwlist +server=/adulterfree.com/127.0.0.1#5335 +ipset=/adulterfree.com/gfwlist +server=/bumptop.ca/127.0.0.1#5335 +ipset=/bumptop.ca/gfwlist +server=/javcl.com/127.0.0.1#5335 +ipset=/javcl.com/gfwlist +server=/foxtelevisionstations.com/127.0.0.1#5335 +ipset=/foxtelevisionstations.com/gfwlist +server=/bmw-world.com/127.0.0.1#5335 +ipset=/bmw-world.com/gfwlist +server=/binance.cc/127.0.0.1#5335 +ipset=/binance.cc/gfwlist +server=/doujinland.info/127.0.0.1#5335 +ipset=/doujinland.info/gfwlist +server=/streamxxx.tv/127.0.0.1#5335 +ipset=/streamxxx.tv/gfwlist +server=/ebay.com.hk/127.0.0.1#5335 +ipset=/ebay.com.hk/gfwlist +server=/apture.com/127.0.0.1#5335 +ipset=/apture.com/gfwlist +server=/zooskoolvideos.com/127.0.0.1#5335 +ipset=/zooskoolvideos.com/gfwlist +server=/6park.com/127.0.0.1#5335 +ipset=/6park.com/gfwlist +server=/himalaya-exchange.zendesk.com/127.0.0.1#5335 +ipset=/himalaya-exchange.zendesk.com/gfwlist +server=/appbridge.it/127.0.0.1#5335 +ipset=/appbridge.it/gfwlist +server=/twinkybf.com/127.0.0.1#5335 +ipset=/twinkybf.com/gfwlist +server=/ipod.eu/127.0.0.1#5335 +ipset=/ipod.eu/gfwlist +server=/nikeshoes4u.com/127.0.0.1#5335 +ipset=/nikeshoes4u.com/gfwlist +server=/foxdeportes.tv/127.0.0.1#5335 +ipset=/foxdeportes.tv/gfwlist +server=/triballo.net/127.0.0.1#5335 +ipset=/triballo.net/gfwlist +server=/scholar.google.si/127.0.0.1#5335 +ipset=/scholar.google.si/gfwlist +server=/curvyerotic.com/127.0.0.1#5335 +ipset=/curvyerotic.com/gfwlist +server=/arabidopsis.org/127.0.0.1#5335 +ipset=/arabidopsis.org/gfwlist +server=/nflxso.net/127.0.0.1#5335 +ipset=/nflxso.net/gfwlist +server=/1ucrs.com/127.0.0.1#5335 +ipset=/1ucrs.com/gfwlist +server=/dreammovies.com/127.0.0.1#5335 +ipset=/dreammovies.com/gfwlist +server=/ciscokinetic.com/127.0.0.1#5335 +ipset=/ciscokinetic.com/gfwlist +server=/shopee.ph/127.0.0.1#5335 +ipset=/shopee.ph/gfwlist +server=/6xxxvideos.com/127.0.0.1#5335 +ipset=/6xxxvideos.com/gfwlist +server=/stonefoxproductions.com/127.0.0.1#5335 +ipset=/stonefoxproductions.com/gfwlist +server=/google.to/127.0.0.1#5335 +ipset=/google.to/gfwlist +server=/myoctocat.com/127.0.0.1#5335 +ipset=/myoctocat.com/gfwlist +server=/google.tn/127.0.0.1#5335 +ipset=/google.tn/gfwlist +server=/google.tm/127.0.0.1#5335 +ipset=/google.tm/gfwlist +server=/tubexclips.com/127.0.0.1#5335 +ipset=/tubexclips.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=/firestone.com.br/127.0.0.1#5335 +ipset=/firestone.com.br/gfwlist +server=/pornhub.org/127.0.0.1#5335 +ipset=/pornhub.org/gfwlist +server=/91avfuli.com/127.0.0.1#5335 +ipset=/91avfuli.com/gfwlist +server=/korewaeroi.com/127.0.0.1#5335 +ipset=/korewaeroi.com/gfwlist +server=/pchomeec.tw/127.0.0.1#5335 +ipset=/pchomeec.tw/gfwlist +server=/google.si/127.0.0.1#5335 +ipset=/google.si/gfwlist +server=/eromazofu.com/127.0.0.1#5335 +ipset=/eromazofu.com/gfwlist +server=/familysimulator.com/127.0.0.1#5335 +ipset=/familysimulator.com/gfwlist +server=/xn--7hv594h.com/127.0.0.1#5335 +ipset=/xn--7hv594h.com/gfwlist +server=/internetofeverything.com/127.0.0.1#5335 +ipset=/internetofeverything.com/gfwlist +server=/casquebeatssolo.net/127.0.0.1#5335 +ipset=/casquebeatssolo.net/gfwlist +server=/google.pt/127.0.0.1#5335 +ipset=/google.pt/gfwlist +server=/gtlsca.nat.gov.tw/127.0.0.1#5335 +ipset=/gtlsca.nat.gov.tw/gfwlist +server=/fracebook.com/127.0.0.1#5335 +ipset=/fracebook.com/gfwlist +server=/webofknowledge.com/127.0.0.1#5335 +ipset=/webofknowledge.com/gfwlist +server=/sextubespot.com/127.0.0.1#5335 +ipset=/sextubespot.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=/nikebetterworld.com/127.0.0.1#5335 +ipset=/nikebetterworld.com/gfwlist +server=/pearsoned.com/127.0.0.1#5335 +ipset=/pearsoned.com/gfwlist +server=/init.shop/127.0.0.1#5335 +ipset=/init.shop/gfwlist +server=/4kporn.xxx/127.0.0.1#5335 +ipset=/4kporn.xxx/gfwlist +server=/1lib.pl/127.0.0.1#5335 +ipset=/1lib.pl/gfwlist +server=/google.nu/127.0.0.1#5335 +ipset=/google.nu/gfwlist +server=/visa.co.cr/127.0.0.1#5335 +ipset=/visa.co.cr/gfwlist +server=/monster-beats-headphones.com/127.0.0.1#5335 +ipset=/monster-beats-headphones.com/gfwlist +server=/videochampion.com/127.0.0.1#5335 +ipset=/videochampion.com/gfwlist +server=/strepsils.hr/127.0.0.1#5335 +ipset=/strepsils.hr/gfwlist +server=/google.nl/127.0.0.1#5335 +ipset=/google.nl/gfwlist +server=/kidspot.com.au/127.0.0.1#5335 +ipset=/kidspot.com.au/gfwlist +server=/gitbook.io/127.0.0.1#5335 +ipset=/gitbook.io/gfwlist +server=/intel.com.ar/127.0.0.1#5335 +ipset=/intel.com.ar/gfwlist +server=/smashed.xxx/127.0.0.1#5335 +ipset=/smashed.xxx/gfwlist +server=/verisign.fr/127.0.0.1#5335 +ipset=/verisign.fr/gfwlist +server=/google.mg/127.0.0.1#5335 +ipset=/google.mg/gfwlist +server=/waterfox.net/127.0.0.1#5335 +ipset=/waterfox.net/gfwlist +server=/javfree.sh/127.0.0.1#5335 +ipset=/javfree.sh/gfwlist +server=/marketo.com/127.0.0.1#5335 +ipset=/marketo.com/gfwlist +server=/onlyindianporn2.com/127.0.0.1#5335 +ipset=/onlyindianporn2.com/gfwlist +server=/disney.com.au/127.0.0.1#5335 +ipset=/disney.com.au/gfwlist +server=/mini.com/127.0.0.1#5335 +ipset=/mini.com/gfwlist +server=/ebay.org/127.0.0.1#5335 +ipset=/ebay.org/gfwlist +server=/thesundaytimes.co.uk/127.0.0.1#5335 +ipset=/thesundaytimes.co.uk/gfwlist +server=/xxvideo.mobi/127.0.0.1#5335 +ipset=/xxvideo.mobi/gfwlist +server=/javqd.com/127.0.0.1#5335 +ipset=/javqd.com/gfwlist +server=/gfpornvideos.com/127.0.0.1#5335 +ipset=/gfpornvideos.com/gfwlist +server=/guccitimeless.com/127.0.0.1#5335 +ipset=/guccitimeless.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=/shufflesex.com/127.0.0.1#5335 +ipset=/shufflesex.com/gfwlist +server=/hentaimama.io/127.0.0.1#5335 +ipset=/hentaimama.io/gfwlist +server=/ieeesmc.org/127.0.0.1#5335 +ipset=/ieeesmc.org/gfwlist +server=/google.jo/127.0.0.1#5335 +ipset=/google.jo/gfwlist +server=/beatsbydrecasquesfr.com/127.0.0.1#5335 +ipset=/beatsbydrecasquesfr.com/gfwlist +server=/applestore.com.my/127.0.0.1#5335 +ipset=/applestore.com.my/gfwlist +server=/powerofresolve.ca/127.0.0.1#5335 +ipset=/powerofresolve.ca/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=/showybeauty.com/127.0.0.1#5335 +ipset=/showybeauty.com/gfwlist +server=/pinterest.ph/127.0.0.1#5335 +ipset=/pinterest.ph/gfwlist +server=/travelex.com/127.0.0.1#5335 +ipset=/travelex.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=/google.hr/127.0.0.1#5335 +ipset=/google.hr/gfwlist +server=/visa.co.ve/127.0.0.1#5335 +ipset=/visa.co.ve/gfwlist +server=/google.gl/127.0.0.1#5335 +ipset=/google.gl/gfwlist +server=/anigema.jp/127.0.0.1#5335 +ipset=/anigema.jp/gfwlist +server=/google.gg/127.0.0.1#5335 +ipset=/google.gg/gfwlist +server=/google.ge/127.0.0.1#5335 +ipset=/google.ge/gfwlist +server=/yahoo.dm/127.0.0.1#5335 +ipset=/yahoo.dm/gfwlist +server=/repo.new/127.0.0.1#5335 +ipset=/repo.new/gfwlist +server=/duckduckgo.co/127.0.0.1#5335 +ipset=/duckduckgo.co/gfwlist +server=/softbank-ipo.com/127.0.0.1#5335 +ipset=/softbank-ipo.com/gfwlist +server=/eroero69.work/127.0.0.1#5335 +ipset=/eroero69.work/gfwlist +server=/google.fi/127.0.0.1#5335 +ipset=/google.fi/gfwlist +server=/ebaysocial.com/127.0.0.1#5335 +ipset=/ebaysocial.com/gfwlist +server=/cartoon3thumbs.com/127.0.0.1#5335 +ipset=/cartoon3thumbs.com/gfwlist +server=/pornper.com/127.0.0.1#5335 +ipset=/pornper.com/gfwlist +server=/pearsonclinical.com.br/127.0.0.1#5335 +ipset=/pearsonclinical.com.br/gfwlist +server=/google.es/127.0.0.1#5335 +ipset=/google.es/gfwlist +server=/boyloves.cc/127.0.0.1#5335 +ipset=/boyloves.cc/gfwlist +server=/fbf8.com/127.0.0.1#5335 +ipset=/fbf8.com/gfwlist +server=/automobile.fr/127.0.0.1#5335 +ipset=/automobile.fr/gfwlist +server=/applestore.co.jp/127.0.0.1#5335 +ipset=/applestore.co.jp/gfwlist +server=/similar-porn.fun/127.0.0.1#5335 +ipset=/similar-porn.fun/gfwlist +server=/scat-enema.com/127.0.0.1#5335 +ipset=/scat-enema.com/gfwlist +server=/secom.co.jp/127.0.0.1#5335 +ipset=/secom.co.jp/gfwlist +server=/foxfdm.com/127.0.0.1#5335 +ipset=/foxfdm.com/gfwlist +server=/pornheed.com/127.0.0.1#5335 +ipset=/pornheed.com/gfwlist +server=/bmw-special-sales.com/127.0.0.1#5335 +ipset=/bmw-special-sales.com/gfwlist +server=/google.dj/127.0.0.1#5335 +ipset=/google.dj/gfwlist +server=/skysports.ie/127.0.0.1#5335 +ipset=/skysports.ie/gfwlist +server=/remirepo.net/127.0.0.1#5335 +ipset=/remirepo.net/gfwlist +server=/tubedna.com/127.0.0.1#5335 +ipset=/tubedna.com/gfwlist +server=/myfoxlubbock.com/127.0.0.1#5335 +ipset=/myfoxlubbock.com/gfwlist +server=/acaric.co.jp/127.0.0.1#5335 +ipset=/acaric.co.jp/gfwlist +server=/apple.ch/127.0.0.1#5335 +ipset=/apple.ch/gfwlist +server=/opensource.guide/127.0.0.1#5335 +ipset=/opensource.guide/gfwlist +server=/kindindianporn.com/127.0.0.1#5335 +ipset=/kindindianporn.com/gfwlist +server=/pvp.tv/127.0.0.1#5335 +ipset=/pvp.tv/gfwlist +server=/scholar.google.cl/127.0.0.1#5335 +ipset=/scholar.google.cl/gfwlist +server=/bmw-connecteddrive.hu/127.0.0.1#5335 +ipset=/bmw-connecteddrive.hu/gfwlist +server=/youtube.iq/127.0.0.1#5335 +ipset=/youtube.iq/gfwlist +server=/chomp.com/127.0.0.1#5335 +ipset=/chomp.com/gfwlist +server=/nikefootballcleats.com/127.0.0.1#5335 +ipset=/nikefootballcleats.com/gfwlist +server=/blznav.akamaized.net/127.0.0.1#5335 +ipset=/blznav.akamaized.net/gfwlist +server=/google.com.tr/127.0.0.1#5335 +ipset=/google.com.tr/gfwlist +server=/collegepornonly.com/127.0.0.1#5335 +ipset=/collegepornonly.com/gfwlist +server=/bloombergtradingchallenge.com/127.0.0.1#5335 +ipset=/bloombergtradingchallenge.com/gfwlist +server=/4ertik.one/127.0.0.1#5335 +ipset=/4ertik.one/gfwlist +server=/leagueoflegendsscripts.com/127.0.0.1#5335 +ipset=/leagueoflegendsscripts.com/gfwlist +server=/filmsexeporno.com/127.0.0.1#5335 +ipset=/filmsexeporno.com/gfwlist +server=/bridgestonevan.com/127.0.0.1#5335 +ipset=/bridgestonevan.com/gfwlist +server=/ipod.co.nz/127.0.0.1#5335 +ipset=/ipod.co.nz/gfwlist +server=/teen-lover.net/127.0.0.1#5335 +ipset=/teen-lover.net/gfwlist +server=/facebook.br/127.0.0.1#5335 +ipset=/facebook.br/gfwlist +server=/google.com.pr/127.0.0.1#5335 +ipset=/google.com.pr/gfwlist +server=/sweetandmaxwell.co.uk/127.0.0.1#5335 +ipset=/sweetandmaxwell.co.uk/gfwlist +server=/pinterest.ie/127.0.0.1#5335 +ipset=/pinterest.ie/gfwlist +server=/peachyforum.com/127.0.0.1#5335 +ipset=/peachyforum.com/gfwlist +server=/google.com.pk/127.0.0.1#5335 +ipset=/google.com.pk/gfwlist +server=/google.com.ph/127.0.0.1#5335 +ipset=/google.com.ph/gfwlist +server=/xnxx-teens.com/127.0.0.1#5335 +ipset=/xnxx-teens.com/gfwlist +server=/pornheli.com/127.0.0.1#5335 +ipset=/pornheli.com/gfwlist +server=/google.com.pa/127.0.0.1#5335 +ipset=/google.com.pa/gfwlist +server=/google.com.om/127.0.0.1#5335 +ipset=/google.com.om/gfwlist +server=/google.com.ng/127.0.0.1#5335 +ipset=/google.com.ng/gfwlist +server=/top100sexgames.com/127.0.0.1#5335 +ipset=/top100sexgames.com/gfwlist +server=/horse4sex.com/127.0.0.1#5335 +ipset=/horse4sex.com/gfwlist +server=/ebay.ph/127.0.0.1#5335 +ipset=/ebay.ph/gfwlist +server=/bookmark.xxx/127.0.0.1#5335 +ipset=/bookmark.xxx/gfwlist +server=/ero-manga-platinum.net/127.0.0.1#5335 +ipset=/ero-manga-platinum.net/gfwlist +server=/applecomputer.com.tw/127.0.0.1#5335 +ipset=/applecomputer.com.tw/gfwlist +server=/javdove8.xyz/127.0.0.1#5335 +ipset=/javdove8.xyz/gfwlist +server=/visa.co.id/127.0.0.1#5335 +ipset=/visa.co.id/gfwlist +server=/imoviegallery.com/127.0.0.1#5335 +ipset=/imoviegallery.com/gfwlist +server=/getlantern.org/127.0.0.1#5335 +ipset=/getlantern.org/gfwlist +server=/pleasuregirl.net/127.0.0.1#5335 +ipset=/pleasuregirl.net/gfwlist +server=/macmini.com/127.0.0.1#5335 +ipset=/macmini.com/gfwlist +server=/data.com/127.0.0.1#5335 +ipset=/data.com/gfwlist +server=/google.com.jm/127.0.0.1#5335 +ipset=/google.com.jm/gfwlist +server=/static9.net.au/127.0.0.1#5335 +ipset=/static9.net.au/gfwlist +server=/google.com.gi/127.0.0.1#5335 +ipset=/google.com.gi/gfwlist +server=/iphine.com/127.0.0.1#5335 +ipset=/iphine.com/gfwlist +server=/sexgamesclub.com/127.0.0.1#5335 +ipset=/sexgamesclub.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=/google.com.fj/127.0.0.1#5335 +ipset=/google.com.fj/gfwlist +server=/zooporno.biz/127.0.0.1#5335 +ipset=/zooporno.biz/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=/google.com.et/127.0.0.1#5335 +ipset=/google.com.et/gfwlist +server=/meijinsen.jp/127.0.0.1#5335 +ipset=/meijinsen.jp/gfwlist +server=/volvotrucks.ma/127.0.0.1#5335 +ipset=/volvotrucks.ma/gfwlist +server=/headset987.com/127.0.0.1#5335 +ipset=/headset987.com/gfwlist +server=/attinternetservice.com/127.0.0.1#5335 +ipset=/attinternetservice.com/gfwlist +server=/google.com.ec/127.0.0.1#5335 +ipset=/google.com.ec/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=/bridgestonecomercial.com.co/127.0.0.1#5335 +ipset=/bridgestonecomercial.com.co/gfwlist +server=/staticflickr.com/127.0.0.1#5335 +ipset=/staticflickr.com/gfwlist +server=/illusion.co.jp/127.0.0.1#5335 +ipset=/illusion.co.jp/gfwlist +server=/hdtube.co/127.0.0.1#5335 +ipset=/hdtube.co/gfwlist +server=/linuxfoundation.org/127.0.0.1#5335 +ipset=/linuxfoundation.org/gfwlist +server=/ciscoturk.net/127.0.0.1#5335 +ipset=/ciscoturk.net/gfwlist +server=/hentaistream.com/127.0.0.1#5335 +ipset=/hentaistream.com/gfwlist +server=/xn--ztsq84g.cn/127.0.0.1#5335 +ipset=/xn--ztsq84g.cn/gfwlist +server=/ladybaba.net/127.0.0.1#5335 +ipset=/ladybaba.net/gfwlist +server=/google.com.co/127.0.0.1#5335 +ipset=/google.com.co/gfwlist +server=/doubleclick.com/127.0.0.1#5335 +ipset=/doubleclick.com/gfwlist +server=/illusionl.com/127.0.0.1#5335 +ipset=/illusionl.com/gfwlist +server=/sbnation.com/127.0.0.1#5335 +ipset=/sbnation.com/gfwlist +server=/outdoorpublicsex.com/127.0.0.1#5335 +ipset=/outdoorpublicsex.com/gfwlist +server=/bmw.com.br/127.0.0.1#5335 +ipset=/bmw.com.br/gfwlist +server=/mox.moe/127.0.0.1#5335 +ipset=/mox.moe/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=/pornsites.com/127.0.0.1#5335 +ipset=/pornsites.com/gfwlist +server=/eastweek.com.hk/127.0.0.1#5335 +ipset=/eastweek.com.hk/gfwlist +server=/vl4x.net/127.0.0.1#5335 +ipset=/vl4x.net/gfwlist +server=/ouroath.com/127.0.0.1#5335 +ipset=/ouroath.com/gfwlist +server=/google.com.ar/127.0.0.1#5335 +ipset=/google.com.ar/gfwlist +server=/quatrum.com.br/127.0.0.1#5335 +ipset=/quatrum.com.br/gfwlist +server=/cybermondaybeats4sale.com/127.0.0.1#5335 +ipset=/cybermondaybeats4sale.com/gfwlist +server=/clipcake.com/127.0.0.1#5335 +ipset=/clipcake.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=/8teenxxx.com/127.0.0.1#5335 +ipset=/8teenxxx.com/gfwlist +server=/videos-rockstargames-com.akamaized.net/127.0.0.1#5335 +ipset=/videos-rockstargames-com.akamaized.net/gfwlist +server=/google.co.zw/127.0.0.1#5335 +ipset=/google.co.zw/gfwlist +server=/nikegolf.ca/127.0.0.1#5335 +ipset=/nikegolf.ca/gfwlist +server=/egta.com/127.0.0.1#5335 +ipset=/egta.com/gfwlist +server=/dungeonkeeper.com.cn/127.0.0.1#5335 +ipset=/dungeonkeeper.com.cn/gfwlist +server=/coinonecore.com/127.0.0.1#5335 +ipset=/coinonecore.com/gfwlist +server=/google.co.za/127.0.0.1#5335 +ipset=/google.co.za/gfwlist +server=/mini.md/127.0.0.1#5335 +ipset=/mini.md/gfwlist +server=/verizon.net/127.0.0.1#5335 +ipset=/verizon.net/gfwlist +server=/porntube.com/127.0.0.1#5335 +ipset=/porntube.com/gfwlist +server=/google.co.ve/127.0.0.1#5335 +ipset=/google.co.ve/gfwlist +server=/flashtranny.com/127.0.0.1#5335 +ipset=/flashtranny.com/gfwlist +server=/minisovietam.vn/127.0.0.1#5335 +ipset=/minisovietam.vn/gfwlist +server=/google.co.tz/127.0.0.1#5335 +ipset=/google.co.tz/gfwlist +server=/verygoodnike.com/127.0.0.1#5335 +ipset=/verygoodnike.com/gfwlist +server=/google.co.nz/127.0.0.1#5335 +ipset=/google.co.nz/gfwlist +server=/facebookhub.com/127.0.0.1#5335 +ipset=/facebookhub.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=/paypal-hrsystem.com/127.0.0.1#5335 +ipset=/paypal-hrsystem.com/gfwlist +server=/sexpornimg.com/127.0.0.1#5335 +ipset=/sexpornimg.com/gfwlist +server=/google.com.vn/127.0.0.1#5335 +ipset=/google.com.vn/gfwlist +server=/cloudvolumes.com/127.0.0.1#5335 +ipset=/cloudvolumes.com/gfwlist +server=/geinoueroch.com/127.0.0.1#5335 +ipset=/geinoueroch.com/gfwlist +server=/bloombergmedia.com/127.0.0.1#5335 +ipset=/bloombergmedia.com/gfwlist +server=/thesun.co.uk/127.0.0.1#5335 +ipset=/thesun.co.uk/gfwlist +server=/bokepseks.org/127.0.0.1#5335 +ipset=/bokepseks.org/gfwlist +server=/everia.club/127.0.0.1#5335 +ipset=/everia.club/gfwlist +server=/moxing.mobi/127.0.0.1#5335 +ipset=/moxing.mobi/gfwlist +server=/itaeromanga.com/127.0.0.1#5335 +ipset=/itaeromanga.com/gfwlist +server=/vidspornoduro.com/127.0.0.1#5335 +ipset=/vidspornoduro.com/gfwlist +server=/vfsco.lt/127.0.0.1#5335 +ipset=/vfsco.lt/gfwlist +server=/negoziomonsterbeats.com/127.0.0.1#5335 +ipset=/negoziomonsterbeats.com/gfwlist +server=/pirouvr.com/127.0.0.1#5335 +ipset=/pirouvr.com/gfwlist +server=/xnxx-sex-videos.com/127.0.0.1#5335 +ipset=/xnxx-sex-videos.com/gfwlist +server=/video.fc2.com/127.0.0.1#5335 +ipset=/video.fc2.com/gfwlist +server=/google.cm/127.0.0.1#5335 +ipset=/google.cm/gfwlist +server=/origin.com/127.0.0.1#5335 +ipset=/origin.com/gfwlist +server=/appleid.com/127.0.0.1#5335 +ipset=/appleid.com/gfwlist +server=/monsterproduct.net/127.0.0.1#5335 +ipset=/monsterproduct.net/gfwlist +server=/google.ch/127.0.0.1#5335 +ipset=/google.ch/gfwlist +server=/skyporn.online/127.0.0.1#5335 +ipset=/skyporn.online/gfwlist +server=/babestube.com/127.0.0.1#5335 +ipset=/babestube.com/gfwlist +server=/masturbate2gether.com/127.0.0.1#5335 +ipset=/masturbate2gether.com/gfwlist +server=/7tb.cc/127.0.0.1#5335 +ipset=/7tb.cc/gfwlist +server=/porn-bokep.com/127.0.0.1#5335 +ipset=/porn-bokep.com/gfwlist +server=/moapi1.online/127.0.0.1#5335 +ipset=/moapi1.online/gfwlist +server=/google.cf/127.0.0.1#5335 +ipset=/google.cf/gfwlist +server=/newscareers.co.uk/127.0.0.1#5335 +ipset=/newscareers.co.uk/gfwlist +server=/scholar.google.co.il/127.0.0.1#5335 +ipset=/scholar.google.co.il/gfwlist +server=/google.cd/127.0.0.1#5335 +ipset=/google.cd/gfwlist +server=/redzonechannel.com/127.0.0.1#5335 +ipset=/redzonechannel.com/gfwlist +server=/google.bi/127.0.0.1#5335 +ipset=/google.bi/gfwlist +server=/elpadrote.com/127.0.0.1#5335 +ipset=/elpadrote.com/gfwlist +server=/bridgestone-bandag.com/127.0.0.1#5335 +ipset=/bridgestone-bandag.com/gfwlist +server=/google.ba/127.0.0.1#5335 +ipset=/google.ba/gfwlist +server=/bmwcitychallenge.com/127.0.0.1#5335 +ipset=/bmwcitychallenge.com/gfwlist +server=/meta.com/127.0.0.1#5335 +ipset=/meta.com/gfwlist +server=/illusionn3.com/127.0.0.1#5335 +ipset=/illusionn3.com/gfwlist +server=/dobbyporn.com/127.0.0.1#5335 +ipset=/dobbyporn.com/gfwlist +server=/google.am/127.0.0.1#5335 +ipset=/google.am/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=/ministeagathe.com/127.0.0.1#5335 +ipset=/ministeagathe.com/gfwlist +server=/google.al/127.0.0.1#5335 +ipset=/google.al/gfwlist +server=/lih.kg/127.0.0.1#5335 +ipset=/lih.kg/gfwlist +server=/google.ad/127.0.0.1#5335 +ipset=/google.ad/gfwlist +server=/travelex.co.jp/127.0.0.1#5335 +ipset=/travelex.co.jp/gfwlist +server=/51pincha.cc/127.0.0.1#5335 +ipset=/51pincha.cc/gfwlist +server=/volvobuses.ph/127.0.0.1#5335 +ipset=/volvobuses.ph/gfwlist +server=/visagiftcard.us/127.0.0.1#5335 +ipset=/visagiftcard.us/gfwlist +server=/starbucks.ph/127.0.0.1#5335 +ipset=/starbucks.ph/gfwlist +server=/mirrorsedge.jp/127.0.0.1#5335 +ipset=/mirrorsedge.jp/gfwlist +server=/ebayheels.com/127.0.0.1#5335 +ipset=/ebayheels.com/gfwlist +server=/douwriteright.com/127.0.0.1#5335 +ipset=/douwriteright.com/gfwlist +server=/fdacebook.info/127.0.0.1#5335 +ipset=/fdacebook.info/gfwlist +server=/nintendonyc.com/127.0.0.1#5335 +ipset=/nintendonyc.com/gfwlist +server=/hentaidirectory.org/127.0.0.1#5335 +ipset=/hentaidirectory.org/gfwlist +server=/r18.clickme.net/127.0.0.1#5335 +ipset=/r18.clickme.net/gfwlist +server=/hnalady.com/127.0.0.1#5335 +ipset=/hnalady.com/gfwlist +server=/svscomics.com/127.0.0.1#5335 +ipset=/svscomics.com/gfwlist +server=/collection-3d.com/127.0.0.1#5335 +ipset=/collection-3d.com/gfwlist +server=/barium-enema.com/127.0.0.1#5335 +ipset=/barium-enema.com/gfwlist +server=/elrepo.org/127.0.0.1#5335 +ipset=/elrepo.org/gfwlist +server=/milfbundle.com/127.0.0.1#5335 +ipset=/milfbundle.com/gfwlist +server=/new.day/127.0.0.1#5335 +ipset=/new.day/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=/cougarsexmovies.com/127.0.0.1#5335 +ipset=/cougarsexmovies.com/gfwlist +server=/iam.soy/127.0.0.1#5335 +ipset=/iam.soy/gfwlist +server=/passiontimes.hk/127.0.0.1#5335 +ipset=/passiontimes.hk/gfwlist +server=/hey.boo/127.0.0.1#5335 +ipset=/hey.boo/gfwlist +server=/sony.com.sg/127.0.0.1#5335 +ipset=/sony.com.sg/gfwlist +server=/xoteens.com/127.0.0.1#5335 +ipset=/xoteens.com/gfwlist +server=/youtube.es/127.0.0.1#5335 +ipset=/youtube.es/gfwlist +server=/illianacomputerrecycling.com/127.0.0.1#5335 +ipset=/illianacomputerrecycling.com/gfwlist +server=/yahoo.nu/127.0.0.1#5335 +ipset=/yahoo.nu/gfwlist +server=/apole.com/127.0.0.1#5335 +ipset=/apole.com/gfwlist +server=/visa.ie/127.0.0.1#5335 +ipset=/visa.ie/gfwlist +server=/mini.co.id/127.0.0.1#5335 +ipset=/mini.co.id/gfwlist +server=/zooredtube.com/127.0.0.1#5335 +ipset=/zooredtube.com/gfwlist +server=/fireemblemawakening.com/127.0.0.1#5335 +ipset=/fireemblemawakening.com/gfwlist +server=/easports.jp/127.0.0.1#5335 +ipset=/easports.jp/gfwlist +server=/oxfordartonline.com/127.0.0.1#5335 +ipset=/oxfordartonline.com/gfwlist +server=/finishinfo.com/127.0.0.1#5335 +ipset=/finishinfo.com/gfwlist +server=/durex.nl/127.0.0.1#5335 +ipset=/durex.nl/gfwlist +server=/sfx.ms/127.0.0.1#5335 +ipset=/sfx.ms/gfwlist +server=/telega.one/127.0.0.1#5335 +ipset=/telega.one/gfwlist +server=/googlesyndication.com/127.0.0.1#5335 +ipset=/googlesyndication.com/gfwlist +server=/bigtitsmodelsdirectory.com/127.0.0.1#5335 +ipset=/bigtitsmodelsdirectory.com/gfwlist +server=/cbsaavideo.com/127.0.0.1#5335 +ipset=/cbsaavideo.com/gfwlist +server=/googleadservices.com/127.0.0.1#5335 +ipset=/googleadservices.com/gfwlist +server=/wikisexguide.com/127.0.0.1#5335 +ipset=/wikisexguide.com/gfwlist +server=/esbeatsbydrebuy.com/127.0.0.1#5335 +ipset=/esbeatsbydrebuy.com/gfwlist +server=/google-analytics.com/127.0.0.1#5335 +ipset=/google-analytics.com/gfwlist +server=/happymeal.co.nz/127.0.0.1#5335 +ipset=/happymeal.co.nz/gfwlist +server=/v2ray.com/127.0.0.1#5335 +ipset=/v2ray.com/gfwlist +server=/ragnaporn.com/127.0.0.1#5335 +ipset=/ragnaporn.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=/blogspot.ro/127.0.0.1#5335 +ipset=/blogspot.ro/gfwlist +server=/bmw-connecteddrive.mx/127.0.0.1#5335 +ipset=/bmw-connecteddrive.mx/gfwlist +server=/bmwmagazine.de/127.0.0.1#5335 +ipset=/bmwmagazine.de/gfwlist +server=/spiritclubs.com/127.0.0.1#5335 +ipset=/spiritclubs.com/gfwlist +server=/adservice.google.com/127.0.0.1#5335 +ipset=/adservice.google.com/gfwlist +server=/mt-ssul1.com/127.0.0.1#5335 +ipset=/mt-ssul1.com/gfwlist +server=/kindleoasis.us/127.0.0.1#5335 +ipset=/kindleoasis.us/gfwlist +server=/bmw-motorrad.de/127.0.0.1#5335 +ipset=/bmw-motorrad.de/gfwlist +server=/applestore.co.ug/127.0.0.1#5335 +ipset=/applestore.co.ug/gfwlist +server=/ntdtv.ca/127.0.0.1#5335 +ipset=/ntdtv.ca/gfwlist +server=/100shmar.net/127.0.0.1#5335 +ipset=/100shmar.net/gfwlist +server=/xxxshame.com/127.0.0.1#5335 +ipset=/xxxshame.com/gfwlist +server=/vox.com/127.0.0.1#5335 +ipset=/vox.com/gfwlist +server=/icloud.org/127.0.0.1#5335 +ipset=/icloud.org/gfwlist +server=/brand-protection-team.com/127.0.0.1#5335 +ipset=/brand-protection-team.com/gfwlist +server=/potenza.jp/127.0.0.1#5335 +ipset=/potenza.jp/gfwlist +server=/pornhuub.xyz/127.0.0.1#5335 +ipset=/pornhuub.xyz/gfwlist +server=/acer-group.com/127.0.0.1#5335 +ipset=/acer-group.com/gfwlist +server=/colorprotechnology.com/127.0.0.1#5335 +ipset=/colorprotechnology.com/gfwlist +server=/disney.de/127.0.0.1#5335 +ipset=/disney.de/gfwlist +server=/porntop.com/127.0.0.1#5335 +ipset=/porntop.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=/tubemature.tv/127.0.0.1#5335 +ipset=/tubemature.tv/gfwlist +server=/mundomais.com.br/127.0.0.1#5335 +ipset=/mundomais.com.br/gfwlist +server=/tug.org/127.0.0.1#5335 +ipset=/tug.org/gfwlist +server=/blogspot.ru/127.0.0.1#5335 +ipset=/blogspot.ru/gfwlist +server=/graias.com/127.0.0.1#5335 +ipset=/graias.com/gfwlist +server=/businessinsider.in/127.0.0.1#5335 +ipset=/businessinsider.in/gfwlist +server=/blogspot.qa/127.0.0.1#5335 +ipset=/blogspot.qa/gfwlist +server=/milfvr.com/127.0.0.1#5335 +ipset=/milfvr.com/gfwlist +server=/marranazas.com/127.0.0.1#5335 +ipset=/marranazas.com/gfwlist +server=/itunes.co/127.0.0.1#5335 +ipset=/itunes.co/gfwlist +server=/blogspot.mx/127.0.0.1#5335 +ipset=/blogspot.mx/gfwlist +server=/gettyimages.com.au/127.0.0.1#5335 +ipset=/gettyimages.com.au/gfwlist +server=/blogspot.md/127.0.0.1#5335 +ipset=/blogspot.md/gfwlist +server=/shemaleporn.xxx/127.0.0.1#5335 +ipset=/shemaleporn.xxx/gfwlist +server=/virtualrealtrans.com/127.0.0.1#5335 +ipset=/virtualrealtrans.com/gfwlist +server=/nikefree.com/127.0.0.1#5335 +ipset=/nikefree.com/gfwlist +server=/paypal-media.com/127.0.0.1#5335 +ipset=/paypal-media.com/gfwlist +server=/applecare.berlin/127.0.0.1#5335 +ipset=/applecare.berlin/gfwlist +server=/blogspot.li/127.0.0.1#5335 +ipset=/blogspot.li/gfwlist +server=/blogspot.it/127.0.0.1#5335 +ipset=/blogspot.it/gfwlist +server=/beatsbydredanmarks.com/127.0.0.1#5335 +ipset=/beatsbydredanmarks.com/gfwlist +server=/blogspot.in/127.0.0.1#5335 +ipset=/blogspot.in/gfwlist +server=/bmw-motorrad.cz/127.0.0.1#5335 +ipset=/bmw-motorrad.cz/gfwlist +server=/garena.live/127.0.0.1#5335 +ipset=/garena.live/gfwlist +server=/blogspot.hu/127.0.0.1#5335 +ipset=/blogspot.hu/gfwlist +server=/appleiphonecell.com/127.0.0.1#5335 +ipset=/appleiphonecell.com/gfwlist +server=/justporn.link/127.0.0.1#5335 +ipset=/justporn.link/gfwlist +server=/blogspot.gr/127.0.0.1#5335 +ipset=/blogspot.gr/gfwlist +server=/youtube.at/127.0.0.1#5335 +ipset=/youtube.at/gfwlist +server=/blogspot.fr/127.0.0.1#5335 +ipset=/blogspot.fr/gfwlist +server=/newsnowfox.com/127.0.0.1#5335 +ipset=/newsnowfox.com/gfwlist +server=/blogspot.fi/127.0.0.1#5335 +ipset=/blogspot.fi/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=/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=/nudity911.com/127.0.0.1#5335 +ipset=/nudity911.com/gfwlist +server=/blogspot.com.tr/127.0.0.1#5335 +ipset=/blogspot.com.tr/gfwlist +server=/mofosex.com/127.0.0.1#5335 +ipset=/mofosex.com/gfwlist +server=/bwh88.net/127.0.0.1#5335 +ipset=/bwh88.net/gfwlist +server=/hentaihaven.red/127.0.0.1#5335 +ipset=/hentaihaven.red/gfwlist +server=/duckduckhack.com/127.0.0.1#5335 +ipset=/duckduckhack.com/gfwlist +server=/camsoda1.com/127.0.0.1#5335 +ipset=/camsoda1.com/gfwlist +server=/ninemsn.com.au/127.0.0.1#5335 +ipset=/ninemsn.com.au/gfwlist +server=/visa.dk/127.0.0.1#5335 +ipset=/visa.dk/gfwlist +server=/cc18tv.com/127.0.0.1#5335 +ipset=/cc18tv.com/gfwlist +server=/szwinnertechnology.com/127.0.0.1#5335 +ipset=/szwinnertechnology.com/gfwlist +server=/officialdrdre.com/127.0.0.1#5335 +ipset=/officialdrdre.com/gfwlist +server=/jiuse904.com/127.0.0.1#5335 +ipset=/jiuse904.com/gfwlist +server=/blogspot.com.cy/127.0.0.1#5335 +ipset=/blogspot.com.cy/gfwlist +server=/botorch.org/127.0.0.1#5335 +ipset=/botorch.org/gfwlist +server=/blogspot.com.br/127.0.0.1#5335 +ipset=/blogspot.com.br/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=/joyourself.com/127.0.0.1#5335 +ipset=/joyourself.com/gfwlist +server=/openapiservice.com/127.0.0.1#5335 +ipset=/openapiservice.com/gfwlist +server=/bannedbook.net/127.0.0.1#5335 +ipset=/bannedbook.net/gfwlist +server=/finish.pt/127.0.0.1#5335 +ipset=/finish.pt/gfwlist +server=/akamaitechnologies.net/127.0.0.1#5335 +ipset=/akamaitechnologies.net/gfwlist +server=/foxdeportes.com/127.0.0.1#5335 +ipset=/foxdeportes.com/gfwlist +server=/lsnzxzy1.com/127.0.0.1#5335 +ipset=/lsnzxzy1.com/gfwlist +server=/asiangirlsnextdoor.com/127.0.0.1#5335 +ipset=/asiangirlsnextdoor.com/gfwlist +server=/petardashd.com.ve/127.0.0.1#5335 +ipset=/petardashd.com.ve/gfwlist +server=/primeday.info/127.0.0.1#5335 +ipset=/primeday.info/gfwlist +server=/beatsbydredealscybermonday.com/127.0.0.1#5335 +ipset=/beatsbydredealscybermonday.com/gfwlist +server=/paypal-prepagata.net/127.0.0.1#5335 +ipset=/paypal-prepagata.net/gfwlist +server=/yale.edu/127.0.0.1#5335 +ipset=/yale.edu/gfwlist +server=/blogspot.am/127.0.0.1#5335 +ipset=/blogspot.am/gfwlist +server=/boobsrealm.com/127.0.0.1#5335 +ipset=/boobsrealm.com/gfwlist +server=/ecoforme.jp/127.0.0.1#5335 +ipset=/ecoforme.jp/gfwlist +server=/igpublish.com/127.0.0.1#5335 +ipset=/igpublish.com/gfwlist +server=/blogspot.ae/127.0.0.1#5335 +ipset=/blogspot.ae/gfwlist +server=/blogger.com/127.0.0.1#5335 +ipset=/blogger.com/gfwlist +server=/comixzilla.com/127.0.0.1#5335 +ipset=/comixzilla.com/gfwlist +server=/macintosh.eu/127.0.0.1#5335 +ipset=/macintosh.eu/gfwlist +server=/gigabyte2.azureedge.net/127.0.0.1#5335 +ipset=/gigabyte2.azureedge.net/gfwlist +server=/jokerlu1.info/127.0.0.1#5335 +ipset=/jokerlu1.info/gfwlist +server=/faronicswise.com/127.0.0.1#5335 +ipset=/faronicswise.com/gfwlist +server=/myclitgames.com/127.0.0.1#5335 +ipset=/myclitgames.com/gfwlist +server=/blogterest.net/127.0.0.1#5335 +ipset=/blogterest.net/gfwlist +server=/nikegrid.com/127.0.0.1#5335 +ipset=/nikegrid.com/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=/intelatom.net/127.0.0.1#5335 +ipset=/intelatom.net/gfwlist +server=/faronics.com.sg/127.0.0.1#5335 +ipset=/faronics.com.sg/gfwlist +server=/strepsils.com.co/127.0.0.1#5335 +ipset=/strepsils.com.co/gfwlist +server=/faronics.ca/127.0.0.1#5335 +ipset=/faronics.ca/gfwlist +server=/deepfreeze.net/127.0.0.1#5335 +ipset=/deepfreeze.net/gfwlist +server=/volvobuses.ch/127.0.0.1#5335 +ipset=/volvobuses.ch/gfwlist +server=/pornbraze.com/127.0.0.1#5335 +ipset=/pornbraze.com/gfwlist +server=/sci-hub.ee/127.0.0.1#5335 +ipset=/sci-hub.ee/gfwlist +server=/deepfreeze.eu/127.0.0.1#5335 +ipset=/deepfreeze.eu/gfwlist +server=/pornoingyen.hu/127.0.0.1#5335 +ipset=/pornoingyen.hu/gfwlist +server=/nvidia.pl/127.0.0.1#5335 +ipset=/nvidia.pl/gfwlist +server=/techliquidators.com/127.0.0.1#5335 +ipset=/techliquidators.com/gfwlist +server=/lolpcs.com/127.0.0.1#5335 +ipset=/lolpcs.com/gfwlist +server=/mainichi-athletepartners.jp/127.0.0.1#5335 +ipset=/mainichi-athletepartners.jp/gfwlist +server=/disney.com.br/127.0.0.1#5335 +ipset=/disney.com.br/gfwlist +server=/getwsone.com/127.0.0.1#5335 +ipset=/getwsone.com/gfwlist +server=/adultgamescollector.com/127.0.0.1#5335 +ipset=/adultgamescollector.com/gfwlist +server=/beatbd.com/127.0.0.1#5335 +ipset=/beatbd.com/gfwlist +server=/account-paypal.org/127.0.0.1#5335 +ipset=/account-paypal.org/gfwlist +server=/volvotrucks.co.il/127.0.0.1#5335 +ipset=/volvotrucks.co.il/gfwlist +server=/limertw.cc/127.0.0.1#5335 +ipset=/limertw.cc/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=/nfscdict.com/127.0.0.1#5335 +ipset=/nfscdict.com/gfwlist +server=/rakuya.com.tw/127.0.0.1#5335 +ipset=/rakuya.com.tw/gfwlist +server=/fox23maine.com/127.0.0.1#5335 +ipset=/fox23maine.com/gfwlist +server=/vsphere.com/127.0.0.1#5335 +ipset=/vsphere.com/gfwlist +server=/hyper.is/127.0.0.1#5335 +ipset=/hyper.is/gfwlist +server=/ghcr.io/127.0.0.1#5335 +ipset=/ghcr.io/gfwlist +server=/bmw.com.tr/127.0.0.1#5335 +ipset=/bmw.com.tr/gfwlist +server=/physiology.org/127.0.0.1#5335 +ipset=/physiology.org/gfwlist +server=/xbahis33.com/127.0.0.1#5335 +ipset=/xbahis33.com/gfwlist +server=/disney.cz/127.0.0.1#5335 +ipset=/disney.cz/gfwlist +server=/hentaicore.org/127.0.0.1#5335 +ipset=/hentaicore.org/gfwlist +server=/erofights.com/127.0.0.1#5335 +ipset=/erofights.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=/livesexasian.com/127.0.0.1#5335 +ipset=/livesexasian.com/gfwlist +server=/100classicbooks.com/127.0.0.1#5335 +ipset=/100classicbooks.com/gfwlist +server=/yahoo.com.na/127.0.0.1#5335 +ipset=/yahoo.com.na/gfwlist +server=/cloudhealthtech.com/127.0.0.1#5335 +ipset=/cloudhealthtech.com/gfwlist +server=/cloudcredibility.com/127.0.0.1#5335 +ipset=/cloudcredibility.com/gfwlist +server=/visa.de/127.0.0.1#5335 +ipset=/visa.de/gfwlist +server=/dockerizer.com/127.0.0.1#5335 +ipset=/dockerizer.com/gfwlist +server=/bitnamistudio.com/127.0.0.1#5335 +ipset=/bitnamistudio.com/gfwlist +server=/nikechosen.com/127.0.0.1#5335 +ipset=/nikechosen.com/gfwlist +server=/drkogyi.com/127.0.0.1#5335 +ipset=/drkogyi.com/gfwlist +server=/corporatecashpassport.com/127.0.0.1#5335 +ipset=/corporatecashpassport.com/gfwlist +server=/illusionh.com/127.0.0.1#5335 +ipset=/illusionh.com/gfwlist +server=/youtube.com.pa/127.0.0.1#5335 +ipset=/youtube.com.pa/gfwlist +server=/bitnami.com/127.0.0.1#5335 +ipset=/bitnami.com/gfwlist +server=/2kcoretech.online/127.0.0.1#5335 +ipset=/2kcoretech.online/gfwlist +server=/disneymagicmoments.es/127.0.0.1#5335 +ipset=/disneymagicmoments.es/gfwlist +server=/cosplayworld.net/127.0.0.1#5335 +ipset=/cosplayworld.net/gfwlist +server=/nginxconfig.io/127.0.0.1#5335 +ipset=/nginxconfig.io/gfwlist +server=/workspaceair.com/127.0.0.1#5335 +ipset=/workspaceair.com/gfwlist +server=/oranum.com/127.0.0.1#5335 +ipset=/oranum.com/gfwlist +server=/cashback69.com/127.0.0.1#5335 +ipset=/cashback69.com/gfwlist +server=/fox5ny.com/127.0.0.1#5335 +ipset=/fox5ny.com/gfwlist +server=/legsex.com/127.0.0.1#5335 +ipset=/legsex.com/gfwlist +server=/ikea.bh/127.0.0.1#5335 +ipset=/ikea.bh/gfwlist +server=/oculusrift.com/127.0.0.1#5335 +ipset=/oculusrift.com/gfwlist +server=/fffucked.com/127.0.0.1#5335 +ipset=/fffucked.com/gfwlist +server=/animalsporn.net/127.0.0.1#5335 +ipset=/animalsporn.net/gfwlist +server=/sony-africa.com/127.0.0.1#5335 +ipset=/sony-africa.com/gfwlist +server=/ncl.edu.tw/127.0.0.1#5335 +ipset=/ncl.edu.tw/gfwlist +server=/tabootube.xxx/127.0.0.1#5335 +ipset=/tabootube.xxx/gfwlist +server=/bloombergchina.com/127.0.0.1#5335 +ipset=/bloombergchina.com/gfwlist +server=/binancezh.net/127.0.0.1#5335 +ipset=/binancezh.net/gfwlist +server=/whychoosehorizon.com/127.0.0.1#5335 +ipset=/whychoosehorizon.com/gfwlist +server=/vmwservices.com/127.0.0.1#5335 +ipset=/vmwservices.com/gfwlist +server=/ebayshop111.com/127.0.0.1#5335 +ipset=/ebayshop111.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=/5mo.fun/127.0.0.1#5335 +ipset=/5mo.fun/gfwlist +server=/line.naver.jp/127.0.0.1#5335 +ipset=/line.naver.jp/gfwlist +server=/socialmediagirls.com/127.0.0.1#5335 +ipset=/socialmediagirls.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=/rclon.com/127.0.0.1#5335 +ipset=/rclon.com/gfwlist +server=/ikea.ma/127.0.0.1#5335 +ipset=/ikea.ma/gfwlist +server=/bmw-mdrivetour.com/127.0.0.1#5335 +ipset=/bmw-mdrivetour.com/gfwlist +server=/vmwlearningplatform.com/127.0.0.1#5335 +ipset=/vmwlearningplatform.com/gfwlist +server=/tteshop.com/127.0.0.1#5335 +ipset=/tteshop.com/gfwlist +server=/stateofthemap.com/127.0.0.1#5335 +ipset=/stateofthemap.com/gfwlist +server=/scatsite.com/127.0.0.1#5335 +ipset=/scatsite.com/gfwlist +server=/prodrive-japan.com/127.0.0.1#5335 +ipset=/prodrive-japan.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=/ikea.com.in/127.0.0.1#5335 +ipset=/ikea.com.in/gfwlist +server=/placemyad.com.au/127.0.0.1#5335 +ipset=/placemyad.com.au/gfwlist +server=/vmwarelearningplatform.com/127.0.0.1#5335 +ipset=/vmwarelearningplatform.com/gfwlist +server=/samsungcloud.com/127.0.0.1#5335 +ipset=/samsungcloud.com/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=/mirrorsedge.net/127.0.0.1#5335 +ipset=/mirrorsedge.net/gfwlist +server=/carcare-and-tireshop.jp/127.0.0.1#5335 +ipset=/carcare-and-tireshop.jp/gfwlist +server=/vmwaregrid.com/127.0.0.1#5335 +ipset=/vmwaregrid.com/gfwlist +server=/facebookbrand.net/127.0.0.1#5335 +ipset=/facebookbrand.net/gfwlist +server=/foxsoccer.tv/127.0.0.1#5335 +ipset=/foxsoccer.tv/gfwlist +server=/clubseventeen.com/127.0.0.1#5335 +ipset=/clubseventeen.com/gfwlist +server=/vmwaredemandcenter.com/127.0.0.1#5335 +ipset=/vmwaredemandcenter.com/gfwlist +server=/yande.re/127.0.0.1#5335 +ipset=/yande.re/gfwlist +server=/cindymovies.com/127.0.0.1#5335 +ipset=/cindymovies.com/gfwlist +server=/applefinalcutproworld.com/127.0.0.1#5335 +ipset=/applefinalcutproworld.com/gfwlist +server=/camfox.com/127.0.0.1#5335 +ipset=/camfox.com/gfwlist +server=/vmwareausnews.com/127.0.0.1#5335 +ipset=/vmwareausnews.com/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=/bamtoki.com/127.0.0.1#5335 +ipset=/bamtoki.com/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=/viet69.link/127.0.0.1#5335 +ipset=/viet69.link/gfwlist +server=/microsofttranslator.com/127.0.0.1#5335 +ipset=/microsofttranslator.com/gfwlist +server=/softbankrobotics.com/127.0.0.1#5335 +ipset=/softbankrobotics.com/gfwlist +server=/vmware-cloudmanagement.com/127.0.0.1#5335 +ipset=/vmware-cloudmanagement.com/gfwlist +server=/babesofindia.com/127.0.0.1#5335 +ipset=/babesofindia.com/gfwlist +server=/vmmark.com/127.0.0.1#5335 +ipset=/vmmark.com/gfwlist +server=/business-i.jp/127.0.0.1#5335 +ipset=/business-i.jp/gfwlist +server=/facebook30.com/127.0.0.1#5335 +ipset=/facebook30.com/gfwlist +server=/enemaexperiences.com/127.0.0.1#5335 +ipset=/enemaexperiences.com/gfwlist +server=/vmglobal.net/127.0.0.1#5335 +ipset=/vmglobal.net/gfwlist +server=/vfabric.net/127.0.0.1#5335 +ipset=/vfabric.net/gfwlist +server=/maxgo.com/127.0.0.1#5335 +ipset=/maxgo.com/gfwlist +server=/termux.com/127.0.0.1#5335 +ipset=/termux.com/gfwlist +server=/vcanedge.com/127.0.0.1#5335 +ipset=/vcanedge.com/gfwlist +server=/ssdevrd.com/127.0.0.1#5335 +ipset=/ssdevrd.com/gfwlist +server=/blackamateursvideos.com/127.0.0.1#5335 +ipset=/blackamateursvideos.com/gfwlist +server=/bmwusfactory.com/127.0.0.1#5335 +ipset=/bmwusfactory.com/gfwlist +server=/youtube.bo/127.0.0.1#5335 +ipset=/youtube.bo/gfwlist +server=/drdre-beats.com/127.0.0.1#5335 +ipset=/drdre-beats.com/gfwlist +server=/electbabe.com/127.0.0.1#5335 +ipset=/electbabe.com/gfwlist +server=/klik.me/127.0.0.1#5335 +ipset=/klik.me/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=/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=/gelbooru.wjcodes.com/127.0.0.1#5335 +ipset=/gelbooru.wjcodes.com/gfwlist +server=/eliteindianporn.com/127.0.0.1#5335 +ipset=/eliteindianporn.com/gfwlist +server=/hochi.news/127.0.0.1#5335 +ipset=/hochi.news/gfwlist +server=/hentairead.info/127.0.0.1#5335 +ipset=/hentairead.info/gfwlist +server=/youngmommyfucksme.com/127.0.0.1#5335 +ipset=/youngmommyfucksme.com/gfwlist +server=/rarbgunblock.org/127.0.0.1#5335 +ipset=/rarbgunblock.org/gfwlist +server=/cpedge.com/127.0.0.1#5335 +ipset=/cpedge.com/gfwlist +server=/bollywoodlife.com/127.0.0.1#5335 +ipset=/bollywoodlife.com/gfwlist +server=/pornhubapparel.com/127.0.0.1#5335 +ipset=/pornhubapparel.com/gfwlist +server=/rolls-roycemotorcars.com/127.0.0.1#5335 +ipset=/rolls-roycemotorcars.com/gfwlist +server=/archiveofourown.org/127.0.0.1#5335 +ipset=/archiveofourown.org/gfwlist +server=/bookmybridgestonetyre.com/127.0.0.1#5335 +ipset=/bookmybridgestonetyre.com/gfwlist +server=/cfblob.com/127.0.0.1#5335 +ipset=/cfblob.com/gfwlist +server=/costco-static.com/127.0.0.1#5335 +ipset=/costco-static.com/gfwlist +server=/duckduckgo.pl/127.0.0.1#5335 +ipset=/duckduckgo.pl/gfwlist +server=/filmeleporno.xxx/127.0.0.1#5335 +ipset=/filmeleporno.xxx/gfwlist +server=/monsterbeatssales.com/127.0.0.1#5335 +ipset=/monsterbeatssales.com/gfwlist +server=/4cdn.org/127.0.0.1#5335 +ipset=/4cdn.org/gfwlist +server=/akamai.co.kr/127.0.0.1#5335 +ipset=/akamai.co.kr/gfwlist +server=/telegram.dog/127.0.0.1#5335 +ipset=/telegram.dog/gfwlist +server=/collabora.co.uk/127.0.0.1#5335 +ipset=/collabora.co.uk/gfwlist +server=/cloudcone.net/127.0.0.1#5335 +ipset=/cloudcone.net/gfwlist +server=/besthentaitube.com/127.0.0.1#5335 +ipset=/besthentaitube.com/gfwlist +server=/cnyes.com/127.0.0.1#5335 +ipset=/cnyes.com/gfwlist +server=/cloudcone.com/127.0.0.1#5335 +ipset=/cloudcone.com/gfwlist +server=/ikea.is/127.0.0.1#5335 +ipset=/ikea.is/gfwlist +server=/aweencore.com/127.0.0.1#5335 +ipset=/aweencore.com/gfwlist +server=/melonstube.com/127.0.0.1#5335 +ipset=/melonstube.com/gfwlist +server=/jilhub.com/127.0.0.1#5335 +ipset=/jilhub.com/gfwlist +server=/armovs.com/127.0.0.1#5335 +ipset=/armovs.com/gfwlist +server=/hitxhot.com/127.0.0.1#5335 +ipset=/hitxhot.com/gfwlist +server=/cisco.evergage.com/127.0.0.1#5335 +ipset=/cisco.evergage.com/gfwlist +server=/nikeshoesgroup.com/127.0.0.1#5335 +ipset=/nikeshoesgroup.com/gfwlist +server=/tettediferro.it/127.0.0.1#5335 +ipset=/tettediferro.it/gfwlist +server=/tailf.com/127.0.0.1#5335 +ipset=/tailf.com/gfwlist +server=/hindawi.com/127.0.0.1#5335 +ipset=/hindawi.com/gfwlist +server=/thomsonreuters.com.hk/127.0.0.1#5335 +ipset=/thomsonreuters.com.hk/gfwlist +server=/thecamdude.com/127.0.0.1#5335 +ipset=/thecamdude.com/gfwlist +server=/wet-ass-pussy.com/127.0.0.1#5335 +ipset=/wet-ass-pussy.com/gfwlist +server=/toplayerserver.com/127.0.0.1#5335 +ipset=/toplayerserver.com/gfwlist +server=/appdynamics.org/127.0.0.1#5335 +ipset=/appdynamics.org/gfwlist +server=/dmm.co.jp/127.0.0.1#5335 +ipset=/dmm.co.jp/gfwlist +server=/climateone.blogspot.co.id/127.0.0.1#5335 +ipset=/climateone.blogspot.co.id/gfwlist +server=/appdynamics.jp/127.0.0.1#5335 +ipset=/appdynamics.jp/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=/appdynamics.co.uk/127.0.0.1#5335 +ipset=/appdynamics.co.uk/gfwlist +server=/rule34.asia/127.0.0.1#5335 +ipset=/rule34.asia/gfwlist +server=/facebookcom.com/127.0.0.1#5335 +ipset=/facebookcom.com/gfwlist +server=/konachan.wjcodes.com/127.0.0.1#5335 +ipset=/konachan.wjcodes.com/gfwlist +server=/nytco.com/127.0.0.1#5335 +ipset=/nytco.com/gfwlist +server=/boylove.cc/127.0.0.1#5335 +ipset=/boylove.cc/gfwlist +server=/elite.com/127.0.0.1#5335 +ipset=/elite.com/gfwlist +server=/vfsco.pe/127.0.0.1#5335 +ipset=/vfsco.pe/gfwlist +server=/bcovlive-a.akamaihd.net/127.0.0.1#5335 +ipset=/bcovlive-a.akamaihd.net/gfwlist +server=/virtuata.com/127.0.0.1#5335 +ipset=/virtuata.com/gfwlist +server=/ssl.com/127.0.0.1#5335 +ipset=/ssl.com/gfwlist +server=/ciscoinvestments.com/127.0.0.1#5335 +ipset=/ciscoinvestments.com/gfwlist +server=/worldofwarcraft.com/127.0.0.1#5335 +ipset=/worldofwarcraft.com/gfwlist +server=/versly.com/127.0.0.1#5335 +ipset=/versly.com/gfwlist +server=/cowboom.com/127.0.0.1#5335 +ipset=/cowboom.com/gfwlist +server=/accountpaypal.com/127.0.0.1#5335 +ipset=/accountpaypal.com/gfwlist +server=/tandberg-china.com/127.0.0.1#5335 +ipset=/tandberg-china.com/gfwlist +server=/myfoxtampa.com/127.0.0.1#5335 +ipset=/myfoxtampa.com/gfwlist +server=/hoyolab.com/127.0.0.1#5335 +ipset=/hoyolab.com/gfwlist +server=/nintendo.no/127.0.0.1#5335 +ipset=/nintendo.no/gfwlist +server=/mornporn.com/127.0.0.1#5335 +ipset=/mornporn.com/gfwlist +server=/regiongold.com/127.0.0.1#5335 +ipset=/regiongold.com/gfwlist +server=/parstream.org/127.0.0.1#5335 +ipset=/parstream.org/gfwlist +server=/top100nl.net/127.0.0.1#5335 +ipset=/top100nl.net/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=/camelspaceeffect.com/127.0.0.1#5335 +ipset=/camelspaceeffect.com/gfwlist +server=/githubusercontent.com/127.0.0.1#5335 +ipset=/githubusercontent.com/gfwlist +server=/obsrvbl.com/127.0.0.1#5335 +ipset=/obsrvbl.com/gfwlist +server=/allporncomic.com/127.0.0.1#5335 +ipset=/allporncomic.com/gfwlist +server=/netacad.com/127.0.0.1#5335 +ipset=/netacad.com/gfwlist +server=/cloudflare.com/127.0.0.1#5335 +ipset=/cloudflare.com/gfwlist +server=/mysdn.info/127.0.0.1#5335 +ipset=/mysdn.info/gfwlist +server=/zoofiction.com/127.0.0.1#5335 +ipset=/zoofiction.com/gfwlist +server=/mysdn.com/127.0.0.1#5335 +ipset=/mysdn.com/gfwlist +server=/myciscobenefits.com/127.0.0.1#5335 +ipset=/myciscobenefits.com/gfwlist +server=/multiplydiversity.com/127.0.0.1#5335 +ipset=/multiplydiversity.com/gfwlist +server=/adultgames.games/127.0.0.1#5335 +ipset=/adultgames.games/gfwlist +server=/securepaypal.info/127.0.0.1#5335 +ipset=/securepaypal.info/gfwlist +server=/beatsbydrefriday.com/127.0.0.1#5335 +ipset=/beatsbydrefriday.com/gfwlist +server=/bmw-motorrad.ch/127.0.0.1#5335 +ipset=/bmw-motorrad.ch/gfwlist +server=/onlyams.com/127.0.0.1#5335 +ipset=/onlyams.com/gfwlist +server=/matters.news/127.0.0.1#5335 +ipset=/matters.news/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=/gpstheseries.com/127.0.0.1#5335 +ipset=/gpstheseries.com/gfwlist +server=/devm2m.com/127.0.0.1#5335 +ipset=/devm2m.com/gfwlist +server=/xxxdinotube.com/127.0.0.1#5335 +ipset=/xxxdinotube.com/gfwlist +server=/careerfundas.com/127.0.0.1#5335 +ipset=/careerfundas.com/gfwlist +server=/badsexygirl.com/127.0.0.1#5335 +ipset=/badsexygirl.com/gfwlist +server=/coreoptics.net/127.0.0.1#5335 +ipset=/coreoptics.net/gfwlist +server=/managedpki.ne.jp/127.0.0.1#5335 +ipset=/managedpki.ne.jp/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=/connect-in-canada.com/127.0.0.1#5335 +ipset=/connect-in-canada.com/gfwlist +server=/celebritygay.com/127.0.0.1#5335 +ipset=/celebritygay.com/gfwlist +server=/mdialog.com/127.0.0.1#5335 +ipset=/mdialog.com/gfwlist +server=/seancody.com/127.0.0.1#5335 +ipset=/seancody.com/gfwlist +server=/ciscovideo.com/127.0.0.1#5335 +ipset=/ciscovideo.com/gfwlist +server=/ciscotaccc.com/127.0.0.1#5335 +ipset=/ciscotaccc.com/gfwlist +server=/psiphon3.com/127.0.0.1#5335 +ipset=/psiphon3.com/gfwlist +server=/ciscospark.jp/127.0.0.1#5335 +ipset=/ciscospark.jp/gfwlist +server=/dutrai.com/127.0.0.1#5335 +ipset=/dutrai.com/gfwlist +server=/severreal.org/127.0.0.1#5335 +ipset=/severreal.org/gfwlist +server=/mini.co.me/127.0.0.1#5335 +ipset=/mini.co.me/gfwlist +server=/bmw-oman.com/127.0.0.1#5335 +ipset=/bmw-oman.com/gfwlist +server=/acheterdesfollowersinstagram.com/127.0.0.1#5335 +ipset=/acheterdesfollowersinstagram.com/gfwlist +server=/beatsdresale2013.com/127.0.0.1#5335 +ipset=/beatsdresale2013.com/gfwlist +server=/fbwat.ch/127.0.0.1#5335 +ipset=/fbwat.ch/gfwlist +server=/volvotrucks.it/127.0.0.1#5335 +ipset=/volvotrucks.it/gfwlist +server=/sex-teen.net/127.0.0.1#5335 +ipset=/sex-teen.net/gfwlist +server=/ciscoprice.com/127.0.0.1#5335 +ipset=/ciscoprice.com/gfwlist +server=/gfrevenge.com/127.0.0.1#5335 +ipset=/gfrevenge.com/gfwlist +server=/ciscopowercube.com/127.0.0.1#5335 +ipset=/ciscopowercube.com/gfwlist +server=/cisconetspace.net/127.0.0.1#5335 +ipset=/cisconetspace.net/gfwlist +server=/cisconetspace.com/127.0.0.1#5335 +ipset=/cisconetspace.com/gfwlist +server=/ciscolearningsystem.com/127.0.0.1#5335 +ipset=/ciscolearningsystem.com/gfwlist +server=/horsedick.net/127.0.0.1#5335 +ipset=/horsedick.net/gfwlist +server=/mol.im/127.0.0.1#5335 +ipset=/mol.im/gfwlist +server=/mastercardidtheftalerts.com/127.0.0.1#5335 +ipset=/mastercardidtheftalerts.com/gfwlist +server=/777xporn.com/127.0.0.1#5335 +ipset=/777xporn.com/gfwlist +server=/ciscoerate.com/127.0.0.1#5335 +ipset=/ciscoerate.com/gfwlist +server=/ciscoconnectcloud.org/127.0.0.1#5335 +ipset=/ciscoconnectcloud.org/gfwlist +server=/ciscoconnectcloud.net/127.0.0.1#5335 +ipset=/ciscoconnectcloud.net/gfwlist +server=/myporngay.com/127.0.0.1#5335 +ipset=/myporngay.com/gfwlist +server=/ciscoccservice.com/127.0.0.1#5335 +ipset=/ciscoccservice.com/gfwlist +server=/twitchcdn.net/127.0.0.1#5335 +ipset=/twitchcdn.net/gfwlist +server=/airav.cc/127.0.0.1#5335 +ipset=/airav.cc/gfwlist +server=/tssp.best/127.0.0.1#5335 +ipset=/tssp.best/gfwlist +server=/cdnlab.live/127.0.0.1#5335 +ipset=/cdnlab.live/gfwlist +server=/barrons-advisor.com/127.0.0.1#5335 +ipset=/barrons-advisor.com/gfwlist +server=/beatsheadphonesale.com/127.0.0.1#5335 +ipset=/beatsheadphonesale.com/gfwlist +server=/cciesecuritylabs.com/127.0.0.1#5335 +ipset=/cciesecuritylabs.com/gfwlist +server=/disneynewseries.com/127.0.0.1#5335 +ipset=/disneynewseries.com/gfwlist +server=/pornodoido.com/127.0.0.1#5335 +ipset=/pornodoido.com/gfwlist +server=/cciernslabs.com/127.0.0.1#5335 +ipset=/cciernslabs.com/gfwlist +server=/academynetriders.com/127.0.0.1#5335 +ipset=/academynetriders.com/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=/webex.com.br/127.0.0.1#5335 +ipset=/webex.com.br/gfwlist +server=/discord.gift/127.0.0.1#5335 +ipset=/discord.gift/gfwlist +server=/evgld7cg58l8.com/127.0.0.1#5335 +ipset=/evgld7cg58l8.com/gfwlist +server=/womensnikeshox.com/127.0.0.1#5335 +ipset=/womensnikeshox.com/gfwlist +server=/bmw-security-vehicles.com/127.0.0.1#5335 +ipset=/bmw-security-vehicles.com/gfwlist +server=/beatsbydre-outletstore.com/127.0.0.1#5335 +ipset=/beatsbydre-outletstore.com/gfwlist +server=/finish.at/127.0.0.1#5335 +ipset=/finish.at/gfwlist +server=/shemalez.com/127.0.0.1#5335 +ipset=/shemalez.com/gfwlist +server=/webex.co.jp/127.0.0.1#5335 +ipset=/webex.co.jp/gfwlist +server=/webex.co.it/127.0.0.1#5335 +ipset=/webex.co.it/gfwlist +server=/as-dash-uk-live.akamaized.net/127.0.0.1#5335 +ipset=/as-dash-uk-live.akamaized.net/gfwlist +server=/webex.co.in/127.0.0.1#5335 +ipset=/webex.co.in/gfwlist +server=/faceebot.com/127.0.0.1#5335 +ipset=/faceebot.com/gfwlist +server=/instagainer.com/127.0.0.1#5335 +ipset=/instagainer.com/gfwlist +server=/platinumlinks.org/127.0.0.1#5335 +ipset=/platinumlinks.org/gfwlist +server=/hp.company/127.0.0.1#5335 +ipset=/hp.company/gfwlist +server=/vpejey.xyz/127.0.0.1#5335 +ipset=/vpejey.xyz/gfwlist +server=/tradevip1.com/127.0.0.1#5335 +ipset=/tradevip1.com/gfwlist +server=/canon.si/127.0.0.1#5335 +ipset=/canon.si/gfwlist +server=/uux68.com/127.0.0.1#5335 +ipset=/uux68.com/gfwlist +server=/papermc.io/127.0.0.1#5335 +ipset=/papermc.io/gfwlist +server=/blizzak-juken.jp/127.0.0.1#5335 +ipset=/blizzak-juken.jp/gfwlist +server=/xvirtual.com/127.0.0.1#5335 +ipset=/xvirtual.com/gfwlist +server=/foxinc.com/127.0.0.1#5335 +ipset=/foxinc.com/gfwlist +server=/free-avx.jp/127.0.0.1#5335 +ipset=/free-avx.jp/gfwlist +server=/nintendo.se/127.0.0.1#5335 +ipset=/nintendo.se/gfwlist +server=/hentai-gamer.com/127.0.0.1#5335 +ipset=/hentai-gamer.com/gfwlist +server=/appstore.co.id/127.0.0.1#5335 +ipset=/appstore.co.id/gfwlist +server=/newsukadops.com/127.0.0.1#5335 +ipset=/newsukadops.com/gfwlist +server=/akamaitech.com/127.0.0.1#5335 +ipset=/akamaitech.com/gfwlist +server=/applehealth.com.hk/127.0.0.1#5335 +ipset=/applehealth.com.hk/gfwlist +server=/canon.no/127.0.0.1#5335 +ipset=/canon.no/gfwlist +server=/wiisportsresort.com/127.0.0.1#5335 +ipset=/wiisportsresort.com/gfwlist +server=/nverxs.xyz/127.0.0.1#5335 +ipset=/nverxs.xyz/gfwlist +server=/binancezh.com/127.0.0.1#5335 +ipset=/binancezh.com/gfwlist +server=/visadigital.com/127.0.0.1#5335 +ipset=/visadigital.com/gfwlist +server=/riotpin.com/127.0.0.1#5335 +ipset=/riotpin.com/gfwlist +server=/canon.it/127.0.0.1#5335 +ipset=/canon.it/gfwlist +server=/google.dz/127.0.0.1#5335 +ipset=/google.dz/gfwlist +server=/canon.ie/127.0.0.1#5335 +ipset=/canon.ie/gfwlist +server=/adobetcstrialdvd.com/127.0.0.1#5335 +ipset=/adobetcstrialdvd.com/gfwlist +server=/nfscofficial.com/127.0.0.1#5335 +ipset=/nfscofficial.com/gfwlist +server=/monsterbeats8beatsbydre.com/127.0.0.1#5335 +ipset=/monsterbeats8beatsbydre.com/gfwlist +server=/bmw.com.my/127.0.0.1#5335 +ipset=/bmw.com.my/gfwlist +server=/gfysex.com/127.0.0.1#5335 +ipset=/gfysex.com/gfwlist +server=/dogatch.jp/127.0.0.1#5335 +ipset=/dogatch.jp/gfwlist +server=/otokonokoland.com/127.0.0.1#5335 +ipset=/otokonokoland.com/gfwlist +server=/amakings.com/127.0.0.1#5335 +ipset=/amakings.com/gfwlist +server=/visaeurope.ch/127.0.0.1#5335 +ipset=/visaeurope.ch/gfwlist +server=/geileomas.com/127.0.0.1#5335 +ipset=/geileomas.com/gfwlist +server=/canon.es/127.0.0.1#5335 +ipset=/canon.es/gfwlist +server=/canon-cna.com/127.0.0.1#5335 +ipset=/canon-cna.com/gfwlist +server=/beatsbydrdre-onsale.com/127.0.0.1#5335 +ipset=/beatsbydrdre-onsale.com/gfwlist +server=/amazonprimevideos.com/127.0.0.1#5335 +ipset=/amazonprimevideos.com/gfwlist +server=/kaktuz.com/127.0.0.1#5335 +ipset=/kaktuz.com/gfwlist +server=/sexyhub.com/127.0.0.1#5335 +ipset=/sexyhub.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=/firestonecompleteautocare.com/127.0.0.1#5335 +ipset=/firestonecompleteautocare.com/gfwlist +server=/canon.com.tw/127.0.0.1#5335 +ipset=/canon.com.tw/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=/javjunkies.com/127.0.0.1#5335 +ipset=/javjunkies.com/gfwlist +server=/ebayenterprise.com/127.0.0.1#5335 +ipset=/ebayenterprise.com/gfwlist +server=/brourou.com/127.0.0.1#5335 +ipset=/brourou.com/gfwlist +server=/deutschewelle.h-cdn.com/127.0.0.1#5335 +ipset=/deutschewelle.h-cdn.com/gfwlist +server=/canon.com/127.0.0.1#5335 +ipset=/canon.com/gfwlist +server=/canon.co.uk/127.0.0.1#5335 +ipset=/canon.co.uk/gfwlist +server=/aiasahi.jp/127.0.0.1#5335 +ipset=/aiasahi.jp/gfwlist +server=/canon.be/127.0.0.1#5335 +ipset=/canon.be/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=/canon.at/127.0.0.1#5335 +ipset=/canon.at/gfwlist +server=/mainichi.jp/127.0.0.1#5335 +ipset=/mainichi.jp/gfwlist +server=/canon.am/127.0.0.1#5335 +ipset=/canon.am/gfwlist +server=/scholar.google.ro/127.0.0.1#5335 +ipset=/scholar.google.ro/gfwlist +server=/virginpornlinks.com/127.0.0.1#5335 +ipset=/virginpornlinks.com/gfwlist +server=/verisign.jobs/127.0.0.1#5335 +ipset=/verisign.jobs/gfwlist +server=/mini-connected.cz/127.0.0.1#5335 +ipset=/mini-connected.cz/gfwlist +server=/canon-se.com.tw/127.0.0.1#5335 +ipset=/canon-se.com.tw/gfwlist +server=/macbook.co/127.0.0.1#5335 +ipset=/macbook.co/gfwlist +server=/enema-videos.com/127.0.0.1#5335 +ipset=/enema-videos.com/gfwlist +server=/ero-ma-nia.com/127.0.0.1#5335 +ipset=/ero-ma-nia.com/gfwlist +server=/canon-europa.com/127.0.0.1#5335 +ipset=/canon-europa.com/gfwlist +server=/magicmovies.com/127.0.0.1#5335 +ipset=/magicmovies.com/gfwlist +server=/canon.pl/127.0.0.1#5335 +ipset=/canon.pl/gfwlist +server=/scatkings.com/127.0.0.1#5335 +ipset=/scatkings.com/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=/xvideos.red/127.0.0.1#5335 +ipset=/xvideos.red/gfwlist +server=/canon-emirates.ae/127.0.0.1#5335 +ipset=/canon-emirates.ae/gfwlist +server=/canon-ebm.com.hk/127.0.0.1#5335 +ipset=/canon-ebm.com.hk/gfwlist +server=/paypal-redeem.com/127.0.0.1#5335 +ipset=/paypal-redeem.com/gfwlist +server=/18av.pro/127.0.0.1#5335 +ipset=/18av.pro/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=/mastercardbiz.ca/127.0.0.1#5335 +ipset=/mastercardbiz.ca/gfwlist +server=/adultism.com/127.0.0.1#5335 +ipset=/adultism.com/gfwlist +server=/avstar4.com/127.0.0.1#5335 +ipset=/avstar4.com/gfwlist +server=/samsungdm.com/127.0.0.1#5335 +ipset=/samsungdm.com/gfwlist +server=/puripuriunkomura.com/127.0.0.1#5335 +ipset=/puripuriunkomura.com/gfwlist +server=/asianprivatetube.com/127.0.0.1#5335 +ipset=/asianprivatetube.com/gfwlist +server=/scienceonline.org/127.0.0.1#5335 +ipset=/scienceonline.org/gfwlist +server=/wifeinterracialfuck.com/127.0.0.1#5335 +ipset=/wifeinterracialfuck.com/gfwlist +server=/sony.ru/127.0.0.1#5335 +ipset=/sony.ru/gfwlist +server=/bwh1.net/127.0.0.1#5335 +ipset=/bwh1.net/gfwlist +server=/pugetsoundmini.com/127.0.0.1#5335 +ipset=/pugetsoundmini.com/gfwlist +server=/mega.co.nz/127.0.0.1#5335 +ipset=/mega.co.nz/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=/mydirectgroove.com/127.0.0.1#5335 +ipset=/mydirectgroove.com/gfwlist +server=/le-direct.tv/127.0.0.1#5335 +ipset=/le-direct.tv/gfwlist +server=/youtube.mk/127.0.0.1#5335 +ipset=/youtube.mk/gfwlist +server=/newsprinters.co.uk/127.0.0.1#5335 +ipset=/newsprinters.co.uk/gfwlist +server=/dropboxcaptcha.com/127.0.0.1#5335 +ipset=/dropboxcaptcha.com/gfwlist +server=/successwithteams.com/127.0.0.1#5335 +ipset=/successwithteams.com/gfwlist +server=/diretv.com/127.0.0.1#5335 +ipset=/diretv.com/gfwlist +server=/directvsundayticket.com/127.0.0.1#5335 +ipset=/directvsundayticket.com/gfwlist +server=/paypalservice.com/127.0.0.1#5335 +ipset=/paypalservice.com/gfwlist +server=/bestbhy.com/127.0.0.1#5335 +ipset=/bestbhy.com/gfwlist +server=/directvrebate.com/127.0.0.1#5335 +ipset=/directvrebate.com/gfwlist +server=/directvpromotions.com/127.0.0.1#5335 +ipset=/directvpromotions.com/gfwlist +server=/directvpromise.com/127.0.0.1#5335 +ipset=/directvpromise.com/gfwlist +server=/barrons.com/127.0.0.1#5335 +ipset=/barrons.com/gfwlist +server=/directvnow.com/127.0.0.1#5335 +ipset=/directvnow.com/gfwlist +server=/airwick.be/127.0.0.1#5335 +ipset=/airwick.be/gfwlist +server=/directvnewhampshire.com/127.0.0.1#5335 +ipset=/directvnewhampshire.com/gfwlist +server=/superearsenjoy.com/127.0.0.1#5335 +ipset=/superearsenjoy.com/gfwlist +server=/kijii.ca/127.0.0.1#5335 +ipset=/kijii.ca/gfwlist +server=/myfoxtwincities.com/127.0.0.1#5335 +ipset=/myfoxtwincities.com/gfwlist +server=/directvkentucky.com/127.0.0.1#5335 +ipset=/directvkentucky.com/gfwlist +server=/cashpassport.ca/127.0.0.1#5335 +ipset=/cashpassport.ca/gfwlist +server=/grannylister.com/127.0.0.1#5335 +ipset=/grannylister.com/gfwlist +server=/fritchy.com/127.0.0.1#5335 +ipset=/fritchy.com/gfwlist +server=/attstadium.com/127.0.0.1#5335 +ipset=/attstadium.com/gfwlist +server=/moov.hk/127.0.0.1#5335 +ipset=/moov.hk/gfwlist +server=/toonsexblog.com/127.0.0.1#5335 +ipset=/toonsexblog.com/gfwlist +server=/laracasts.com/127.0.0.1#5335 +ipset=/laracasts.com/gfwlist +server=/directvdsl.tv/127.0.0.1#5335 +ipset=/directvdsl.tv/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=/directvdealsnow.com/127.0.0.1#5335 +ipset=/directvdealsnow.com/gfwlist +server=/fox32chicago.com/127.0.0.1#5335 +ipset=/fox32chicago.com/gfwlist +server=/hentairox.com/127.0.0.1#5335 +ipset=/hentairox.com/gfwlist +server=/realclearpolitics.com/127.0.0.1#5335 +ipset=/realclearpolitics.com/gfwlist +server=/directvbusiness.com/127.0.0.1#5335 +ipset=/directvbusiness.com/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=/book.com.tw/127.0.0.1#5335 +ipset=/book.com.tw/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=/directvboston.com/127.0.0.1#5335 +ipset=/directvboston.com/gfwlist +server=/bestbuys.com/127.0.0.1#5335 +ipset=/bestbuys.com/gfwlist +server=/directv-newyork.com/127.0.0.1#5335 +ipset=/directv-newyork.com/gfwlist +server=/instafallow.com/127.0.0.1#5335 +ipset=/instafallow.com/gfwlist +server=/firstsearch.oclc.org/127.0.0.1#5335 +ipset=/firstsearch.oclc.org/gfwlist +server=/freeb.com/127.0.0.1#5335 +ipset=/freeb.com/gfwlist +server=/dkrecttv.com/127.0.0.1#5335 +ipset=/dkrecttv.com/gfwlist +server=/young-xxx.net/127.0.0.1#5335 +ipset=/young-xxx.net/gfwlist +server=/meme111.com/127.0.0.1#5335 +ipset=/meme111.com/gfwlist +server=/hdvideosporn.net/127.0.0.1#5335 +ipset=/hdvideosporn.net/gfwlist +server=/direcpath.net/127.0.0.1#5335 +ipset=/direcpath.net/gfwlist +server=/hentaistream.tv/127.0.0.1#5335 +ipset=/hentaistream.tv/gfwlist +server=/mcdonalds.hk/127.0.0.1#5335 +ipset=/mcdonalds.hk/gfwlist +server=/softbanktelecom.com/127.0.0.1#5335 +ipset=/softbanktelecom.com/gfwlist +server=/hotgoo.com/127.0.0.1#5335 +ipset=/hotgoo.com/gfwlist +server=/boylove.com/127.0.0.1#5335 +ipset=/boylove.com/gfwlist +server=/zorglist.com/127.0.0.1#5335 +ipset=/zorglist.com/gfwlist +server=/loveamateurfacials.com/127.0.0.1#5335 +ipset=/loveamateurfacials.com/gfwlist +server=/booru.org/127.0.0.1#5335 +ipset=/booru.org/gfwlist +server=/3danimeworld.com/127.0.0.1#5335 +ipset=/3danimeworld.com/gfwlist +server=/infocert.digital/127.0.0.1#5335 +ipset=/infocert.digital/gfwlist +server=/mini.si/127.0.0.1#5335 +ipset=/mini.si/gfwlist +server=/tvpromise.com/127.0.0.1#5335 +ipset=/tvpromise.com/gfwlist +server=/porngames.tv/127.0.0.1#5335 +ipset=/porngames.tv/gfwlist +server=/pinkworld.com/127.0.0.1#5335 +ipset=/pinkworld.com/gfwlist +server=/yes123.com.tw/127.0.0.1#5335 +ipset=/yes123.com.tw/gfwlist +server=/synaptic.net/127.0.0.1#5335 +ipset=/synaptic.net/gfwlist +server=/safebooru.org/127.0.0.1#5335 +ipset=/safebooru.org/gfwlist +server=/sundayready.com/127.0.0.1#5335 +ipset=/sundayready.com/gfwlist +server=/susiewildin.com/127.0.0.1#5335 +ipset=/susiewildin.com/gfwlist +server=/girlsdelta.com/127.0.0.1#5335 +ipset=/girlsdelta.com/gfwlist +server=/hotbeatsonsale.com/127.0.0.1#5335 +ipset=/hotbeatsonsale.com/gfwlist +server=/bmw-motorrad.ro/127.0.0.1#5335 +ipset=/bmw-motorrad.ro/gfwlist +server=/visa.com.cy/127.0.0.1#5335 +ipset=/visa.com.cy/gfwlist +server=/8xxx.net/127.0.0.1#5335 +ipset=/8xxx.net/gfwlist +server=/bmwsafari.com/127.0.0.1#5335 +ipset=/bmwsafari.com/gfwlist +server=/enterprisepaging.com/127.0.0.1#5335 +ipset=/enterprisepaging.com/gfwlist +server=/foxaffiliateportal.com/127.0.0.1#5335 +ipset=/foxaffiliateportal.com/gfwlist +server=/directvbusinessmarket.com/127.0.0.1#5335 +ipset=/directvbusinessmarket.com/gfwlist +server=/naizitv.top/127.0.0.1#5335 +ipset=/naizitv.top/gfwlist +server=/swissstick.com/127.0.0.1#5335 +ipset=/swissstick.com/gfwlist +server=/bmw-connecteddrive.sk/127.0.0.1#5335 +ipset=/bmw-connecteddrive.sk/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=/currently.net/127.0.0.1#5335 +ipset=/currently.net/gfwlist +server=/ntdtv.com/127.0.0.1#5335 +ipset=/ntdtv.com/gfwlist +server=/oudoll.com/127.0.0.1#5335 +ipset=/oudoll.com/gfwlist +server=/ebaychina.net/127.0.0.1#5335 +ipset=/ebaychina.net/gfwlist +server=/enablementadobe.com/127.0.0.1#5335 +ipset=/enablementadobe.com/gfwlist +server=/18comic.vip/127.0.0.1#5335 +ipset=/18comic.vip/gfwlist +server=/acgvipss.com/127.0.0.1#5335 +ipset=/acgvipss.com/gfwlist +server=/nexpart.com/127.0.0.1#5335 +ipset=/nexpart.com/gfwlist +server=/headphonesol.com/127.0.0.1#5335 +ipset=/headphonesol.com/gfwlist +server=/pearsonvue.com/127.0.0.1#5335 +ipset=/pearsonvue.com/gfwlist +server=/beatsmonstersales.com/127.0.0.1#5335 +ipset=/beatsmonstersales.com/gfwlist +server=/attuverseonline.com/127.0.0.1#5335 +ipset=/attuverseonline.com/gfwlist +server=/attuverseoffers.com/127.0.0.1#5335 +ipset=/attuverseoffers.com/gfwlist +server=/attsuppliers.com/127.0.0.1#5335 +ipset=/attsuppliers.com/gfwlist +server=/opencollective.com/127.0.0.1#5335 +ipset=/opencollective.com/gfwlist +server=/anidom.com/127.0.0.1#5335 +ipset=/anidom.com/gfwlist +server=/slackb.com/127.0.0.1#5335 +ipset=/slackb.com/gfwlist +server=/niketaiwan.net/127.0.0.1#5335 +ipset=/niketaiwan.net/gfwlist +server=/m.me/127.0.0.1#5335 +ipset=/m.me/gfwlist +server=/matures-loving-sex.com/127.0.0.1#5335 +ipset=/matures-loving-sex.com/gfwlist +server=/musickit.net/127.0.0.1#5335 +ipset=/musickit.net/gfwlist +server=/attpublicpolicy.com/127.0.0.1#5335 +ipset=/attpublicpolicy.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=/attnetclient.com/127.0.0.1#5335 +ipset=/attnetclient.com/gfwlist +server=/attjoy.com/127.0.0.1#5335 +ipset=/attjoy.com/gfwlist +server=/attcollaborate.com/127.0.0.1#5335 +ipset=/attcollaborate.com/gfwlist +server=/goldengate.hu/127.0.0.1#5335 +ipset=/goldengate.hu/gfwlist +server=/attbusiness.net/127.0.0.1#5335 +ipset=/attbusiness.net/gfwlist +server=/sexbebin.com/127.0.0.1#5335 +ipset=/sexbebin.com/gfwlist +server=/iphoneimessage.com/127.0.0.1#5335 +ipset=/iphoneimessage.com/gfwlist +server=/1pornlist.com/127.0.0.1#5335 +ipset=/1pornlist.com/gfwlist +server=/eadultgames.com/127.0.0.1#5335 +ipset=/eadultgames.com/gfwlist +server=/fameregistry.com/127.0.0.1#5335 +ipset=/fameregistry.com/gfwlist +server=/cumfox.com/127.0.0.1#5335 +ipset=/cumfox.com/gfwlist +server=/att.jobs/127.0.0.1#5335 +ipset=/att.jobs/gfwlist +server=/gwktravelex.nl/127.0.0.1#5335 +ipset=/gwktravelex.nl/gfwlist +server=/youngermommy.com/127.0.0.1#5335 +ipset=/youngermommy.com/gfwlist +server=/porn-discounts.xxx/127.0.0.1#5335 +ipset=/porn-discounts.xxx/gfwlist +server=/pixnet.cc/127.0.0.1#5335 +ipset=/pixnet.cc/gfwlist +server=/att-promotions.com/127.0.0.1#5335 +ipset=/att-promotions.com/gfwlist +server=/digital-id.ch/127.0.0.1#5335 +ipset=/digital-id.ch/gfwlist +server=/t.me/127.0.0.1#5335 +ipset=/t.me/gfwlist +server=/att-mail.com/127.0.0.1#5335 +ipset=/att-mail.com/gfwlist +server=/f-droid.org/127.0.0.1#5335 +ipset=/f-droid.org/gfwlist +server=/sarapbabe.com/127.0.0.1#5335 +ipset=/sarapbabe.com/gfwlist +server=/att-bundles.com/127.0.0.1#5335 +ipset=/att-bundles.com/gfwlist +server=/accbusiness.com/127.0.0.1#5335 +ipset=/accbusiness.com/gfwlist +server=/miohentai.com/127.0.0.1#5335 +ipset=/miohentai.com/gfwlist +server=/bitbucket.org/127.0.0.1#5335 +ipset=/bitbucket.org/gfwlist +server=/volvobuses.in/127.0.0.1#5335 +ipset=/volvobuses.in/gfwlist +server=/person.com/127.0.0.1#5335 +ipset=/person.com/gfwlist +server=/xn--kput3imi374g.xn--hxt814e/127.0.0.1#5335 +ipset=/xn--kput3imi374g.xn--hxt814e/gfwlist +server=/ebayhots.com/127.0.0.1#5335 +ipset=/ebayhots.com/gfwlist +server=/mini.tm/127.0.0.1#5335 +ipset=/mini.tm/gfwlist +server=/line-cdn.net/127.0.0.1#5335 +ipset=/line-cdn.net/gfwlist +server=/beatsallsale.com/127.0.0.1#5335 +ipset=/beatsallsale.com/gfwlist +server=/ao3.org/127.0.0.1#5335 +ipset=/ao3.org/gfwlist +server=/xn--fiqs8sxootzz.cn/127.0.0.1#5335 +ipset=/xn--fiqs8sxootzz.cn/gfwlist +server=/qinav.com/127.0.0.1#5335 +ipset=/qinav.com/gfwlist +server=/wwapple.net/127.0.0.1#5335 +ipset=/wwapple.net/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=/applestore.com.pt/127.0.0.1#5335 +ipset=/applestore.com.pt/gfwlist +server=/webobjects.eu/127.0.0.1#5335 +ipset=/webobjects.eu/gfwlist +server=/freeomovie.to/127.0.0.1#5335 +ipset=/freeomovie.to/gfwlist +server=/kubakuba.global/127.0.0.1#5335 +ipset=/kubakuba.global/gfwlist +server=/freearabsexx.com/127.0.0.1#5335 +ipset=/freearabsexx.com/gfwlist +server=/canon-me.com/127.0.0.1#5335 +ipset=/canon-me.com/gfwlist +server=/pearsonclinical.fr/127.0.0.1#5335 +ipset=/pearsonclinical.fr/gfwlist +server=/etbc.com.hk/127.0.0.1#5335 +ipset=/etbc.com.hk/gfwlist +server=/quicktime.net/127.0.0.1#5335 +ipset=/quicktime.net/gfwlist +server=/rprimelab.com/127.0.0.1#5335 +ipset=/rprimelab.com/gfwlist +server=/speedhunters.com/127.0.0.1#5335 +ipset=/speedhunters.com/gfwlist +server=/177picyy.com/127.0.0.1#5335 +ipset=/177picyy.com/gfwlist +server=/pornovenezolanox.com/127.0.0.1#5335 +ipset=/pornovenezolanox.com/gfwlist +server=/quicktime.com.au/127.0.0.1#5335 +ipset=/quicktime.com.au/gfwlist +server=/quicktime.cc/127.0.0.1#5335 +ipset=/quicktime.cc/gfwlist +server=/camelot-europe.com/127.0.0.1#5335 +ipset=/camelot-europe.com/gfwlist +server=/xn--xsq959n.com/127.0.0.1#5335 +ipset=/xn--xsq959n.com/gfwlist +server=/xn--gmq92kd2rm1kx34a.com/127.0.0.1#5335 +ipset=/xn--gmq92kd2rm1kx34a.com/gfwlist +server=/catmiimi.com/127.0.0.1#5335 +ipset=/catmiimi.com/gfwlist +server=/la-mama.ru/127.0.0.1#5335 +ipset=/la-mama.ru/gfwlist +server=/oanencore.com/127.0.0.1#5335 +ipset=/oanencore.com/gfwlist +server=/newton.com/127.0.0.1#5335 +ipset=/newton.com/gfwlist +server=/achat-followers-instagram.com/127.0.0.1#5335 +ipset=/achat-followers-instagram.com/gfwlist +server=/macreach.net/127.0.0.1#5335 +ipset=/macreach.net/gfwlist +server=/macpazar.com/127.0.0.1#5335 +ipset=/macpazar.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=/macosx.info/127.0.0.1#5335 +ipset=/macosx.info/gfwlist +server=/volvobuses.fr/127.0.0.1#5335 +ipset=/volvobuses.fr/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=/bikac.xyz/127.0.0.1#5335 +ipset=/bikac.xyz/gfwlist +server=/google.com.lb/127.0.0.1#5335 +ipset=/google.com.lb/gfwlist +server=/icashpassport.com.mx/127.0.0.1#5335 +ipset=/icashpassport.com.mx/gfwlist +server=/bmw-motorrad.dk/127.0.0.1#5335 +ipset=/bmw-motorrad.dk/gfwlist +server=/bmw-int1.com/127.0.0.1#5335 +ipset=/bmw-int1.com/gfwlist +server=/yomiuri-systec.co.jp/127.0.0.1#5335 +ipset=/yomiuri-systec.co.jp/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=/eac-cdn.com/127.0.0.1#5335 +ipset=/eac-cdn.com/gfwlist +server=/supercell.com/127.0.0.1#5335 +ipset=/supercell.com/gfwlist +server=/macboxset.com/127.0.0.1#5335 +ipset=/macboxset.com/gfwlist +server=/scholar.google.com/127.0.0.1#5335 +ipset=/scholar.google.com/gfwlist +server=/emblstatic.net/127.0.0.1#5335 +ipset=/emblstatic.net/gfwlist +server=/mac.rs/127.0.0.1#5335 +ipset=/mac.rs/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=/mac.eu/127.0.0.1#5335 +ipset=/mac.eu/gfwlist +server=/javpub.me/127.0.0.1#5335 +ipset=/javpub.me/gfwlist +server=/familypornhd.com/127.0.0.1#5335 +ipset=/familypornhd.com/gfwlist +server=/mac.com/127.0.0.1#5335 +ipset=/mac.com/gfwlist +server=/milfporn.pro/127.0.0.1#5335 +ipset=/milfporn.pro/gfwlist +server=/noodlemagazine.com/127.0.0.1#5335 +ipset=/noodlemagazine.com/gfwlist +server=/bangyourwife.com/127.0.0.1#5335 +ipset=/bangyourwife.com/gfwlist +server=/facebookblueprint.net/127.0.0.1#5335 +ipset=/facebookblueprint.net/gfwlist +server=/ksd235qw.com/127.0.0.1#5335 +ipset=/ksd235qw.com/gfwlist +server=/bmwmagazine.com/127.0.0.1#5335 +ipset=/bmwmagazine.com/gfwlist +server=/vgcareers.net/127.0.0.1#5335 +ipset=/vgcareers.net/gfwlist +server=/anyxxx.pro/127.0.0.1#5335 +ipset=/anyxxx.pro/gfwlist +server=/instaplayer.net/127.0.0.1#5335 +ipset=/instaplayer.net/gfwlist +server=/volvotrucks.qa/127.0.0.1#5335 +ipset=/volvotrucks.qa/gfwlist +server=/foxsportsuniversity.com/127.0.0.1#5335 +ipset=/foxsportsuniversity.com/gfwlist +server=/nudecams.cam/127.0.0.1#5335 +ipset=/nudecams.cam/gfwlist +server=/minivictoria.ca/127.0.0.1#5335 +ipset=/minivictoria.ca/gfwlist +server=/yahoo.co.vi/127.0.0.1#5335 +ipset=/yahoo.co.vi/gfwlist +server=/iwork.wang/127.0.0.1#5335 +ipset=/iwork.wang/gfwlist +server=/ischool.com/127.0.0.1#5335 +ipset=/ischool.com/gfwlist +server=/applenews.hamburg/127.0.0.1#5335 +ipset=/applenews.hamburg/gfwlist +server=/ipa-iphone.net/127.0.0.1#5335 +ipset=/ipa-iphone.net/gfwlist +server=/akamaimagicmath.net/127.0.0.1#5335 +ipset=/akamaimagicmath.net/gfwlist +server=/iosinthecar.com/127.0.0.1#5335 +ipset=/iosinthecar.com/gfwlist +server=/voxmedia.com/127.0.0.1#5335 +ipset=/voxmedia.com/gfwlist +server=/hentaipapa.com/127.0.0.1#5335 +ipset=/hentaipapa.com/gfwlist +server=/bestiphonestuff.com/127.0.0.1#5335 +ipset=/bestiphonestuff.com/gfwlist +server=/amerikaovozi.com/127.0.0.1#5335 +ipset=/amerikaovozi.com/gfwlist +server=/imessage.tv/127.0.0.1#5335 +ipset=/imessage.tv/gfwlist +server=/ikids.com/127.0.0.1#5335 +ipset=/ikids.com/gfwlist +server=/epochstories.com/127.0.0.1#5335 +ipset=/epochstories.com/gfwlist +server=/beatsbydrecheap-outletstore.com/127.0.0.1#5335 +ipset=/beatsbydrecheap-outletstore.com/gfwlist +server=/swisstsa.li/127.0.0.1#5335 +ipset=/swisstsa.li/gfwlist +server=/firewire.cl/127.0.0.1#5335 +ipset=/firewire.cl/gfwlist +server=/finalcutpro.com/127.0.0.1#5335 +ipset=/finalcutpro.com/gfwlist +server=/freefacebook.net/127.0.0.1#5335 +ipset=/freefacebook.net/gfwlist +server=/facetime.net/127.0.0.1#5335 +ipset=/facetime.net/gfwlist +server=/hulunetwork.com/127.0.0.1#5335 +ipset=/hulunetwork.com/gfwlist +server=/promonsterbeatsbydre.com/127.0.0.1#5335 +ipset=/promonsterbeatsbydre.com/gfwlist +server=/shopbeatsdre.com/127.0.0.1#5335 +ipset=/shopbeatsdre.com/gfwlist +server=/lostbetsgames.com/127.0.0.1#5335 +ipset=/lostbetsgames.com/gfwlist +server=/park-now.com/127.0.0.1#5335 +ipset=/park-now.com/gfwlist +server=/bbyintl.com/127.0.0.1#5335 +ipset=/bbyintl.com/gfwlist +server=/bdsmbunker.com/127.0.0.1#5335 +ipset=/bdsmbunker.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=/ipfs.eth.aragon.network/127.0.0.1#5335 +ipset=/ipfs.eth.aragon.network/gfwlist +server=/emac.in/127.0.0.1#5335 +ipset=/emac.in/gfwlist +server=/pogobeta.com/127.0.0.1#5335 +ipset=/pogobeta.com/gfwlist +server=/uun95.com/127.0.0.1#5335 +ipset=/uun95.com/gfwlist +server=/dvdstudiopro.us/127.0.0.1#5335 +ipset=/dvdstudiopro.us/gfwlist +server=/only-xxx-porn.com/127.0.0.1#5335 +ipset=/only-xxx-porn.com/gfwlist +server=/mini.com.py/127.0.0.1#5335 +ipset=/mini.com.py/gfwlist +server=/azure.net/127.0.0.1#5335 +ipset=/azure.net/gfwlist +server=/embl.de/127.0.0.1#5335 +ipset=/embl.de/gfwlist +server=/dvdstudiopro.com/127.0.0.1#5335 +ipset=/dvdstudiopro.com/gfwlist +server=/beatsbydre2081.com/127.0.0.1#5335 +ipset=/beatsbydre2081.com/gfwlist +server=/whonix.org/127.0.0.1#5335 +ipset=/whonix.org/gfwlist +server=/dvdstudiopro.biz/127.0.0.1#5335 +ipset=/dvdstudiopro.biz/gfwlist +server=/macrumors.com/127.0.0.1#5335 +ipset=/macrumors.com/gfwlist +server=/dotmac.de/127.0.0.1#5335 +ipset=/dotmac.de/gfwlist +server=/bmw-m.com/127.0.0.1#5335 +ipset=/bmw-m.com/gfwlist +server=/digitalhub.com/127.0.0.1#5335 +ipset=/digitalhub.com/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=/appcenter.ms/127.0.0.1#5335 +ipset=/appcenter.ms/gfwlist +server=/desktopmovies.net/127.0.0.1#5335 +ipset=/desktopmovies.net/gfwlist +server=/gcrtires.com/127.0.0.1#5335 +ipset=/gcrtires.com/gfwlist +server=/desktopmovie.net/127.0.0.1#5335 +ipset=/desktopmovie.net/gfwlist +server=/online-deals.net/127.0.0.1#5335 +ipset=/online-deals.net/gfwlist +server=/dashwood360.com/127.0.0.1#5335 +ipset=/dashwood360.com/gfwlist +server=/fotolia.tv/127.0.0.1#5335 +ipset=/fotolia.tv/gfwlist +server=/niziero.info/127.0.0.1#5335 +ipset=/niziero.info/gfwlist +server=/parstream.com/127.0.0.1#5335 +ipset=/parstream.com/gfwlist +server=/boxun.com/127.0.0.1#5335 +ipset=/boxun.com/gfwlist +server=/disneyinternationalhd.com/127.0.0.1#5335 +ipset=/disneyinternationalhd.com/gfwlist +server=/dropboxbusiness.com/127.0.0.1#5335 +ipset=/dropboxbusiness.com/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=/xxnxx-sex.com/127.0.0.1#5335 +ipset=/xxnxx-sex.com/gfwlist +server=/alphabet.biz/127.0.0.1#5335 +ipset=/alphabet.biz/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=/forzamotorsport.net/127.0.0.1#5335 +ipset=/forzamotorsport.net/gfwlist +server=/paypal-search.com/127.0.0.1#5335 +ipset=/paypal-search.com/gfwlist +server=/dreamteamfc.com/127.0.0.1#5335 +ipset=/dreamteamfc.com/gfwlist +server=/apyle.com/127.0.0.1#5335 +ipset=/apyle.com/gfwlist +server=/epochtimes.co.uk/127.0.0.1#5335 +ipset=/epochtimes.co.uk/gfwlist +server=/appye.com/127.0.0.1#5335 +ipset=/appye.com/gfwlist +server=/appmediagroup.com/127.0.0.1#5335 +ipset=/appmediagroup.com/gfwlist +server=/12diasderegalosdeitunes.com.hn/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.com.hn/gfwlist +server=/blogebay.com/127.0.0.1#5335 +ipset=/blogebay.com/gfwlist +server=/indian-pornstars.com/127.0.0.1#5335 +ipset=/indian-pornstars.com/gfwlist +server=/applle.com/127.0.0.1#5335 +ipset=/applle.com/gfwlist +server=/xxx-fap.com/127.0.0.1#5335 +ipset=/xxx-fap.com/gfwlist +server=/swisssign.net/127.0.0.1#5335 +ipset=/swisssign.net/gfwlist +server=/applezh.com/127.0.0.1#5335 +ipset=/applezh.com/gfwlist +server=/ebayt.com/127.0.0.1#5335 +ipset=/ebayt.com/gfwlist +server=/paisapay.cc/127.0.0.1#5335 +ipset=/paisapay.cc/gfwlist +server=/appleweb.net/127.0.0.1#5335 +ipset=/appleweb.net/gfwlist +server=/statics-marketingsites-eus-ms-com.akamaized.net/127.0.0.1#5335 +ipset=/statics-marketingsites-eus-ms-com.akamaized.net/gfwlist +server=/ctwant.com/127.0.0.1#5335 +ipset=/ctwant.com/gfwlist +server=/gonike.com/127.0.0.1#5335 +ipset=/gonike.com/gfwlist +server=/facebookclub.com/127.0.0.1#5335 +ipset=/facebookclub.com/gfwlist +server=/bowsersinsidestory.com/127.0.0.1#5335 +ipset=/bowsersinsidestory.com/gfwlist +server=/orgypornonly.com/127.0.0.1#5335 +ipset=/orgypornonly.com/gfwlist +server=/boslife.net/127.0.0.1#5335 +ipset=/boslife.net/gfwlist +server=/appleshop.co.uk/127.0.0.1#5335 +ipset=/appleshop.co.uk/gfwlist +server=/appleshare.info/127.0.0.1#5335 +ipset=/appleshare.info/gfwlist +server=/cpan.org/127.0.0.1#5335 +ipset=/cpan.org/gfwlist +server=/pricelesstv.com/127.0.0.1#5335 +ipset=/pricelesstv.com/gfwlist +server=/ntnews.com.au/127.0.0.1#5335 +ipset=/ntnews.com.au/gfwlist +server=/apples-msk.ru/127.0.0.1#5335 +ipset=/apples-msk.ru/gfwlist +server=/minidealernet.com/127.0.0.1#5335 +ipset=/minidealernet.com/gfwlist +server=/bestxxxsites.com/127.0.0.1#5335 +ipset=/bestxxxsites.com/gfwlist +server=/secretbabes.co.uk/127.0.0.1#5335 +ipset=/secretbabes.co.uk/gfwlist +server=/applereach.net/127.0.0.1#5335 +ipset=/applereach.net/gfwlist +server=/applepremiumresellers.com.au/127.0.0.1#5335 +ipset=/applepremiumresellers.com.au/gfwlist +server=/amazon.co.uk/127.0.0.1#5335 +ipset=/amazon.co.uk/gfwlist +server=/visiontimes.net/127.0.0.1#5335 +ipset=/visiontimes.net/gfwlist +server=/biomedcentral.com/127.0.0.1#5335 +ipset=/biomedcentral.com/gfwlist +server=/iceporn.com/127.0.0.1#5335 +ipset=/iceporn.com/gfwlist +server=/bossagency.co.uk/127.0.0.1#5335 +ipset=/bossagency.co.uk/gfwlist +server=/appleonline.net/127.0.0.1#5335 +ipset=/appleonline.net/gfwlist +server=/applemagickeyboard.com/127.0.0.1#5335 +ipset=/applemagickeyboard.com/gfwlist +server=/ygugu4.com/127.0.0.1#5335 +ipset=/ygugu4.com/gfwlist +server=/pearsoncanada.ca/127.0.0.1#5335 +ipset=/pearsoncanada.ca/gfwlist +server=/brazzersnetwork.com/127.0.0.1#5335 +ipset=/brazzersnetwork.com/gfwlist +server=/yourlust.com/127.0.0.1#5335 +ipset=/yourlust.com/gfwlist +server=/huffingtonpost.ca/127.0.0.1#5335 +ipset=/huffingtonpost.ca/gfwlist +server=/mtvnservices.com/127.0.0.1#5335 +ipset=/mtvnservices.com/gfwlist +server=/muji.com.hk/127.0.0.1#5335 +ipset=/muji.com.hk/gfwlist +server=/huloo.cc/127.0.0.1#5335 +ipset=/huloo.cc/gfwlist +server=/oreno3d.com/127.0.0.1#5335 +ipset=/oreno3d.com/gfwlist +server=/httpwwwfacebook.com/127.0.0.1#5335 +ipset=/httpwwwfacebook.com/gfwlist +server=/omgteens.com/127.0.0.1#5335 +ipset=/omgteens.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=/pornmaturetube.com/127.0.0.1#5335 +ipset=/pornmaturetube.com/gfwlist +server=/applefilmmaker.com/127.0.0.1#5335 +ipset=/applefilmmaker.com/gfwlist +server=/iamakamai.net/127.0.0.1#5335 +ipset=/iamakamai.net/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=/animesex.me/127.0.0.1#5335 +ipset=/animesex.me/gfwlist +server=/appleexpo.eu/127.0.0.1#5335 +ipset=/appleexpo.eu/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=/belamionline.com/127.0.0.1#5335 +ipset=/belamionline.com/gfwlist +server=/dojinmanga.net/127.0.0.1#5335 +ipset=/dojinmanga.net/gfwlist +server=/applecomputerinc.info/127.0.0.1#5335 +ipset=/applecomputerinc.info/gfwlist +server=/ebayetc.com/127.0.0.1#5335 +ipset=/ebayetc.com/gfwlist +server=/pornnetworkdeals.com/127.0.0.1#5335 +ipset=/pornnetworkdeals.com/gfwlist +server=/ikea.ca/127.0.0.1#5335 +ipset=/ikea.ca/gfwlist +server=/applecomputerimac.com/127.0.0.1#5335 +ipset=/applecomputerimac.com/gfwlist +server=/applecomputer.kr/127.0.0.1#5335 +ipset=/applecomputer.kr/gfwlist +server=/hhtdq17.com/127.0.0.1#5335 +ipset=/hhtdq17.com/gfwlist +server=/magento.com/127.0.0.1#5335 +ipset=/magento.com/gfwlist +server=/google.com.mt/127.0.0.1#5335 +ipset=/google.com.mt/gfwlist +server=/bridgestonegz.com/127.0.0.1#5335 +ipset=/bridgestonegz.com/gfwlist +server=/applecomputer.com/127.0.0.1#5335 +ipset=/applecomputer.com/gfwlist +server=/applecomputer.co.nz/127.0.0.1#5335 +ipset=/applecomputer.co.nz/gfwlist +server=/applecomputer-imac.com/127.0.0.1#5335 +ipset=/applecomputer-imac.com/gfwlist +server=/borwap.com/127.0.0.1#5335 +ipset=/borwap.com/gfwlist +server=/disneyplus.bn5x.net/127.0.0.1#5335 +ipset=/disneyplus.bn5x.net/gfwlist +server=/mobileview.page/127.0.0.1#5335 +ipset=/mobileview.page/gfwlist +server=/youtube.co.za/127.0.0.1#5335 +ipset=/youtube.co.za/gfwlist +server=/simility.com/127.0.0.1#5335 +ipset=/simility.com/gfwlist +server=/beatsbydreblackfridaypro.com/127.0.0.1#5335 +ipset=/beatsbydreblackfridaypro.com/gfwlist +server=/pinkcore.net/127.0.0.1#5335 +ipset=/pinkcore.net/gfwlist +server=/now-ashare.com/127.0.0.1#5335 +ipset=/now-ashare.com/gfwlist +server=/reurl.cc/127.0.0.1#5335 +ipset=/reurl.cc/gfwlist +server=/rockettube.com/127.0.0.1#5335 +ipset=/rockettube.com/gfwlist +server=/evernote.com/127.0.0.1#5335 +ipset=/evernote.com/gfwlist +server=/voacambodia.com/127.0.0.1#5335 +ipset=/voacambodia.com/gfwlist +server=/appleaustralia.com.au/127.0.0.1#5335 +ipset=/appleaustralia.com.au/gfwlist +server=/talentlens.com/127.0.0.1#5335 +ipset=/talentlens.com/gfwlist +server=/electricluxury.com/127.0.0.1#5335 +ipset=/electricluxury.com/gfwlist +server=/ebaydlassifieds.com/127.0.0.1#5335 +ipset=/ebaydlassifieds.com/gfwlist +server=/gay0day.com/127.0.0.1#5335 +ipset=/gay0day.com/gfwlist +server=/thotbook.tv/127.0.0.1#5335 +ipset=/thotbook.tv/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=/kisscos.net/127.0.0.1#5335 +ipset=/kisscos.net/gfwlist +server=/apple-usa.net/127.0.0.1#5335 +ipset=/apple-usa.net/gfwlist +server=/beatsbydre-headphones.com/127.0.0.1#5335 +ipset=/beatsbydre-headphones.com/gfwlist +server=/youtube.com.jo/127.0.0.1#5335 +ipset=/youtube.com.jo/gfwlist +server=/tubesafari.com/127.0.0.1#5335 +ipset=/tubesafari.com/gfwlist +server=/forzarc.com/127.0.0.1#5335 +ipset=/forzarc.com/gfwlist +server=/erogazopple.com/127.0.0.1#5335 +ipset=/erogazopple.com/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=/apple-livephotoskit.com/127.0.0.1#5335 +ipset=/apple-livephotoskit.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=/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=/illusiongw.com/127.0.0.1#5335 +ipset=/illusiongw.com/gfwlist +server=/adultsexgames.biz/127.0.0.1#5335 +ipset=/adultsexgames.biz/gfwlist +server=/ebayuae.net/127.0.0.1#5335 +ipset=/ebayuae.net/gfwlist +server=/thenewgirlspooping.com/127.0.0.1#5335 +ipset=/thenewgirlspooping.com/gfwlist +server=/apple-dns.net/127.0.0.1#5335 +ipset=/apple-dns.net/gfwlist +server=/alliancesages.com/127.0.0.1#5335 +ipset=/alliancesages.com/gfwlist +server=/apple-dns.com/127.0.0.1#5335 +ipset=/apple-dns.com/gfwlist +server=/vintage-erotica-forum.com/127.0.0.1#5335 +ipset=/vintage-erotica-forum.com/gfwlist +server=/apple-darwin.net/127.0.0.1#5335 +ipset=/apple-darwin.net/gfwlist +server=/cdngarenanow-a.akamaihd.net/127.0.0.1#5335 +ipset=/cdngarenanow-a.akamaihd.net/gfwlist +server=/apple-darwin.com/127.0.0.1#5335 +ipset=/apple-darwin.com/gfwlist +server=/nijiclamp.com/127.0.0.1#5335 +ipset=/nijiclamp.com/gfwlist +server=/mystrikingly.com/127.0.0.1#5335 +ipset=/mystrikingly.com/gfwlist +server=/mastercard.co.za/127.0.0.1#5335 +ipset=/mastercard.co.za/gfwlist +server=/eakorea.co.kr/127.0.0.1#5335 +ipset=/eakorea.co.kr/gfwlist +server=/nikefreeshoes.com/127.0.0.1#5335 +ipset=/nikefreeshoes.com/gfwlist +server=/doom.com/127.0.0.1#5335 +ipset=/doom.com/gfwlist +server=/jodic-forum.org/127.0.0.1#5335 +ipset=/jodic-forum.org/gfwlist +server=/tyms2022.com/127.0.0.1#5335 +ipset=/tyms2022.com/gfwlist +server=/miniccrc.ca/127.0.0.1#5335 +ipset=/miniccrc.ca/gfwlist +server=/viet69.dev/127.0.0.1#5335 +ipset=/viet69.dev/gfwlist +server=/ap0le.com/127.0.0.1#5335 +ipset=/ap0le.com/gfwlist +server=/airtunes.net/127.0.0.1#5335 +ipset=/airtunes.net/gfwlist +server=/diabloimmortal.com/127.0.0.1#5335 +ipset=/diabloimmortal.com/gfwlist +server=/tnntoday.com/127.0.0.1#5335 +ipset=/tnntoday.com/gfwlist +server=/airtunes.info/127.0.0.1#5335 +ipset=/airtunes.info/gfwlist +server=/alt.com/127.0.0.1#5335 +ipset=/alt.com/gfwlist +server=/airport.brussels/127.0.0.1#5335 +ipset=/airport.brussels/gfwlist +server=/a0pple.net/127.0.0.1#5335 +ipset=/a0pple.net/gfwlist +server=/2022.dev/127.0.0.1#5335 +ipset=/2022.dev/gfwlist +server=/wixapps.net/127.0.0.1#5335 +ipset=/wixapps.net/gfwlist +server=/18avx.com/127.0.0.1#5335 +ipset=/18avx.com/gfwlist +server=/shazam.com/127.0.0.1#5335 +ipset=/shazam.com/gfwlist +server=/huobigroup.com/127.0.0.1#5335 +ipset=/huobigroup.com/gfwlist +server=/eroticbeauties.net/127.0.0.1#5335 +ipset=/eroticbeauties.net/gfwlist +server=/horsedicks.net/127.0.0.1#5335 +ipset=/horsedicks.net/gfwlist +server=/dnsvisa.com/127.0.0.1#5335 +ipset=/dnsvisa.com/gfwlist +server=/appleone.host/127.0.0.1#5335 +ipset=/appleone.host/gfwlist +server=/appleone.guide/127.0.0.1#5335 +ipset=/appleone.guide/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=/cheapbagshoes.com/127.0.0.1#5335 +ipset=/cheapbagshoes.com/gfwlist +server=/123hplaserjet.com/127.0.0.1#5335 +ipset=/123hplaserjet.com/gfwlist +server=/cdn.jsdelivr.net/127.0.0.1#5335 +ipset=/cdn.jsdelivr.net/gfwlist +server=/appleone.blog/127.0.0.1#5335 +ipset=/appleone.blog/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=/shopcustomizedbeats.com/127.0.0.1#5335 +ipset=/shopcustomizedbeats.com/gfwlist +server=/vkmessenger.app/127.0.0.1#5335 +ipset=/vkmessenger.app/gfwlist +server=/appletv.com/127.0.0.1#5335 +ipset=/appletv.com/gfwlist +server=/sevgikurtulmaz.com/127.0.0.1#5335 +ipset=/sevgikurtulmaz.com/gfwlist +server=/kenxxx.com/127.0.0.1#5335 +ipset=/kenxxx.com/gfwlist +server=/redsexhub.com/127.0.0.1#5335 +ipset=/redsexhub.com/gfwlist +server=/paypal-donations.com/127.0.0.1#5335 +ipset=/paypal-donations.com/gfwlist +server=/appleid.berlin/127.0.0.1#5335 +ipset=/appleid.berlin/gfwlist +server=/deeper.com/127.0.0.1#5335 +ipset=/deeper.com/gfwlist +server=/colorfulstage.com/127.0.0.1#5335 +ipset=/colorfulstage.com/gfwlist +server=/microsoft.cz/127.0.0.1#5335 +ipset=/microsoft.cz/gfwlist +server=/lesbianpics.org/127.0.0.1#5335 +ipset=/lesbianpics.org/gfwlist +server=/appleid-iclou.com/127.0.0.1#5335 +ipset=/appleid-iclou.com/gfwlist +server=/appleid-applemx.us/127.0.0.1#5335 +ipset=/appleid-applemx.us/gfwlist +server=/ertk.net/127.0.0.1#5335 +ipset=/ertk.net/gfwlist +server=/the-monster-beats.com/127.0.0.1#5335 +ipset=/the-monster-beats.com/gfwlist +server=/mypornhere.com/127.0.0.1#5335 +ipset=/mypornhere.com/gfwlist +server=/beatswirelesscuffie.com/127.0.0.1#5335 +ipset=/beatswirelesscuffie.com/gfwlist +server=/binance.org/127.0.0.1#5335 +ipset=/binance.org/gfwlist +server=/betternike.com/127.0.0.1#5335 +ipset=/betternike.com/gfwlist +server=/technologyandsociety.org/127.0.0.1#5335 +ipset=/technologyandsociety.org/gfwlist +server=/foxnewsb2b.com/127.0.0.1#5335 +ipset=/foxnewsb2b.com/gfwlist +server=/benaughty.fun/127.0.0.1#5335 +ipset=/benaughty.fun/gfwlist +server=/vfsco.ca/127.0.0.1#5335 +ipset=/vfsco.ca/gfwlist +server=/sexy-babe-pics.com/127.0.0.1#5335 +ipset=/sexy-babe-pics.com/gfwlist +server=/duga.jp/127.0.0.1#5335 +ipset=/duga.jp/gfwlist +server=/facebcook.com/127.0.0.1#5335 +ipset=/facebcook.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=/npmjs.com/127.0.0.1#5335 +ipset=/npmjs.com/gfwlist +server=/affect3dstore.com/127.0.0.1#5335 +ipset=/affect3dstore.com/gfwlist +server=/largeporntube.com/127.0.0.1#5335 +ipset=/largeporntube.com/gfwlist +server=/ebay-authenticate.net/127.0.0.1#5335 +ipset=/ebay-authenticate.net/gfwlist +server=/google.co.uk/127.0.0.1#5335 +ipset=/google.co.uk/gfwlist +server=/cuntwars.com/127.0.0.1#5335 +ipset=/cuntwars.com/gfwlist +server=/nationalgeographic.com/127.0.0.1#5335 +ipset=/nationalgeographic.com/gfwlist +server=/amazon.fr/127.0.0.1#5335 +ipset=/amazon.fr/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=/ibooksauthor.com/127.0.0.1#5335 +ipset=/ibooksauthor.com/gfwlist +server=/wiremoneytoirelandwithxoomeasierandcheaper.com/127.0.0.1#5335 +ipset=/wiremoneytoirelandwithxoomeasierandcheaper.com/gfwlist +server=/wionews.com/127.0.0.1#5335 +ipset=/wionews.com/gfwlist +server=/kindle.com/127.0.0.1#5335 +ipset=/kindle.com/gfwlist +server=/alphabet.no/127.0.0.1#5335 +ipset=/alphabet.no/gfwlist +server=/anon-v.com/127.0.0.1#5335 +ipset=/anon-v.com/gfwlist +server=/bmw.dk/127.0.0.1#5335 +ipset=/bmw.dk/gfwlist +server=/ibook.com/127.0.0.1#5335 +ipset=/ibook.com/gfwlist +server=/ithaisex.com/127.0.0.1#5335 +ipset=/ithaisex.com/gfwlist +server=/magentoliveconference.com/127.0.0.1#5335 +ipset=/magentoliveconference.com/gfwlist +server=/applewallet.com/127.0.0.1#5335 +ipset=/applewallet.com/gfwlist +server=/torrentleen.com/127.0.0.1#5335 +ipset=/torrentleen.com/gfwlist +server=/mywaytopay.info/127.0.0.1#5335 +ipset=/mywaytopay.info/gfwlist +server=/firestonecomercial.com.mx/127.0.0.1#5335 +ipset=/firestonecomercial.com.mx/gfwlist +server=/bondagecomixxx.net/127.0.0.1#5335 +ipset=/bondagecomixxx.net/gfwlist +server=/kmff17.com/127.0.0.1#5335 +ipset=/kmff17.com/gfwlist +server=/applepay.info/127.0.0.1#5335 +ipset=/applepay.info/gfwlist +server=/hentai-books.com/127.0.0.1#5335 +ipset=/hentai-books.com/gfwlist +server=/youtube.co.zw/127.0.0.1#5335 +ipset=/youtube.co.zw/gfwlist +server=/shemaleporntube.tv/127.0.0.1#5335 +ipset=/shemaleporntube.tv/gfwlist +server=/beatsbeatsmonster.com/127.0.0.1#5335 +ipset=/beatsbeatsmonster.com/gfwlist +server=/zind.cloud/127.0.0.1#5335 +ipset=/zind.cloud/gfwlist +server=/easysexporn.com/127.0.0.1#5335 +ipset=/easysexporn.com/gfwlist +server=/apple-pay.com/127.0.0.1#5335 +ipset=/apple-pay.com/gfwlist +server=/needforspeedboost.com/127.0.0.1#5335 +ipset=/needforspeedboost.com/gfwlist +server=/gayboystube.com/127.0.0.1#5335 +ipset=/gayboystube.com/gfwlist +server=/applenews.berlin/127.0.0.1#5335 +ipset=/applenews.berlin/gfwlist +server=/cex.io/127.0.0.1#5335 +ipset=/cex.io/gfwlist +server=/download.visualstudio.microsoft.com/127.0.0.1#5335 +ipset=/download.visualstudio.microsoft.com/gfwlist +server=/pornokrol.com/127.0.0.1#5335 +ipset=/pornokrol.com/gfwlist +server=/nsfwmemes.com/127.0.0.1#5335 +ipset=/nsfwmemes.com/gfwlist +server=/biorxiv.org/127.0.0.1#5335 +ipset=/biorxiv.org/gfwlist +server=/hkopentv.com/127.0.0.1#5335 +ipset=/hkopentv.com/gfwlist +server=/applemusic.wang/127.0.0.1#5335 +ipset=/applemusic.wang/gfwlist +server=/sextreffensite.com/127.0.0.1#5335 +ipset=/sextreffensite.com/gfwlist +server=/espnqa.com/127.0.0.1#5335 +ipset=/espnqa.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=/applemusic.com/127.0.0.1#5335 +ipset=/applemusic.com/gfwlist +server=/bmw.com.co/127.0.0.1#5335 +ipset=/bmw.com.co/gfwlist +server=/xxxpornzeed.com/127.0.0.1#5335 +ipset=/xxxpornzeed.com/gfwlist +server=/javbangers.com/127.0.0.1#5335 +ipset=/javbangers.com/gfwlist +server=/stackoverflowbusiness.com/127.0.0.1#5335 +ipset=/stackoverflowbusiness.com/gfwlist +server=/applemusic.berlin/127.0.0.1#5335 +ipset=/applemusic.berlin/gfwlist +server=/cheapbeatssale4u.com/127.0.0.1#5335 +ipset=/cheapbeatssale4u.com/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=/home-made-videos.com/127.0.0.1#5335 +ipset=/home-made-videos.com/gfwlist +server=/fujossy.jp/127.0.0.1#5335 +ipset=/fujossy.jp/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=/starwarskids.com/127.0.0.1#5335 +ipset=/starwarskids.com/gfwlist +server=/francecasquebeatssolde.com/127.0.0.1#5335 +ipset=/francecasquebeatssolde.com/gfwlist +server=/ehv.cc/127.0.0.1#5335 +ipset=/ehv.cc/gfwlist +server=/wwwpaypass.com/127.0.0.1#5335 +ipset=/wwwpaypass.com/gfwlist +server=/trycloudflare.com/127.0.0.1#5335 +ipset=/trycloudflare.com/gfwlist +server=/wwwmacbookair.com/127.0.0.1#5335 +ipset=/wwwmacbookair.com/gfwlist +server=/macbooksale.com/127.0.0.1#5335 +ipset=/macbooksale.com/gfwlist +server=/facebook-pmdcenter.org/127.0.0.1#5335 +ipset=/facebook-pmdcenter.org/gfwlist +server=/clipsaoyai.com/127.0.0.1#5335 +ipset=/clipsaoyai.com/gfwlist +server=/gvt3.com/127.0.0.1#5335 +ipset=/gvt3.com/gfwlist +server=/macbookpro.us/127.0.0.1#5335 +ipset=/macbookpro.us/gfwlist +server=/macbookpro.net/127.0.0.1#5335 +ipset=/macbookpro.net/gfwlist +server=/macbookpro.com.au/127.0.0.1#5335 +ipset=/macbookpro.com.au/gfwlist +server=/epochtimes.pl/127.0.0.1#5335 +ipset=/epochtimes.pl/gfwlist +server=/macbookpro.co/127.0.0.1#5335 +ipset=/macbookpro.co/gfwlist +server=/wonporn.net/127.0.0.1#5335 +ipset=/wonporn.net/gfwlist +server=/facebhook.com/127.0.0.1#5335 +ipset=/facebhook.com/gfwlist +server=/macbookair.net/127.0.0.1#5335 +ipset=/macbookair.net/gfwlist +server=/apple.es/127.0.0.1#5335 +ipset=/apple.es/gfwlist +server=/macbookair.es/127.0.0.1#5335 +ipset=/macbookair.es/gfwlist +server=/macbookair.com.au/127.0.0.1#5335 +ipset=/macbookair.com.au/gfwlist +server=/bmwm.com/127.0.0.1#5335 +ipset=/bmwm.com/gfwlist +server=/macbookair.co.kr/127.0.0.1#5335 +ipset=/macbookair.co.kr/gfwlist +server=/redwap-xxx.com/127.0.0.1#5335 +ipset=/redwap-xxx.com/gfwlist +server=/iana.org/127.0.0.1#5335 +ipset=/iana.org/gfwlist +server=/redamateurtube.com/127.0.0.1#5335 +ipset=/redamateurtube.com/gfwlist +server=/blzmedia-a.akamaihd.net/127.0.0.1#5335 +ipset=/blzmedia-a.akamaihd.net/gfwlist +server=/dragonage.com/127.0.0.1#5335 +ipset=/dragonage.com/gfwlist +server=/braintreepayments.org/127.0.0.1#5335 +ipset=/braintreepayments.org/gfwlist +server=/hammerandchisel.ssl.zendesk.com/127.0.0.1#5335 +ipset=/hammerandchisel.ssl.zendesk.com/gfwlist +server=/gfpornbox.com/127.0.0.1#5335 +ipset=/gfpornbox.com/gfwlist +server=/21centuryaccess.com/127.0.0.1#5335 +ipset=/21centuryaccess.com/gfwlist +server=/wwwipodlounge.com/127.0.0.1#5335 +ipset=/wwwipodlounge.com/gfwlist +server=/bmw.be/127.0.0.1#5335 +ipset=/bmw.be/gfwlist +server=/cwcams.com/127.0.0.1#5335 +ipset=/cwcams.com/gfwlist +server=/starfieldtech.com/127.0.0.1#5335 +ipset=/starfieldtech.com/gfwlist +server=/myipod.net/127.0.0.1#5335 +ipset=/myipod.net/gfwlist +server=/bestbuy24x7solutions.com/127.0.0.1#5335 +ipset=/bestbuy24x7solutions.com/gfwlist +server=/zzycdz.com/127.0.0.1#5335 +ipset=/zzycdz.com/gfwlist +server=/thomsonreuters.com.br/127.0.0.1#5335 +ipset=/thomsonreuters.com.br/gfwlist +server=/audiobeatsau.com/127.0.0.1#5335 +ipset=/audiobeatsau.com/gfwlist +server=/ipods.com/127.0.0.1#5335 +ipset=/ipods.com/gfwlist +server=/ipodrocks.com.au/127.0.0.1#5335 +ipset=/ipodrocks.com.au/gfwlist +server=/hplatexknowledgecenter.com/127.0.0.1#5335 +ipset=/hplatexknowledgecenter.com/gfwlist +server=/ipodrip.ca/127.0.0.1#5335 +ipset=/ipodrip.ca/gfwlist +server=/ipodprices.com/127.0.0.1#5335 +ipset=/ipodprices.com/gfwlist +server=/modrinth.com/127.0.0.1#5335 +ipset=/modrinth.com/gfwlist +server=/sourcingforebay.net/127.0.0.1#5335 +ipset=/sourcingforebay.net/gfwlist +server=/allpornsites.net/127.0.0.1#5335 +ipset=/allpornsites.net/gfwlist +server=/ipod.rs/127.0.0.1#5335 +ipset=/ipod.rs/gfwlist +server=/ipod.pk/127.0.0.1#5335 +ipset=/ipod.pk/gfwlist +server=/justporn.com/127.0.0.1#5335 +ipset=/justporn.com/gfwlist +server=/ipod.hk/127.0.0.1#5335 +ipset=/ipod.hk/gfwlist +server=/ipod.gr/127.0.0.1#5335 +ipset=/ipod.gr/gfwlist +server=/ipod.fr/127.0.0.1#5335 +ipset=/ipod.fr/gfwlist +server=/gostosanovinha.com/127.0.0.1#5335 +ipset=/gostosanovinha.com/gfwlist +server=/thinkdifferent.us/127.0.0.1#5335 +ipset=/thinkdifferent.us/gfwlist +server=/coliriodemacho.com.br/127.0.0.1#5335 +ipset=/coliriodemacho.com.br/gfwlist +server=/ipod.de/127.0.0.1#5335 +ipset=/ipod.de/gfwlist +server=/pixiv.net/127.0.0.1#5335 +ipset=/pixiv.net/gfwlist +server=/fastly.net/127.0.0.1#5335 +ipset=/fastly.net/gfwlist +server=/iphone-cd.com/127.0.0.1#5335 +ipset=/iphone-cd.com/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=/yourmonsterbeats.com/127.0.0.1#5335 +ipset=/yourmonsterbeats.com/gfwlist +server=/sci.hubg.org/127.0.0.1#5335 +ipset=/sci.hubg.org/gfwlist +server=/workers.dev/127.0.0.1#5335 +ipset=/workers.dev/gfwlist +server=/bmw.no/127.0.0.1#5335 +ipset=/bmw.no/gfwlist +server=/cocksuckersguide.com/127.0.0.1#5335 +ipset=/cocksuckersguide.com/gfwlist +server=/foxsportsneworleans.com/127.0.0.1#5335 +ipset=/foxsportsneworleans.com/gfwlist +server=/camdolls.com/127.0.0.1#5335 +ipset=/camdolls.com/gfwlist +server=/steemit.com/127.0.0.1#5335 +ipset=/steemit.com/gfwlist +server=/ipod.com.au/127.0.0.1#5335 +ipset=/ipod.com.au/gfwlist +server=/eamirrorsedge.com/127.0.0.1#5335 +ipset=/eamirrorsedge.com/gfwlist +server=/ipod.co.uk/127.0.0.1#5335 +ipset=/ipod.co.uk/gfwlist +server=/ipod.co/127.0.0.1#5335 +ipset=/ipod.co/gfwlist +server=/igtv.com/127.0.0.1#5335 +ipset=/igtv.com/gfwlist +server=/91rb.net/127.0.0.1#5335 +ipset=/91rb.net/gfwlist +server=/fb.careers/127.0.0.1#5335 +ipset=/fb.careers/gfwlist +server=/sexfilm4free.com/127.0.0.1#5335 +ipset=/sexfilm4free.com/gfwlist +server=/volvobuses.se/127.0.0.1#5335 +ipset=/volvobuses.se/gfwlist +server=/volvopenta.de/127.0.0.1#5335 +ipset=/volvopenta.de/gfwlist +server=/ebuyheadphones.com/127.0.0.1#5335 +ipset=/ebuyheadphones.com/gfwlist +server=/mastercard.com.sg/127.0.0.1#5335 +ipset=/mastercard.com.sg/gfwlist +server=/ipod.ca/127.0.0.1#5335 +ipset=/ipod.ca/gfwlist +server=/palestineremix.com/127.0.0.1#5335 +ipset=/palestineremix.com/gfwlist +server=/mycams.com/127.0.0.1#5335 +ipset=/mycams.com/gfwlist +server=/etvonline.hk/127.0.0.1#5335 +ipset=/etvonline.hk/gfwlist +server=/swingexpert.nl/127.0.0.1#5335 +ipset=/swingexpert.nl/gfwlist +server=/battlefront2.com/127.0.0.1#5335 +ipset=/battlefront2.com/gfwlist +server=/appleclassicipod.com/127.0.0.1#5335 +ipset=/appleclassicipod.com/gfwlist +server=/gannettdigital.com/127.0.0.1#5335 +ipset=/gannettdigital.com/gfwlist +server=/thomsonreuters.com.ar/127.0.0.1#5335 +ipset=/thomsonreuters.com.ar/gfwlist +server=/aplleipods.com/127.0.0.1#5335 +ipset=/aplleipods.com/gfwlist +server=/s2stagehance.com/127.0.0.1#5335 +ipset=/s2stagehance.com/gfwlist +server=/comicscartoonporn.com/127.0.0.1#5335 +ipset=/comicscartoonporn.com/gfwlist +server=/gitlab-static.net/127.0.0.1#5335 +ipset=/gitlab-static.net/gfwlist +server=/bmw-connecteddrive.it/127.0.0.1#5335 +ipset=/bmw-connecteddrive.it/gfwlist +server=/iphonerip.net/127.0.0.1#5335 +ipset=/iphonerip.net/gfwlist +server=/1lib.limited/127.0.0.1#5335 +ipset=/1lib.limited/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=/newscdn.com.au/127.0.0.1#5335 +ipset=/newscdn.com.au/gfwlist +server=/linetv.tw/127.0.0.1#5335 +ipset=/linetv.tw/gfwlist +server=/hpcustomersupport.net/127.0.0.1#5335 +ipset=/hpcustomersupport.net/gfwlist +server=/iphonegermany.com/127.0.0.1#5335 +ipset=/iphonegermany.com/gfwlist +server=/adobecce.com/127.0.0.1#5335 +ipset=/adobecce.com/gfwlist +server=/durex.cl/127.0.0.1#5335 +ipset=/durex.cl/gfwlist +server=/iphonecases5.com/127.0.0.1#5335 +ipset=/iphonecases5.com/gfwlist +server=/intagrm.com/127.0.0.1#5335 +ipset=/intagrm.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.cl/127.0.0.1#5335 +ipset=/mini.cl/gfwlist +server=/xoom.us/127.0.0.1#5335 +ipset=/xoom.us/gfwlist +server=/bronto.com/127.0.0.1#5335 +ipset=/bronto.com/gfwlist +server=/discordstatus.com/127.0.0.1#5335 +ipset=/discordstatus.com/gfwlist +server=/sway-cdn.com/127.0.0.1#5335 +ipset=/sway-cdn.com/gfwlist +server=/bridgestone.co.id/127.0.0.1#5335 +ipset=/bridgestone.co.id/gfwlist +server=/cyber-bay.org/127.0.0.1#5335 +ipset=/cyber-bay.org/gfwlist +server=/megafilmporno.com/127.0.0.1#5335 +ipset=/megafilmporno.com/gfwlist +server=/forzaracingchampionship.com/127.0.0.1#5335 +ipset=/forzaracingchampionship.com/gfwlist +server=/wwwebay.net/127.0.0.1#5335 +ipset=/wwwebay.net/gfwlist +server=/arabysexy.com/127.0.0.1#5335 +ipset=/arabysexy.com/gfwlist +server=/vs-hls-pushb-uk-live.akamaized.net/127.0.0.1#5335 +ipset=/vs-hls-pushb-uk-live.akamaized.net/gfwlist +server=/viu.com/127.0.0.1#5335 +ipset=/viu.com/gfwlist +server=/karupspc.com/127.0.0.1#5335 +ipset=/karupspc.com/gfwlist +server=/iphone.rs/127.0.0.1#5335 +ipset=/iphone.rs/gfwlist +server=/hitomi.la/127.0.0.1#5335 +ipset=/hitomi.la/gfwlist +server=/iphone.pt/127.0.0.1#5335 +ipset=/iphone.pt/gfwlist +server=/opensea.io/127.0.0.1#5335 +ipset=/opensea.io/gfwlist +server=/vipissy.com/127.0.0.1#5335 +ipset=/vipissy.com/gfwlist +server=/awsautoscaling.com/127.0.0.1#5335 +ipset=/awsautoscaling.com/gfwlist +server=/warroom.org/127.0.0.1#5335 +ipset=/warroom.org/gfwlist +server=/ikea.com.au/127.0.0.1#5335 +ipset=/ikea.com.au/gfwlist +server=/uchicago.edu/127.0.0.1#5335 +ipset=/uchicago.edu/gfwlist +server=/iphone.com.gr/127.0.0.1#5335 +ipset=/iphone.com.gr/gfwlist +server=/myminisexdoll.com/127.0.0.1#5335 +ipset=/myminisexdoll.com/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=/iphone.com.au/127.0.0.1#5335 +ipset=/iphone.com.au/gfwlist +server=/jpboy1069.net/127.0.0.1#5335 +ipset=/jpboy1069.net/gfwlist +server=/alphassl.com/127.0.0.1#5335 +ipset=/alphassl.com/gfwlist +server=/e-hentai.org/127.0.0.1#5335 +ipset=/e-hentai.org/gfwlist +server=/cdn77.com/127.0.0.1#5335 +ipset=/cdn77.com/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=/iphone-yh.com/127.0.0.1#5335 +ipset=/iphone-yh.com/gfwlist +server=/iphone-vip3.com/127.0.0.1#5335 +ipset=/iphone-vip3.com/gfwlist +server=/rabbitscams.sex/127.0.0.1#5335 +ipset=/rabbitscams.sex/gfwlist +server=/iphone-vip2.com/127.0.0.1#5335 +ipset=/iphone-vip2.com/gfwlist +server=/nentindo.net/127.0.0.1#5335 +ipset=/nentindo.net/gfwlist +server=/tubxporn.com/127.0.0.1#5335 +ipset=/tubxporn.com/gfwlist +server=/grooby.com/127.0.0.1#5335 +ipset=/grooby.com/gfwlist +server=/iphone-cn.com/127.0.0.1#5335 +ipset=/iphone-cn.com/gfwlist +server=/facfacebook.com/127.0.0.1#5335 +ipset=/facfacebook.com/gfwlist +server=/hf-iphone.com/127.0.0.1#5335 +ipset=/hf-iphone.com/gfwlist +server=/npr.org/127.0.0.1#5335 +ipset=/npr.org/gfwlist +server=/hebiphone.com/127.0.0.1#5335 +ipset=/hebiphone.com/gfwlist +server=/pornvibe.org/127.0.0.1#5335 +ipset=/pornvibe.org/gfwlist +server=/dgaqp.com/127.0.0.1#5335 +ipset=/dgaqp.com/gfwlist +server=/udtrucksmeena.com/127.0.0.1#5335 +ipset=/udtrucksmeena.com/gfwlist +server=/fundaiphone5s.com/127.0.0.1#5335 +ipset=/fundaiphone5s.com/gfwlist +server=/bestjapanesepornsites.com/127.0.0.1#5335 +ipset=/bestjapanesepornsites.com/gfwlist +server=/cloudflarepreview.com/127.0.0.1#5335 +ipset=/cloudflarepreview.com/gfwlist +server=/91porny.com/127.0.0.1#5335 +ipset=/91porny.com/gfwlist +server=/starbucks.de/127.0.0.1#5335 +ipset=/starbucks.de/gfwlist +server=/bowlroll.net/127.0.0.1#5335 +ipset=/bowlroll.net/gfwlist +server=/symcd.com/127.0.0.1#5335 +ipset=/symcd.com/gfwlist +server=/sneakerpage.net/127.0.0.1#5335 +ipset=/sneakerpage.net/gfwlist +server=/perfectgonzo.com/127.0.0.1#5335 +ipset=/perfectgonzo.com/gfwlist +server=/9anime.id/127.0.0.1#5335 +ipset=/9anime.id/gfwlist +server=/ntdtv.co.kr/127.0.0.1#5335 +ipset=/ntdtv.co.kr/gfwlist +server=/bloggrowup.com/127.0.0.1#5335 +ipset=/bloggrowup.com/gfwlist +server=/fbacebook.com/127.0.0.1#5335 +ipset=/fbacebook.com/gfwlist +server=/geek-squad-support.com/127.0.0.1#5335 +ipset=/geek-squad-support.com/gfwlist +server=/businessinsider.sg/127.0.0.1#5335 +ipset=/businessinsider.sg/gfwlist +server=/itunesstore.co/127.0.0.1#5335 +ipset=/itunesstore.co/gfwlist +server=/ipadmini.com.lk/127.0.0.1#5335 +ipset=/ipadmini.com.lk/gfwlist +server=/bbcverticals.com/127.0.0.1#5335 +ipset=/bbcverticals.com/gfwlist +server=/barefootnetworks.com/127.0.0.1#5335 +ipset=/barefootnetworks.com/gfwlist +server=/ipadair.fr/127.0.0.1#5335 +ipset=/ipadair.fr/gfwlist +server=/gettyimages.com.br/127.0.0.1#5335 +ipset=/gettyimages.com.br/gfwlist +server=/minimotoringrewards.com/127.0.0.1#5335 +ipset=/minimotoringrewards.com/gfwlist +server=/howtogetmo.co.uk/127.0.0.1#5335 +ipset=/howtogetmo.co.uk/gfwlist +server=/yandex.lv/127.0.0.1#5335 +ipset=/yandex.lv/gfwlist +server=/analsaga.com/127.0.0.1#5335 +ipset=/analsaga.com/gfwlist +server=/adultgeek.net/127.0.0.1#5335 +ipset=/adultgeek.net/gfwlist +server=/ipadair.com.br/127.0.0.1#5335 +ipset=/ipadair.com.br/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=/4tube.com/127.0.0.1#5335 +ipset=/4tube.com/gfwlist +server=/mini.co.za/127.0.0.1#5335 +ipset=/mini.co.za/gfwlist +server=/oxfordlawtrove.com/127.0.0.1#5335 +ipset=/oxfordlawtrove.com/gfwlist +server=/xacmbq.xyz/127.0.0.1#5335 +ipset=/xacmbq.xyz/gfwlist +server=/svpply.com/127.0.0.1#5335 +ipset=/svpply.com/gfwlist +server=/ipadair.cm/127.0.0.1#5335 +ipset=/ipadair.cm/gfwlist +server=/electronicarts.fr/127.0.0.1#5335 +ipset=/electronicarts.fr/gfwlist +server=/dukgo.com/127.0.0.1#5335 +ipset=/dukgo.com/gfwlist +server=/zlibcdn.com/127.0.0.1#5335 +ipset=/zlibcdn.com/gfwlist +server=/ipad.host/127.0.0.1#5335 +ipset=/ipad.host/gfwlist +server=/camvideoshub.com/127.0.0.1#5335 +ipset=/camvideoshub.com/gfwlist +server=/pornky.com/127.0.0.1#5335 +ipset=/pornky.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=/tiresplus.com/127.0.0.1#5335 +ipset=/tiresplus.com/gfwlist +server=/ebaynow.com/127.0.0.1#5335 +ipset=/ebaynow.com/gfwlist +server=/fcacebook.com/127.0.0.1#5335 +ipset=/fcacebook.com/gfwlist +server=/quovadisglobal.com/127.0.0.1#5335 +ipset=/quovadisglobal.com/gfwlist +server=/ebookforipad.com/127.0.0.1#5335 +ipset=/ebookforipad.com/gfwlist +server=/imac.rs/127.0.0.1#5335 +ipset=/imac.rs/gfwlist +server=/kindleproject.com/127.0.0.1#5335 +ipset=/kindleproject.com/gfwlist +server=/futureofbusinesssurvey.org/127.0.0.1#5335 +ipset=/futureofbusinesssurvey.org/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=/imac.gr/127.0.0.1#5335 +ipset=/imac.gr/gfwlist +server=/julesjordan.com/127.0.0.1#5335 +ipset=/julesjordan.com/gfwlist +server=/imac.co.nz/127.0.0.1#5335 +ipset=/imac.co.nz/gfwlist +server=/bgr.in/127.0.0.1#5335 +ipset=/bgr.in/gfwlist +server=/ma1lib.org/127.0.0.1#5335 +ipset=/ma1lib.org/gfwlist +server=/hentai-fun.com/127.0.0.1#5335 +ipset=/hentai-fun.com/gfwlist +server=/xxxvideoszoo.com/127.0.0.1#5335 +ipset=/xxxvideoszoo.com/gfwlist +server=/adobeplatinumclub.com/127.0.0.1#5335 +ipset=/adobeplatinumclub.com/gfwlist +server=/apple-imac.com/127.0.0.1#5335 +ipset=/apple-imac.com/gfwlist +server=/osapublishing.org/127.0.0.1#5335 +ipset=/osapublishing.org/gfwlist +server=/appstore.hk/127.0.0.1#5335 +ipset=/appstore.hk/gfwlist +server=/bmwgroupfs.com/127.0.0.1#5335 +ipset=/bmwgroupfs.com/gfwlist +server=/e122475.dscg.akamaiedge.net/127.0.0.1#5335 +ipset=/e122475.dscg.akamaiedge.net/gfwlist +server=/sex-young.com/127.0.0.1#5335 +ipset=/sex-young.com/gfwlist +server=/jmcomic1.mobi/127.0.0.1#5335 +ipset=/jmcomic1.mobi/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=/appsto.re/127.0.0.1#5335 +ipset=/appsto.re/gfwlist +server=/dungeonkeeper.cn/127.0.0.1#5335 +ipset=/dungeonkeeper.cn/gfwlist +server=/jafgrown.com/127.0.0.1#5335 +ipset=/jafgrown.com/gfwlist +server=/foxporns.com/127.0.0.1#5335 +ipset=/foxporns.com/gfwlist +server=/erotichdworld.com/127.0.0.1#5335 +ipset=/erotichdworld.com/gfwlist +server=/applestorepro.eu/127.0.0.1#5335 +ipset=/applestorepro.eu/gfwlist +server=/handjobhub.com/127.0.0.1#5335 +ipset=/handjobhub.com/gfwlist +server=/applestore.net/127.0.0.1#5335 +ipset=/applestore.net/gfwlist +server=/imtagram.com/127.0.0.1#5335 +ipset=/imtagram.com/gfwlist +server=/applestore.kr/127.0.0.1#5335 +ipset=/applestore.kr/gfwlist +server=/applestore.hk/127.0.0.1#5335 +ipset=/applestore.hk/gfwlist +server=/applestore.com.sn/127.0.0.1#5335 +ipset=/applestore.com.sn/gfwlist +server=/bmw-motorrad.co.kr/127.0.0.1#5335 +ipset=/bmw-motorrad.co.kr/gfwlist +server=/microsoftsilverlight.net/127.0.0.1#5335 +ipset=/microsoftsilverlight.net/gfwlist +server=/tiny4k.com/127.0.0.1#5335 +ipset=/tiny4k.com/gfwlist +server=/i-mobile.co.jp/127.0.0.1#5335 +ipset=/i-mobile.co.jp/gfwlist +server=/applestore.com.ph/127.0.0.1#5335 +ipset=/applestore.com.ph/gfwlist +server=/applestore.com.jo/127.0.0.1#5335 +ipset=/applestore.com.jo/gfwlist +server=/applestore.com.hr/127.0.0.1#5335 +ipset=/applestore.com.hr/gfwlist +server=/applestore.com.gr/127.0.0.1#5335 +ipset=/applestore.com.gr/gfwlist +server=/kkbox.com.tw/127.0.0.1#5335 +ipset=/kkbox.com.tw/gfwlist +server=/mtao.fun/127.0.0.1#5335 +ipset=/mtao.fun/gfwlist +server=/severeporn.com/127.0.0.1#5335 +ipset=/severeporn.com/gfwlist +server=/applestore.com/127.0.0.1#5335 +ipset=/applestore.com/gfwlist +server=/matrix.org/127.0.0.1#5335 +ipset=/matrix.org/gfwlist +server=/froogle.com/127.0.0.1#5335 +ipset=/froogle.com/gfwlist +server=/apisof.net/127.0.0.1#5335 +ipset=/apisof.net/gfwlist +server=/pornbrb.com/127.0.0.1#5335 +ipset=/pornbrb.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=/icloudmail.net/127.0.0.1#5335 +ipset=/icloudmail.net/gfwlist +server=/whatsapp.net/127.0.0.1#5335 +ipset=/whatsapp.net/gfwlist +server=/paypal.jp/127.0.0.1#5335 +ipset=/paypal.jp/gfwlist +server=/apple-store.net/127.0.0.1#5335 +ipset=/apple-store.net/gfwlist +server=/mypearsonenglish.ch/127.0.0.1#5335 +ipset=/mypearsonenglish.ch/gfwlist +server=/msocsp.com/127.0.0.1#5335 +ipset=/msocsp.com/gfwlist +server=/uusexdoll.com/127.0.0.1#5335 +ipset=/uusexdoll.com/gfwlist +server=/apple.xn--fiqs8s/127.0.0.1#5335 +ipset=/apple.xn--fiqs8s/gfwlist +server=/apple.xn--czr694b/127.0.0.1#5335 +ipset=/apple.xn--czr694b/gfwlist +server=/youtube.cat/127.0.0.1#5335 +ipset=/youtube.cat/gfwlist +server=/finish.ro/127.0.0.1#5335 +ipset=/finish.ro/gfwlist +server=/apple.tw/127.0.0.1#5335 +ipset=/apple.tw/gfwlist +server=/ikea.do/127.0.0.1#5335 +ipset=/ikea.do/gfwlist +server=/bayareabmw.com/127.0.0.1#5335 +ipset=/bayareabmw.com/gfwlist +server=/youtube.lk/127.0.0.1#5335 +ipset=/youtube.lk/gfwlist +server=/porn62.com/127.0.0.1#5335 +ipset=/porn62.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=/apple.tt/127.0.0.1#5335 +ipset=/apple.tt/gfwlist +server=/apple.so/127.0.0.1#5335 +ipset=/apple.so/gfwlist +server=/facebdok.com/127.0.0.1#5335 +ipset=/facebdok.com/gfwlist +server=/apple.sk/127.0.0.1#5335 +ipset=/apple.sk/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=/charlotte-anime.jp/127.0.0.1#5335 +ipset=/charlotte-anime.jp/gfwlist +server=/bmw-motorcycle.com/127.0.0.1#5335 +ipset=/bmw-motorcycle.com/gfwlist +server=/verpeliculasporno.gratis/127.0.0.1#5335 +ipset=/verpeliculasporno.gratis/gfwlist +server=/apple.rs/127.0.0.1#5335 +ipset=/apple.rs/gfwlist +server=/xxxvideo.vip/127.0.0.1#5335 +ipset=/xxxvideo.vip/gfwlist +server=/apple.pl/127.0.0.1#5335 +ipset=/apple.pl/gfwlist +server=/beatsforcheap-usa.com/127.0.0.1#5335 +ipset=/beatsforcheap-usa.com/gfwlist +server=/disney.co.il/127.0.0.1#5335 +ipset=/disney.co.il/gfwlist +server=/apple.net.gr/127.0.0.1#5335 +ipset=/apple.net.gr/gfwlist +server=/fanaken.com/127.0.0.1#5335 +ipset=/fanaken.com/gfwlist +server=/petitehdporn.com/127.0.0.1#5335 +ipset=/petitehdporn.com/gfwlist +server=/tg.dev/127.0.0.1#5335 +ipset=/tg.dev/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=/geeksquadforums.com/127.0.0.1#5335 +ipset=/geeksquadforums.com/gfwlist +server=/apple.lv/127.0.0.1#5335 +ipset=/apple.lv/gfwlist +server=/d100.net/127.0.0.1#5335 +ipset=/d100.net/gfwlist +server=/apple.lt/127.0.0.1#5335 +ipset=/apple.lt/gfwlist +server=/apple.jp/127.0.0.1#5335 +ipset=/apple.jp/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=/ultimaforever.com/127.0.0.1#5335 +ipset=/ultimaforever.com/gfwlist +server=/bigboobsonline.org/127.0.0.1#5335 +ipset=/bigboobsonline.org/gfwlist +server=/mediasama.com/127.0.0.1#5335 +ipset=/mediasama.com/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=/mypornvid.fun/127.0.0.1#5335 +ipset=/mypornvid.fun/gfwlist +server=/opengw.net/127.0.0.1#5335 +ipset=/opengw.net/gfwlist +server=/makeeu.com/127.0.0.1#5335 +ipset=/makeeu.com/gfwlist +server=/mybeatscheapbydre.com/127.0.0.1#5335 +ipset=/mybeatscheapbydre.com/gfwlist +server=/macbookair.kr/127.0.0.1#5335 +ipset=/macbookair.kr/gfwlist +server=/lp99.pw/127.0.0.1#5335 +ipset=/lp99.pw/gfwlist +server=/ieeeaps.org/127.0.0.1#5335 +ipset=/ieeeaps.org/gfwlist +server=/faptitans.com/127.0.0.1#5335 +ipset=/faptitans.com/gfwlist +server=/fecebook.net/127.0.0.1#5335 +ipset=/fecebook.net/gfwlist +server=/apple.co.mz/127.0.0.1#5335 +ipset=/apple.co.mz/gfwlist +server=/dotfacebook.net/127.0.0.1#5335 +ipset=/dotfacebook.net/gfwlist +server=/yinac.xyz/127.0.0.1#5335 +ipset=/yinac.xyz/gfwlist +server=/digitaloceanspaces.com/127.0.0.1#5335 +ipset=/digitaloceanspaces.com/gfwlist +server=/rewrite-anime.tv/127.0.0.1#5335 +ipset=/rewrite-anime.tv/gfwlist +server=/epochtimes.co.il/127.0.0.1#5335 +ipset=/epochtimes.co.il/gfwlist +server=/boyvid.com/127.0.0.1#5335 +ipset=/boyvid.com/gfwlist +server=/apple.co.cr/127.0.0.1#5335 +ipset=/apple.co.cr/gfwlist +server=/pornfinder.biz/127.0.0.1#5335 +ipset=/pornfinder.biz/gfwlist +server=/bridgestoneamericas.com/127.0.0.1#5335 +ipset=/bridgestoneamericas.com/gfwlist +server=/assetsadobe.com/127.0.0.1#5335 +ipset=/assetsadobe.com/gfwlist +server=/momami18.livedoor.blog/127.0.0.1#5335 +ipset=/momami18.livedoor.blog/gfwlist +server=/avxlive.icu/127.0.0.1#5335 +ipset=/avxlive.icu/gfwlist +server=/aboutfacebook.com/127.0.0.1#5335 +ipset=/aboutfacebook.com/gfwlist +server=/air-nike-shoes.com/127.0.0.1#5335 +ipset=/air-nike-shoes.com/gfwlist +server=/etviet.com/127.0.0.1#5335 +ipset=/etviet.com/gfwlist +server=/verisign.tw/127.0.0.1#5335 +ipset=/verisign.tw/gfwlist +server=/oxfordmedicine.com/127.0.0.1#5335 +ipset=/oxfordmedicine.com/gfwlist +server=/ruleporn.com/127.0.0.1#5335 +ipset=/ruleporn.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=/logitech.io/127.0.0.1#5335 +ipset=/logitech.io/gfwlist +server=/pornhoho.com/127.0.0.1#5335 +ipset=/pornhoho.com/gfwlist +server=/itunesu.com/127.0.0.1#5335 +ipset=/itunesu.com/gfwlist +server=/humblebundle.com/127.0.0.1#5335 +ipset=/humblebundle.com/gfwlist +server=/punishworld.com/127.0.0.1#5335 +ipset=/punishworld.com/gfwlist +server=/itunesradio.tv/127.0.0.1#5335 +ipset=/itunesradio.tv/gfwlist +server=/verisign.us/127.0.0.1#5335 +ipset=/verisign.us/gfwlist +server=/rumble.com/127.0.0.1#5335 +ipset=/rumble.com/gfwlist +server=/itunesradio.rio/127.0.0.1#5335 +ipset=/itunesradio.rio/gfwlist +server=/itunesradio.com/127.0.0.1#5335 +ipset=/itunesradio.com/gfwlist +server=/ituneslatino.com/127.0.0.1#5335 +ipset=/ituneslatino.com/gfwlist +server=/yahoo.com.gi/127.0.0.1#5335 +ipset=/yahoo.com.gi/gfwlist +server=/itunesiradio.com/127.0.0.1#5335 +ipset=/itunesiradio.com/gfwlist +server=/bmw-connecteddrive.si/127.0.0.1#5335 +ipset=/bmw-connecteddrive.si/gfwlist +server=/itunes.rio/127.0.0.1#5335 +ipset=/itunes.rio/gfwlist +server=/imgurinc.com/127.0.0.1#5335 +ipset=/imgurinc.com/gfwlist +server=/alphera.de/127.0.0.1#5335 +ipset=/alphera.de/gfwlist +server=/tubsexer.com/127.0.0.1#5335 +ipset=/tubsexer.com/gfwlist +server=/mini.pt/127.0.0.1#5335 +ipset=/mini.pt/gfwlist +server=/myfoxsanfran.com/127.0.0.1#5335 +ipset=/myfoxsanfran.com/gfwlist +server=/baraero.com/127.0.0.1#5335 +ipset=/baraero.com/gfwlist +server=/vklive.app/127.0.0.1#5335 +ipset=/vklive.app/gfwlist +server=/hpeprintcenter.com/127.0.0.1#5335 +ipset=/hpeprintcenter.com/gfwlist +server=/myfoxdfw.com/127.0.0.1#5335 +ipset=/myfoxdfw.com/gfwlist +server=/quantil.com/127.0.0.1#5335 +ipset=/quantil.com/gfwlist +server=/itunes.co.th/127.0.0.1#5335 +ipset=/itunes.co.th/gfwlist +server=/javporn.ws/127.0.0.1#5335 +ipset=/javporn.ws/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=/fi11av1.com/127.0.0.1#5335 +ipset=/fi11av1.com/gfwlist +server=/realtype.jp/127.0.0.1#5335 +ipset=/realtype.jp/gfwlist +server=/mini.com.mx/127.0.0.1#5335 +ipset=/mini.com.mx/gfwlist +server=/livesex.com/127.0.0.1#5335 +ipset=/livesex.com/gfwlist +server=/itun.es/127.0.0.1#5335 +ipset=/itun.es/gfwlist +server=/pixfs.net/127.0.0.1#5335 +ipset=/pixfs.net/gfwlist +server=/12joursdecadeauxdeitunes.com/127.0.0.1#5335 +ipset=/12joursdecadeauxdeitunes.com/gfwlist +server=/hk1lib.org/127.0.0.1#5335 +ipset=/hk1lib.org/gfwlist +server=/12diasderegalosdeitunes.hn/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.hn/gfwlist +server=/disneyredirects.com/127.0.0.1#5335 +ipset=/disneyredirects.com/gfwlist +server=/hairynature.com/127.0.0.1#5335 +ipset=/hairynature.com/gfwlist +server=/pornovideoshub.com/127.0.0.1#5335 +ipset=/pornovideoshub.com/gfwlist +server=/cheapbeatsbydr.com/127.0.0.1#5335 +ipset=/cheapbeatsbydr.com/gfwlist +server=/fecbooc.com/127.0.0.1#5335 +ipset=/fecbooc.com/gfwlist +server=/wsjshop.com/127.0.0.1#5335 +ipset=/wsjshop.com/gfwlist +server=/12diasderegalosdeitunes.cr/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.cr/gfwlist +server=/originalindianporn.com/127.0.0.1#5335 +ipset=/originalindianporn.com/gfwlist +server=/beatsbydrefrcasquepascher.com/127.0.0.1#5335 +ipset=/beatsbydrefrcasquepascher.com/gfwlist +server=/xxbrits.com/127.0.0.1#5335 +ipset=/xxbrits.com/gfwlist +server=/fetishshrine.com/127.0.0.1#5335 +ipset=/fetishshrine.com/gfwlist +server=/sinoinsider.com/127.0.0.1#5335 +ipset=/sinoinsider.com/gfwlist +server=/12diasderegalosdeitunes.cl/127.0.0.1#5335 +ipset=/12diasderegalosdeitunes.cl/gfwlist +server=/foxnews.com/127.0.0.1#5335 +ipset=/foxnews.com/gfwlist +server=/iloveprettylolimm.com/127.0.0.1#5335 +ipset=/iloveprettylolimm.com/gfwlist +server=/mylcloud.net/127.0.0.1#5335 +ipset=/mylcloud.net/gfwlist +server=/ingkacentres.com/127.0.0.1#5335 +ipset=/ingkacentres.com/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=/myicloud.net/127.0.0.1#5335 +ipset=/myicloud.net/gfwlist +server=/myferrariheadphones.com/127.0.0.1#5335 +ipset=/myferrariheadphones.com/gfwlist +server=/disneyplus.com.ssl.sc.omtrdc.net/127.0.0.1#5335 +ipset=/disneyplus.com.ssl.sc.omtrdc.net/gfwlist +server=/de1lib.org/127.0.0.1#5335 +ipset=/de1lib.org/gfwlist +server=/icloudsecure.net/127.0.0.1#5335 +ipset=/icloudsecure.net/gfwlist +server=/multporn.net/127.0.0.1#5335 +ipset=/multporn.net/gfwlist +server=/globalsign.be/127.0.0.1#5335 +ipset=/globalsign.be/gfwlist +server=/storesense.com/127.0.0.1#5335 +ipset=/storesense.com/gfwlist +server=/youtubego.com/127.0.0.1#5335 +ipset=/youtubego.com/gfwlist +server=/foxnews.org/127.0.0.1#5335 +ipset=/foxnews.org/gfwlist +server=/directv.com/127.0.0.1#5335 +ipset=/directv.com/gfwlist +server=/macbookpros.com/127.0.0.1#5335 +ipset=/macbookpros.com/gfwlist +server=/freebdsmxxx.org/127.0.0.1#5335 +ipset=/freebdsmxxx.org/gfwlist +server=/arzon.jp/127.0.0.1#5335 +ipset=/arzon.jp/gfwlist +server=/youtube.com.ee/127.0.0.1#5335 +ipset=/youtube.com.ee/gfwlist +server=/yahoo.com.fj/127.0.0.1#5335 +ipset=/yahoo.com.fj/gfwlist +server=/microad.jp/127.0.0.1#5335 +ipset=/microad.jp/gfwlist +server=/foxdigitalmovies.com/127.0.0.1#5335 +ipset=/foxdigitalmovies.com/gfwlist +server=/veet.at/127.0.0.1#5335 +ipset=/veet.at/gfwlist +server=/icloudnet.net/127.0.0.1#5335 +ipset=/icloudnet.net/gfwlist +server=/icloudbrowser.net/127.0.0.1#5335 +ipset=/icloudbrowser.net/gfwlist +server=/facebook.hu/127.0.0.1#5335 +ipset=/facebook.hu/gfwlist +server=/icloud.vn/127.0.0.1#5335 +ipset=/icloud.vn/gfwlist +server=/sexsex1.com/127.0.0.1#5335 +ipset=/sexsex1.com/gfwlist +server=/disneymagicmoments.co.il/127.0.0.1#5335 +ipset=/disneymagicmoments.co.il/gfwlist +server=/hotamateurblowjobs.com/127.0.0.1#5335 +ipset=/hotamateurblowjobs.com/gfwlist +server=/girlspoopingtube.com/127.0.0.1#5335 +ipset=/girlspoopingtube.com/gfwlist +server=/icloud.pt/127.0.0.1#5335 +ipset=/icloud.pt/gfwlist +server=/avstar03.me/127.0.0.1#5335 +ipset=/avstar03.me/gfwlist +server=/icloud.om/127.0.0.1#5335 +ipset=/icloud.om/gfwlist +server=/vrcams.io/127.0.0.1#5335 +ipset=/vrcams.io/gfwlist +server=/icloud.ie/127.0.0.1#5335 +ipset=/icloud.ie/gfwlist +server=/canon.dk/127.0.0.1#5335 +ipset=/canon.dk/gfwlist +server=/henti-night.com/127.0.0.1#5335 +ipset=/henti-night.com/gfwlist +server=/mastercard.co.jp/127.0.0.1#5335 +ipset=/mastercard.co.jp/gfwlist +server=/older-women-movies.com/127.0.0.1#5335 +ipset=/older-women-movies.com/gfwlist +server=/instawank.com/127.0.0.1#5335 +ipset=/instawank.com/gfwlist +server=/mi9.com.au/127.0.0.1#5335 +ipset=/mi9.com.au/gfwlist +server=/supportfacebook.com/127.0.0.1#5335 +ipset=/supportfacebook.com/gfwlist +server=/bmw-connecteddrive.de/127.0.0.1#5335 +ipset=/bmw-connecteddrive.de/gfwlist +server=/vrsmash.com/127.0.0.1#5335 +ipset=/vrsmash.com/gfwlist +server=/alljapanesepass.com/127.0.0.1#5335 +ipset=/alljapanesepass.com/gfwlist +server=/mask-h2.icloud.com/127.0.0.1#5335 +ipset=/mask-h2.icloud.com/gfwlist +server=/facecook.com/127.0.0.1#5335 +ipset=/facecook.com/gfwlist +server=/scp-wiki.net/127.0.0.1#5335 +ipset=/scp-wiki.net/gfwlist +server=/wholesalefine.com/127.0.0.1#5335 +ipset=/wholesalefine.com/gfwlist +server=/bmwi.ca/127.0.0.1#5335 +ipset=/bmwi.ca/gfwlist +server=/wholesale-exporter1.com/127.0.0.1#5335 +ipset=/wholesale-exporter1.com/gfwlist +server=/digicert-validation.com/127.0.0.1#5335 +ipset=/digicert-validation.com/gfwlist +server=/kyurem.com/127.0.0.1#5335 +ipset=/kyurem.com/gfwlist +server=/foxsports-chicago.com/127.0.0.1#5335 +ipset=/foxsports-chicago.com/gfwlist +server=/canon.com.hk/127.0.0.1#5335 +ipset=/canon.com.hk/gfwlist +server=/hellosmartbook.com/127.0.0.1#5335 +ipset=/hellosmartbook.com/gfwlist +server=/online-instagram.com/127.0.0.1#5335 +ipset=/online-instagram.com/gfwlist +server=/alphera.my/127.0.0.1#5335 +ipset=/alphera.my/gfwlist +server=/nervanasys.com/127.0.0.1#5335 +ipset=/nervanasys.com/gfwlist +server=/advancediddetection.com/127.0.0.1#5335 +ipset=/advancediddetection.com/gfwlist +server=/xboxplayanywhere.com/127.0.0.1#5335 +ipset=/xboxplayanywhere.com/gfwlist +server=/vimeo-staging2.com/127.0.0.1#5335 +ipset=/vimeo-staging2.com/gfwlist +server=/18comic.org/127.0.0.1#5335 +ipset=/18comic.org/gfwlist +server=/pornburger.com/127.0.0.1#5335 +ipset=/pornburger.com/gfwlist +server=/gofuckmenow.com/127.0.0.1#5335 +ipset=/gofuckmenow.com/gfwlist +server=/adidas.ie/127.0.0.1#5335 +ipset=/adidas.ie/gfwlist +server=/bmw.gr/127.0.0.1#5335 +ipset=/bmw.gr/gfwlist +server=/voashona.com/127.0.0.1#5335 +ipset=/voashona.com/gfwlist +server=/fcebookk.com/127.0.0.1#5335 +ipset=/fcebookk.com/gfwlist +server=/google.gy/127.0.0.1#5335 +ipset=/google.gy/gfwlist +server=/volvogroup.com/127.0.0.1#5335 +ipset=/volvogroup.com/gfwlist +server=/bloombergbreakaway.com/127.0.0.1#5335 +ipset=/bloombergbreakaway.com/gfwlist +server=/volvotrucks.ae/127.0.0.1#5335 +ipset=/volvotrucks.ae/gfwlist +server=/adultsextoys.com/127.0.0.1#5335 +ipset=/adultsextoys.com/gfwlist +server=/akiba-online.com/127.0.0.1#5335 +ipset=/akiba-online.com/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=/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=/sulwerphoto.com/127.0.0.1#5335 +ipset=/sulwerphoto.com/gfwlist +server=/couriermail.com.au/127.0.0.1#5335 +ipset=/couriermail.com.au/gfwlist +server=/freebigmovies.com/127.0.0.1#5335 +ipset=/freebigmovies.com/gfwlist +server=/specialtyheadphones.com/127.0.0.1#5335 +ipset=/specialtyheadphones.com/gfwlist +server=/mastercard.ke/127.0.0.1#5335 +ipset=/mastercard.ke/gfwlist +server=/xbeegtube.com/127.0.0.1#5335 +ipset=/xbeegtube.com/gfwlist +server=/solostudioksale.com/127.0.0.1#5335 +ipset=/solostudioksale.com/gfwlist +server=/gotgayporn.com/127.0.0.1#5335 +ipset=/gotgayporn.com/gfwlist +server=/mini.es/127.0.0.1#5335 +ipset=/mini.es/gfwlist +server=/mini-egypt.com/127.0.0.1#5335 +ipset=/mini-egypt.com/gfwlist +server=/sneaker666.com/127.0.0.1#5335 +ipset=/sneaker666.com/gfwlist +server=/shoppinguheadphones.com/127.0.0.1#5335 +ipset=/shoppinguheadphones.com/gfwlist +server=/webtype.com/127.0.0.1#5335 +ipset=/webtype.com/gfwlist +server=/pinterest.com.mx/127.0.0.1#5335 +ipset=/pinterest.com.mx/gfwlist +server=/bmw-motorrad.sv/127.0.0.1#5335 +ipset=/bmw-motorrad.sv/gfwlist +server=/gallery-dump.club/127.0.0.1#5335 +ipset=/gallery-dump.club/gfwlist +server=/shop-headphones.net/127.0.0.1#5335 +ipset=/shop-headphones.net/gfwlist +server=/myrz.com/127.0.0.1#5335 +ipset=/myrz.com/gfwlist +server=/femscat.com/127.0.0.1#5335 +ipset=/femscat.com/gfwlist +server=/volvobuses.es/127.0.0.1#5335 +ipset=/volvobuses.es/gfwlist +server=/shoestop2.com/127.0.0.1#5335 +ipset=/shoestop2.com/gfwlist +server=/sanvaras.com/127.0.0.1#5335 +ipset=/sanvaras.com/gfwlist +server=/spoti.fi/127.0.0.1#5335 +ipset=/spoti.fi/gfwlist +server=/mini.com.mo/127.0.0.1#5335 +ipset=/mini.com.mo/gfwlist +server=/como-hackearfacebook.com/127.0.0.1#5335 +ipset=/como-hackearfacebook.com/gfwlist +server=/chloesworld.com/127.0.0.1#5335 +ipset=/chloesworld.com/gfwlist +server=/repsneakermall.com/127.0.0.1#5335 +ipset=/repsneakermall.com/gfwlist +server=/prostudiobeatscybersale.com/127.0.0.1#5335 +ipset=/prostudiobeatscybersale.com/gfwlist +server=/haori888.com/127.0.0.1#5335 +ipset=/haori888.com/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=/powerbeatsbydre.com/127.0.0.1#5335 +ipset=/powerbeatsbydre.com/gfwlist +server=/powerbeatsbydrdre.com/127.0.0.1#5335 +ipset=/powerbeatsbydrdre.com/gfwlist +server=/bamgrid.com/127.0.0.1#5335 +ipset=/bamgrid.com/gfwlist +server=/pocketbiketrader.com/127.0.0.1#5335 +ipset=/pocketbiketrader.com/gfwlist +server=/iporntv.net/127.0.0.1#5335 +ipset=/iporntv.net/gfwlist +server=/pillbeatsblackfridaysale.com/127.0.0.1#5335 +ipset=/pillbeatsblackfridaysale.com/gfwlist +server=/pickshoesclothes.com/127.0.0.1#5335 +ipset=/pickshoesclothes.com/gfwlist +server=/picknicekicks.net/127.0.0.1#5335 +ipset=/picknicekicks.net/gfwlist +server=/personeelsland.com/127.0.0.1#5335 +ipset=/personeelsland.com/gfwlist +server=/monsterbeatssalg.com/127.0.0.1#5335 +ipset=/monsterbeatssalg.com/gfwlist +server=/breitbart.com/127.0.0.1#5335 +ipset=/breitbart.com/gfwlist +server=/pugetsoundbmw.com/127.0.0.1#5335 +ipset=/pugetsoundbmw.com/gfwlist +server=/cmu.edu/127.0.0.1#5335 +ipset=/cmu.edu/gfwlist +server=/edx.org/127.0.0.1#5335 +ipset=/edx.org/gfwlist +server=/javprice.com/127.0.0.1#5335 +ipset=/javprice.com/gfwlist +server=/mastercard-email.com/127.0.0.1#5335 +ipset=/mastercard-email.com/gfwlist +server=/zee5.tv/127.0.0.1#5335 +ipset=/zee5.tv/gfwlist +server=/officialbeatsbydrestore.com/127.0.0.1#5335 +ipset=/officialbeatsbydrestore.com/gfwlist +server=/mega.nz/127.0.0.1#5335 +ipset=/mega.nz/gfwlist +server=/disquscdn.com/127.0.0.1#5335 +ipset=/disquscdn.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=/newlysprung.net/127.0.0.1#5335 +ipset=/newlysprung.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=/thetvdb.com/127.0.0.1#5335 +ipset=/thetvdb.com/gfwlist +server=/1lib.domains/127.0.0.1#5335 +ipset=/1lib.domains/gfwlist +server=/acgnmanhua.com/127.0.0.1#5335 +ipset=/acgnmanhua.com/gfwlist +server=/newbemany.com/127.0.0.1#5335 +ipset=/newbemany.com/gfwlist +server=/bmwmotorrad.com.ph/127.0.0.1#5335 +ipset=/bmwmotorrad.com.ph/gfwlist +server=/atkgallery.com/127.0.0.1#5335 +ipset=/atkgallery.com/gfwlist +server=/cheapbeatsbydre99.com/127.0.0.1#5335 +ipset=/cheapbeatsbydre99.com/gfwlist +server=/negozimonsterbeats.com/127.0.0.1#5335 +ipset=/negozimonsterbeats.com/gfwlist +server=/zohostatic.com/127.0.0.1#5335 +ipset=/zohostatic.com/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=/neborder.com/127.0.0.1#5335 +ipset=/neborder.com/gfwlist +server=/cool18.com/127.0.0.1#5335 +ipset=/cool18.com/gfwlist +server=/apple.eu/127.0.0.1#5335 +ipset=/apple.eu/gfwlist +server=/disney.co.th/127.0.0.1#5335 +ipset=/disney.co.th/gfwlist +server=/facecook.org/127.0.0.1#5335 +ipset=/facecook.org/gfwlist +server=/bioporno.com/127.0.0.1#5335 +ipset=/bioporno.com/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=/ms4dre.com/127.0.0.1#5335 +ipset=/ms4dre.com/gfwlist +server=/google.ae/127.0.0.1#5335 +ipset=/google.ae/gfwlist +server=/ccav69.me/127.0.0.1#5335 +ipset=/ccav69.me/gfwlist +server=/goldcoastbulletin.com.au/127.0.0.1#5335 +ipset=/goldcoastbulletin.com.au/gfwlist +server=/minidurham.com/127.0.0.1#5335 +ipset=/minidurham.com/gfwlist +server=/aishegw.com/127.0.0.1#5335 +ipset=/aishegw.com/gfwlist +server=/socdm.com/127.0.0.1#5335 +ipset=/socdm.com/gfwlist +server=/xxxymovies.com/127.0.0.1#5335 +ipset=/xxxymovies.com/gfwlist +server=/nikepromax.com/127.0.0.1#5335 +ipset=/nikepromax.com/gfwlist +server=/facebooksupplier.com/127.0.0.1#5335 +ipset=/facebooksupplier.com/gfwlist +server=/monstersdebea.com/127.0.0.1#5335 +ipset=/monstersdebea.com/gfwlist +server=/10xfotolia.com/127.0.0.1#5335 +ipset=/10xfotolia.com/gfwlist +server=/scatfinder.com/127.0.0.1#5335 +ipset=/scatfinder.com/gfwlist +server=/flbjc.net/127.0.0.1#5335 +ipset=/flbjc.net/gfwlist +server=/ebayeletro.com/127.0.0.1#5335 +ipset=/ebayeletro.com/gfwlist +server=/icsd.fiz-karlsruhe.de/127.0.0.1#5335 +ipset=/icsd.fiz-karlsruhe.de/gfwlist +server=/xbox360.com/127.0.0.1#5335 +ipset=/xbox360.com/gfwlist +server=/gayfuckporn.com/127.0.0.1#5335 +ipset=/gayfuckporn.com/gfwlist +server=/waa.tw/127.0.0.1#5335 +ipset=/waa.tw/gfwlist +server=/cloudflareaccess.com/127.0.0.1#5335 +ipset=/cloudflareaccess.com/gfwlist +server=/beatsbydremonsteraustralia.com/127.0.0.1#5335 +ipset=/beatsbydremonsteraustralia.com/gfwlist +server=/s-nbcnews.com/127.0.0.1#5335 +ipset=/s-nbcnews.com/gfwlist +server=/visasignature.co.kr/127.0.0.1#5335 +ipset=/visasignature.co.kr/gfwlist +server=/monsterbeatsru.com/127.0.0.1#5335 +ipset=/monsterbeatsru.com/gfwlist +server=/monsterbeatsonlinestoreuk.com/127.0.0.1#5335 +ipset=/monsterbeatsonlinestoreuk.com/gfwlist +server=/vfsco.dk/127.0.0.1#5335 +ipset=/vfsco.dk/gfwlist +server=/monsterbeatsok.com/127.0.0.1#5335 +ipset=/monsterbeatsok.com/gfwlist +server=/monsterbeatsnegozi.net/127.0.0.1#5335 +ipset=/monsterbeatsnegozi.net/gfwlist +server=/porngames.com/127.0.0.1#5335 +ipset=/porngames.com/gfwlist +server=/monsterbeatsitaly.com/127.0.0.1#5335 +ipset=/monsterbeatsitaly.com/gfwlist +server=/stunnel.org/127.0.0.1#5335 +ipset=/stunnel.org/gfwlist +server=/monsterbeatsfinland.com/127.0.0.1#5335 +ipset=/monsterbeatsfinland.com/gfwlist +server=/mastercard.kz/127.0.0.1#5335 +ipset=/mastercard.kz/gfwlist +server=/bmw-motorrad.bg/127.0.0.1#5335 +ipset=/bmw-motorrad.bg/gfwlist +server=/siam.org/127.0.0.1#5335 +ipset=/siam.org/gfwlist +server=/kicksnike1.com/127.0.0.1#5335 +ipset=/kicksnike1.com/gfwlist +server=/squarecloudservices.com/127.0.0.1#5335 +ipset=/squarecloudservices.com/gfwlist +server=/bmw-connecteddrive.ae/127.0.0.1#5335 +ipset=/bmw-connecteddrive.ae/gfwlist +server=/youyu.services/127.0.0.1#5335 +ipset=/youyu.services/gfwlist +server=/phimsexhentai.me/127.0.0.1#5335 +ipset=/phimsexhentai.me/gfwlist +server=/nginx.com/127.0.0.1#5335 +ipset=/nginx.com/gfwlist +server=/binancezh.sh/127.0.0.1#5335 +ipset=/binancezh.sh/gfwlist +server=/gonzo-movies.com/127.0.0.1#5335 +ipset=/gonzo-movies.com/gfwlist +server=/monsterbeatsbydrebilligde.com/127.0.0.1#5335 +ipset=/monsterbeatsbydrebilligde.com/gfwlist +server=/starwarsgalacticstarcruiser.com/127.0.0.1#5335 +ipset=/starwarsgalacticstarcruiser.com/gfwlist +server=/gaycock4u.com/127.0.0.1#5335 +ipset=/gaycock4u.com/gfwlist +server=/nikesbdunks.net/127.0.0.1#5335 +ipset=/nikesbdunks.net/gfwlist +server=/bandag.cc/127.0.0.1#5335 +ipset=/bandag.cc/gfwlist +server=/manhuagui.com/127.0.0.1#5335 +ipset=/manhuagui.com/gfwlist +server=/artoferotica.info/127.0.0.1#5335 +ipset=/artoferotica.info/gfwlist +server=/gaypornforyou.com/127.0.0.1#5335 +ipset=/gaypornforyou.com/gfwlist +server=/hentaigamesplanet.com/127.0.0.1#5335 +ipset=/hentaigamesplanet.com/gfwlist +server=/youtube.com.qa/127.0.0.1#5335 +ipset=/youtube.com.qa/gfwlist +server=/mzed.com/127.0.0.1#5335 +ipset=/mzed.com/gfwlist +server=/heavenlyhentai.com/127.0.0.1#5335 +ipset=/heavenlyhentai.com/gfwlist +server=/youtube.la/127.0.0.1#5335 +ipset=/youtube.la/gfwlist +server=/bmwworld.com/127.0.0.1#5335 +ipset=/bmwworld.com/gfwlist +server=/micstl.com/127.0.0.1#5335 +ipset=/micstl.com/gfwlist +server=/8muses.io/127.0.0.1#5335 +ipset=/8muses.io/gfwlist +server=/visapcsdirect.com/127.0.0.1#5335 +ipset=/visapcsdirect.com/gfwlist +server=/gettyimages.at/127.0.0.1#5335 +ipset=/gettyimages.at/gfwlist +server=/media-amazon.com/127.0.0.1#5335 +ipset=/media-amazon.com/gfwlist +server=/instagrm.com/127.0.0.1#5335 +ipset=/instagrm.com/gfwlist +server=/mairbeats.com/127.0.0.1#5335 +ipset=/mairbeats.com/gfwlist +server=/dtci.technology/127.0.0.1#5335 +ipset=/dtci.technology/gfwlist +server=/airwick.hu/127.0.0.1#5335 +ipset=/airwick.hu/gfwlist +server=/kickshatchannel.com/127.0.0.1#5335 +ipset=/kickshatchannel.com/gfwlist +server=/sacredhentai.com/127.0.0.1#5335 +ipset=/sacredhentai.com/gfwlist +server=/lifeselector.com/127.0.0.1#5335 +ipset=/lifeselector.com/gfwlist +server=/italiabeatsbydrdre.com/127.0.0.1#5335 +ipset=/italiabeatsbydrdre.com/gfwlist +server=/chinapower.csis.org/127.0.0.1#5335 +ipset=/chinapower.csis.org/gfwlist +server=/kijijiauto.ca/127.0.0.1#5335 +ipset=/kijijiauto.ca/gfwlist +server=/bmw-motorrad.si/127.0.0.1#5335 +ipset=/bmw-motorrad.si/gfwlist +server=/topcelebnudes.com/127.0.0.1#5335 +ipset=/topcelebnudes.com/gfwlist +server=/marketo.tv/127.0.0.1#5335 +ipset=/marketo.tv/gfwlist +server=/billmelater.info/127.0.0.1#5335 +ipset=/billmelater.info/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=/yomikyo.or.jp/127.0.0.1#5335 +ipset=/yomikyo.or.jp/gfwlist +server=/omghk.com/127.0.0.1#5335 +ipset=/omghk.com/gfwlist +server=/bridgestonenationalfleet.com/127.0.0.1#5335 +ipset=/bridgestonenationalfleet.com/gfwlist +server=/anb.org/127.0.0.1#5335 +ipset=/anb.org/gfwlist +server=/milftube.pro/127.0.0.1#5335 +ipset=/milftube.pro/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=/dlgarenanow-a.akamaihd.net/127.0.0.1#5335 +ipset=/dlgarenanow-a.akamaihd.net/gfwlist +server=/milfprime.com/127.0.0.1#5335 +ipset=/milfprime.com/gfwlist +server=/facebook-support.org/127.0.0.1#5335 +ipset=/facebook-support.org/gfwlist +server=/fifastreet3.com/127.0.0.1#5335 +ipset=/fifastreet3.com/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=/slobodnaevropa.mk/127.0.0.1#5335 +ipset=/slobodnaevropa.mk/gfwlist +server=/3dfuckhouse.com/127.0.0.1#5335 +ipset=/3dfuckhouse.com/gfwlist +server=/japaneselovelygirl.com/127.0.0.1#5335 +ipset=/japaneselovelygirl.com/gfwlist +server=/faronics.com.au/127.0.0.1#5335 +ipset=/faronics.com.au/gfwlist +server=/intelplay.com/127.0.0.1#5335 +ipset=/intelplay.com/gfwlist +server=/fuhouse.club/127.0.0.1#5335 +ipset=/fuhouse.club/gfwlist +server=/headphonezip.com/127.0.0.1#5335 +ipset=/headphonezip.com/gfwlist +server=/bexjt5wz.xyz/127.0.0.1#5335 +ipset=/bexjt5wz.xyz/gfwlist +server=/travelex.co.uk/127.0.0.1#5335 +ipset=/travelex.co.uk/gfwlist +server=/headphonesretailer.com/127.0.0.1#5335 +ipset=/headphonesretailer.com/gfwlist +server=/sysinternals.com/127.0.0.1#5335 +ipset=/sysinternals.com/gfwlist +server=/nike.us/127.0.0.1#5335 +ipset=/nike.us/gfwlist +server=/jquery.com/127.0.0.1#5335 +ipset=/jquery.com/gfwlist +server=/volvotrucks.sk/127.0.0.1#5335 +ipset=/volvotrucks.sk/gfwlist +server=/ebayde.com/127.0.0.1#5335 +ipset=/ebayde.com/gfwlist +server=/lesbianpornvideos.com/127.0.0.1#5335 +ipset=/lesbianpornvideos.com/gfwlist +server=/cloudinary.net/127.0.0.1#5335 +ipset=/cloudinary.net/gfwlist +server=/volvobuses.at/127.0.0.1#5335 +ipset=/volvobuses.at/gfwlist +server=/mythicgames.com/127.0.0.1#5335 +ipset=/mythicgames.com/gfwlist +server=/atlasdmt.com/127.0.0.1#5335 +ipset=/atlasdmt.com/gfwlist +server=/verisign.com.es/127.0.0.1#5335 +ipset=/verisign.com.es/gfwlist +server=/jdbstatic.com/127.0.0.1#5335 +ipset=/jdbstatic.com/gfwlist +server=/minid.no/127.0.0.1#5335 +ipset=/minid.no/gfwlist +server=/pornlegendsclub.com/127.0.0.1#5335 +ipset=/pornlegendsclub.com/gfwlist +server=/amatura.com/127.0.0.1#5335 +ipset=/amatura.com/gfwlist +server=/ballbustingtube.com/127.0.0.1#5335 +ipset=/ballbustingtube.com/gfwlist +server=/jav101.com/127.0.0.1#5335 +ipset=/jav101.com/gfwlist +server=/nationalaustraliaban.tt.omtrdc.net/127.0.0.1#5335 +ipset=/nationalaustraliaban.tt.omtrdc.net/gfwlist +server=/gmnetworks.net/127.0.0.1#5335 +ipset=/gmnetworks.net/gfwlist +server=/frishoes.com/127.0.0.1#5335 +ipset=/frishoes.com/gfwlist +server=/frcasquesbeats.com/127.0.0.1#5335 +ipset=/frcasquesbeats.com/gfwlist +server=/fr-beatsbydrestore.com/127.0.0.1#5335 +ipset=/fr-beatsbydrestore.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=/mastercardcenter.com/127.0.0.1#5335 +ipset=/mastercardcenter.com/gfwlist +server=/vimeo.com/127.0.0.1#5335 +ipset=/vimeo.com/gfwlist +server=/naver.net/127.0.0.1#5335 +ipset=/naver.net/gfwlist +server=/ebaka.ru/127.0.0.1#5335 +ipset=/ebaka.ru/gfwlist +server=/awsloft-stockholm.com/127.0.0.1#5335 +ipset=/awsloft-stockholm.com/gfwlist +server=/attinnovationspace.com/127.0.0.1#5335 +ipset=/attinnovationspace.com/gfwlist +server=/ts.la/127.0.0.1#5335 +ipset=/ts.la/gfwlist +server=/pinduck.com/127.0.0.1#5335 +ipset=/pinduck.com/gfwlist +server=/dreprobeats.com/127.0.0.1#5335 +ipset=/dreprobeats.com/gfwlist +server=/kicu.tv/127.0.0.1#5335 +ipset=/kicu.tv/gfwlist +server=/frescolib.org/127.0.0.1#5335 +ipset=/frescolib.org/gfwlist +server=/drebeatsaustralia-cheap.com/127.0.0.1#5335 +ipset=/drebeatsaustralia-cheap.com/gfwlist +server=/limer.tw/127.0.0.1#5335 +ipset=/limer.tw/gfwlist +server=/newscorpaustralia.com/127.0.0.1#5335 +ipset=/newscorpaustralia.com/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=/tryquinn.com/127.0.0.1#5335 +ipset=/tryquinn.com/gfwlist +server=/yandex.kz/127.0.0.1#5335 +ipset=/yandex.kz/gfwlist +server=/microsoftaffiliates.com/127.0.0.1#5335 +ipset=/microsoftaffiliates.com/gfwlist +server=/twgreatnews.com/127.0.0.1#5335 +ipset=/twgreatnews.com/gfwlist +server=/albagals.com/127.0.0.1#5335 +ipset=/albagals.com/gfwlist +server=/hentaiyes.com/127.0.0.1#5335 +ipset=/hentaiyes.com/gfwlist +server=/drebeatsaustralia-cheap.net/127.0.0.1#5335 +ipset=/drebeatsaustralia-cheap.net/gfwlist +server=/naughtyamerica.com/127.0.0.1#5335 +ipset=/naughtyamerica.com/gfwlist +server=/mini.com.gt/127.0.0.1#5335 +ipset=/mini.com.gt/gfwlist +server=/drebeats-monsteraustralia.com/127.0.0.1#5335 +ipset=/drebeats-monsteraustralia.com/gfwlist +server=/akami.net/127.0.0.1#5335 +ipset=/akami.net/gfwlist +server=/erogames.com/127.0.0.1#5335 +ipset=/erogames.com/gfwlist +server=/sectigo.com/127.0.0.1#5335 +ipset=/sectigo.com/gfwlist +server=/mengnan.shop/127.0.0.1#5335 +ipset=/mengnan.shop/gfwlist +server=/tx5254.com/127.0.0.1#5335 +ipset=/tx5254.com/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=/my20houston.com/127.0.0.1#5335 +ipset=/my20houston.com/gfwlist +server=/bmw-fleet.net/127.0.0.1#5335 +ipset=/bmw-fleet.net/gfwlist +server=/mortein.co.za/127.0.0.1#5335 +ipset=/mortein.co.za/gfwlist +server=/visa.ky/127.0.0.1#5335 +ipset=/visa.ky/gfwlist +server=/bmw-yemen.com/127.0.0.1#5335 +ipset=/bmw-yemen.com/gfwlist +server=/enanyang.my/127.0.0.1#5335 +ipset=/enanyang.my/gfwlist +server=/drdremonster-beats.com/127.0.0.1#5335 +ipset=/drdremonster-beats.com/gfwlist +server=/attdns.net/127.0.0.1#5335 +ipset=/attdns.net/gfwlist +server=/signal.art/127.0.0.1#5335 +ipset=/signal.art/gfwlist +server=/cuckoldplacetube.com/127.0.0.1#5335 +ipset=/cuckoldplacetube.com/gfwlist +server=/drdrebeatsretail2013.com/127.0.0.1#5335 +ipset=/drdrebeatsretail2013.com/gfwlist +server=/xindelu.com/127.0.0.1#5335 +ipset=/xindelu.com/gfwlist +server=/nhentai.com/127.0.0.1#5335 +ipset=/nhentai.com/gfwlist +server=/doodhwali.com/127.0.0.1#5335 +ipset=/doodhwali.com/gfwlist +server=/wankzvr.com/127.0.0.1#5335 +ipset=/wankzvr.com/gfwlist +server=/slutload.com/127.0.0.1#5335 +ipset=/slutload.com/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=/disneyworld-go.com/127.0.0.1#5335 +ipset=/disneyworld-go.com/gfwlist +server=/npm.community/127.0.0.1#5335 +ipset=/npm.community/gfwlist +server=/mini-connected.es/127.0.0.1#5335 +ipset=/mini-connected.es/gfwlist +server=/gyutto.com/127.0.0.1#5335 +ipset=/gyutto.com/gfwlist +server=/computer.org/127.0.0.1#5335 +ipset=/computer.org/gfwlist +server=/1010.com.hk/127.0.0.1#5335 +ipset=/1010.com.hk/gfwlist +server=/yourspeculumexam.com/127.0.0.1#5335 +ipset=/yourspeculumexam.com/gfwlist +server=/59mvmv.com/127.0.0.1#5335 +ipset=/59mvmv.com/gfwlist +server=/codei.sh/127.0.0.1#5335 +ipset=/codei.sh/gfwlist +server=/tferwq.com/127.0.0.1#5335 +ipset=/tferwq.com/gfwlist +server=/discountbeatsstore.com/127.0.0.1#5335 +ipset=/discountbeatsstore.com/gfwlist +server=/taylorfrancis.com/127.0.0.1#5335 +ipset=/taylorfrancis.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=/custombeatssbydreus.com/127.0.0.1#5335 +ipset=/custombeatssbydreus.com/gfwlist +server=/custombeatsdeals.com/127.0.0.1#5335 +ipset=/custombeatsdeals.com/gfwlist +server=/beatsbydreus.com/127.0.0.1#5335 +ipset=/beatsbydreus.com/gfwlist +server=/nintendo.fi/127.0.0.1#5335 +ipset=/nintendo.fi/gfwlist +server=/cuffiesaldi.com/127.0.0.1#5335 +ipset=/cuffiesaldi.com/gfwlist +server=/eamobile.com/127.0.0.1#5335 +ipset=/eamobile.com/gfwlist +server=/acgww.cyou/127.0.0.1#5335 +ipset=/acgww.cyou/gfwlist +server=/coolmonster.net/127.0.0.1#5335 +ipset=/coolmonster.net/gfwlist +server=/miniwindsor.com/127.0.0.1#5335 +ipset=/miniwindsor.com/gfwlist +server=/chihair-straightener.com/127.0.0.1#5335 +ipset=/chihair-straightener.com/gfwlist +server=/pearsonlongman.ch/127.0.0.1#5335 +ipset=/pearsonlongman.ch/gfwlist +server=/cheapsalemonster.com/127.0.0.1#5335 +ipset=/cheapsalemonster.com/gfwlist +server=/cheapnewbeatsbydre.com/127.0.0.1#5335 +ipset=/cheapnewbeatsbydre.com/gfwlist +server=/xbox360.co/127.0.0.1#5335 +ipset=/xbox360.co/gfwlist +server=/bobs-tube.com/127.0.0.1#5335 +ipset=/bobs-tube.com/gfwlist +server=/cheapmonsterbeatsheadsets.com/127.0.0.1#5335 +ipset=/cheapmonsterbeatsheadsets.com/gfwlist +server=/ea.tt.omtrdc.net/127.0.0.1#5335 +ipset=/ea.tt.omtrdc.net/gfwlist +server=/cheapheadphonessale.com/127.0.0.1#5335 +ipset=/cheapheadphonessale.com/gfwlist +server=/xxx4hindi.com/127.0.0.1#5335 +ipset=/xxx4hindi.com/gfwlist +server=/cheapdrdrebeatsca.com/127.0.0.1#5335 +ipset=/cheapdrdrebeatsca.com/gfwlist +server=/chuokoron.jp/127.0.0.1#5335 +ipset=/chuokoron.jp/gfwlist +server=/cheapdrdrebeats8.com/127.0.0.1#5335 +ipset=/cheapdrdrebeats8.com/gfwlist +server=/infocert.it/127.0.0.1#5335 +ipset=/infocert.it/gfwlist +server=/fox13news.com/127.0.0.1#5335 +ipset=/fox13news.com/gfwlist +server=/mini-vietnam.com/127.0.0.1#5335 +ipset=/mini-vietnam.com/gfwlist +server=/freexvideos.org/127.0.0.1#5335 +ipset=/freexvideos.org/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=/cheapbeatsheadphones.us/127.0.0.1#5335 +ipset=/cheapbeatsheadphones.us/gfwlist +server=/cheapbeatsheadphone2014.com/127.0.0.1#5335 +ipset=/cheapbeatsheadphone2014.com/gfwlist +server=/ilovexs.com/127.0.0.1#5335 +ipset=/ilovexs.com/gfwlist +server=/99thz.com/127.0.0.1#5335 +ipset=/99thz.com/gfwlist +server=/fteproxy.org/127.0.0.1#5335 +ipset=/fteproxy.org/gfwlist +server=/xxxbunker.com/127.0.0.1#5335 +ipset=/xxxbunker.com/gfwlist +server=/xnxxhd.biz/127.0.0.1#5335 +ipset=/xnxxhd.biz/gfwlist +server=/cheapbeatsbydreoutlets2013.com/127.0.0.1#5335 +ipset=/cheapbeatsbydreoutlets2013.com/gfwlist +server=/beatsheadphonesdealer.com/127.0.0.1#5335 +ipset=/beatsheadphonesdealer.com/gfwlist +server=/18tube.xxx/127.0.0.1#5335 +ipset=/18tube.xxx/gfwlist +server=/czechvideo.org/127.0.0.1#5335 +ipset=/czechvideo.org/gfwlist +server=/gfacecbook.com/127.0.0.1#5335 +ipset=/gfacecbook.com/gfwlist +server=/xhamster.com/127.0.0.1#5335 +ipset=/xhamster.com/gfwlist +server=/ipod.net/127.0.0.1#5335 +ipset=/ipod.net/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=/casquebeatspascher2013.com/127.0.0.1#5335 +ipset=/casquebeatspascher2013.com/gfwlist +server=/yourphysicalexam.com/127.0.0.1#5335 +ipset=/yourphysicalexam.com/gfwlist +server=/casquebeatsmer.net/127.0.0.1#5335 +ipset=/casquebeatsmer.net/gfwlist +server=/blpevents.com/127.0.0.1#5335 +ipset=/blpevents.com/gfwlist +server=/xbox.co/127.0.0.1#5335 +ipset=/xbox.co/gfwlist +server=/gentoo.org/127.0.0.1#5335 +ipset=/gentoo.org/gfwlist +server=/camonster.com/127.0.0.1#5335 +ipset=/camonster.com/gfwlist +server=/namethatpornad.com/127.0.0.1#5335 +ipset=/namethatpornad.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=/buyshoponly.com/127.0.0.1#5335 +ipset=/buyshoponly.com/gfwlist +server=/hentaiheadlines.com/127.0.0.1#5335 +ipset=/hentaiheadlines.com/gfwlist +server=/justfamilyporn.com/127.0.0.1#5335 +ipset=/justfamilyporn.com/gfwlist +server=/dailym.ai/127.0.0.1#5335 +ipset=/dailym.ai/gfwlist +server=/vodafone.it/127.0.0.1#5335 +ipset=/vodafone.it/gfwlist +server=/buybeatsheadphonesbydre.com/127.0.0.1#5335 +ipset=/buybeatsheadphonesbydre.com/gfwlist +server=/bmwusa.com/127.0.0.1#5335 +ipset=/bmwusa.com/gfwlist +server=/buybeatsbydre-uk.com/127.0.0.1#5335 +ipset=/buybeatsbydre-uk.com/gfwlist +server=/nintendo.co.jp/127.0.0.1#5335 +ipset=/nintendo.co.jp/gfwlist +server=/firestone.com.ar/127.0.0.1#5335 +ipset=/firestone.com.ar/gfwlist +server=/buy-from-shanghai.com/127.0.0.1#5335 +ipset=/buy-from-shanghai.com/gfwlist +server=/brands098.com/127.0.0.1#5335 +ipset=/brands098.com/gfwlist +server=/steam.cdn.on.net/127.0.0.1#5335 +ipset=/steam.cdn.on.net/gfwlist +server=/thegooglestore.com/127.0.0.1#5335 +ipset=/thegooglestore.com/gfwlist +server=/nokiantyres.com/127.0.0.1#5335 +ipset=/nokiantyres.com/gfwlist +server=/isfocus.net/127.0.0.1#5335 +ipset=/isfocus.net/gfwlist +server=/badgen.net/127.0.0.1#5335 +ipset=/badgen.net/gfwlist +server=/maturewomenanal.com/127.0.0.1#5335 +ipset=/maturewomenanal.com/gfwlist +server=/scatshop.com/127.0.0.1#5335 +ipset=/scatshop.com/gfwlist +server=/youtube.com.kw/127.0.0.1#5335 +ipset=/youtube.com.kw/gfwlist +server=/bookonsky.net/127.0.0.1#5335 +ipset=/bookonsky.net/gfwlist +server=/bloommicroventures.com/127.0.0.1#5335 +ipset=/bloommicroventures.com/gfwlist +server=/biitii.com/127.0.0.1#5335 +ipset=/biitii.com/gfwlist +server=/azatutyun.am/127.0.0.1#5335 +ipset=/azatutyun.am/gfwlist +server=/thecandidforum-voyeur.ru/127.0.0.1#5335 +ipset=/thecandidforum-voyeur.ru/gfwlist +server=/facebooks.com/127.0.0.1#5335 +ipset=/facebooks.com/gfwlist +server=/54647.io/127.0.0.1#5335 +ipset=/54647.io/gfwlist +server=/playparagon.com/127.0.0.1#5335 +ipset=/playparagon.com/gfwlist +server=/eebay.com/127.0.0.1#5335 +ipset=/eebay.com/gfwlist +server=/xn--ubt498knmf.com/127.0.0.1#5335 +ipset=/xn--ubt498knmf.com/gfwlist +server=/javfree.me/127.0.0.1#5335 +ipset=/javfree.me/gfwlist +server=/beatssingapores.com/127.0.0.1#5335 +ipset=/beatssingapores.com/gfwlist +server=/pythonhosted.org/127.0.0.1#5335 +ipset=/pythonhosted.org/gfwlist +server=/eurekaselect.com/127.0.0.1#5335 +ipset=/eurekaselect.com/gfwlist +server=/ocsp-certum.com/127.0.0.1#5335 +ipset=/ocsp-certum.com/gfwlist +server=/porncoil.com/127.0.0.1#5335 +ipset=/porncoil.com/gfwlist +server=/xbox360.org/127.0.0.1#5335 +ipset=/xbox360.org/gfwlist +server=/advertiserscommunity.com/127.0.0.1#5335 +ipset=/advertiserscommunity.com/gfwlist +server=/beatspromonsterjp.com/127.0.0.1#5335 +ipset=/beatspromonsterjp.com/gfwlist +server=/bmwfilms.com/127.0.0.1#5335 +ipset=/bmwfilms.com/gfwlist +server=/xero.porn/127.0.0.1#5335 +ipset=/xero.porn/gfwlist +server=/appledaily.com/127.0.0.1#5335 +ipset=/appledaily.com/gfwlist +server=/uselessjunk.com/127.0.0.1#5335 +ipset=/uselessjunk.com/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=/jav9999.com/127.0.0.1#5335 +ipset=/jav9999.com/gfwlist +server=/beatsofdre-usa.com/127.0.0.1#5335 +ipset=/beatsofdre-usa.com/gfwlist +server=/adulto.vip/127.0.0.1#5335 +ipset=/adulto.vip/gfwlist +server=/aznude.com/127.0.0.1#5335 +ipset=/aznude.com/gfwlist +server=/my3dhentai.com/127.0.0.1#5335 +ipset=/my3dhentai.com/gfwlist +server=/volvotrucks.ps/127.0.0.1#5335 +ipset=/volvotrucks.ps/gfwlist +server=/miiverse.com/127.0.0.1#5335 +ipset=/miiverse.com/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=/pinkteentube.net/127.0.0.1#5335 +ipset=/pinkteentube.net/gfwlist +server=/airgonetworks.com/127.0.0.1#5335 +ipset=/airgonetworks.com/gfwlist +server=/bestshoesale2014.net/127.0.0.1#5335 +ipset=/bestshoesale2014.net/gfwlist +server=/beatsheadphonestudio.com/127.0.0.1#5335 +ipset=/beatsheadphonestudio.com/gfwlist +server=/bmw-motorrad.in/127.0.0.1#5335 +ipset=/bmw-motorrad.in/gfwlist +server=/bestfreesexgames.com/127.0.0.1#5335 +ipset=/bestfreesexgames.com/gfwlist +server=/freesexyindians.com/127.0.0.1#5335 +ipset=/freesexyindians.com/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=/cambb.xxx/127.0.0.1#5335 +ipset=/cambb.xxx/gfwlist +server=/bmw-motorrad.es/127.0.0.1#5335 +ipset=/bmw-motorrad.es/gfwlist +server=/beatsheadphones2u.com/127.0.0.1#5335 +ipset=/beatsheadphones2u.com/gfwlist +server=/beatsheadphones1.com/127.0.0.1#5335 +ipset=/beatsheadphones1.com/gfwlist +server=/jupyter.org/127.0.0.1#5335 +ipset=/jupyter.org/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=/cygwin.com/127.0.0.1#5335 +ipset=/cygwin.com/gfwlist +server=/whynotbi.com/127.0.0.1#5335 +ipset=/whynotbi.com/gfwlist +server=/hulu.jp/127.0.0.1#5335 +ipset=/hulu.jp/gfwlist +server=/vrv.co/127.0.0.1#5335 +ipset=/vrv.co/gfwlist +server=/girlscv.com/127.0.0.1#5335 +ipset=/girlscv.com/gfwlist +server=/beatsfacstore.com/127.0.0.1#5335 +ipset=/beatsfacstore.com/gfwlist +server=/beatsearbudsheadphoness.com/127.0.0.1#5335 +ipset=/beatsearbudsheadphoness.com/gfwlist +server=/nyt.com/127.0.0.1#5335 +ipset=/nyt.com/gfwlist +server=/doujincg.blog.jp/127.0.0.1#5335 +ipset=/doujincg.blog.jp/gfwlist +server=/fontsinuse.com/127.0.0.1#5335 +ipset=/fontsinuse.com/gfwlist +server=/pplah.com/127.0.0.1#5335 +ipset=/pplah.com/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=/beatsdresalestore.com/127.0.0.1#5335 +ipset=/beatsdresalestore.com/gfwlist +server=/beatsdremonster-uk.com/127.0.0.1#5335 +ipset=/beatsdremonster-uk.com/gfwlist +server=/beatsdredreheadphones.com/127.0.0.1#5335 +ipset=/beatsdredreheadphones.com/gfwlist +server=/cnpmjs.org/127.0.0.1#5335 +ipset=/cnpmjs.org/gfwlist +server=/ipfs.runfission.com/127.0.0.1#5335 +ipset=/ipfs.runfission.com/gfwlist +server=/visa.co.th/127.0.0.1#5335 +ipset=/visa.co.th/gfwlist +server=/beatsdrecheap.com/127.0.0.1#5335 +ipset=/beatsdrecheap.com/gfwlist +server=/82mvmv.com/127.0.0.1#5335 +ipset=/82mvmv.com/gfwlist +server=/wwwhuluplus.com/127.0.0.1#5335 +ipset=/wwwhuluplus.com/gfwlist +server=/beatsdrdreneon.com/127.0.0.1#5335 +ipset=/beatsdrdreneon.com/gfwlist +server=/18yiren.tv/127.0.0.1#5335 +ipset=/18yiren.tv/gfwlist +server=/amazonfctours.com/127.0.0.1#5335 +ipset=/amazonfctours.com/gfwlist +server=/ss2.us/127.0.0.1#5335 +ipset=/ss2.us/gfwlist +server=/hentairead.vip/127.0.0.1#5335 +ipset=/hentairead.vip/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=/bridgestonecntc.com/127.0.0.1#5335 +ipset=/bridgestonecntc.com/gfwlist +server=/beatsdrdre-it.com/127.0.0.1#5335 +ipset=/beatsdrdre-it.com/gfwlist +server=/freehqtube.com/127.0.0.1#5335 +ipset=/freehqtube.com/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=/epochtimes.cz/127.0.0.1#5335 +ipset=/epochtimes.cz/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=/openstreetmap.org/127.0.0.1#5335 +ipset=/openstreetmap.org/gfwlist +server=/smokinmovies.com/127.0.0.1#5335 +ipset=/smokinmovies.com/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=/pornwatchers.com/127.0.0.1#5335 +ipset=/pornwatchers.com/gfwlist +server=/jav168.cc/127.0.0.1#5335 +ipset=/jav168.cc/gfwlist +server=/scholar.google.be/127.0.0.1#5335 +ipset=/scholar.google.be/gfwlist +server=/directvlebanontn.com/127.0.0.1#5335 +ipset=/directvlebanontn.com/gfwlist +server=/battlefield3.com/127.0.0.1#5335 +ipset=/battlefield3.com/gfwlist +server=/beatsbydrew.com/127.0.0.1#5335 +ipset=/beatsbydrew.com/gfwlist +server=/earlyob.com/127.0.0.1#5335 +ipset=/earlyob.com/gfwlist +server=/beatsbydrevipde.com/127.0.0.1#5335 +ipset=/beatsbydrevipde.com/gfwlist +server=/69xporn.com/127.0.0.1#5335 +ipset=/69xporn.com/gfwlist +server=/bstatic.com/127.0.0.1#5335 +ipset=/bstatic.com/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=/beatsbydresingaporesale.com/127.0.0.1#5335 +ipset=/beatsbydresingaporesale.com/gfwlist +server=/littlesexdolls.com/127.0.0.1#5335 +ipset=/littlesexdolls.com/gfwlist +server=/hponlineprinting.com/127.0.0.1#5335 +ipset=/hponlineprinting.com/gfwlist +server=/pokemonplatinum.com/127.0.0.1#5335 +ipset=/pokemonplatinum.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=/beatsbydreshop-uk.com/127.0.0.1#5335 +ipset=/beatsbydreshop-uk.com/gfwlist +server=/nikeby.com/127.0.0.1#5335 +ipset=/nikeby.com/gfwlist +server=/linkedin.sc.omtrdc.net/127.0.0.1#5335 +ipset=/linkedin.sc.omtrdc.net/gfwlist +server=/myfoxhurricane.com/127.0.0.1#5335 +ipset=/myfoxhurricane.com/gfwlist +server=/facebooklivestaging.net/127.0.0.1#5335 +ipset=/facebooklivestaging.net/gfwlist +server=/beatsbydrerealstore.com/127.0.0.1#5335 +ipset=/beatsbydrerealstore.com/gfwlist +server=/xxxbit.com/127.0.0.1#5335 +ipset=/xxxbit.com/gfwlist +server=/privilege.hk/127.0.0.1#5335 +ipset=/privilege.hk/gfwlist +server=/mastercard.it/127.0.0.1#5335 +ipset=/mastercard.it/gfwlist +server=/beatsbydreonlinesale-nz.com/127.0.0.1#5335 +ipset=/beatsbydreonlinesale-nz.com/gfwlist +server=/mozilla.community/127.0.0.1#5335 +ipset=/mozilla.community/gfwlist +server=/kismia.com/127.0.0.1#5335 +ipset=/kismia.com/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=/pussyboy.net/127.0.0.1#5335 +ipset=/pussyboy.net/gfwlist +server=/enfasmart.com/127.0.0.1#5335 +ipset=/enfasmart.com/gfwlist +server=/taste.com.au/127.0.0.1#5335 +ipset=/taste.com.au/gfwlist +server=/porndiscounts.com/127.0.0.1#5335 +ipset=/porndiscounts.com/gfwlist +server=/beatsbydrenorge1.net/127.0.0.1#5335 +ipset=/beatsbydrenorge1.net/gfwlist +server=/beatsbydrenls.com/127.0.0.1#5335 +ipset=/beatsbydrenls.com/gfwlist +server=/nikezoom.com/127.0.0.1#5335 +ipset=/nikezoom.com/gfwlist +server=/lilhumpers.com/127.0.0.1#5335 +ipset=/lilhumpers.com/gfwlist +server=/crypton.co.jp/127.0.0.1#5335 +ipset=/crypton.co.jp/gfwlist +server=/blzddistkr1-a.akamaihd.net/127.0.0.1#5335 +ipset=/blzddistkr1-a.akamaihd.net/gfwlist +server=/beatsbydreirelandsonline.com/127.0.0.1#5335 +ipset=/beatsbydreirelandsonline.com/gfwlist +server=/ign.jp/127.0.0.1#5335 +ipset=/ign.jp/gfwlist +server=/beatsbydreirelandsale.com/127.0.0.1#5335 +ipset=/beatsbydreirelandsale.com/gfwlist +server=/emcs.org/127.0.0.1#5335 +ipset=/emcs.org/gfwlist +server=/paypal-learning.com/127.0.0.1#5335 +ipset=/paypal-learning.com/gfwlist +server=/beatsbydrehut.com/127.0.0.1#5335 +ipset=/beatsbydrehut.com/gfwlist +server=/daylenerio.com/127.0.0.1#5335 +ipset=/daylenerio.com/gfwlist +server=/stackmod.blog/127.0.0.1#5335 +ipset=/stackmod.blog/gfwlist +server=/sextime.tv/127.0.0.1#5335 +ipset=/sextime.tv/gfwlist +server=/yeyuehuachao12.com/127.0.0.1#5335 +ipset=/yeyuehuachao12.com/gfwlist +server=/libsolutions.app/127.0.0.1#5335 +ipset=/libsolutions.app/gfwlist +server=/beatsbydredr.com/127.0.0.1#5335 +ipset=/beatsbydredr.com/gfwlist +server=/f95zone.to/127.0.0.1#5335 +ipset=/f95zone.to/gfwlist +server=/imagetwist.com/127.0.0.1#5335 +ipset=/imagetwist.com/gfwlist +server=/youtube.com.mt/127.0.0.1#5335 +ipset=/youtube.com.mt/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=/blogspot.ba/127.0.0.1#5335 +ipset=/blogspot.ba/gfwlist +server=/beatsbydredealsblackfriday.com/127.0.0.1#5335 +ipset=/beatsbydredealsblackfriday.com/gfwlist +server=/playporngame.com/127.0.0.1#5335 +ipset=/playporngame.com/gfwlist +server=/oxfordbibliographies.com/127.0.0.1#5335 +ipset=/oxfordbibliographies.com/gfwlist +server=/akamak.com/127.0.0.1#5335 +ipset=/akamak.com/gfwlist +server=/buhidoh.net/127.0.0.1#5335 +ipset=/buhidoh.net/gfwlist +server=/spotify.map.fastly.net/127.0.0.1#5335 +ipset=/spotify.map.fastly.net/gfwlist +server=/braintreegateway.tv/127.0.0.1#5335 +ipset=/braintreegateway.tv/gfwlist +server=/fadebook.com/127.0.0.1#5335 +ipset=/fadebook.com/gfwlist +server=/bmw-routes.com/127.0.0.1#5335 +ipset=/bmw-routes.com/gfwlist +server=/beatsbydreblackfriday2013.com/127.0.0.1#5335 +ipset=/beatsbydreblackfriday2013.com/gfwlist +server=/hnntube.com/127.0.0.1#5335 +ipset=/hnntube.com/gfwlist +server=/boypost.com/127.0.0.1#5335 +ipset=/boypost.com/gfwlist +server=/beatsbydre4usales.com/127.0.0.1#5335 +ipset=/beatsbydre4usales.com/gfwlist +server=/beatsbydre411.com/127.0.0.1#5335 +ipset=/beatsbydre411.com/gfwlist +server=/rsc.org/127.0.0.1#5335 +ipset=/rsc.org/gfwlist +server=/mrchewsasianbeaver.com/127.0.0.1#5335 +ipset=/mrchewsasianbeaver.com/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=/beatsbydre-mall.com/127.0.0.1#5335 +ipset=/beatsbydre-mall.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=/88square.com/127.0.0.1#5335 +ipset=/88square.com/gfwlist +server=/69gayporno.com/127.0.0.1#5335 +ipset=/69gayporno.com/gfwlist +server=/beatsbydre-beatsheadphone.com/127.0.0.1#5335 +ipset=/beatsbydre-beatsheadphone.com/gfwlist +server=/avh.world/127.0.0.1#5335 +ipset=/avh.world/gfwlist +server=/bdn.dev/127.0.0.1#5335 +ipset=/bdn.dev/gfwlist +server=/alphaporno.com/127.0.0.1#5335 +ipset=/alphaporno.com/gfwlist +server=/mastercard.nl/127.0.0.1#5335 +ipset=/mastercard.nl/gfwlist +server=/miniitalianjob.com/127.0.0.1#5335 +ipset=/miniitalianjob.com/gfwlist +server=/cuckoldfuck.com/127.0.0.1#5335 +ipset=/cuckoldfuck.com/gfwlist +server=/volvobuses.com.kw/127.0.0.1#5335 +ipset=/volvobuses.com.kw/gfwlist +server=/favjapaneseporn.com/127.0.0.1#5335 +ipset=/favjapaneseporn.com/gfwlist +server=/cbsivideo.com/127.0.0.1#5335 +ipset=/cbsivideo.com/gfwlist +server=/businessweek.com/127.0.0.1#5335 +ipset=/businessweek.com/gfwlist +server=/beatsbydrdre-store.com/127.0.0.1#5335 +ipset=/beatsbydrdre-store.com/gfwlist +server=/forgecdn.net/127.0.0.1#5335 +ipset=/forgecdn.net/gfwlist +server=/beatsbydrdre-online.com/127.0.0.1#5335 +ipset=/beatsbydrdre-online.com/gfwlist +server=/graph.org/127.0.0.1#5335 +ipset=/graph.org/gfwlist +server=/ikea.ua/127.0.0.1#5335 +ipset=/ikea.ua/gfwlist +server=/pokemonmysterydungeon.com/127.0.0.1#5335 +ipset=/pokemonmysterydungeon.com/gfwlist +server=/volvobuses.co.uk/127.0.0.1#5335 +ipset=/volvobuses.co.uk/gfwlist +server=/aga-expo.com/127.0.0.1#5335 +ipset=/aga-expo.com/gfwlist +server=/beatsaudiobydre.com/127.0.0.1#5335 +ipset=/beatsaudiobydre.com/gfwlist +server=/jfrog.org/127.0.0.1#5335 +ipset=/jfrog.org/gfwlist +server=/beatsaudifonos.com/127.0.0.1#5335 +ipset=/beatsaudifonos.com/gfwlist +server=/sexysexdoll.com/127.0.0.1#5335 +ipset=/sexysexdoll.com/gfwlist +server=/fetishfishcams.com/127.0.0.1#5335 +ipset=/fetishfishcams.com/gfwlist +server=/marioandluigidreamteam.com/127.0.0.1#5335 +ipset=/marioandluigidreamteam.com/gfwlist +server=/xn--hxtr4rozx.xn--czr694b/127.0.0.1#5335 +ipset=/xn--hxtr4rozx.xn--czr694b/gfwlist +server=/beats4.net/127.0.0.1#5335 +ipset=/beats4.net/gfwlist +server=/igsonar.com/127.0.0.1#5335 +ipset=/igsonar.com/gfwlist +server=/beats123.com/127.0.0.1#5335 +ipset=/beats123.com/gfwlist +server=/javfilms.com/127.0.0.1#5335 +ipset=/javfilms.com/gfwlist +server=/beats1.cc/127.0.0.1#5335 +ipset=/beats1.cc/gfwlist +server=/nineentertainmentco.com.au/127.0.0.1#5335 +ipset=/nineentertainmentco.com.au/gfwlist +server=/visa.mq/127.0.0.1#5335 +ipset=/visa.mq/gfwlist +server=/bmwmperformance.com/127.0.0.1#5335 +ipset=/bmwmperformance.com/gfwlist +server=/lordofultima.com/127.0.0.1#5335 +ipset=/lordofultima.com/gfwlist +server=/cloudflare.tv/127.0.0.1#5335 +ipset=/cloudflare.tv/gfwlist +server=/mini.bg/127.0.0.1#5335 +ipset=/mini.bg/gfwlist +server=/hugedildo.com/127.0.0.1#5335 +ipset=/hugedildo.com/gfwlist +server=/connectionsacademy.com/127.0.0.1#5335 +ipset=/connectionsacademy.com/gfwlist +server=/citasecuador.com/127.0.0.1#5335 +ipset=/citasecuador.com/gfwlist +server=/cartoonpornvideos.com/127.0.0.1#5335 +ipset=/cartoonpornvideos.com/gfwlist +server=/mini-abudhabi.com/127.0.0.1#5335 +ipset=/mini-abudhabi.com/gfwlist +server=/beats-bydreoutletssale.net/127.0.0.1#5335 +ipset=/beats-bydreoutletssale.net/gfwlist +server=/hibdontire.com/127.0.0.1#5335 +ipset=/hibdontire.com/gfwlist +server=/beats-bydreoutletsale.com/127.0.0.1#5335 +ipset=/beats-bydreoutletsale.com/gfwlist +server=/minimontroyal.com/127.0.0.1#5335 +ipset=/minimontroyal.com/gfwlist +server=/8111y.top/127.0.0.1#5335 +ipset=/8111y.top/gfwlist +server=/nikeshoxsale.com/127.0.0.1#5335 +ipset=/nikeshoxsale.com/gfwlist +server=/beats-bydrdre.net/127.0.0.1#5335 +ipset=/beats-bydrdre.net/gfwlist +server=/beats-by-dre-australia.com/127.0.0.1#5335 +ipset=/beats-by-dre-australia.com/gfwlist +server=/volvotrucks.dk/127.0.0.1#5335 +ipset=/volvotrucks.dk/gfwlist +server=/9zipai.net/127.0.0.1#5335 +ipset=/9zipai.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=/porn7.xxx/127.0.0.1#5335 +ipset=/porn7.xxx/gfwlist +server=/beatmonstersaustralia.net/127.0.0.1#5335 +ipset=/beatmonstersaustralia.net/gfwlist +server=/lxxlxx.com/127.0.0.1#5335 +ipset=/lxxlxx.com/gfwlist +server=/beatbydremonster.com/127.0.0.1#5335 +ipset=/beatbydremonster.com/gfwlist +server=/beatbydre2013.com/127.0.0.1#5335 +ipset=/beatbydre2013.com/gfwlist +server=/getws1.com/127.0.0.1#5335 +ipset=/getws1.com/gfwlist +server=/baxsound.com/127.0.0.1#5335 +ipset=/baxsound.com/gfwlist +server=/auricularesbeatsmarkt.com/127.0.0.1#5335 +ipset=/auricularesbeatsmarkt.com/gfwlist +server=/nudegfporn.com/127.0.0.1#5335 +ipset=/nudegfporn.com/gfwlist +server=/epochbuy.com/127.0.0.1#5335 +ipset=/epochbuy.com/gfwlist +server=/faceboock.com/127.0.0.1#5335 +ipset=/faceboock.com/gfwlist +server=/anandtech.com/127.0.0.1#5335 +ipset=/anandtech.com/gfwlist +server=/audiobeatsbydre.com/127.0.0.1#5335 +ipset=/audiobeatsbydre.com/gfwlist +server=/app-store.wang/127.0.0.1#5335 +ipset=/app-store.wang/gfwlist +server=/historyofdota.net/127.0.0.1#5335 +ipset=/historyofdota.net/gfwlist +server=/foxrelease.com/127.0.0.1#5335 +ipset=/foxrelease.com/gfwlist +server=/stepdaughter.love/127.0.0.1#5335 +ipset=/stepdaughter.love/gfwlist +server=/alphera-finance.co.in/127.0.0.1#5335 +ipset=/alphera-finance.co.in/gfwlist +server=/farfetch-contents.com/127.0.0.1#5335 +ipset=/farfetch-contents.com/gfwlist +server=/gay1069sex.com/127.0.0.1#5335 +ipset=/gay1069sex.com/gfwlist +server=/aws-iot-hackathon.com/127.0.0.1#5335 +ipset=/aws-iot-hackathon.com/gfwlist +server=/volvo-truck.nl/127.0.0.1#5335 +ipset=/volvo-truck.nl/gfwlist +server=/aanaan.com/127.0.0.1#5335 +ipset=/aanaan.com/gfwlist +server=/pearsonassessment.no/127.0.0.1#5335 +ipset=/pearsonassessment.no/gfwlist +server=/adobelogin.com/127.0.0.1#5335 +ipset=/adobelogin.com/gfwlist +server=/bridgestone-brand.com/127.0.0.1#5335 +ipset=/bridgestone-brand.com/gfwlist +server=/bmw-motorrad.com.do/127.0.0.1#5335 +ipset=/bmw-motorrad.com.do/gfwlist +server=/2drdrebeats.com/127.0.0.1#5335 +ipset=/2drdrebeats.com/gfwlist +server=/ultrayoungsex.com/127.0.0.1#5335 +ipset=/ultrayoungsex.com/gfwlist +server=/allpasswords.com/127.0.0.1#5335 +ipset=/allpasswords.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=/caribbeancom.com/127.0.0.1#5335 +ipset=/caribbeancom.com/gfwlist +server=/voaswahili.com/127.0.0.1#5335 +ipset=/voaswahili.com/gfwlist +server=/fanqianglu.com/127.0.0.1#5335 +ipset=/fanqianglu.com/gfwlist +server=/pearsonplaces.com.au/127.0.0.1#5335 +ipset=/pearsonplaces.com.au/gfwlist +server=/starwarsfallenorder.com/127.0.0.1#5335 +ipset=/starwarsfallenorder.com/gfwlist +server=/womenwill.mx/127.0.0.1#5335 +ipset=/womenwill.mx/gfwlist +server=/bizographics.com/127.0.0.1#5335 +ipset=/bizographics.com/gfwlist +server=/certum.pl/127.0.0.1#5335 +ipset=/certum.pl/gfwlist +server=/disneyplus.com/127.0.0.1#5335 +ipset=/disneyplus.com/gfwlist +server=/bluffyporn.com/127.0.0.1#5335 +ipset=/bluffyporn.com/gfwlist +server=/terrlficdates.com/127.0.0.1#5335 +ipset=/terrlficdates.com/gfwlist +server=/gameon-masters.com/127.0.0.1#5335 +ipset=/gameon-masters.com/gfwlist +server=/associates-amazon.com/127.0.0.1#5335 +ipset=/associates-amazon.com/gfwlist +server=/3xplanet.com/127.0.0.1#5335 +ipset=/3xplanet.com/gfwlist +server=/amzn.com/127.0.0.1#5335 +ipset=/amzn.com/gfwlist +server=/sex021.net/127.0.0.1#5335 +ipset=/sex021.net/gfwlist +server=/ulrichsweb.serialssolutions.com/127.0.0.1#5335 +ipset=/ulrichsweb.serialssolutions.com/gfwlist +server=/espn.api.edge.bamgrid.com/127.0.0.1#5335 +ipset=/espn.api.edge.bamgrid.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=/amazonpay.com/127.0.0.1#5335 +ipset=/amazonpay.com/gfwlist +server=/battlefield4.com/127.0.0.1#5335 +ipset=/battlefield4.com/gfwlist +server=/opencreate.org/127.0.0.1#5335 +ipset=/opencreate.org/gfwlist +server=/hentaivvz.com/127.0.0.1#5335 +ipset=/hentaivvz.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=/amazonimages.com/127.0.0.1#5335 +ipset=/amazonimages.com/gfwlist +server=/ipfs-gateway.cloud/127.0.0.1#5335 +ipset=/ipfs-gateway.cloud/gfwlist +server=/iwork.com/127.0.0.1#5335 +ipset=/iwork.com/gfwlist +server=/amazonbusiness.org/127.0.0.1#5335 +ipset=/amazonbusiness.org/gfwlist +server=/hentai-img.com/127.0.0.1#5335 +ipset=/hentai-img.com/gfwlist +server=/gendai.net/127.0.0.1#5335 +ipset=/gendai.net/gfwlist +server=/eubluecardvisa.com/127.0.0.1#5335 +ipset=/eubluecardvisa.com/gfwlist +server=/pornproxy.app/127.0.0.1#5335 +ipset=/pornproxy.app/gfwlist +server=/researchgate.net/127.0.0.1#5335 +ipset=/researchgate.net/gfwlist +server=/bestbuyethics.com/127.0.0.1#5335 +ipset=/bestbuyethics.com/gfwlist +server=/amazon.com.au/127.0.0.1#5335 +ipset=/amazon.com.au/gfwlist +server=/imageworks.com/127.0.0.1#5335 +ipset=/imageworks.com/gfwlist +server=/youtube.co.il/127.0.0.1#5335 +ipset=/youtube.co.il/gfwlist +server=/sony.sk/127.0.0.1#5335 +ipset=/sony.sk/gfwlist +server=/aboutamazon.in/127.0.0.1#5335 +ipset=/aboutamazon.in/gfwlist +server=/aboutamazon.de/127.0.0.1#5335 +ipset=/aboutamazon.de/gfwlist +server=/rthk.hk/127.0.0.1#5335 +ipset=/rthk.hk/gfwlist +server=/aboutamazon.com.au/127.0.0.1#5335 +ipset=/aboutamazon.com.au/gfwlist +server=/bloombergenvironment.com/127.0.0.1#5335 +ipset=/bloombergenvironment.com/gfwlist +server=/wfm.com/127.0.0.1#5335 +ipset=/wfm.com/gfwlist +server=/heydoga.com/127.0.0.1#5335 +ipset=/heydoga.com/gfwlist +server=/pearson.com.uy/127.0.0.1#5335 +ipset=/pearson.com.uy/gfwlist +server=/demfhz.xyz/127.0.0.1#5335 +ipset=/demfhz.xyz/gfwlist +server=/bridgestonecomercial.cl/127.0.0.1#5335 +ipset=/bridgestonecomercial.cl/gfwlist +server=/libsolutions.domains/127.0.0.1#5335 +ipset=/libsolutions.domains/gfwlist +server=/zohomeetups.com/127.0.0.1#5335 +ipset=/zohomeetups.com/gfwlist +server=/mastercard.com.vn/127.0.0.1#5335 +ipset=/mastercard.com.vn/gfwlist +server=/kindle.co.uk/127.0.0.1#5335 +ipset=/kindle.co.uk/gfwlist +server=/containersonaws.com/127.0.0.1#5335 +ipset=/containersonaws.com/gfwlist +server=/cloudfront.net/127.0.0.1#5335 +ipset=/cloudfront.net/gfwlist +server=/gaypornlinks.com/127.0.0.1#5335 +ipset=/gaypornlinks.com/gfwlist +server=/monsterbeatspascher.net/127.0.0.1#5335 +ipset=/monsterbeatspascher.net/gfwlist +server=/hulu.playback.edge.bamgrid.com/127.0.0.1#5335 +ipset=/hulu.playback.edge.bamgrid.com/gfwlist +server=/bcbits.com/127.0.0.1#5335 +ipset=/bcbits.com/gfwlist +server=/appl.com/127.0.0.1#5335 +ipset=/appl.com/gfwlist +server=/awseducate.com/127.0.0.1#5335 +ipset=/awseducate.com/gfwlist +server=/durex.jp/127.0.0.1#5335 +ipset=/durex.jp/gfwlist +server=/kinkbook.com/127.0.0.1#5335 +ipset=/kinkbook.com/gfwlist +server=/origin-a.akamaihd.net/127.0.0.1#5335 +ipset=/origin-a.akamaihd.net/gfwlist +server=/alfera.in/127.0.0.1#5335 +ipset=/alfera.in/gfwlist +server=/mhradio.org/127.0.0.1#5335 +ipset=/mhradio.org/gfwlist +server=/gmail.com/127.0.0.1#5335 +ipset=/gmail.com/gfwlist +server=/minidowntown.ca/127.0.0.1#5335 +ipset=/minidowntown.ca/gfwlist +server=/ikea.de/127.0.0.1#5335 +ipset=/ikea.de/gfwlist +server=/uun92.com/127.0.0.1#5335 +ipset=/uun92.com/gfwlist +server=/visa.com.ua/127.0.0.1#5335 +ipset=/visa.com.ua/gfwlist +server=/ebayclassifieds.org/127.0.0.1#5335 +ipset=/ebayclassifieds.org/gfwlist +server=/product.co.jp/127.0.0.1#5335 +ipset=/product.co.jp/gfwlist +server=/amazonses.com/127.0.0.1#5335 +ipset=/amazonses.com/gfwlist +server=/cheapbeatsdrestudios.com/127.0.0.1#5335 +ipset=/cheapbeatsdrestudios.com/gfwlist +server=/amazonaws.tv/127.0.0.1#5335 +ipset=/amazonaws.tv/gfwlist +server=/6japaneseporn.com/127.0.0.1#5335 +ipset=/6japaneseporn.com/gfwlist +server=/amazonaws-china.com/127.0.0.1#5335 +ipset=/amazonaws-china.com/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=/69flv.com/127.0.0.1#5335 +ipset=/69flv.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=/alibabacloud.com.sg/127.0.0.1#5335 +ipset=/alibabacloud.com.sg/gfwlist +server=/nintendoswitch.com/127.0.0.1#5335 +ipset=/nintendoswitch.com/gfwlist +server=/b-ok.asia/127.0.0.1#5335 +ipset=/b-ok.asia/gfwlist +server=/medrxiv.org/127.0.0.1#5335 +ipset=/medrxiv.org/gfwlist +server=/fetlife.com/127.0.0.1#5335 +ipset=/fetlife.com/gfwlist +server=/fzdshare.net/127.0.0.1#5335 +ipset=/fzdshare.net/gfwlist +server=/omscr.com/127.0.0.1#5335 +ipset=/omscr.com/gfwlist +server=/pearsonclinical.com.au/127.0.0.1#5335 +ipset=/pearsonclinical.com.au/gfwlist +server=/alibabacloud.co.in/127.0.0.1#5335 +ipset=/alibabacloud.co.in/gfwlist +server=/hptechventures.com/127.0.0.1#5335 +ipset=/hptechventures.com/gfwlist +server=/sonyclassics.com/127.0.0.1#5335 +ipset=/sonyclassics.com/gfwlist +server=/rexcha.com/127.0.0.1#5335 +ipset=/rexcha.com/gfwlist +server=/redditstatic.com/127.0.0.1#5335 +ipset=/redditstatic.com/gfwlist +server=/amateurwifevideos.com/127.0.0.1#5335 +ipset=/amateurwifevideos.com/gfwlist +server=/nikefootballgloves.com/127.0.0.1#5335 +ipset=/nikefootballgloves.com/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=/sex-ly.com/127.0.0.1#5335 +ipset=/sex-ly.com/gfwlist +server=/youtube.com.ar/127.0.0.1#5335 +ipset=/youtube.com.ar/gfwlist +server=/juggsjoy.com/127.0.0.1#5335 +ipset=/juggsjoy.com/gfwlist +server=/ntd.tv/127.0.0.1#5335 +ipset=/ntd.tv/gfwlist +server=/motolia.com/127.0.0.1#5335 +ipset=/motolia.com/gfwlist +server=/wife-home-videos.com/127.0.0.1#5335 +ipset=/wife-home-videos.com/gfwlist +server=/netname.com.br/127.0.0.1#5335 +ipset=/netname.com.br/gfwlist +server=/fptolia.com/127.0.0.1#5335 +ipset=/fptolia.com/gfwlist +server=/deviantclip.com/127.0.0.1#5335 +ipset=/deviantclip.com/gfwlist +server=/fotolia-noticias.com/127.0.0.1#5335 +ipset=/fotolia-noticias.com/gfwlist +server=/worldflipper.akamaized.net/127.0.0.1#5335 +ipset=/worldflipper.akamaized.net/gfwlist +server=/fonolia.com/127.0.0.1#5335 +ipset=/fonolia.com/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=/foftolia.com/127.0.0.1#5335 +ipset=/foftolia.com/gfwlist +server=/fiotolia.com/127.0.0.1#5335 +ipset=/fiotolia.com/gfwlist +server=/visa.com.bz/127.0.0.1#5335 +ipset=/visa.com.bz/gfwlist +server=/webex.co.nz/127.0.0.1#5335 +ipset=/webex.co.nz/gfwlist +server=/nexttv.com.tw/127.0.0.1#5335 +ipset=/nexttv.com.tw/gfwlist +server=/adobeccstatic.com/127.0.0.1#5335 +ipset=/adobeccstatic.com/gfwlist +server=/worldsecureemail.com/127.0.0.1#5335 +ipset=/worldsecureemail.com/gfwlist +server=/ettoday.net/127.0.0.1#5335 +ipset=/ettoday.net/gfwlist +server=/dirtyhomefuck.com/127.0.0.1#5335 +ipset=/dirtyhomefuck.com/gfwlist +server=/battlefrontii.com/127.0.0.1#5335 +ipset=/battlefrontii.com/gfwlist +server=/imagineecommerce.com/127.0.0.1#5335 +ipset=/imagineecommerce.com/gfwlist +server=/wiz-s.jp/127.0.0.1#5335 +ipset=/wiz-s.jp/gfwlist +server=/zee.com/127.0.0.1#5335 +ipset=/zee.com/gfwlist +server=/fuckingthreesome.com/127.0.0.1#5335 +ipset=/fuckingthreesome.com/gfwlist +server=/tx.me/127.0.0.1#5335 +ipset=/tx.me/gfwlist +server=/kidgrid.tv/127.0.0.1#5335 +ipset=/kidgrid.tv/gfwlist +server=/porno-erotica.com/127.0.0.1#5335 +ipset=/porno-erotica.com/gfwlist +server=/flyingjizz.com/127.0.0.1#5335 +ipset=/flyingjizz.com/gfwlist +server=/pornobrasileiro.xyz/127.0.0.1#5335 +ipset=/pornobrasileiro.xyz/gfwlist +server=/microsoft.md/127.0.0.1#5335 +ipset=/microsoft.md/gfwlist +server=/bestfreecams.club/127.0.0.1#5335 +ipset=/bestfreecams.club/gfwlist +server=/9nation.com.au/127.0.0.1#5335 +ipset=/9nation.com.au/gfwlist +server=/watersex.com/127.0.0.1#5335 +ipset=/watersex.com/gfwlist +server=/mailonline.co.uk/127.0.0.1#5335 +ipset=/mailonline.co.uk/gfwlist +server=/adobetechcomm.com/127.0.0.1#5335 +ipset=/adobetechcomm.com/gfwlist +server=/adobestock.com/127.0.0.1#5335 +ipset=/adobestock.com/gfwlist +server=/jinnaju.com/127.0.0.1#5335 +ipset=/jinnaju.com/gfwlist +server=/sci-hub.it.nf/127.0.0.1#5335 +ipset=/sci-hub.it.nf/gfwlist +server=/bmw-motorrad.tw/127.0.0.1#5335 +ipset=/bmw-motorrad.tw/gfwlist +server=/albeats.com/127.0.0.1#5335 +ipset=/albeats.com/gfwlist +server=/gaypornonly.com/127.0.0.1#5335 +ipset=/gaypornonly.com/gfwlist +server=/adobelanding.com/127.0.0.1#5335 +ipset=/adobelanding.com/gfwlist +server=/adobejanus.com/127.0.0.1#5335 +ipset=/adobejanus.com/gfwlist +server=/adultvideodump.com/127.0.0.1#5335 +ipset=/adultvideodump.com/gfwlist +server=/google.co.zm/127.0.0.1#5335 +ipset=/google.co.zm/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=/mastercard.com.bz/127.0.0.1#5335 +ipset=/mastercard.com.bz/gfwlist +server=/adobedemo.com/127.0.0.1#5335 +ipset=/adobedemo.com/gfwlist +server=/facebopk.com/127.0.0.1#5335 +ipset=/facebopk.com/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=/indianpornvideo.org/127.0.0.1#5335 +ipset=/indianpornvideo.org/gfwlist +server=/voachinese.com/127.0.0.1#5335 +ipset=/voachinese.com/gfwlist +server=/indianfuck2.com/127.0.0.1#5335 +ipset=/indianfuck2.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=/adobe.ly/127.0.0.1#5335 +ipset=/adobe.ly/gfwlist +server=/mymusclevideo.com/127.0.0.1#5335 +ipset=/mymusclevideo.com/gfwlist +server=/targetimg1.com/127.0.0.1#5335 +ipset=/targetimg1.com/gfwlist +server=/visa.com.pr/127.0.0.1#5335 +ipset=/visa.com.pr/gfwlist +server=/elderscrolls.com/127.0.0.1#5335 +ipset=/elderscrolls.com/gfwlist +server=/scholar.google.com.tr/127.0.0.1#5335 +ipset=/scholar.google.com.tr/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=/allpornsitespass.com/127.0.0.1#5335 +ipset=/allpornsitespass.com/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=/vod-dash-ww-live.akamaized.net/127.0.0.1#5335 +ipset=/vod-dash-ww-live.akamaized.net/gfwlist +server=/onxxxtube.com/127.0.0.1#5335 +ipset=/onxxxtube.com/gfwlist +server=/goldjizz.com/127.0.0.1#5335 +ipset=/goldjizz.com/gfwlist +server=/electronicarts.com/127.0.0.1#5335 +ipset=/electronicarts.com/gfwlist +server=/advertising.adobe.com/127.0.0.1#5335 +ipset=/advertising.adobe.com/gfwlist +server=/acer.com/127.0.0.1#5335 +ipset=/acer.com/gfwlist +server=/ikea.co.th/127.0.0.1#5335 +ipset=/ikea.co.th/gfwlist +server=/zsh.org/127.0.0.1#5335 +ipset=/zsh.org/gfwlist +server=/readmoo.com/127.0.0.1#5335 +ipset=/readmoo.com/gfwlist +server=/unpkg.com/127.0.0.1#5335 +ipset=/unpkg.com/gfwlist +server=/sqlite.org/127.0.0.1#5335 +ipset=/sqlite.org/gfwlist +server=/maddenseason.org/127.0.0.1#5335 +ipset=/maddenseason.org/gfwlist +server=/r-project.org/127.0.0.1#5335 +ipset=/r-project.org/gfwlist +server=/betterhdporn.com/127.0.0.1#5335 +ipset=/betterhdporn.com/gfwlist +server=/macappsto.re/127.0.0.1#5335 +ipset=/macappsto.re/gfwlist +server=/phantomjs.org/127.0.0.1#5335 +ipset=/phantomjs.org/gfwlist +server=/im-apps.net/127.0.0.1#5335 +ipset=/im-apps.net/gfwlist +server=/gayfuror.com/127.0.0.1#5335 +ipset=/gayfuror.com/gfwlist +server=/pornmonde.com/127.0.0.1#5335 +ipset=/pornmonde.com/gfwlist +server=/openai.com/127.0.0.1#5335 +ipset=/openai.com/gfwlist +server=/porncomixonline.net/127.0.0.1#5335 +ipset=/porncomixonline.net/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=/exploitedcollegegirls.com/127.0.0.1#5335 +ipset=/exploitedcollegegirls.com/gfwlist +server=/lua.org/127.0.0.1#5335 +ipset=/lua.org/gfwlist +server=/visasignaturehotels.com/127.0.0.1#5335 +ipset=/visasignaturehotels.com/gfwlist +server=/js.org/127.0.0.1#5335 +ipset=/js.org/gfwlist +server=/mastercard.co.ve/127.0.0.1#5335 +ipset=/mastercard.co.ve/gfwlist +server=/ebaysohos.com/127.0.0.1#5335 +ipset=/ebaysohos.com/gfwlist +server=/nuespournous.com/127.0.0.1#5335 +ipset=/nuespournous.com/gfwlist +server=/deepfreeze.com.br/127.0.0.1#5335 +ipset=/deepfreeze.com.br/gfwlist +server=/pypi.io/127.0.0.1#5335 +ipset=/pypi.io/gfwlist +server=/gnu.org/127.0.0.1#5335 +ipset=/gnu.org/gfwlist +server=/icloudmusic.net/127.0.0.1#5335 +ipset=/icloudmusic.net/gfwlist +server=/juicytwink.com/127.0.0.1#5335 +ipset=/juicytwink.com/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=/meetandfuck.games/127.0.0.1#5335 +ipset=/meetandfuck.games/gfwlist +server=/steamygamer.com/127.0.0.1#5335 +ipset=/steamygamer.com/gfwlist +server=/bdsmlr.com/127.0.0.1#5335 +ipset=/bdsmlr.com/gfwlist +server=/apache.org/127.0.0.1#5335 +ipset=/apache.org/gfwlist +server=/mini.com.mt/127.0.0.1#5335 +ipset=/mini.com.mt/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=/bmw-motorrad.ma/127.0.0.1#5335 +ipset=/bmw-motorrad.ma/gfwlist +server=/xda-cdn.com/127.0.0.1#5335 +ipset=/xda-cdn.com/gfwlist +server=/intelnet.component/127.0.0.1#5335 +ipset=/intelnet.component/gfwlist +server=/bukkake-jav.com/127.0.0.1#5335 +ipset=/bukkake-jav.com/gfwlist +server=/adult.toonsearch.net/127.0.0.1#5335 +ipset=/adult.toonsearch.net/gfwlist +server=/kav.tw/127.0.0.1#5335 +ipset=/kav.tw/gfwlist +server=/dealtime.com/127.0.0.1#5335 +ipset=/dealtime.com/gfwlist +server=/girlfriendvideos.com/127.0.0.1#5335 +ipset=/girlfriendvideos.com/gfwlist +server=/unity3d.com/127.0.0.1#5335 +ipset=/unity3d.com/gfwlist +server=/disp.cc/127.0.0.1#5335 +ipset=/disp.cc/gfwlist +server=/xn--yf1at58a.com/127.0.0.1#5335 +ipset=/xn--yf1at58a.com/gfwlist +server=/dlsitenews.com/127.0.0.1#5335 +ipset=/dlsitenews.com/gfwlist +server=/booksc.xyz/127.0.0.1#5335 +ipset=/booksc.xyz/gfwlist +server=/ampproject.com/127.0.0.1#5335 +ipset=/ampproject.com/gfwlist +server=/applecare.cc/127.0.0.1#5335 +ipset=/applecare.cc/gfwlist +server=/fstopimages.com/127.0.0.1#5335 +ipset=/fstopimages.com/gfwlist +server=/camelotherald.net/127.0.0.1#5335 +ipset=/camelotherald.net/gfwlist +server=/kernel.org/127.0.0.1#5335 +ipset=/kernel.org/gfwlist +server=/dropboxstatic.com/127.0.0.1#5335 +ipset=/dropboxstatic.com/gfwlist +server=/privilege.tw/127.0.0.1#5335 +ipset=/privilege.tw/gfwlist +server=/android.com/127.0.0.1#5335 +ipset=/android.com/gfwlist +server=/batsa.me/127.0.0.1#5335 +ipset=/batsa.me/gfwlist +server=/vanish.fr/127.0.0.1#5335 +ipset=/vanish.fr/gfwlist +server=/alphera.net/127.0.0.1#5335 +ipset=/alphera.net/gfwlist +server=/wifevideos.net/127.0.0.1#5335 +ipset=/wifevideos.net/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=/intel.sc/127.0.0.1#5335 +ipset=/intel.sc/gfwlist +server=/stackoverflowcareers.com/127.0.0.1#5335 +ipset=/stackoverflowcareers.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=/ecuatorianas.best/127.0.0.1#5335 +ipset=/ecuatorianas.best/gfwlist +server=/stackoverflow.co/127.0.0.1#5335 +ipset=/stackoverflow.co/gfwlist +server=/stackoverflow.blog/127.0.0.1#5335 +ipset=/stackoverflow.blog/gfwlist +server=/connectedcommerce.com/127.0.0.1#5335 +ipset=/connectedcommerce.com/gfwlist +server=/orsm.net/127.0.0.1#5335 +ipset=/orsm.net/gfwlist +server=/paypal-business.com/127.0.0.1#5335 +ipset=/paypal-business.com/gfwlist +server=/momoniji.com/127.0.0.1#5335 +ipset=/momoniji.com/gfwlist +server=/homegrownfreaks.net/127.0.0.1#5335 +ipset=/homegrownfreaks.net/gfwlist +server=/youtube.co.ke/127.0.0.1#5335 +ipset=/youtube.co.ke/gfwlist +server=/goodporn.to/127.0.0.1#5335 +ipset=/goodporn.to/gfwlist +server=/kindle.fr/127.0.0.1#5335 +ipset=/kindle.fr/gfwlist +server=/javher.com/127.0.0.1#5335 +ipset=/javher.com/gfwlist +server=/pypi.org/127.0.0.1#5335 +ipset=/pypi.org/gfwlist +server=/lustery.com/127.0.0.1#5335 +ipset=/lustery.com/gfwlist +server=/polymerproject.org/127.0.0.1#5335 +ipset=/polymerproject.org/gfwlist +server=/facebook-covid-19.com/127.0.0.1#5335 +ipset=/facebook-covid-19.com/gfwlist +server=/hairy-amateurs.com/127.0.0.1#5335 +ipset=/hairy-amateurs.com/gfwlist +server=/jetbrains.space/127.0.0.1#5335 +ipset=/jetbrains.space/gfwlist +server=/hinet.net/127.0.0.1#5335 +ipset=/hinet.net/gfwlist +server=/perl.org/127.0.0.1#5335 +ipset=/perl.org/gfwlist +server=/maya5.net/127.0.0.1#5335 +ipset=/maya5.net/gfwlist +server=/disney.nl/127.0.0.1#5335 +ipset=/disney.nl/gfwlist +server=/garena.tv/127.0.0.1#5335 +ipset=/garena.tv/gfwlist +server=/hentaizz.net/127.0.0.1#5335 +ipset=/hentaizz.net/gfwlist +server=/mongodb.com/127.0.0.1#5335 +ipset=/mongodb.com/gfwlist +server=/eroan.xyz/127.0.0.1#5335 +ipset=/eroan.xyz/gfwlist +server=/ikea.si/127.0.0.1#5335 +ipset=/ikea.si/gfwlist +server=/visa.co.ke/127.0.0.1#5335 +ipset=/visa.co.ke/gfwlist +server=/volvotrucks.by/127.0.0.1#5335 +ipset=/volvotrucks.by/gfwlist +server=/babylongirls.co.uk/127.0.0.1#5335 +ipset=/babylongirls.co.uk/gfwlist +server=/cairn.info/127.0.0.1#5335 +ipset=/cairn.info/gfwlist +server=/alphera.in/127.0.0.1#5335 +ipset=/alphera.in/gfwlist +server=/alpherafs.com.hk/127.0.0.1#5335 +ipset=/alpherafs.com.hk/gfwlist +server=/volvotrucks.fr/127.0.0.1#5335 +ipset=/volvotrucks.fr/gfwlist +server=/vscode-unpkg.net/127.0.0.1#5335 +ipset=/vscode-unpkg.net/gfwlist +server=/vfsforgit.org/127.0.0.1#5335 +ipset=/vfsforgit.org/gfwlist +server=/nexpart.tv/127.0.0.1#5335 +ipset=/nexpart.tv/gfwlist +server=/visualstudio.co.uk/127.0.0.1#5335 +ipset=/visualstudio.co.uk/gfwlist +server=/volvogroup.se/127.0.0.1#5335 +ipset=/volvogroup.se/gfwlist +server=/visualstudio.co/127.0.0.1#5335 +ipset=/visualstudio.co/gfwlist +server=/bmw-motorrad.cr/127.0.0.1#5335 +ipset=/bmw-motorrad.cr/gfwlist +server=/blacked.com/127.0.0.1#5335 +ipset=/blacked.com/gfwlist +server=/escape.com.au/127.0.0.1#5335 +ipset=/escape.com.au/gfwlist +server=/bag-glasses1.com/127.0.0.1#5335 +ipset=/bag-glasses1.com/gfwlist +server=/cloudflaretest.com/127.0.0.1#5335 +ipset=/cloudflaretest.com/gfwlist +server=/microsoftsilverlight.org/127.0.0.1#5335 +ipset=/microsoftsilverlight.org/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=/bmw.re/127.0.0.1#5335 +ipset=/bmw.re/gfwlist +server=/analtime.org/127.0.0.1#5335 +ipset=/analtime.org/gfwlist +server=/nikelives.com/127.0.0.1#5335 +ipset=/nikelives.com/gfwlist +server=/google.com.sa/127.0.0.1#5335 +ipset=/google.com.sa/gfwlist +server=/camelotherald.com/127.0.0.1#5335 +ipset=/camelotherald.com/gfwlist +server=/gay4tube.com/127.0.0.1#5335 +ipset=/gay4tube.com/gfwlist +server=/d29vzk4ow07wi7.cloudfront.net/127.0.0.1#5335 +ipset=/d29vzk4ow07wi7.cloudfront.net/gfwlist +server=/av-th.net/127.0.0.1#5335 +ipset=/av-th.net/gfwlist +server=/adobespark.com/127.0.0.1#5335 +ipset=/adobespark.com/gfwlist +server=/jfrog.com/127.0.0.1#5335 +ipset=/jfrog.com/gfwlist +server=/kijiji.ca/127.0.0.1#5335 +ipset=/kijiji.ca/gfwlist +server=/oxfordre.com/127.0.0.1#5335 +ipset=/oxfordre.com/gfwlist +server=/i69.com.tw/127.0.0.1#5335 +ipset=/i69.com.tw/gfwlist +server=/upornia.com/127.0.0.1#5335 +ipset=/upornia.com/gfwlist +server=/jjaaxyz.com/127.0.0.1#5335 +ipset=/jjaaxyz.com/gfwlist +server=/mcpeaceofmind.com/127.0.0.1#5335 +ipset=/mcpeaceofmind.com/gfwlist +server=/18novel.xyz/127.0.0.1#5335 +ipset=/18novel.xyz/gfwlist +server=/bridgestone.com.vn/127.0.0.1#5335 +ipset=/bridgestone.com.vn/gfwlist +server=/cbart.net/127.0.0.1#5335 +ipset=/cbart.net/gfwlist +server=/piapro.net/127.0.0.1#5335 +ipset=/piapro.net/gfwlist +server=/facebokc.com/127.0.0.1#5335 +ipset=/facebokc.com/gfwlist +server=/mastercad.com/127.0.0.1#5335 +ipset=/mastercad.com/gfwlist +server=/girl7942.com/127.0.0.1#5335 +ipset=/girl7942.com/gfwlist +server=/snap-telemetry.io/127.0.0.1#5335 +ipset=/snap-telemetry.io/gfwlist +server=/bidi.net.uk/127.0.0.1#5335 +ipset=/bidi.net.uk/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=/newslicensing.co.uk/127.0.0.1#5335 +ipset=/newslicensing.co.uk/gfwlist +server=/niketrainers.com/127.0.0.1#5335 +ipset=/niketrainers.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=/stackage.org/127.0.0.1#5335 +ipset=/stackage.org/gfwlist +server=/ebay.fr/127.0.0.1#5335 +ipset=/ebay.fr/gfwlist +server=/theleakbay.com/127.0.0.1#5335 +ipset=/theleakbay.com/gfwlist +server=/youtube.fr/127.0.0.1#5335 +ipset=/youtube.fr/gfwlist +server=/dogcumshot.net/127.0.0.1#5335 +ipset=/dogcumshot.net/gfwlist +server=/slidesharecdn.com/127.0.0.1#5335 +ipset=/slidesharecdn.com/gfwlist +server=/vagrantcloud.com/127.0.0.1#5335 +ipset=/vagrantcloud.com/gfwlist +server=/mcdelivery.com.tw/127.0.0.1#5335 +ipset=/mcdelivery.com.tw/gfwlist +server=/netflix.ca/127.0.0.1#5335 +ipset=/netflix.ca/gfwlist +server=/nijigen-daiaru.com/127.0.0.1#5335 +ipset=/nijigen-daiaru.com/gfwlist +server=/99re.com/127.0.0.1#5335 +ipset=/99re.com/gfwlist +server=/ebaystore.com/127.0.0.1#5335 +ipset=/ebaystore.com/gfwlist +server=/go-lang.com/127.0.0.1#5335 +ipset=/go-lang.com/gfwlist +server=/rajwaphq.com/127.0.0.1#5335 +ipset=/rajwaphq.com/gfwlist +server=/ieeer5.org/127.0.0.1#5335 +ipset=/ieeer5.org/gfwlist +server=/gettyimages.com/127.0.0.1#5335 +ipset=/gettyimages.com/gfwlist +server=/filipino-music.net/127.0.0.1#5335 +ipset=/filipino-music.net/gfwlist +server=/costcobusinessdelivery.com/127.0.0.1#5335 +ipset=/costcobusinessdelivery.com/gfwlist +server=/mini-connected.it/127.0.0.1#5335 +ipset=/mini-connected.it/gfwlist +server=/jwkcgd.xyz/127.0.0.1#5335 +ipset=/jwkcgd.xyz/gfwlist +server=/blzddist1-a.akamaihd.net/127.0.0.1#5335 +ipset=/blzddist1-a.akamaihd.net/gfwlist +server=/fasebokk.com/127.0.0.1#5335 +ipset=/fasebokk.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=/gitlab.io/127.0.0.1#5335 +ipset=/gitlab.io/gfwlist +server=/gitlab.com/127.0.0.1#5335 +ipset=/gitlab.com/gfwlist +server=/disney.com/127.0.0.1#5335 +ipset=/disney.com/gfwlist +server=/github-cloud.s3.amazonaws.com/127.0.0.1#5335 +ipset=/github-cloud.s3.amazonaws.com/gfwlist +server=/apexlegends.com/127.0.0.1#5335 +ipset=/apexlegends.com/gfwlist +server=/githubuniverse.com/127.0.0.1#5335 +ipset=/githubuniverse.com/gfwlist +server=/instantfapgay.com/127.0.0.1#5335 +ipset=/instantfapgay.com/gfwlist +server=/sankei.com/127.0.0.1#5335 +ipset=/sankei.com/gfwlist +server=/googlesource.com/127.0.0.1#5335 +ipset=/googlesource.com/gfwlist +server=/freecamstars.com/127.0.0.1#5335 +ipset=/freecamstars.com/gfwlist +server=/xnxxfap.info/127.0.0.1#5335 +ipset=/xnxxfap.info/gfwlist +server=/marvel10thanniversary.com/127.0.0.1#5335 +ipset=/marvel10thanniversary.com/gfwlist +server=/pypl.com/127.0.0.1#5335 +ipset=/pypl.com/gfwlist +server=/dnai.in/127.0.0.1#5335 +ipset=/dnai.in/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=/pki.google.com/127.0.0.1#5335 +ipset=/pki.google.com/gfwlist +server=/besttitstube.com/127.0.0.1#5335 +ipset=/besttitstube.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=/virtualrealporn.com/127.0.0.1#5335 +ipset=/virtualrealporn.com/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=/nude.hu/127.0.0.1#5335 +ipset=/nude.hu/gfwlist +server=/foxnewsmagazine.com/127.0.0.1#5335 +ipset=/foxnewsmagazine.com/gfwlist +server=/flutter.dev/127.0.0.1#5335 +ipset=/flutter.dev/gfwlist +server=/pearsonclinical.nl/127.0.0.1#5335 +ipset=/pearsonclinical.nl/gfwlist +server=/facebboook.com/127.0.0.1#5335 +ipset=/facebboook.com/gfwlist +server=/fedoraproject.org/127.0.0.1#5335 +ipset=/fedoraproject.org/gfwlist +server=/baltimorebmw.com/127.0.0.1#5335 +ipset=/baltimorebmw.com/gfwlist +server=/ieee-ies.org/127.0.0.1#5335 +ipset=/ieee-ies.org/gfwlist +server=/symantec.com/127.0.0.1#5335 +ipset=/symantec.com/gfwlist +server=/taipeitimes.com/127.0.0.1#5335 +ipset=/taipeitimes.com/gfwlist +server=/payserve.com/127.0.0.1#5335 +ipset=/payserve.com/gfwlist +server=/pornotube.blog.br/127.0.0.1#5335 +ipset=/pornotube.blog.br/gfwlist +server=/yahoo.it/127.0.0.1#5335 +ipset=/yahoo.it/gfwlist +server=/reactjs.org/127.0.0.1#5335 +ipset=/reactjs.org/gfwlist +server=/garotoesperto.com/127.0.0.1#5335 +ipset=/garotoesperto.com/gfwlist +server=/7mmtv.tv/127.0.0.1#5335 +ipset=/7mmtv.tv/gfwlist +server=/minispygear.com/127.0.0.1#5335 +ipset=/minispygear.com/gfwlist +server=/keezmovies.com/127.0.0.1#5335 +ipset=/keezmovies.com/gfwlist +server=/minidrivingexperienceusa.com/127.0.0.1#5335 +ipset=/minidrivingexperienceusa.com/gfwlist +server=/react.com/127.0.0.1#5335 +ipset=/react.com/gfwlist +server=/rockstargames.com/127.0.0.1#5335 +ipset=/rockstargames.com/gfwlist +server=/messengerdevelopers.com/127.0.0.1#5335 +ipset=/messengerdevelopers.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=/projecteuclid.org/127.0.0.1#5335 +ipset=/projecteuclid.org/gfwlist +server=/foxsports.com.bo/127.0.0.1#5335 +ipset=/foxsports.com.bo/gfwlist +server=/hbomaxcdn.com/127.0.0.1#5335 +ipset=/hbomaxcdn.com/gfwlist +server=/fasttext.cc/127.0.0.1#5335 +ipset=/fasttext.cc/gfwlist +server=/faciometrics.com/127.0.0.1#5335 +ipset=/faciometrics.com/gfwlist +server=/hentaispark.com/127.0.0.1#5335 +ipset=/hentaispark.com/gfwlist +server=/google.ro/127.0.0.1#5335 +ipset=/google.ro/gfwlist +server=/porn.com/127.0.0.1#5335 +ipset=/porn.com/gfwlist +server=/hlbelygl.com/127.0.0.1#5335 +ipset=/hlbelygl.com/gfwlist +server=/paydiant.com/127.0.0.1#5335 +ipset=/paydiant.com/gfwlist +server=/f8.com/127.0.0.1#5335 +ipset=/f8.com/gfwlist +server=/buck.build/127.0.0.1#5335 +ipset=/buck.build/gfwlist +server=/embedly.com/127.0.0.1#5335 +ipset=/embedly.com/gfwlist +server=/star-brasil.com/127.0.0.1#5335 +ipset=/star-brasil.com/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=/twitter.com/127.0.0.1#5335 +ipset=/twitter.com/gfwlist +server=/stackapps.com/127.0.0.1#5335 +ipset=/stackapps.com/gfwlist +server=/cispaletter.org/127.0.0.1#5335 +ipset=/cispaletter.org/gfwlist +server=/dotdeb.org/127.0.0.1#5335 +ipset=/dotdeb.org/gfwlist +server=/ubuntuforums.org/127.0.0.1#5335 +ipset=/ubuntuforums.org/gfwlist +server=/ubuntu.com/127.0.0.1#5335 +ipset=/ubuntu.com/gfwlist +server=/xn--yt8h.la/127.0.0.1#5335 +ipset=/xn--yt8h.la/gfwlist +server=/nintendoeurope.com/127.0.0.1#5335 +ipset=/nintendoeurope.com/gfwlist +server=/launchpadlibrarian.net/127.0.0.1#5335 +ipset=/launchpadlibrarian.net/gfwlist +server=/getbootstrap.com/127.0.0.1#5335 +ipset=/getbootstrap.com/gfwlist +server=/applecensorship.com/127.0.0.1#5335 +ipset=/applecensorship.com/gfwlist +server=/cloudflareapps.com/127.0.0.1#5335 +ipset=/cloudflareapps.com/gfwlist +server=/muji.us/127.0.0.1#5335 +ipset=/muji.us/gfwlist +server=/lanik.us/127.0.0.1#5335 +ipset=/lanik.us/gfwlist +server=/star-latam.com/127.0.0.1#5335 +ipset=/star-latam.com/gfwlist +server=/videosdemadurasx.com/127.0.0.1#5335 +ipset=/videosdemadurasx.com/gfwlist +server=/netflixdnstest6.com/127.0.0.1#5335 +ipset=/netflixdnstest6.com/gfwlist +server=/as-hp.ca/127.0.0.1#5335 +ipset=/as-hp.ca/gfwlist +server=/volvotrucks.com.ar/127.0.0.1#5335 +ipset=/volvotrucks.com.ar/gfwlist +server=/visual-arts.jp/127.0.0.1#5335 +ipset=/visual-arts.jp/gfwlist +server=/18exgfs.com/127.0.0.1#5335 +ipset=/18exgfs.com/gfwlist +server=/argotunnel.com/127.0.0.1#5335 +ipset=/argotunnel.com/gfwlist +server=/audiencenetwork.com/127.0.0.1#5335 +ipset=/audiencenetwork.com/gfwlist +server=/swift.org/127.0.0.1#5335 +ipset=/swift.org/gfwlist +server=/parkinfo.com/127.0.0.1#5335 +ipset=/parkinfo.com/gfwlist +server=/appleswift.com/127.0.0.1#5335 +ipset=/appleswift.com/gfwlist +server=/acebook.com/127.0.0.1#5335 +ipset=/acebook.com/gfwlist +server=/upmedia.mg/127.0.0.1#5335 +ipset=/upmedia.mg/gfwlist +server=/auroraoss.com/127.0.0.1#5335 +ipset=/auroraoss.com/gfwlist +server=/harpercollinsadvantage.com/127.0.0.1#5335 +ipset=/harpercollinsadvantage.com/gfwlist +server=/zohostatic.in/127.0.0.1#5335 +ipset=/zohostatic.in/gfwlist +server=/zeplin.dev/127.0.0.1#5335 +ipset=/zeplin.dev/gfwlist +server=/bsersd.xyz/127.0.0.1#5335 +ipset=/bsersd.xyz/gfwlist +server=/facebooknfl.com/127.0.0.1#5335 +ipset=/facebooknfl.com/gfwlist +server=/zendesk.com/127.0.0.1#5335 +ipset=/zendesk.com/gfwlist +server=/wpvip.com/127.0.0.1#5335 +ipset=/wpvip.com/gfwlist +server=/wordpress.tv/127.0.0.1#5335 +ipset=/wordpress.tv/gfwlist +server=/uun89.com/127.0.0.1#5335 +ipset=/uun89.com/gfwlist +server=/scholar.google.com.ph/127.0.0.1#5335 +ipset=/scholar.google.com.ph/gfwlist +server=/reutersagency.cn/127.0.0.1#5335 +ipset=/reutersagency.cn/gfwlist +server=/dailymail.co.uk/127.0.0.1#5335 +ipset=/dailymail.co.uk/gfwlist +server=/projectbaseline.com/127.0.0.1#5335 +ipset=/projectbaseline.com/gfwlist +server=/dditscdn.com/127.0.0.1#5335 +ipset=/dditscdn.com/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=/webflow.com/127.0.0.1#5335 +ipset=/webflow.com/gfwlist +server=/1xbet.cm/127.0.0.1#5335 +ipset=/1xbet.cm/gfwlist +server=/vercel.sh/127.0.0.1#5335 +ipset=/vercel.sh/gfwlist +server=/nijidoujin.com/127.0.0.1#5335 +ipset=/nijidoujin.com/gfwlist +server=/instagramhilecim.com/127.0.0.1#5335 +ipset=/instagramhilecim.com/gfwlist +server=/imgix.net/127.0.0.1#5335 +ipset=/imgix.net/gfwlist +server=/streamingporn.xyz/127.0.0.1#5335 +ipset=/streamingporn.xyz/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=/err.sh/127.0.0.1#5335 +ipset=/err.sh/gfwlist +server=/ctan.org/127.0.0.1#5335 +ipset=/ctan.org/gfwlist +server=/svp-team.com/127.0.0.1#5335 +ipset=/svp-team.com/gfwlist +server=/bingsettingssearch.trafficmanager.net/127.0.0.1#5335 +ipset=/bingsettingssearch.trafficmanager.net/gfwlist +server=/facebookmarketingpartner.com/127.0.0.1#5335 +ipset=/facebookmarketingpartner.com/gfwlist +server=/creditcardsbay.com/127.0.0.1#5335 +ipset=/creditcardsbay.com/gfwlist +server=/biguz.net/127.0.0.1#5335 +ipset=/biguz.net/gfwlist +server=/scholar.l.google.com/127.0.0.1#5335 +ipset=/scholar.l.google.com/gfwlist +server=/steam.naeu.qtlglb.com/127.0.0.1#5335 +ipset=/steam.naeu.qtlglb.com/gfwlist +server=/thescottishsun.co.uk/127.0.0.1#5335 +ipset=/thescottishsun.co.uk/gfwlist +server=/bmw.com/127.0.0.1#5335 +ipset=/bmw.com/gfwlist +server=/analamateursex.com/127.0.0.1#5335 +ipset=/analamateursex.com/gfwlist +server=/startpage.com/127.0.0.1#5335 +ipset=/startpage.com/gfwlist +server=/squarecapital.com/127.0.0.1#5335 +ipset=/squarecapital.com/gfwlist +server=/git.io/127.0.0.1#5335 +ipset=/git.io/gfwlist +server=/exporntoons.net/127.0.0.1#5335 +ipset=/exporntoons.net/gfwlist +server=/itripto.com/127.0.0.1#5335 +ipset=/itripto.com/gfwlist +server=/91porn.best/127.0.0.1#5335 +ipset=/91porn.best/gfwlist +server=/rplay.live/127.0.0.1#5335 +ipset=/rplay.live/gfwlist +server=/slideshare.com/127.0.0.1#5335 +ipset=/slideshare.com/gfwlist +server=/shorturl.at/127.0.0.1#5335 +ipset=/shorturl.at/gfwlist +server=/visa.co.in/127.0.0.1#5335 +ipset=/visa.co.in/gfwlist +server=/dl.begellhouse.com/127.0.0.1#5335 +ipset=/dl.begellhouse.com/gfwlist +server=/nyansa.com/127.0.0.1#5335 +ipset=/nyansa.com/gfwlist +server=/spaindisney.com/127.0.0.1#5335 +ipset=/spaindisney.com/gfwlist +server=/shop.app/127.0.0.1#5335 +ipset=/shop.app/gfwlist +server=/myshopify.com/127.0.0.1#5335 +ipset=/myshopify.com/gfwlist +server=/setapp.com/127.0.0.1#5335 +ipset=/setapp.com/gfwlist +server=/bellebound.com/127.0.0.1#5335 +ipset=/bellebound.com/gfwlist +server=/loli.net/127.0.0.1#5335 +ipset=/loli.net/gfwlist +server=/rb.gy/127.0.0.1#5335 +ipset=/rb.gy/gfwlist +server=/6neek.com/127.0.0.1#5335 +ipset=/6neek.com/gfwlist +server=/thebeatsheadphonesale.com/127.0.0.1#5335 +ipset=/thebeatsheadphonesale.com/gfwlist +server=/lqh0bon3.xyz/127.0.0.1#5335 +ipset=/lqh0bon3.xyz/gfwlist +server=/stackauth.com/127.0.0.1#5335 +ipset=/stackauth.com/gfwlist +server=/pacloudflare.com/127.0.0.1#5335 +ipset=/pacloudflare.com/gfwlist +server=/foxsmallbusinesscenter.org/127.0.0.1#5335 +ipset=/foxsmallbusinesscenter.org/gfwlist +server=/tnatryouts.com/127.0.0.1#5335 +ipset=/tnatryouts.com/gfwlist +server=/teenqueens.net/127.0.0.1#5335 +ipset=/teenqueens.net/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=/patreonusercontent.com/127.0.0.1#5335 +ipset=/patreonusercontent.com/gfwlist +server=/miniusa.com/127.0.0.1#5335 +ipset=/miniusa.com/gfwlist +server=/omaps.app/127.0.0.1#5335 +ipset=/omaps.app/gfwlist +server=/cloudimg.io/127.0.0.1#5335 +ipset=/cloudimg.io/gfwlist +server=/notion.so/127.0.0.1#5335 +ipset=/notion.so/gfwlist +server=/notion.com/127.0.0.1#5335 +ipset=/notion.com/gfwlist +server=/nintendo.com/127.0.0.1#5335 +ipset=/nintendo.com/gfwlist +server=/newsextv.com/127.0.0.1#5335 +ipset=/newsextv.com/gfwlist +server=/d33wubrfki0l68.cloudfront.net/127.0.0.1#5335 +ipset=/d33wubrfki0l68.cloudfront.net/gfwlist +server=/mpv.io/127.0.0.1#5335 +ipset=/mpv.io/gfwlist +server=/huffingtonpost.kr/127.0.0.1#5335 +ipset=/huffingtonpost.kr/gfwlist +server=/madvrlabs.llc/127.0.0.1#5335 +ipset=/madvrlabs.llc/gfwlist +server=/crl.microsoft.com/127.0.0.1#5335 +ipset=/crl.microsoft.com/gfwlist +server=/madvr.net/127.0.0.1#5335 +ipset=/madvr.net/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=/madvr.com/127.0.0.1#5335 +ipset=/madvr.com/gfwlist +server=/ebay-confirm.com/127.0.0.1#5335 +ipset=/ebay-confirm.com/gfwlist +server=/chunja19.net/127.0.0.1#5335 +ipset=/chunja19.net/gfwlist +server=/swiftcapital.com/127.0.0.1#5335 +ipset=/swiftcapital.com/gfwlist +server=/liberapay.com/127.0.0.1#5335 +ipset=/liberapay.com/gfwlist +server=/venezporn.com/127.0.0.1#5335 +ipset=/venezporn.com/gfwlist +server=/bustyangelique.com/127.0.0.1#5335 +ipset=/bustyangelique.com/gfwlist +server=/jwpltx.com/127.0.0.1#5335 +ipset=/jwpltx.com/gfwlist +server=/xxx-com.cfd/127.0.0.1#5335 +ipset=/xxx-com.cfd/gfwlist +server=/xxxner.com/127.0.0.1#5335 +ipset=/xxxner.com/gfwlist +server=/visa.co.uk/127.0.0.1#5335 +ipset=/visa.co.uk/gfwlist +server=/disney.pt/127.0.0.1#5335 +ipset=/disney.pt/gfwlist +server=/teslamotors.com/127.0.0.1#5335 +ipset=/teslamotors.com/gfwlist +server=/bowenpress.com/127.0.0.1#5335 +ipset=/bowenpress.com/gfwlist +server=/3dhentai.tv/127.0.0.1#5335 +ipset=/3dhentai.tv/gfwlist +server=/dlfacebook.com/127.0.0.1#5335 +ipset=/dlfacebook.com/gfwlist +server=/heroku-app.com/127.0.0.1#5335 +ipset=/heroku-app.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=/fabuye.top/127.0.0.1#5335 +ipset=/fabuye.top/gfwlist +server=/appleexpo.info/127.0.0.1#5335 +ipset=/appleexpo.info/gfwlist +server=/xxxland.net/127.0.0.1#5335 +ipset=/xxxland.net/gfwlist +server=/translatewiki.org/127.0.0.1#5335 +ipset=/translatewiki.org/gfwlist +server=/sexcelebrity.net/127.0.0.1#5335 +ipset=/sexcelebrity.net/gfwlist +server=/arcgis.com/127.0.0.1#5335 +ipset=/arcgis.com/gfwlist +server=/duckside.com/127.0.0.1#5335 +ipset=/duckside.com/gfwlist +server=/intel.eu/127.0.0.1#5335 +ipset=/intel.eu/gfwlist +server=/chatterbate.io/127.0.0.1#5335 +ipset=/chatterbate.io/gfwlist +server=/streetmeatasia.com/127.0.0.1#5335 +ipset=/streetmeatasia.com/gfwlist +server=/xxxhomefuck.com/127.0.0.1#5335 +ipset=/xxxhomefuck.com/gfwlist +server=/hotscope.tv/127.0.0.1#5335 +ipset=/hotscope.tv/gfwlist +server=/pornomasse.com/127.0.0.1#5335 +ipset=/pornomasse.com/gfwlist +server=/xvideosnovinha.com/127.0.0.1#5335 +ipset=/xvideosnovinha.com/gfwlist +server=/byjav.me/127.0.0.1#5335 +ipset=/byjav.me/gfwlist +server=/duckduckgo.com.tw/127.0.0.1#5335 +ipset=/duckduckgo.com.tw/gfwlist +server=/nike.com.br/127.0.0.1#5335 +ipset=/nike.com.br/gfwlist +server=/asiancamly.com/127.0.0.1#5335 +ipset=/asiancamly.com/gfwlist +server=/zlibcdn2.com/127.0.0.1#5335 +ipset=/zlibcdn2.com/gfwlist +server=/ahswingerporno.com/127.0.0.1#5335 +ipset=/ahswingerporno.com/gfwlist +server=/pornenix.com/127.0.0.1#5335 +ipset=/pornenix.com/gfwlist +server=/ddg.co/127.0.0.1#5335 +ipset=/ddg.co/gfwlist +server=/bondagesex-xxx.com/127.0.0.1#5335 +ipset=/bondagesex-xxx.com/gfwlist +server=/erodou.tousatu.fun/127.0.0.1#5335 +ipset=/erodou.tousatu.fun/gfwlist +server=/disqus.com/127.0.0.1#5335 +ipset=/disqus.com/gfwlist +server=/pornxxxweb.com/127.0.0.1#5335 +ipset=/pornxxxweb.com/gfwlist +server=/digitalocean.com/127.0.0.1#5335 +ipset=/digitalocean.com/gfwlist +server=/cloudconvert.com/127.0.0.1#5335 +ipset=/cloudconvert.com/gfwlist +server=/steam-chat.com/127.0.0.1#5335 +ipset=/steam-chat.com/gfwlist +server=/buymeacoff.ee/127.0.0.1#5335 +ipset=/buymeacoff.ee/gfwlist +server=/myfoxorlando.com/127.0.0.1#5335 +ipset=/myfoxorlando.com/gfwlist +server=/anyxxx.me/127.0.0.1#5335 +ipset=/anyxxx.me/gfwlist +server=/sexyfeet.tv/127.0.0.1#5335 +ipset=/sexyfeet.tv/gfwlist +server=/volvotrucks.ph/127.0.0.1#5335 +ipset=/volvotrucks.ph/gfwlist +server=/youtube.com.lv/127.0.0.1#5335 +ipset=/youtube.com.lv/gfwlist +server=/fonts.net/127.0.0.1#5335 +ipset=/fonts.net/gfwlist +server=/horsemecum.com/127.0.0.1#5335 +ipset=/horsemecum.com/gfwlist +server=/brightcove.services/127.0.0.1#5335 +ipset=/brightcove.services/gfwlist +server=/thri.xxx/127.0.0.1#5335 +ipset=/thri.xxx/gfwlist +server=/hrecords.jp/127.0.0.1#5335 +ipset=/hrecords.jp/gfwlist +server=/isiknowledge.com/127.0.0.1#5335 +ipset=/isiknowledge.com/gfwlist +server=/doom9.org/127.0.0.1#5335 +ipset=/doom9.org/gfwlist +server=/bahamut.akamaized.net/127.0.0.1#5335 +ipset=/bahamut.akamaized.net/gfwlist +server=/arphic.com.tw/127.0.0.1#5335 +ipset=/arphic.com.tw/gfwlist +server=/literotica.com/127.0.0.1#5335 +ipset=/literotica.com/gfwlist +server=/fabhairypussy.com/127.0.0.1#5335 +ipset=/fabhairypussy.com/gfwlist +server=/fbsbx.com/127.0.0.1#5335 +ipset=/fbsbx.com/gfwlist +server=/kaggle.io/127.0.0.1#5335 +ipset=/kaggle.io/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=/ikea.com.eg/127.0.0.1#5335 +ipset=/ikea.com.eg/gfwlist +server=/msads.net/127.0.0.1#5335 +ipset=/msads.net/gfwlist +server=/addtoany.com/127.0.0.1#5335 +ipset=/addtoany.com/gfwlist +server=/konachan.net/127.0.0.1#5335 +ipset=/konachan.net/gfwlist +server=/gscanada.info/127.0.0.1#5335 +ipset=/gscanada.info/gfwlist +server=/globalspec.com/127.0.0.1#5335 +ipset=/globalspec.com/gfwlist +server=/avstar3.com/127.0.0.1#5335 +ipset=/avstar3.com/gfwlist +server=/zoo-xnxx.com/127.0.0.1#5335 +ipset=/zoo-xnxx.com/gfwlist +server=/zh99.net/127.0.0.1#5335 +ipset=/zh99.net/gfwlist +server=/firefoxusercontent.com/127.0.0.1#5335 +ipset=/firefoxusercontent.com/gfwlist +server=/yepporn.com/127.0.0.1#5335 +ipset=/yepporn.com/gfwlist +server=/binance.us/127.0.0.1#5335 +ipset=/binance.us/gfwlist +server=/a-hentai.tv/127.0.0.1#5335 +ipset=/a-hentai.tv/gfwlist +server=/thomsonreuters.es/127.0.0.1#5335 +ipset=/thomsonreuters.es/gfwlist +server=/easportsactive.com/127.0.0.1#5335 +ipset=/easportsactive.com/gfwlist +server=/shenyun.com/127.0.0.1#5335 +ipset=/shenyun.com/gfwlist +server=/foxcanvasroom.com/127.0.0.1#5335 +ipset=/foxcanvasroom.com/gfwlist +server=/devsitetest.how/127.0.0.1#5335 +ipset=/devsitetest.how/gfwlist +server=/rule34video.com/127.0.0.1#5335 +ipset=/rule34video.com/gfwlist +server=/hkedcity.net/127.0.0.1#5335 +ipset=/hkedcity.net/gfwlist +server=/zohoschools.com/127.0.0.1#5335 +ipset=/zohoschools.com/gfwlist +server=/yavtube.com/127.0.0.1#5335 +ipset=/yavtube.com/gfwlist +server=/volvodefense.com/127.0.0.1#5335 +ipset=/volvodefense.com/gfwlist +server=/zzitube.com/127.0.0.1#5335 +ipset=/zzitube.com/gfwlist +server=/realdoll.com/127.0.0.1#5335 +ipset=/realdoll.com/gfwlist +server=/zqqpwz.com/127.0.0.1#5335 +ipset=/zqqpwz.com/gfwlist +server=/xboxgamepass.com/127.0.0.1#5335 +ipset=/xboxgamepass.com/gfwlist +server=/xemales.com/127.0.0.1#5335 +ipset=/xemales.com/gfwlist +server=/web-instagram.net/127.0.0.1#5335 +ipset=/web-instagram.net/gfwlist +server=/bridgestonela.com/127.0.0.1#5335 +ipset=/bridgestonela.com/gfwlist +server=/faebook.com/127.0.0.1#5335 +ipset=/faebook.com/gfwlist +server=/adult.contents.fc2.com/127.0.0.1#5335 +ipset=/adult.contents.fc2.com/gfwlist +server=/gayporn.pro/127.0.0.1#5335 +ipset=/gayporn.pro/gfwlist +server=/drdrefnac.com/127.0.0.1#5335 +ipset=/drdrefnac.com/gfwlist +server=/javtube.com/127.0.0.1#5335 +ipset=/javtube.com/gfwlist +server=/swag.live/127.0.0.1#5335 +ipset=/swag.live/gfwlist +server=/visiontimes.de/127.0.0.1#5335 +ipset=/visiontimes.de/gfwlist +server=/nikkeibp.co.jp/127.0.0.1#5335 +ipset=/nikkeibp.co.jp/gfwlist +server=/zhainanjidi.xyz/127.0.0.1#5335 +ipset=/zhainanjidi.xyz/gfwlist +server=/pearsonclinical.in/127.0.0.1#5335 +ipset=/pearsonclinical.in/gfwlist +server=/daddyslilangel.com/127.0.0.1#5335 +ipset=/daddyslilangel.com/gfwlist +server=/nikesoccercleats.com/127.0.0.1#5335 +ipset=/nikesoccercleats.com/gfwlist +server=/naughtyfootjobs.com/127.0.0.1#5335 +ipset=/naughtyfootjobs.com/gfwlist +server=/pornobengala.com/127.0.0.1#5335 +ipset=/pornobengala.com/gfwlist +server=/diamondgirlstudio.com/127.0.0.1#5335 +ipset=/diamondgirlstudio.com/gfwlist +server=/spyjinx.com/127.0.0.1#5335 +ipset=/spyjinx.com/gfwlist +server=/geek-squads.net/127.0.0.1#5335 +ipset=/geek-squads.net/gfwlist +server=/zerochan.net/127.0.0.1#5335 +ipset=/zerochan.net/gfwlist +server=/zen8ok.xyz/127.0.0.1#5335 +ipset=/zen8ok.xyz/gfwlist +server=/zazzybabes.com/127.0.0.1#5335 +ipset=/zazzybabes.com/gfwlist +server=/z00.world/127.0.0.1#5335 +ipset=/z00.world/gfwlist +server=/leagueoflegends.com/127.0.0.1#5335 +ipset=/leagueoflegends.com/gfwlist +server=/cashpassport.co.za/127.0.0.1#5335 +ipset=/cashpassport.co.za/gfwlist +server=/adulttime.com/127.0.0.1#5335 +ipset=/adulttime.com/gfwlist +server=/ospray.net/127.0.0.1#5335 +ipset=/ospray.net/gfwlist +server=/bigtitvenera.com/127.0.0.1#5335 +ipset=/bigtitvenera.com/gfwlist +server=/facebbook.com/127.0.0.1#5335 +ipset=/facebbook.com/gfwlist +server=/721av.com/127.0.0.1#5335 +ipset=/721av.com/gfwlist +server=/verisign.mobi/127.0.0.1#5335 +ipset=/verisign.mobi/gfwlist +server=/unravel2.com/127.0.0.1#5335 +ipset=/unravel2.com/gfwlist +server=/cf-ipfs.com/127.0.0.1#5335 +ipset=/cf-ipfs.com/gfwlist +server=/bmw-nigeria.com/127.0.0.1#5335 +ipset=/bmw-nigeria.com/gfwlist +server=/easportsactiveonline.com/127.0.0.1#5335 +ipset=/easportsactiveonline.com/gfwlist +server=/bmw.mu/127.0.0.1#5335 +ipset=/bmw.mu/gfwlist +server=/youramateurporn.com/127.0.0.1#5335 +ipset=/youramateurporn.com/gfwlist +server=/youporn.com/127.0.0.1#5335 +ipset=/youporn.com/gfwlist +server=/pornve.com/127.0.0.1#5335 +ipset=/pornve.com/gfwlist +server=/telesell.com/127.0.0.1#5335 +ipset=/telesell.com/gfwlist +server=/screw-my-wife.com/127.0.0.1#5335 +ipset=/screw-my-wife.com/gfwlist +server=/youngsex.video/127.0.0.1#5335 +ipset=/youngsex.video/gfwlist +server=/youngsex.sexy/127.0.0.1#5335 +ipset=/youngsex.sexy/gfwlist +server=/facebookhome.com/127.0.0.1#5335 +ipset=/facebookhome.com/gfwlist +server=/howfuck.me/127.0.0.1#5335 +ipset=/howfuck.me/gfwlist +server=/youngerbabes.com/127.0.0.1#5335 +ipset=/youngerbabes.com/gfwlist +server=/airhornbot.com/127.0.0.1#5335 +ipset=/airhornbot.com/gfwlist +server=/youjism.com/127.0.0.1#5335 +ipset=/youjism.com/gfwlist +server=/troisrivieresmini.com/127.0.0.1#5335 +ipset=/troisrivieresmini.com/gfwlist +server=/pornaffected.com/127.0.0.1#5335 +ipset=/pornaffected.com/gfwlist +server=/hardx.com/127.0.0.1#5335 +ipset=/hardx.com/gfwlist +server=/gbnews.uk/127.0.0.1#5335 +ipset=/gbnews.uk/gfwlist +server=/cup.com.hk/127.0.0.1#5335 +ipset=/cup.com.hk/gfwlist +server=/goshemalecams.com/127.0.0.1#5335 +ipset=/goshemalecams.com/gfwlist +server=/aod-pod-uk-live.akamaized.net/127.0.0.1#5335 +ipset=/aod-pod-uk-live.akamaized.net/gfwlist +server=/yinac5.top/127.0.0.1#5335 +ipset=/yinac5.top/gfwlist +server=/yieamnd.com/127.0.0.1#5335 +ipset=/yieamnd.com/gfwlist +server=/adobedtm.com/127.0.0.1#5335 +ipset=/adobedtm.com/gfwlist +server=/yhy.cool/127.0.0.1#5335 +ipset=/yhy.cool/gfwlist +server=/vfsco.cz/127.0.0.1#5335 +ipset=/vfsco.cz/gfwlist +server=/yespornpleasexxx.com/127.0.0.1#5335 +ipset=/yespornpleasexxx.com/gfwlist +server=/mastercard.com.cy/127.0.0.1#5335 +ipset=/mastercard.com.cy/gfwlist +server=/disney-portal.my.onetrust.com/127.0.0.1#5335 +ipset=/disney-portal.my.onetrust.com/gfwlist +server=/yespornfree.com/127.0.0.1#5335 +ipset=/yespornfree.com/gfwlist +server=/yes.xxx/127.0.0.1#5335 +ipset=/yes.xxx/gfwlist +server=/hentaiworld.eu/127.0.0.1#5335 +ipset=/hentaiworld.eu/gfwlist +server=/volvobuses.dk/127.0.0.1#5335 +ipset=/volvobuses.dk/gfwlist +server=/buyitnowshop.net/127.0.0.1#5335 +ipset=/buyitnowshop.net/gfwlist +server=/galegroup.com/127.0.0.1#5335 +ipset=/galegroup.com/gfwlist +server=/yazhouse8.com/127.0.0.1#5335 +ipset=/yazhouse8.com/gfwlist +server=/jessicaturner.com/127.0.0.1#5335 +ipset=/jessicaturner.com/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=/yatong.info/127.0.0.1#5335 +ipset=/yatong.info/gfwlist +server=/theteenhome.com/127.0.0.1#5335 +ipset=/theteenhome.com/gfwlist +server=/visa.gd/127.0.0.1#5335 +ipset=/visa.gd/gfwlist +server=/yadori.club/127.0.0.1#5335 +ipset=/yadori.club/gfwlist +server=/jasmin.com/127.0.0.1#5335 +ipset=/jasmin.com/gfwlist +server=/sumomo-ch.com/127.0.0.1#5335 +ipset=/sumomo-ch.com/gfwlist +server=/avwong.com/127.0.0.1#5335 +ipset=/avwong.com/gfwlist +server=/132288.cc/127.0.0.1#5335 +ipset=/132288.cc/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=/gaytopcams.com/127.0.0.1#5335 +ipset=/gaytopcams.com/gfwlist +server=/veet.co.uk/127.0.0.1#5335 +ipset=/veet.co.uk/gfwlist +server=/xxxvogue.net/127.0.0.1#5335 +ipset=/xxxvogue.net/gfwlist +server=/paypal-cardcash.com/127.0.0.1#5335 +ipset=/paypal-cardcash.com/gfwlist +server=/xxxvideo.blog.br/127.0.0.1#5335 +ipset=/xxxvideo.blog.br/gfwlist +server=/bigtitterrynova.com/127.0.0.1#5335 +ipset=/bigtitterrynova.com/gfwlist +server=/epochweekly.com/127.0.0.1#5335 +ipset=/epochweekly.com/gfwlist +server=/aimei133.com/127.0.0.1#5335 +ipset=/aimei133.com/gfwlist +server=/xx159.com.cn/127.0.0.1#5335 +ipset=/xx159.com.cn/gfwlist +server=/xxxsexocasero.com/127.0.0.1#5335 +ipset=/xxxsexocasero.com/gfwlist +server=/xxxsexcinema.com/127.0.0.1#5335 +ipset=/xxxsexcinema.com/gfwlist +server=/browserleaks.com/127.0.0.1#5335 +ipset=/browserleaks.com/gfwlist +server=/xxxpornhd.pro/127.0.0.1#5335 +ipset=/xxxpornhd.pro/gfwlist +server=/disneychannelroadtrip.com/127.0.0.1#5335 +ipset=/disneychannelroadtrip.com/gfwlist +server=/bethesda.net/127.0.0.1#5335 +ipset=/bethesda.net/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=/xxxmovies.fun/127.0.0.1#5335 +ipset=/xxxmovies.fun/gfwlist +server=/alphabet.fr/127.0.0.1#5335 +ipset=/alphabet.fr/gfwlist +server=/xxxmomporn.tube/127.0.0.1#5335 +ipset=/xxxmomporn.tube/gfwlist +server=/facebooksuppliers.com/127.0.0.1#5335 +ipset=/facebooksuppliers.com/gfwlist +server=/paypal-pages.com/127.0.0.1#5335 +ipset=/paypal-pages.com/gfwlist +server=/chickstagram.com/127.0.0.1#5335 +ipset=/chickstagram.com/gfwlist +server=/thepornlist.net/127.0.0.1#5335 +ipset=/thepornlist.net/gfwlist +server=/bloombergvault.com/127.0.0.1#5335 +ipset=/bloombergvault.com/gfwlist +server=/xfantazy.com/127.0.0.1#5335 +ipset=/xfantazy.com/gfwlist +server=/bonyu.cyou/127.0.0.1#5335 +ipset=/bonyu.cyou/gfwlist +server=/8muses.com/127.0.0.1#5335 +ipset=/8muses.com/gfwlist +server=/xxxfuckmom.com/127.0.0.1#5335 +ipset=/xxxfuckmom.com/gfwlist +server=/xxxforte.com/127.0.0.1#5335 +ipset=/xxxforte.com/gfwlist +server=/xxxflare.com/127.0.0.1#5335 +ipset=/xxxflare.com/gfwlist +server=/mastercard.ba/127.0.0.1#5335 +ipset=/mastercard.ba/gfwlist +server=/hitbdsm.com/127.0.0.1#5335 +ipset=/hitbdsm.com/gfwlist +server=/hardanalfucking.com/127.0.0.1#5335 +ipset=/hardanalfucking.com/gfwlist +server=/mistresskym.com/127.0.0.1#5335 +ipset=/mistresskym.com/gfwlist +server=/xxxbolivianas.com/127.0.0.1#5335 +ipset=/xxxbolivianas.com/gfwlist +server=/paypal.ca/127.0.0.1#5335 +ipset=/paypal.ca/gfwlist +server=/disney-discount.com/127.0.0.1#5335 +ipset=/disney-discount.com/gfwlist +server=/bijukujo.club/127.0.0.1#5335 +ipset=/bijukujo.club/gfwlist +server=/fb.me/127.0.0.1#5335 +ipset=/fb.me/gfwlist +server=/xxx-video.cfd/127.0.0.1#5335 +ipset=/xxx-video.cfd/gfwlist +server=/xxu.mobi/127.0.0.1#5335 +ipset=/xxu.mobi/gfwlist +server=/needforspeedstreetkings.com/127.0.0.1#5335 +ipset=/needforspeedstreetkings.com/gfwlist +server=/facebook123.org/127.0.0.1#5335 +ipset=/facebook123.org/gfwlist +server=/clips4sale.com/127.0.0.1#5335 +ipset=/clips4sale.com/gfwlist +server=/volvotrucks.co.zw/127.0.0.1#5335 +ipset=/volvotrucks.co.zw/gfwlist +server=/xxindianporn.com/127.0.0.1#5335 +ipset=/xxindianporn.com/gfwlist +server=/calgoncarbon.com/127.0.0.1#5335 +ipset=/calgoncarbon.com/gfwlist +server=/pjgirls.com/127.0.0.1#5335 +ipset=/pjgirls.com/gfwlist +server=/bahamut.com.tw/127.0.0.1#5335 +ipset=/bahamut.com.tw/gfwlist +server=/minivancouver.ca/127.0.0.1#5335 +ipset=/minivancouver.ca/gfwlist +server=/ngeo.com/127.0.0.1#5335 +ipset=/ngeo.com/gfwlist +server=/minigrandriver.com/127.0.0.1#5335 +ipset=/minigrandriver.com/gfwlist +server=/biologists.com/127.0.0.1#5335 +ipset=/biologists.com/gfwlist +server=/ikea.ie/127.0.0.1#5335 +ipset=/ikea.ie/gfwlist +server=/foxsports.net.br/127.0.0.1#5335 +ipset=/foxsports.net.br/gfwlist +server=/durex.us/127.0.0.1#5335 +ipset=/durex.us/gfwlist +server=/thechronicle.com.au/127.0.0.1#5335 +ipset=/thechronicle.com.au/gfwlist +server=/watchespn.com/127.0.0.1#5335 +ipset=/watchespn.com/gfwlist +server=/mirrormedia.com.tw/127.0.0.1#5335 +ipset=/mirrormedia.com.tw/gfwlist +server=/xvideos.la/127.0.0.1#5335 +ipset=/xvideos.la/gfwlist +server=/xvideo-jp.com/127.0.0.1#5335 +ipset=/xvideo-jp.com/gfwlist +server=/faesebook.com/127.0.0.1#5335 +ipset=/faesebook.com/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=/epinions.com/127.0.0.1#5335 +ipset=/epinions.com/gfwlist +server=/adultrental.com/127.0.0.1#5335 +ipset=/adultrental.com/gfwlist +server=/microsoftcloud.com/127.0.0.1#5335 +ipset=/microsoftcloud.com/gfwlist +server=/fanbox.cc/127.0.0.1#5335 +ipset=/fanbox.cc/gfwlist +server=/xpornblog.com/127.0.0.1#5335 +ipset=/xpornblog.com/gfwlist +server=/xpaja.net/127.0.0.1#5335 +ipset=/xpaja.net/gfwlist +server=/mr-tireman.jp/127.0.0.1#5335 +ipset=/mr-tireman.jp/gfwlist +server=/xnxxporn.fun/127.0.0.1#5335 +ipset=/xnxxporn.fun/gfwlist +server=/xnxxmovies.com/127.0.0.1#5335 +ipset=/xnxxmovies.com/gfwlist +server=/trithucvn.net/127.0.0.1#5335 +ipset=/trithucvn.net/gfwlist +server=/xnxxcomvideos.com/127.0.0.1#5335 +ipset=/xnxxcomvideos.com/gfwlist +server=/physicalexam.info/127.0.0.1#5335 +ipset=/physicalexam.info/gfwlist +server=/fank.ru/127.0.0.1#5335 +ipset=/fank.ru/gfwlist +server=/zert.ch/127.0.0.1#5335 +ipset=/zert.ch/gfwlist +server=/scholar.google.lv/127.0.0.1#5335 +ipset=/scholar.google.lv/gfwlist +server=/hentaitalk.com/127.0.0.1#5335 +ipset=/hentaitalk.com/gfwlist +server=/ebayads.com/127.0.0.1#5335 +ipset=/ebayads.com/gfwlist +server=/xmissy.nl/127.0.0.1#5335 +ipset=/xmissy.nl/gfwlist +server=/pokemonpicross.com/127.0.0.1#5335 +ipset=/pokemonpicross.com/gfwlist +server=/drdrebeatsdiscount.com/127.0.0.1#5335 +ipset=/drdrebeatsdiscount.com/gfwlist +server=/anudetube.com/127.0.0.1#5335 +ipset=/anudetube.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=/gvt0.com/127.0.0.1#5335 +ipset=/gvt0.com/gfwlist +server=/silversluts.com/127.0.0.1#5335 +ipset=/silversluts.com/gfwlist +server=/minghui.org/127.0.0.1#5335 +ipset=/minghui.org/gfwlist +server=/xdaddy.in/127.0.0.1#5335 +ipset=/xdaddy.in/gfwlist +server=/soccermatchpass.com/127.0.0.1#5335 +ipset=/soccermatchpass.com/gfwlist +server=/faceebook.com/127.0.0.1#5335 +ipset=/faceebook.com/gfwlist +server=/xchina.fun/127.0.0.1#5335 +ipset=/xchina.fun/gfwlist +server=/volvotrucks.ba/127.0.0.1#5335 +ipset=/volvotrucks.ba/gfwlist +server=/facrbook.com/127.0.0.1#5335 +ipset=/facrbook.com/gfwlist +server=/mastercard.sk/127.0.0.1#5335 +ipset=/mastercard.sk/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=/xbahis55.com/127.0.0.1#5335 +ipset=/xbahis55.com/gfwlist +server=/kissjav.com/127.0.0.1#5335 +ipset=/kissjav.com/gfwlist +server=/xanimeporn.tv/127.0.0.1#5335 +ipset=/xanimeporn.tv/gfwlist +server=/douyintt10.me/127.0.0.1#5335 +ipset=/douyintt10.me/gfwlist +server=/shemalepornonly.com/127.0.0.1#5335 +ipset=/shemalepornonly.com/gfwlist +server=/embl.org/127.0.0.1#5335 +ipset=/embl.org/gfwlist +server=/durex-slovenia.si/127.0.0.1#5335 +ipset=/durex-slovenia.si/gfwlist +server=/ntdtvla.com/127.0.0.1#5335 +ipset=/ntdtvla.com/gfwlist +server=/x3guide.com/127.0.0.1#5335 +ipset=/x3guide.com/gfwlist +server=/yjcontentdelivery.com/127.0.0.1#5335 +ipset=/yjcontentdelivery.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=/myteenwebcam.com/127.0.0.1#5335 +ipset=/myteenwebcam.com/gfwlist +server=/douya.org/127.0.0.1#5335 +ipset=/douya.org/gfwlist +server=/ginzasonypark.jp/127.0.0.1#5335 +ipset=/ginzasonypark.jp/gfwlist +server=/braintreepaymentsolutions.com/127.0.0.1#5335 +ipset=/braintreepaymentsolutions.com/gfwlist +server=/winning11.com/127.0.0.1#5335 +ipset=/winning11.com/gfwlist +server=/willyporn.com/127.0.0.1#5335 +ipset=/willyporn.com/gfwlist +server=/wifemovies.net/127.0.0.1#5335 +ipset=/wifemovies.net/gfwlist +server=/wifeloversporn.com/127.0.0.1#5335 +ipset=/wifeloversporn.com/gfwlist +server=/minimontrealcentre.ca/127.0.0.1#5335 +ipset=/minimontrealcentre.ca/gfwlist +server=/playmeow.com/127.0.0.1#5335 +ipset=/playmeow.com/gfwlist +server=/allmomsex.com/127.0.0.1#5335 +ipset=/allmomsex.com/gfwlist +server=/freegaypornfinder.com/127.0.0.1#5335 +ipset=/freegaypornfinder.com/gfwlist +server=/hpvirtualthin.com/127.0.0.1#5335 +ipset=/hpvirtualthin.com/gfwlist +server=/whitexxxtube.com/127.0.0.1#5335 +ipset=/whitexxxtube.com/gfwlist +server=/nike-dunksb.com/127.0.0.1#5335 +ipset=/nike-dunksb.com/gfwlist +server=/monstercheapbeatss.com/127.0.0.1#5335 +ipset=/monstercheapbeatss.com/gfwlist +server=/whentai.com/127.0.0.1#5335 +ipset=/whentai.com/gfwlist +server=/visa.com.pa/127.0.0.1#5335 +ipset=/visa.com.pa/gfwlist +server=/maskedsingerfox.com/127.0.0.1#5335 +ipset=/maskedsingerfox.com/gfwlist +server=/facebook-newsroom.com/127.0.0.1#5335 +ipset=/facebook-newsroom.com/gfwlist +server=/ebay-discoveries.com/127.0.0.1#5335 +ipset=/ebay-discoveries.com/gfwlist +server=/weknowporn.com/127.0.0.1#5335 +ipset=/weknowporn.com/gfwlist +server=/cfna.com/127.0.0.1#5335 +ipset=/cfna.com/gfwlist +server=/pornworld.to/127.0.0.1#5335 +ipset=/pornworld.to/gfwlist +server=/pinterest.nl/127.0.0.1#5335 +ipset=/pinterest.nl/gfwlist +server=/tospo-keiba.jp/127.0.0.1#5335 +ipset=/tospo-keiba.jp/gfwlist +server=/linkedin.com/127.0.0.1#5335 +ipset=/linkedin.com/gfwlist +server=/outletbeatsshop.com/127.0.0.1#5335 +ipset=/outletbeatsshop.com/gfwlist +server=/tvbs.com.tw/127.0.0.1#5335 +ipset=/tvbs.com.tw/gfwlist +server=/binancezh.co/127.0.0.1#5335 +ipset=/binancezh.co/gfwlist +server=/watchersweb.com/127.0.0.1#5335 +ipset=/watchersweb.com/gfwlist +server=/warddogs.com/127.0.0.1#5335 +ipset=/warddogs.com/gfwlist +server=/vrfdgswx.xyz/127.0.0.1#5335 +ipset=/vrfdgswx.xyz/gfwlist +server=/youtube.cr/127.0.0.1#5335 +ipset=/youtube.cr/gfwlist +server=/newsmaxtv.com/127.0.0.1#5335 +ipset=/newsmaxtv.com/gfwlist +server=/visa.com.kn/127.0.0.1#5335 +ipset=/visa.com.kn/gfwlist +server=/pornohutdeutsch.net/127.0.0.1#5335 +ipset=/pornohutdeutsch.net/gfwlist +server=/watchmygf.net/127.0.0.1#5335 +ipset=/watchmygf.net/gfwlist +server=/mini-connected.co.uk/127.0.0.1#5335 +ipset=/mini-connected.co.uk/gfwlist +server=/voyeurhouse.com/127.0.0.1#5335 +ipset=/voyeurhouse.com/gfwlist +server=/pornovenezolano.com.ve/127.0.0.1#5335 +ipset=/pornovenezolano.com.ve/gfwlist +server=/vomitkings.com/127.0.0.1#5335 +ipset=/vomitkings.com/gfwlist +server=/onesiterip.com/127.0.0.1#5335 +ipset=/onesiterip.com/gfwlist +server=/4kup.net/127.0.0.1#5335 +ipset=/4kup.net/gfwlist +server=/virtualpartyworld.com/127.0.0.1#5335 +ipset=/virtualpartyworld.com/gfwlist +server=/vintagexxxfilms.com/127.0.0.1#5335 +ipset=/vintagexxxfilms.com/gfwlist +server=/megatitsminka.com/127.0.0.1#5335 +ipset=/megatitsminka.com/gfwlist +server=/hycgm1324.shop/127.0.0.1#5335 +ipset=/hycgm1324.shop/gfwlist +server=/celebritynakeds.com/127.0.0.1#5335 +ipset=/celebritynakeds.com/gfwlist +server=/viet.sex/127.0.0.1#5335 +ipset=/viet.sex/gfwlist +server=/bmw-connecteddrive.com.mt/127.0.0.1#5335 +ipset=/bmw-connecteddrive.com.mt/gfwlist +server=/kenyasexparadise.com/127.0.0.1#5335 +ipset=/kenyasexparadise.com/gfwlist +server=/only-xxx.com/127.0.0.1#5335 +ipset=/only-xxx.com/gfwlist +server=/menhdv.com/127.0.0.1#5335 +ipset=/menhdv.com/gfwlist +server=/malayporn.site/127.0.0.1#5335 +ipset=/malayporn.site/gfwlist +server=/nike.shop/127.0.0.1#5335 +ipset=/nike.shop/gfwlist +server=/bookshome.net/127.0.0.1#5335 +ipset=/bookshome.net/gfwlist +server=/youtube.ca/127.0.0.1#5335 +ipset=/youtube.ca/gfwlist +server=/harpercollinschildrensbooks.co.uk/127.0.0.1#5335 +ipset=/harpercollinschildrensbooks.co.uk/gfwlist +server=/volvobuses.com.ar/127.0.0.1#5335 +ipset=/volvobuses.com.ar/gfwlist +server=/4ksex.me/127.0.0.1#5335 +ipset=/4ksex.me/gfwlist +server=/videosxxxnicaragua.top/127.0.0.1#5335 +ipset=/videosxxxnicaragua.top/gfwlist +server=/disney.co.za/127.0.0.1#5335 +ipset=/disney.co.za/gfwlist +server=/apress.com/127.0.0.1#5335 +ipset=/apress.com/gfwlist +server=/nikefactorystore.com/127.0.0.1#5335 +ipset=/nikefactorystore.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=/choicereviews.org/127.0.0.1#5335 +ipset=/choicereviews.org/gfwlist +server=/vanish.pt/127.0.0.1#5335 +ipset=/vanish.pt/gfwlist +server=/simg.jp/127.0.0.1#5335 +ipset=/simg.jp/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=/free18.net/127.0.0.1#5335 +ipset=/free18.net/gfwlist +server=/alphabet.com.pl/127.0.0.1#5335 +ipset=/alphabet.com.pl/gfwlist +server=/vercomicsporno.xxx/127.0.0.1#5335 +ipset=/vercomicsporno.xxx/gfwlist +server=/ftiecla.com/127.0.0.1#5335 +ipset=/ftiecla.com/gfwlist +server=/vaginalultrasound.info/127.0.0.1#5335 +ipset=/vaginalultrasound.info/gfwlist +server=/v7hds.com/127.0.0.1#5335 +ipset=/v7hds.com/gfwlist +server=/visaluxuryhotelcollection.com/127.0.0.1#5335 +ipset=/visaluxuryhotelcollection.com/gfwlist +server=/face-book.com/127.0.0.1#5335 +ipset=/face-book.com/gfwlist +server=/fnlondon.com/127.0.0.1#5335 +ipset=/fnlondon.com/gfwlist +server=/ikea.com.ru/127.0.0.1#5335 +ipset=/ikea.com.ru/gfwlist +server=/pearson.es/127.0.0.1#5335 +ipset=/pearson.es/gfwlist +server=/tgutube.com/127.0.0.1#5335 +ipset=/tgutube.com/gfwlist +server=/urasma.com/127.0.0.1#5335 +ipset=/urasma.com/gfwlist +server=/akaeai.com/127.0.0.1#5335 +ipset=/akaeai.com/gfwlist +server=/beautifulandbusty.com/127.0.0.1#5335 +ipset=/beautifulandbusty.com/gfwlist +server=/reutersmedia.net/127.0.0.1#5335 +ipset=/reutersmedia.net/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=/uncensoredsexparties.com/127.0.0.1#5335 +ipset=/uncensoredsexparties.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=/ujapanesesex.com/127.0.0.1#5335 +ipset=/ujapanesesex.com/gfwlist +server=/telegram.org/127.0.0.1#5335 +ipset=/telegram.org/gfwlist +server=/tytng189.com/127.0.0.1#5335 +ipset=/tytng189.com/gfwlist +server=/aple.com/127.0.0.1#5335 +ipset=/aple.com/gfwlist +server=/tomovie.net/127.0.0.1#5335 +ipset=/tomovie.net/gfwlist +server=/ius.io/127.0.0.1#5335 +ipset=/ius.io/gfwlist +server=/tushy.com/127.0.0.1#5335 +ipset=/tushy.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=/fxn.ws/127.0.0.1#5335 +ipset=/fxn.ws/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=/ebay-inc.net/127.0.0.1#5335 +ipset=/ebay-inc.net/gfwlist +server=/eracom.com.tw/127.0.0.1#5335 +ipset=/eracom.com.tw/gfwlist +server=/thesims3.com/127.0.0.1#5335 +ipset=/thesims3.com/gfwlist +server=/tubepornstars.com/127.0.0.1#5335 +ipset=/tubepornstars.com/gfwlist +server=/webkit.org/127.0.0.1#5335 +ipset=/webkit.org/gfwlist +server=/youtubegaming.com/127.0.0.1#5335 +ipset=/youtubegaming.com/gfwlist +server=/hcbdsm.com/127.0.0.1#5335 +ipset=/hcbdsm.com/gfwlist +server=/tubeorigin.com/127.0.0.1#5335 +ipset=/tubeorigin.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=/tiendabestbuy.com/127.0.0.1#5335 +ipset=/tiendabestbuy.com/gfwlist +server=/tubedupe.com/127.0.0.1#5335 +ipset=/tubedupe.com/gfwlist +server=/tubecaptain.com/127.0.0.1#5335 +ipset=/tubecaptain.com/gfwlist +server=/tube8zoo.com/127.0.0.1#5335 +ipset=/tube8zoo.com/gfwlist +server=/tube-pornomovs.com/127.0.0.1#5335 +ipset=/tube-pornomovs.com/gfwlist +server=/alphera.com.hk/127.0.0.1#5335 +ipset=/alphera.com.hk/gfwlist +server=/ftopx.com/127.0.0.1#5335 +ipset=/ftopx.com/gfwlist +server=/tiohentai.com/127.0.0.1#5335 +ipset=/tiohentai.com/gfwlist +server=/uug23.com/127.0.0.1#5335 +ipset=/uug23.com/gfwlist +server=/kbdxlesx.xyz/127.0.0.1#5335 +ipset=/kbdxlesx.xyz/gfwlist +server=/audiomonsterbeatsonline.com/127.0.0.1#5335 +ipset=/audiomonsterbeatsonline.com/gfwlist +server=/justhd.xyz/127.0.0.1#5335 +ipset=/justhd.xyz/gfwlist +server=/mastercard.dk/127.0.0.1#5335 +ipset=/mastercard.dk/gfwlist +server=/travelgirls.com/127.0.0.1#5335 +ipset=/travelgirls.com/gfwlist +server=/sexgame.com/127.0.0.1#5335 +ipset=/sexgame.com/gfwlist +server=/transangels.com/127.0.0.1#5335 +ipset=/transangels.com/gfwlist +server=/yahoo.be/127.0.0.1#5335 +ipset=/yahoo.be/gfwlist +server=/colegialasreales.com/127.0.0.1#5335 +ipset=/colegialasreales.com/gfwlist +server=/cbssvideo.com/127.0.0.1#5335 +ipset=/cbssvideo.com/gfwlist +server=/imac.eu/127.0.0.1#5335 +ipset=/imac.eu/gfwlist +server=/msftauth.net/127.0.0.1#5335 +ipset=/msftauth.net/gfwlist +server=/binancezh.top/127.0.0.1#5335 +ipset=/binancezh.top/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=/tophentaicomics.com/127.0.0.1#5335 +ipset=/tophentaicomics.com/gfwlist +server=/tophentai.biz/127.0.0.1#5335 +ipset=/tophentai.biz/gfwlist +server=/facebooktv.net/127.0.0.1#5335 +ipset=/facebooktv.net/gfwlist +server=/etherscan.io/127.0.0.1#5335 +ipset=/etherscan.io/gfwlist +server=/mingwatch.com/127.0.0.1#5335 +ipset=/mingwatch.com/gfwlist +server=/natgeokidsbooks.co.uk/127.0.0.1#5335 +ipset=/natgeokidsbooks.co.uk/gfwlist +server=/airwick.co.nz/127.0.0.1#5335 +ipset=/airwick.co.nz/gfwlist +server=/toperoticartsites.com/127.0.0.1#5335 +ipset=/toperoticartsites.com/gfwlist +server=/intel.uk/127.0.0.1#5335 +ipset=/intel.uk/gfwlist +server=/tokyomotion.net/127.0.0.1#5335 +ipset=/tokyomotion.net/gfwlist +server=/mariosupersluggers.com/127.0.0.1#5335 +ipset=/mariosupersluggers.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=/titsintops.com/127.0.0.1#5335 +ipset=/titsintops.com/gfwlist +server=/collabora.com/127.0.0.1#5335 +ipset=/collabora.com/gfwlist +server=/sonyentertainmentnetwork.com/127.0.0.1#5335 +ipset=/sonyentertainmentnetwork.com/gfwlist +server=/hentai24h.org/127.0.0.1#5335 +ipset=/hentai24h.org/gfwlist +server=/visa.com.au/127.0.0.1#5335 +ipset=/visa.com.au/gfwlist +server=/3dsexmovies.biz/127.0.0.1#5335 +ipset=/3dsexmovies.biz/gfwlist +server=/tinhduc.org/127.0.0.1#5335 +ipset=/tinhduc.org/gfwlist +server=/timo0.com/127.0.0.1#5335 +ipset=/timo0.com/gfwlist +server=/fbsbx.net/127.0.0.1#5335 +ipset=/fbsbx.net/gfwlist +server=/thumbnailseries.com/127.0.0.1#5335 +ipset=/thumbnailseries.com/gfwlist +server=/graneodin.com.mx/127.0.0.1#5335 +ipset=/graneodin.com.mx/gfwlist +server=/porndig.com/127.0.0.1#5335 +ipset=/porndig.com/gfwlist +server=/pornscum.com/127.0.0.1#5335 +ipset=/pornscum.com/gfwlist +server=/akamai-sucks.net/127.0.0.1#5335 +ipset=/akamai-sucks.net/gfwlist +server=/facebookporno.net/127.0.0.1#5335 +ipset=/facebookporno.net/gfwlist +server=/metartnetwork.com/127.0.0.1#5335 +ipset=/metartnetwork.com/gfwlist +server=/r34porn.net/127.0.0.1#5335 +ipset=/r34porn.net/gfwlist +server=/hairy-beauty.com/127.0.0.1#5335 +ipset=/hairy-beauty.com/gfwlist +server=/scoreclassics.com/127.0.0.1#5335 +ipset=/scoreclassics.com/gfwlist +server=/onionshare.org/127.0.0.1#5335 +ipset=/onionshare.org/gfwlist +server=/pscdn.co/127.0.0.1#5335 +ipset=/pscdn.co/gfwlist +server=/uncensoredhentai.xxx/127.0.0.1#5335 +ipset=/uncensoredhentai.xxx/gfwlist +server=/smyw.org/127.0.0.1#5335 +ipset=/smyw.org/gfwlist +server=/porn93.cc/127.0.0.1#5335 +ipset=/porn93.cc/gfwlist +server=/redino.tw/127.0.0.1#5335 +ipset=/redino.tw/gfwlist +server=/thehabibshow.com/127.0.0.1#5335 +ipset=/thehabibshow.com/gfwlist +server=/thefappening.wiki/127.0.0.1#5335 +ipset=/thefappening.wiki/gfwlist +server=/mini.de/127.0.0.1#5335 +ipset=/mini.de/gfwlist +server=/academic.eb.com/127.0.0.1#5335 +ipset=/academic.eb.com/gfwlist +server=/rsf.org/127.0.0.1#5335 +ipset=/rsf.org/gfwlist +server=/thebondagefiles.com/127.0.0.1#5335 +ipset=/thebondagefiles.com/gfwlist +server=/russianrape.org/127.0.0.1#5335 +ipset=/russianrape.org/gfwlist +server=/gaysonic.eu/127.0.0.1#5335 +ipset=/gaysonic.eu/gfwlist +server=/xxxpenguin.com/127.0.0.1#5335 +ipset=/xxxpenguin.com/gfwlist +server=/travelcontroller.com/127.0.0.1#5335 +ipset=/travelcontroller.com/gfwlist +server=/thaigirls100.net/127.0.0.1#5335 +ipset=/thaigirls100.net/gfwlist +server=/amsterdamhotescort.com/127.0.0.1#5335 +ipset=/amsterdamhotescort.com/gfwlist +server=/msnbc.com/127.0.0.1#5335 +ipset=/msnbc.com/gfwlist +server=/hpcpi.com/127.0.0.1#5335 +ipset=/hpcpi.com/gfwlist +server=/cartoonville.net/127.0.0.1#5335 +ipset=/cartoonville.net/gfwlist +server=/boyztube.com/127.0.0.1#5335 +ipset=/boyztube.com/gfwlist +server=/teenwebcamtube.com/127.0.0.1#5335 +ipset=/teenwebcamtube.com/gfwlist +server=/illusionchn.com/127.0.0.1#5335 +ipset=/illusionchn.com/gfwlist +server=/azatliq.org/127.0.0.1#5335 +ipset=/azatliq.org/gfwlist +server=/devilsfilm.com/127.0.0.1#5335 +ipset=/devilsfilm.com/gfwlist +server=/ic.ac.uk/127.0.0.1#5335 +ipset=/ic.ac.uk/gfwlist +server=/blowjobit.com/127.0.0.1#5335 +ipset=/blowjobit.com/gfwlist +server=/teen3x.mobi/127.0.0.1#5335 +ipset=/teen3x.mobi/gfwlist +server=/ciscofax.com/127.0.0.1#5335 +ipset=/ciscofax.com/gfwlist +server=/friendfeedmedia.com/127.0.0.1#5335 +ipset=/friendfeedmedia.com/gfwlist +server=/netflixdnstest7.com/127.0.0.1#5335 +ipset=/netflixdnstest7.com/gfwlist +server=/mirrorsedge2d.com/127.0.0.1#5335 +ipset=/mirrorsedge2d.com/gfwlist +server=/prastitutki.ru/127.0.0.1#5335 +ipset=/prastitutki.ru/gfwlist +server=/disneycruisebrasil.com/127.0.0.1#5335 +ipset=/disneycruisebrasil.com/gfwlist +server=/uk-exhibitionist.com/127.0.0.1#5335 +ipset=/uk-exhibitionist.com/gfwlist +server=/taxi69.com/127.0.0.1#5335 +ipset=/taxi69.com/gfwlist +server=/disney.id/127.0.0.1#5335 +ipset=/disney.id/gfwlist +server=/ovid.com/127.0.0.1#5335 +ipset=/ovid.com/gfwlist +server=/tabooporns.com/127.0.0.1#5335 +ipset=/tabooporns.com/gfwlist +server=/foxsports.sv/127.0.0.1#5335 +ipset=/foxsports.sv/gfwlist +server=/sxshentai.com/127.0.0.1#5335 +ipset=/sxshentai.com/gfwlist +server=/paysitesreviews.net/127.0.0.1#5335 +ipset=/paysitesreviews.net/gfwlist +server=/youtube.ie/127.0.0.1#5335 +ipset=/youtube.ie/gfwlist +server=/cloudimage.io/127.0.0.1#5335 +ipset=/cloudimage.io/gfwlist +server=/disneyaulani.com/127.0.0.1#5335 +ipset=/disneyaulani.com/gfwlist +server=/superhqporn.com/127.0.0.1#5335 +ipset=/superhqporn.com/gfwlist +server=/supergratisporno.com/127.0.0.1#5335 +ipset=/supergratisporno.com/gfwlist +server=/beatstoreusa.com/127.0.0.1#5335 +ipset=/beatstoreusa.com/gfwlist +server=/deviantart.com/127.0.0.1#5335 +ipset=/deviantart.com/gfwlist +server=/sunporno.com/127.0.0.1#5335 +ipset=/sunporno.com/gfwlist +server=/globalsign-media.com/127.0.0.1#5335 +ipset=/globalsign-media.com/gfwlist +server=/mediachinese.com/127.0.0.1#5335 +ipset=/mediachinese.com/gfwlist +server=/streamsex.com/127.0.0.1#5335 +ipset=/streamsex.com/gfwlist +server=/stileproject.com/127.0.0.1#5335 +ipset=/stileproject.com/gfwlist +server=/taiav.com/127.0.0.1#5335 +ipset=/taiav.com/gfwlist +server=/amateursvid.com/127.0.0.1#5335 +ipset=/amateursvid.com/gfwlist +server=/ikea.net/127.0.0.1#5335 +ipset=/ikea.net/gfwlist +server=/jennylist.xyz/127.0.0.1#5335 +ipset=/jennylist.xyz/gfwlist +server=/microsoft-ppe.com/127.0.0.1#5335 +ipset=/microsoft-ppe.com/gfwlist +server=/supplybestjerseys.com/127.0.0.1#5335 +ipset=/supplybestjerseys.com/gfwlist +server=/sshs.pw/127.0.0.1#5335 +ipset=/sshs.pw/gfwlist +server=/nexusmods.com/127.0.0.1#5335 +ipset=/nexusmods.com/gfwlist +server=/ebayclassifiedsgroup.org/127.0.0.1#5335 +ipset=/ebayclassifiedsgroup.org/gfwlist +server=/riot-games.com/127.0.0.1#5335 +ipset=/riot-games.com/gfwlist +server=/spectraltube.com/127.0.0.1#5335 +ipset=/spectraltube.com/gfwlist +server=/youtube.me/127.0.0.1#5335 +ipset=/youtube.me/gfwlist +server=/hbo.com.c.footprint.net/127.0.0.1#5335 +ipset=/hbo.com.c.footprint.net/gfwlist +server=/thehun.net/127.0.0.1#5335 +ipset=/thehun.net/gfwlist +server=/smutcam.com/127.0.0.1#5335 +ipset=/smutcam.com/gfwlist +server=/sksarab.top/127.0.0.1#5335 +ipset=/sksarab.top/gfwlist +server=/millymarks.com/127.0.0.1#5335 +ipset=/millymarks.com/gfwlist +server=/nike.hk/127.0.0.1#5335 +ipset=/nike.hk/gfwlist +server=/pki-poste.ch/127.0.0.1#5335 +ipset=/pki-poste.ch/gfwlist +server=/electrochem.org/127.0.0.1#5335 +ipset=/electrochem.org/gfwlist +server=/newsmax.com/127.0.0.1#5335 +ipset=/newsmax.com/gfwlist +server=/cashvideotube.com/127.0.0.1#5335 +ipset=/cashvideotube.com/gfwlist +server=/firestone.com.mx/127.0.0.1#5335 +ipset=/firestone.com.mx/gfwlist +server=/sisisl.com/127.0.0.1#5335 +ipset=/sisisl.com/gfwlist +server=/bloombergindices.com/127.0.0.1#5335 +ipset=/bloombergindices.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=/orl.ly/127.0.0.1#5335 +ipset=/orl.ly/gfwlist +server=/nikeshoemarket.com/127.0.0.1#5335 +ipset=/nikeshoemarket.com/gfwlist +server=/chromium.org/127.0.0.1#5335 +ipset=/chromium.org/gfwlist +server=/free-3d-porn.com/127.0.0.1#5335 +ipset=/free-3d-porn.com/gfwlist +server=/av1688.cc/127.0.0.1#5335 +ipset=/av1688.cc/gfwlist +server=/shittytube.com/127.0.0.1#5335 +ipset=/shittytube.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=/shithd.com/127.0.0.1#5335 +ipset=/shithd.com/gfwlist +server=/javmix.tv/127.0.0.1#5335 +ipset=/javmix.tv/gfwlist +server=/humoron.com/127.0.0.1#5335 +ipset=/humoron.com/gfwlist +server=/shemale-porn-galls.com/127.0.0.1#5335 +ipset=/shemale-porn-galls.com/gfwlist +server=/masterclass.com/127.0.0.1#5335 +ipset=/masterclass.com/gfwlist +server=/accuweather.com/127.0.0.1#5335 +ipset=/accuweather.com/gfwlist +server=/volvobuses.co.za/127.0.0.1#5335 +ipset=/volvobuses.co.za/gfwlist +server=/sexywetpussy.com/127.0.0.1#5335 +ipset=/sexywetpussy.com/gfwlist +server=/sexyteenssite.com/127.0.0.1#5335 +ipset=/sexyteenssite.com/gfwlist +server=/sexysites.com.ph/127.0.0.1#5335 +ipset=/sexysites.com.ph/gfwlist +server=/theepochtimes.com/127.0.0.1#5335 +ipset=/theepochtimes.com/gfwlist +server=/asredas.com/127.0.0.1#5335 +ipset=/asredas.com/gfwlist +server=/jav.land/127.0.0.1#5335 +ipset=/jav.land/gfwlist +server=/hot2048.com/127.0.0.1#5335 +ipset=/hot2048.com/gfwlist +server=/sexyfuckgames.com/127.0.0.1#5335 +ipset=/sexyfuckgames.com/gfwlist +server=/youtubeembeddedplayer.googleapis.com/127.0.0.1#5335 +ipset=/youtubeembeddedplayer.googleapis.com/gfwlist +server=/gladporn.com/127.0.0.1#5335 +ipset=/gladporn.com/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=/ac-pocketcamp.com/127.0.0.1#5335 +ipset=/ac-pocketcamp.com/gfwlist +server=/bmw.uz/127.0.0.1#5335 +ipset=/bmw.uz/gfwlist +server=/google.com.br/127.0.0.1#5335 +ipset=/google.com.br/gfwlist +server=/redtube.blog/127.0.0.1#5335 +ipset=/redtube.blog/gfwlist +server=/sexxxdoll.com/127.0.0.1#5335 +ipset=/sexxxdoll.com/gfwlist +server=/sexxhd.de/127.0.0.1#5335 +ipset=/sexxhd.de/gfwlist +server=/nike0594.com/127.0.0.1#5335 +ipset=/nike0594.com/gfwlist +server=/sexualhentai.net/127.0.0.1#5335 +ipset=/sexualhentai.net/gfwlist +server=/infowarsmedia.com/127.0.0.1#5335 +ipset=/infowarsmedia.com/gfwlist +server=/youwuss.com/127.0.0.1#5335 +ipset=/youwuss.com/gfwlist +server=/qr.ae/127.0.0.1#5335 +ipset=/qr.ae/gfwlist +server=/sapphicerotica.com/127.0.0.1#5335 +ipset=/sapphicerotica.com/gfwlist +server=/sexstoriespost.com/127.0.0.1#5335 +ipset=/sexstoriespost.com/gfwlist +server=/sexsimulator.com/127.0.0.1#5335 +ipset=/sexsimulator.com/gfwlist +server=/scholar.google.com.ar/127.0.0.1#5335 +ipset=/scholar.google.com.ar/gfwlist +server=/sexopornolive.com/127.0.0.1#5335 +ipset=/sexopornolive.com/gfwlist +server=/bmw-kuwait.com/127.0.0.1#5335 +ipset=/bmw-kuwait.com/gfwlist +server=/drbl.in/127.0.0.1#5335 +ipset=/drbl.in/gfwlist +server=/applecentre.com.au/127.0.0.1#5335 +ipset=/applecentre.com.au/gfwlist +server=/xhcdn.com/127.0.0.1#5335 +ipset=/xhcdn.com/gfwlist +server=/mearki.com/127.0.0.1#5335 +ipset=/mearki.com/gfwlist +server=/sexmix.net/127.0.0.1#5335 +ipset=/sexmix.net/gfwlist +server=/spiceworks.com/127.0.0.1#5335 +ipset=/spiceworks.com/gfwlist +server=/sexkorea.net/127.0.0.1#5335 +ipset=/sexkorea.net/gfwlist +server=/sexiranian.party/127.0.0.1#5335 +ipset=/sexiranian.party/gfwlist +server=/itunes12days.com/127.0.0.1#5335 +ipset=/itunes12days.com/gfwlist +server=/sexhotgames.com/127.0.0.1#5335 +ipset=/sexhotgames.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=/youtube-ui.l.google.com/127.0.0.1#5335 +ipset=/youtube-ui.l.google.com/gfwlist +server=/directvcinema.com/127.0.0.1#5335 +ipset=/directvcinema.com/gfwlist +server=/sexgames.cc/127.0.0.1#5335 +ipset=/sexgames.cc/gfwlist +server=/appledarwin.net/127.0.0.1#5335 +ipset=/appledarwin.net/gfwlist +server=/lolesports.com/127.0.0.1#5335 +ipset=/lolesports.com/gfwlist +server=/bioware.com/127.0.0.1#5335 +ipset=/bioware.com/gfwlist +server=/sexfilmeporno.com/127.0.0.1#5335 +ipset=/sexfilmeporno.com/gfwlist +server=/joanabliss.com/127.0.0.1#5335 +ipset=/joanabliss.com/gfwlist +server=/sexedanslepre.net/127.0.0.1#5335 +ipset=/sexedanslepre.net/gfwlist +server=/sexdug.com/127.0.0.1#5335 +ipset=/sexdug.com/gfwlist +server=/facebookappcenter.org/127.0.0.1#5335 +ipset=/facebookappcenter.org/gfwlist +server=/sexdolls.com/127.0.0.1#5335 +ipset=/sexdolls.com/gfwlist +server=/ieee-ims.org/127.0.0.1#5335 +ipset=/ieee-ims.org/gfwlist +server=/eromanga-ace.com/127.0.0.1#5335 +ipset=/eromanga-ace.com/gfwlist +server=/pinterest.th/127.0.0.1#5335 +ipset=/pinterest.th/gfwlist +server=/nikecompany.com/127.0.0.1#5335 +ipset=/nikecompany.com/gfwlist +server=/marvelpinball.com/127.0.0.1#5335 +ipset=/marvelpinball.com/gfwlist +server=/sexanimalvideos.com/127.0.0.1#5335 +ipset=/sexanimalvideos.com/gfwlist +server=/sexalarab.com/127.0.0.1#5335 +ipset=/sexalarab.com/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=/pinterest.tw/127.0.0.1#5335 +ipset=/pinterest.tw/gfwlist +server=/sex-hay.pro/127.0.0.1#5335 +ipset=/sex-hay.pro/gfwlist +server=/mpfinance.com/127.0.0.1#5335 +ipset=/mpfinance.com/gfwlist +server=/familypies.net/127.0.0.1#5335 +ipset=/familypies.net/gfwlist +server=/paypalx.com/127.0.0.1#5335 +ipset=/paypalx.com/gfwlist +server=/sex-gif.org/127.0.0.1#5335 +ipset=/sex-gif.org/gfwlist +server=/fortuneinsight.com/127.0.0.1#5335 +ipset=/fortuneinsight.com/gfwlist +server=/sessoamatorialeitaliano.com/127.0.0.1#5335 +ipset=/sessoamatorialeitaliano.com/gfwlist +server=/g-tvapp.com/127.0.0.1#5335 +ipset=/g-tvapp.com/gfwlist +server=/camcam.cc/127.0.0.1#5335 +ipset=/camcam.cc/gfwlist +server=/texttobuy.org/127.0.0.1#5335 +ipset=/texttobuy.org/gfwlist +server=/publicagentxxx.com/127.0.0.1#5335 +ipset=/publicagentxxx.com/gfwlist +server=/pokedex3d.com/127.0.0.1#5335 +ipset=/pokedex3d.com/gfwlist +server=/search.xxx/127.0.0.1#5335 +ipset=/search.xxx/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=/avhome.one/127.0.0.1#5335 +ipset=/avhome.one/gfwlist +server=/yingpianqu.com/127.0.0.1#5335 +ipset=/yingpianqu.com/gfwlist +server=/riotgames.co.kr/127.0.0.1#5335 +ipset=/riotgames.co.kr/gfwlist +server=/scorediscounts.club/127.0.0.1#5335 +ipset=/scorediscounts.club/gfwlist +server=/bigtithooker.com/127.0.0.1#5335 +ipset=/bigtithooker.com/gfwlist +server=/azattyk.org/127.0.0.1#5335 +ipset=/azattyk.org/gfwlist +server=/callhulu.com/127.0.0.1#5335 +ipset=/callhulu.com/gfwlist +server=/cartoon18.com/127.0.0.1#5335 +ipset=/cartoon18.com/gfwlist +server=/savitabhabhi.vip/127.0.0.1#5335 +ipset=/savitabhabhi.vip/gfwlist +server=/krakenjs.com/127.0.0.1#5335 +ipset=/krakenjs.com/gfwlist +server=/facegbok.com/127.0.0.1#5335 +ipset=/facegbok.com/gfwlist +server=/gaypornsky.com/127.0.0.1#5335 +ipset=/gaypornsky.com/gfwlist +server=/xoom.io/127.0.0.1#5335 +ipset=/xoom.io/gfwlist +server=/ebayshopping.org/127.0.0.1#5335 +ipset=/ebayshopping.org/gfwlist +server=/blogspot.com.eg/127.0.0.1#5335 +ipset=/blogspot.com.eg/gfwlist +server=/ruvideos.net/127.0.0.1#5335 +ipset=/ruvideos.net/gfwlist +server=/paypal-japan.com/127.0.0.1#5335 +ipset=/paypal-japan.com/gfwlist +server=/isexlove.tw/127.0.0.1#5335 +ipset=/isexlove.tw/gfwlist +server=/taylorandfrancis.com/127.0.0.1#5335 +ipset=/taylorandfrancis.com/gfwlist +server=/moreheadphones.com/127.0.0.1#5335 +ipset=/moreheadphones.com/gfwlist +server=/apple.ae/127.0.0.1#5335 +ipset=/apple.ae/gfwlist +server=/ebaymotors.com/127.0.0.1#5335 +ipset=/ebaymotors.com/gfwlist +server=/6e8xr2gk.me/127.0.0.1#5335 +ipset=/6e8xr2gk.me/gfwlist +server=/rule34pornvids.com/127.0.0.1#5335 +ipset=/rule34pornvids.com/gfwlist +server=/scholar.google.com.ua/127.0.0.1#5335 +ipset=/scholar.google.com.ua/gfwlist +server=/jdforum.net/127.0.0.1#5335 +ipset=/jdforum.net/gfwlist +server=/10bet.com/127.0.0.1#5335 +ipset=/10bet.com/gfwlist +server=/romantic-sex-video.com/127.0.0.1#5335 +ipset=/romantic-sex-video.com/gfwlist +server=/gimy.to/127.0.0.1#5335 +ipset=/gimy.to/gfwlist +server=/hentaicomic.ru/127.0.0.1#5335 +ipset=/hentaicomic.ru/gfwlist +server=/risextube.com/127.0.0.1#5335 +ipset=/risextube.com/gfwlist +server=/volvotrucks.si/127.0.0.1#5335 +ipset=/volvotrucks.si/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=/ikea.nl/127.0.0.1#5335 +ipset=/ikea.nl/gfwlist +server=/alphabet.be/127.0.0.1#5335 +ipset=/alphabet.be/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=/realsexdoll.com/127.0.0.1#5335 +ipset=/realsexdoll.com/gfwlist +server=/blizzard.nefficient.co.kr/127.0.0.1#5335 +ipset=/blizzard.nefficient.co.kr/gfwlist +server=/myfoxphoenix.com/127.0.0.1#5335 +ipset=/myfoxphoenix.com/gfwlist +server=/vzw.com/127.0.0.1#5335 +ipset=/vzw.com/gfwlist +server=/fetishdreamz.com/127.0.0.1#5335 +ipset=/fetishdreamz.com/gfwlist +server=/real-thaipussy.com/127.0.0.1#5335 +ipset=/real-thaipussy.com/gfwlist +server=/real-homemade-movies.com/127.0.0.1#5335 +ipset=/real-homemade-movies.com/gfwlist +server=/readerswivesonline.com/127.0.0.1#5335 +ipset=/readerswivesonline.com/gfwlist +server=/ebaycareers.com/127.0.0.1#5335 +ipset=/ebaycareers.com/gfwlist +server=/ogameblog.com/127.0.0.1#5335 +ipset=/ogameblog.com/gfwlist +server=/funimation.com/127.0.0.1#5335 +ipset=/funimation.com/gfwlist +server=/rbeopp.com/127.0.0.1#5335 +ipset=/rbeopp.com/gfwlist +server=/petiteamateurteen.com/127.0.0.1#5335 +ipset=/petiteamateurteen.com/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=/yourmomlovesanal.com/127.0.0.1#5335 +ipset=/yourmomlovesanal.com/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=/irribay.com/127.0.0.1#5335 +ipset=/irribay.com/gfwlist +server=/store-bridgestonesports.com/127.0.0.1#5335 +ipset=/store-bridgestonesports.com/gfwlist +server=/beijingnike.com/127.0.0.1#5335 +ipset=/beijingnike.com/gfwlist +server=/enjoyasianporn.com/127.0.0.1#5335 +ipset=/enjoyasianporn.com/gfwlist +server=/verisign.com.sg/127.0.0.1#5335 +ipset=/verisign.com.sg/gfwlist +server=/qombol.com/127.0.0.1#5335 +ipset=/qombol.com/gfwlist +server=/x.team/127.0.0.1#5335 +ipset=/x.team/gfwlist +server=/66wwmm.com/127.0.0.1#5335 +ipset=/66wwmm.com/gfwlist +server=/scatnetwork.com/127.0.0.1#5335 +ipset=/scatnetwork.com/gfwlist +server=/faceboks.com/127.0.0.1#5335 +ipset=/faceboks.com/gfwlist +server=/paypal.me/127.0.0.1#5335 +ipset=/paypal.me/gfwlist +server=/xanimeporn.com/127.0.0.1#5335 +ipset=/xanimeporn.com/gfwlist +server=/toutapp.com/127.0.0.1#5335 +ipset=/toutapp.com/gfwlist +server=/luxuretv.com/127.0.0.1#5335 +ipset=/luxuretv.com/gfwlist +server=/o365weve-dev.com/127.0.0.1#5335 +ipset=/o365weve-dev.com/gfwlist +server=/g1d1goob.xyz/127.0.0.1#5335 +ipset=/g1d1goob.xyz/gfwlist +server=/twitter.biz/127.0.0.1#5335 +ipset=/twitter.biz/gfwlist +server=/christymarks.com/127.0.0.1#5335 +ipset=/christymarks.com/gfwlist +server=/uproxy.org/127.0.0.1#5335 +ipset=/uproxy.org/gfwlist +server=/nikeplus.org/127.0.0.1#5335 +ipset=/nikeplus.org/gfwlist +server=/pheonix.money/127.0.0.1#5335 +ipset=/pheonix.money/gfwlist +server=/prostoporno.net/127.0.0.1#5335 +ipset=/prostoporno.net/gfwlist +server=/mastercard.no/127.0.0.1#5335 +ipset=/mastercard.no/gfwlist +server=/profreeporno.com/127.0.0.1#5335 +ipset=/profreeporno.com/gfwlist +server=/disneymagicmomentsme.com/127.0.0.1#5335 +ipset=/disneymagicmomentsme.com/gfwlist +server=/private.com/127.0.0.1#5335 +ipset=/private.com/gfwlist +server=/fbthirdpartypixel.com/127.0.0.1#5335 +ipset=/fbthirdpartypixel.com/gfwlist +server=/primematures.com/127.0.0.1#5335 +ipset=/primematures.com/gfwlist +server=/ciscopress.ch/127.0.0.1#5335 +ipset=/ciscopress.ch/gfwlist +server=/hentaiprn.com/127.0.0.1#5335 +ipset=/hentaiprn.com/gfwlist +server=/pricelesssydney.com/127.0.0.1#5335 +ipset=/pricelesssydney.com/gfwlist +server=/businessfocus.io/127.0.0.1#5335 +ipset=/businessfocus.io/gfwlist +server=/disneypeoplesurveys.com/127.0.0.1#5335 +ipset=/disneypeoplesurveys.com/gfwlist +server=/getscorecash.com/127.0.0.1#5335 +ipset=/getscorecash.com/gfwlist +server=/rakuten.com/127.0.0.1#5335 +ipset=/rakuten.com/gfwlist +server=/pornwhitelist.com/127.0.0.1#5335 +ipset=/pornwhitelist.com/gfwlist +server=/aucheapbeats.com/127.0.0.1#5335 +ipset=/aucheapbeats.com/gfwlist +server=/fox247.tv/127.0.0.1#5335 +ipset=/fox247.tv/gfwlist +server=/porntn.com/127.0.0.1#5335 +ipset=/porntn.com/gfwlist +server=/pornstarbyface.com/127.0.0.1#5335 +ipset=/pornstarbyface.com/gfwlist +server=/pornsocket.com/127.0.0.1#5335 +ipset=/pornsocket.com/gfwlist +server=/ebay.lt/127.0.0.1#5335 +ipset=/ebay.lt/gfwlist +server=/pornsitesnow.com/127.0.0.1#5335 +ipset=/pornsitesnow.com/gfwlist +server=/pornrips.cc/127.0.0.1#5335 +ipset=/pornrips.cc/gfwlist +server=/nineentertainment.com.au/127.0.0.1#5335 +ipset=/nineentertainment.com.au/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=/pornrabbit.com/127.0.0.1#5335 +ipset=/pornrabbit.com/gfwlist +server=/tellme.pw/127.0.0.1#5335 +ipset=/tellme.pw/gfwlist +server=/azure-dns.com/127.0.0.1#5335 +ipset=/azure-dns.com/gfwlist +server=/foxnewsopinion.com/127.0.0.1#5335 +ipset=/foxnewsopinion.com/gfwlist +server=/aspenpublishing.com/127.0.0.1#5335 +ipset=/aspenpublishing.com/gfwlist +server=/enemaporn.blogspot.com/127.0.0.1#5335 +ipset=/enemaporn.blogspot.com/gfwlist +server=/facedbook.com/127.0.0.1#5335 +ipset=/facedbook.com/gfwlist +server=/hiddenvoyeurspy.com/127.0.0.1#5335 +ipset=/hiddenvoyeurspy.com/gfwlist +server=/hkcitizenmedia.com/127.0.0.1#5335 +ipset=/hkcitizenmedia.com/gfwlist +server=/pornotron.net/127.0.0.1#5335 +ipset=/pornotron.net/gfwlist +server=/bridgestonesyb.com/127.0.0.1#5335 +ipset=/bridgestonesyb.com/gfwlist +server=/gayonthenet.net/127.0.0.1#5335 +ipset=/gayonthenet.net/gfwlist +server=/pornosfilmes.com/127.0.0.1#5335 +ipset=/pornosfilmes.com/gfwlist +server=/bmw.com.cy/127.0.0.1#5335 +ipset=/bmw.com.cy/gfwlist +server=/nvidia.nl/127.0.0.1#5335 +ipset=/nvidia.nl/gfwlist +server=/pornolandia.xxx/127.0.0.1#5335 +ipset=/pornolandia.xxx/gfwlist +server=/doi.org/127.0.0.1#5335 +ipset=/doi.org/gfwlist +server=/pornoirado.com/127.0.0.1#5335 +ipset=/pornoirado.com/gfwlist +server=/c0930.com/127.0.0.1#5335 +ipset=/c0930.com/gfwlist +server=/53worldsweeps.com/127.0.0.1#5335 +ipset=/53worldsweeps.com/gfwlist +server=/assoass.com/127.0.0.1#5335 +ipset=/assoass.com/gfwlist +server=/98916.tv/127.0.0.1#5335 +ipset=/98916.tv/gfwlist +server=/tpornstars.com/127.0.0.1#5335 +ipset=/tpornstars.com/gfwlist +server=/ikea.us/127.0.0.1#5335 +ipset=/ikea.us/gfwlist +server=/pornogids.net/127.0.0.1#5335 +ipset=/pornogids.net/gfwlist +server=/socalbmw.com/127.0.0.1#5335 +ipset=/socalbmw.com/gfwlist +server=/pornnut.com/127.0.0.1#5335 +ipset=/pornnut.com/gfwlist +server=/pornmaki.com/127.0.0.1#5335 +ipset=/pornmaki.com/gfwlist +server=/fuck-xxx-movies.com/127.0.0.1#5335 +ipset=/fuck-xxx-movies.com/gfwlist +server=/sourcingforebay.com.cn/127.0.0.1#5335 +ipset=/sourcingforebay.com.cn/gfwlist +server=/visa.co.jp/127.0.0.1#5335 +ipset=/visa.co.jp/gfwlist +server=/pornjizz.co/127.0.0.1#5335 +ipset=/pornjizz.co/gfwlist +server=/novojoy.com/127.0.0.1#5335 +ipset=/novojoy.com/gfwlist +server=/faceook.com/127.0.0.1#5335 +ipset=/faceook.com/gfwlist +server=/leagueoflegends.kr/127.0.0.1#5335 +ipset=/leagueoflegends.kr/gfwlist +server=/pornhd3x.tv/127.0.0.1#5335 +ipset=/pornhd3x.tv/gfwlist +server=/pornhd.com/127.0.0.1#5335 +ipset=/pornhd.com/gfwlist +server=/hkheadline.com/127.0.0.1#5335 +ipset=/hkheadline.com/gfwlist +server=/rushporn.xxx/127.0.0.1#5335 +ipset=/rushporn.xxx/gfwlist +server=/porngrabbz.com/127.0.0.1#5335 +ipset=/porngrabbz.com/gfwlist +server=/kum.com/127.0.0.1#5335 +ipset=/kum.com/gfwlist +server=/beatssales.com/127.0.0.1#5335 +ipset=/beatssales.com/gfwlist +server=/chinatimes.com/127.0.0.1#5335 +ipset=/chinatimes.com/gfwlist +server=/hackyourconsole.com/127.0.0.1#5335 +ipset=/hackyourconsole.com/gfwlist +server=/volvotrucks.pk/127.0.0.1#5335 +ipset=/volvotrucks.pk/gfwlist +server=/discord.gg/127.0.0.1#5335 +ipset=/discord.gg/gfwlist +server=/adobeprojectm.com/127.0.0.1#5335 +ipset=/adobeprojectm.com/gfwlist +server=/porngames.club/127.0.0.1#5335 +ipset=/porngames.club/gfwlist +server=/microsoft.lu/127.0.0.1#5335 +ipset=/microsoft.lu/gfwlist +server=/manorama.com/127.0.0.1#5335 +ipset=/manorama.com/gfwlist +server=/czechav.com/127.0.0.1#5335 +ipset=/czechav.com/gfwlist +server=/finenike.com/127.0.0.1#5335 +ipset=/finenike.com/gfwlist +server=/pornfactory.info/127.0.0.1#5335 +ipset=/pornfactory.info/gfwlist +server=/pinterest.in/127.0.0.1#5335 +ipset=/pinterest.in/gfwlist +server=/mini.ma/127.0.0.1#5335 +ipset=/mini.ma/gfwlist +server=/porndoe.com/127.0.0.1#5335 +ipset=/porndoe.com/gfwlist +server=/bmwsfl.com/127.0.0.1#5335 +ipset=/bmwsfl.com/gfwlist +server=/disney.ca/127.0.0.1#5335 +ipset=/disney.ca/gfwlist +server=/moapi.site/127.0.0.1#5335 +ipset=/moapi.site/gfwlist +server=/porndiamond.com/127.0.0.1#5335 +ipset=/porndiamond.com/gfwlist +server=/playapex.com/127.0.0.1#5335 +ipset=/playapex.com/gfwlist +server=/porndabster.com/127.0.0.1#5335 +ipset=/porndabster.com/gfwlist +server=/porncore.net/127.0.0.1#5335 +ipset=/porncore.net/gfwlist +server=/ulol.com/127.0.0.1#5335 +ipset=/ulol.com/gfwlist +server=/gcr.io/127.0.0.1#5335 +ipset=/gcr.io/gfwlist +server=/pornagent.xyz/127.0.0.1#5335 +ipset=/pornagent.xyz/gfwlist +server=/macossierra.com/127.0.0.1#5335 +ipset=/macossierra.com/gfwlist +server=/apple.ie/127.0.0.1#5335 +ipset=/apple.ie/gfwlist +server=/freeadultcomix.com/127.0.0.1#5335 +ipset=/freeadultcomix.com/gfwlist +server=/afewmomentswith.com/127.0.0.1#5335 +ipset=/afewmomentswith.com/gfwlist +server=/pearsonclinical.co.uk/127.0.0.1#5335 +ipset=/pearsonclinical.co.uk/gfwlist +server=/porn.xxx/127.0.0.1#5335 +ipset=/porn.xxx/gfwlist +server=/askfacebook.org/127.0.0.1#5335 +ipset=/askfacebook.org/gfwlist +server=/pussyspace.com/127.0.0.1#5335 +ipset=/pussyspace.com/gfwlist +server=/porn-gratis.info/127.0.0.1#5335 +ipset=/porn-gratis.info/gfwlist +server=/porn-comic.com/127.0.0.1#5335 +ipset=/porn-comic.com/gfwlist +server=/freeporno.asia/127.0.0.1#5335 +ipset=/freeporno.asia/gfwlist +server=/playyoungtube.com/127.0.0.1#5335 +ipset=/playyoungtube.com/gfwlist +server=/foxla.tv/127.0.0.1#5335 +ipset=/foxla.tv/gfwlist +server=/piratecams.com/127.0.0.1#5335 +ipset=/piratecams.com/gfwlist +server=/paradisehill.cc/127.0.0.1#5335 +ipset=/paradisehill.cc/gfwlist +server=/pinkdino.com/127.0.0.1#5335 +ipset=/pinkdino.com/gfwlist +server=/picacg2022.com/127.0.0.1#5335 +ipset=/picacg2022.com/gfwlist +server=/kindleoasis.org/127.0.0.1#5335 +ipset=/kindleoasis.org/gfwlist +server=/fuckmeplease.net/127.0.0.1#5335 +ipset=/fuckmeplease.net/gfwlist +server=/doujin-night.com/127.0.0.1#5335 +ipset=/doujin-night.com/gfwlist +server=/facebookmail.tv/127.0.0.1#5335 +ipset=/facebookmail.tv/gfwlist +server=/pervclips.com/127.0.0.1#5335 +ipset=/pervclips.com/gfwlist +server=/apple.co.nz/127.0.0.1#5335 +ipset=/apple.co.nz/gfwlist +server=/ikea.kr/127.0.0.1#5335 +ipset=/ikea.kr/gfwlist +server=/deutsche-pornos-kostenlos.xxx/127.0.0.1#5335 +ipset=/deutsche-pornos-kostenlos.xxx/gfwlist +server=/peopledreamfunding.com/127.0.0.1#5335 +ipset=/peopledreamfunding.com/gfwlist +server=/xtapes.to/127.0.0.1#5335 +ipset=/xtapes.to/gfwlist +server=/kijijiforbusiness.ca/127.0.0.1#5335 +ipset=/kijijiforbusiness.ca/gfwlist +server=/lifewire.com/127.0.0.1#5335 +ipset=/lifewire.com/gfwlist +server=/youtube.com.eg/127.0.0.1#5335 +ipset=/youtube.com.eg/gfwlist +server=/sweetadult-tube.com/127.0.0.1#5335 +ipset=/sweetadult-tube.com/gfwlist +server=/pasionmujeres.com/127.0.0.1#5335 +ipset=/pasionmujeres.com/gfwlist +server=/pancolle-movie.jp/127.0.0.1#5335 +ipset=/pancolle-movie.jp/gfwlist +server=/paidpornguide.com/127.0.0.1#5335 +ipset=/paidpornguide.com/gfwlist +server=/hhvm.com/127.0.0.1#5335 +ipset=/hhvm.com/gfwlist +server=/bitmex.com/127.0.0.1#5335 +ipset=/bitmex.com/gfwlist +server=/candypleasure.com/127.0.0.1#5335 +ipset=/candypleasure.com/gfwlist +server=/pelvicexam.info/127.0.0.1#5335 +ipset=/pelvicexam.info/gfwlist +server=/op7979.com/127.0.0.1#5335 +ipset=/op7979.com/gfwlist +server=/onlyfanspw.com/127.0.0.1#5335 +ipset=/onlyfanspw.com/gfwlist +server=/onlydudes.com/127.0.0.1#5335 +ipset=/onlydudes.com/gfwlist +server=/binance.vision/127.0.0.1#5335 +ipset=/binance.vision/gfwlist +server=/fscebook.com/127.0.0.1#5335 +ipset=/fscebook.com/gfwlist +server=/bmw-connecteddrive.kr/127.0.0.1#5335 +ipset=/bmw-connecteddrive.kr/gfwlist +server=/onejav.com/127.0.0.1#5335 +ipset=/onejav.com/gfwlist +server=/omorashi.org/127.0.0.1#5335 +ipset=/omorashi.org/gfwlist +server=/axbdoll.com.tw/127.0.0.1#5335 +ipset=/axbdoll.com.tw/gfwlist +server=/fandango.com/127.0.0.1#5335 +ipset=/fandango.com/gfwlist +server=/obutu.com/127.0.0.1#5335 +ipset=/obutu.com/gfwlist +server=/findyourlimits.com/127.0.0.1#5335 +ipset=/findyourlimits.com/gfwlist +server=/nintendostore.com/127.0.0.1#5335 +ipset=/nintendostore.com/gfwlist +server=/ebaycbt.co.kr/127.0.0.1#5335 +ipset=/ebaycbt.co.kr/gfwlist +server=/expertmaker.com/127.0.0.1#5335 +ipset=/expertmaker.com/gfwlist +server=/iyottube.com/127.0.0.1#5335 +ipset=/iyottube.com/gfwlist +server=/jiyu-kobo.co.jp/127.0.0.1#5335 +ipset=/jiyu-kobo.co.jp/gfwlist +server=/disney.ro/127.0.0.1#5335 +ipset=/disney.ro/gfwlist +server=/flickr.net/127.0.0.1#5335 +ipset=/flickr.net/gfwlist +server=/noveltrove.com/127.0.0.1#5335 +ipset=/noveltrove.com/gfwlist +server=/theopportunityproject.org/127.0.0.1#5335 +ipset=/theopportunityproject.org/gfwlist +server=/rarbgway.org/127.0.0.1#5335 +ipset=/rarbgway.org/gfwlist +server=/youtube.pk/127.0.0.1#5335 +ipset=/youtube.pk/gfwlist +server=/embl.it/127.0.0.1#5335 +ipset=/embl.it/gfwlist +server=/terapeak.ca/127.0.0.1#5335 +ipset=/terapeak.ca/gfwlist +server=/livejasminbabes.net/127.0.0.1#5335 +ipset=/livejasminbabes.net/gfwlist +server=/nichepornsites.com/127.0.0.1#5335 +ipset=/nichepornsites.com/gfwlist +server=/dragonagekeep.com/127.0.0.1#5335 +ipset=/dragonagekeep.com/gfwlist +server=/new-redtube.com/127.0.0.1#5335 +ipset=/new-redtube.com/gfwlist +server=/neswangy.net/127.0.0.1#5335 +ipset=/neswangy.net/gfwlist +server=/simplify.com/127.0.0.1#5335 +ipset=/simplify.com/gfwlist +server=/hdpornfree.xxx/127.0.0.1#5335 +ipset=/hdpornfree.xxx/gfwlist +server=/identrust.com/127.0.0.1#5335 +ipset=/identrust.com/gfwlist +server=/mini-connected.fi/127.0.0.1#5335 +ipset=/mini-connected.fi/gfwlist +server=/nakednews.com/127.0.0.1#5335 +ipset=/nakednews.com/gfwlist +server=/airiti.com/127.0.0.1#5335 +ipset=/airiti.com/gfwlist +server=/naijauncut.com/127.0.0.1#5335 +ipset=/naijauncut.com/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=/myyoungwifeisnude.com/127.0.0.1#5335 +ipset=/myyoungwifeisnude.com/gfwlist +server=/partylikeits1986.org/127.0.0.1#5335 +ipset=/partylikeits1986.org/gfwlist +server=/globalsign.eu/127.0.0.1#5335 +ipset=/globalsign.eu/gfwlist +server=/gaycamvideos.net/127.0.0.1#5335 +ipset=/gaycamvideos.net/gfwlist +server=/mysexygfs.com/127.0.0.1#5335 +ipset=/mysexygfs.com/gfwlist +server=/mysexgames.com/127.0.0.1#5335 +ipset=/mysexgames.com/gfwlist +server=/bmw-powertrain.com/127.0.0.1#5335 +ipset=/bmw-powertrain.com/gfwlist +server=/fox11.com/127.0.0.1#5335 +ipset=/fox11.com/gfwlist +server=/yahoo.com.sa/127.0.0.1#5335 +ipset=/yahoo.com.sa/gfwlist +server=/nurofen.co.nz/127.0.0.1#5335 +ipset=/nurofen.co.nz/gfwlist +server=/javporn.tech/127.0.0.1#5335 +ipset=/javporn.tech/gfwlist +server=/gannett.com/127.0.0.1#5335 +ipset=/gannett.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=/donpornogratis.com/127.0.0.1#5335 +ipset=/donpornogratis.com/gfwlist +server=/hentaimangaporn.com/127.0.0.1#5335 +ipset=/hentaimangaporn.com/gfwlist +server=/slack-imgs.com/127.0.0.1#5335 +ipset=/slack-imgs.com/gfwlist +server=/bestkinky.com/127.0.0.1#5335 +ipset=/bestkinky.com/gfwlist +server=/ero-labs.online/127.0.0.1#5335 +ipset=/ero-labs.online/gfwlist +server=/officialbeatsbydreshop.com/127.0.0.1#5335 +ipset=/officialbeatsbydreshop.com/gfwlist +server=/dyttapis.com/127.0.0.1#5335 +ipset=/dyttapis.com/gfwlist +server=/xboxgamestudios.com/127.0.0.1#5335 +ipset=/xboxgamestudios.com/gfwlist +server=/mrdeepfakes.com/127.0.0.1#5335 +ipset=/mrdeepfakes.com/gfwlist +server=/menatplay.com/127.0.0.1#5335 +ipset=/menatplay.com/gfwlist +server=/bizarresexuality.com/127.0.0.1#5335 +ipset=/bizarresexuality.com/gfwlist +server=/bloomberg.co.jp/127.0.0.1#5335 +ipset=/bloomberg.co.jp/gfwlist +server=/lethalhardcore.com/127.0.0.1#5335 +ipset=/lethalhardcore.com/gfwlist +server=/morazzia.com/127.0.0.1#5335 +ipset=/morazzia.com/gfwlist +server=/appleiphone.hu/127.0.0.1#5335 +ipset=/appleiphone.hu/gfwlist +server=/hotntubes.com/127.0.0.1#5335 +ipset=/hotntubes.com/gfwlist +server=/hentaisea.com/127.0.0.1#5335 +ipset=/hentaisea.com/gfwlist +server=/momshardcoreporn.com/127.0.0.1#5335 +ipset=/momshardcoreporn.com/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=/snowmiku.com/127.0.0.1#5335 +ipset=/snowmiku.com/gfwlist +server=/momsfuckingboys.net/127.0.0.1#5335 +ipset=/momsfuckingboys.net/gfwlist +server=/foxcareers.com/127.0.0.1#5335 +ipset=/foxcareers.com/gfwlist +server=/serverfault.com/127.0.0.1#5335 +ipset=/serverfault.com/gfwlist +server=/dentalhypotheses.com/127.0.0.1#5335 +ipset=/dentalhypotheses.com/gfwlist +server=/tasteofpremium.jp/127.0.0.1#5335 +ipset=/tasteofpremium.jp/gfwlist +server=/exotic-ghana.com/127.0.0.1#5335 +ipset=/exotic-ghana.com/gfwlist +server=/ebay25.com/127.0.0.1#5335 +ipset=/ebay25.com/gfwlist +server=/nna.jp/127.0.0.1#5335 +ipset=/nna.jp/gfwlist +server=/mixmaturesex.com/127.0.0.1#5335 +ipset=/mixmaturesex.com/gfwlist +server=/gtv1.org/127.0.0.1#5335 +ipset=/gtv1.org/gfwlist +server=/mitnaka.com/127.0.0.1#5335 +ipset=/mitnaka.com/gfwlist +server=/blogspot.no/127.0.0.1#5335 +ipset=/blogspot.no/gfwlist +server=/pin.it/127.0.0.1#5335 +ipset=/pin.it/gfwlist +server=/milfsover30.com/127.0.0.1#5335 +ipset=/milfsover30.com/gfwlist +server=/imperialbusiness.school/127.0.0.1#5335 +ipset=/imperialbusiness.school/gfwlist +server=/ftv.com.tw/127.0.0.1#5335 +ipset=/ftv.com.tw/gfwlist +server=/akamai-access.com/127.0.0.1#5335 +ipset=/akamai-access.com/gfwlist +server=/18comic.company/127.0.0.1#5335 +ipset=/18comic.company/gfwlist +server=/huobi.com/127.0.0.1#5335 +ipset=/huobi.com/gfwlist +server=/milfed.com/127.0.0.1#5335 +ipset=/milfed.com/gfwlist +server=/deepfreeze.com/127.0.0.1#5335 +ipset=/deepfreeze.com/gfwlist +server=/paypal-login.info/127.0.0.1#5335 +ipset=/paypal-login.info/gfwlist +server=/bestmallawards.com/127.0.0.1#5335 +ipset=/bestmallawards.com/gfwlist +server=/mantochichi.com/127.0.0.1#5335 +ipset=/mantochichi.com/gfwlist +server=/kfs.io/127.0.0.1#5335 +ipset=/kfs.io/gfwlist +server=/manga18.art/127.0.0.1#5335 +ipset=/manga18.art/gfwlist +server=/realclearlife.com/127.0.0.1#5335 +ipset=/realclearlife.com/gfwlist +server=/diao.asia/127.0.0.1#5335 +ipset=/diao.asia/gfwlist +server=/fatstube.com/127.0.0.1#5335 +ipset=/fatstube.com/gfwlist +server=/singtaonewscorp.com/127.0.0.1#5335 +ipset=/singtaonewscorp.com/gfwlist +server=/intel.cu/127.0.0.1#5335 +ipset=/intel.cu/gfwlist +server=/asminternational.org/127.0.0.1#5335 +ipset=/asminternational.org/gfwlist +server=/ikea.com.sa/127.0.0.1#5335 +ipset=/ikea.com.sa/gfwlist +server=/madchensex.com/127.0.0.1#5335 +ipset=/madchensex.com/gfwlist +server=/getprintersupports.com/127.0.0.1#5335 +ipset=/getprintersupports.com/gfwlist +server=/businessinsider.my/127.0.0.1#5335 +ipset=/businessinsider.my/gfwlist +server=/gettyimages.ca/127.0.0.1#5335 +ipset=/gettyimages.ca/gfwlist +server=/pugpig-dev.com/127.0.0.1#5335 +ipset=/pugpig-dev.com/gfwlist +server=/singtao.com/127.0.0.1#5335 +ipset=/singtao.com/gfwlist +server=/lovepartners.life/127.0.0.1#5335 +ipset=/lovepartners.life/gfwlist +server=/lovehomeporn.com/127.0.0.1#5335 +ipset=/lovehomeporn.com/gfwlist +server=/vk-cdn.net/127.0.0.1#5335 +ipset=/vk-cdn.net/gfwlist +server=/ltsports.com.tw/127.0.0.1#5335 +ipset=/ltsports.com.tw/gfwlist +server=/lolhentai.net/127.0.0.1#5335 +ipset=/lolhentai.net/gfwlist +server=/loholidayhk.com/127.0.0.1#5335 +ipset=/loholidayhk.com/gfwlist +server=/localxlist.org/127.0.0.1#5335 +ipset=/localxlist.org/gfwlist +server=/liveprivates.com/127.0.0.1#5335 +ipset=/liveprivates.com/gfwlist +server=/diamantewebcam.com/127.0.0.1#5335 +ipset=/diamantewebcam.com/gfwlist +server=/ikea.ru/127.0.0.1#5335 +ipset=/ikea.ru/gfwlist +server=/nintendo.es/127.0.0.1#5335 +ipset=/nintendo.es/gfwlist +server=/letsfuckme.net/127.0.0.1#5335 +ipset=/letsfuckme.net/gfwlist +server=/letsdoeit.com/127.0.0.1#5335 +ipset=/letsdoeit.com/gfwlist +server=/lemoncams.com/127.0.0.1#5335 +ipset=/lemoncams.com/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=/lazymike.com/127.0.0.1#5335 +ipset=/lazymike.com/gfwlist +server=/101boyvideos.com/127.0.0.1#5335 +ipset=/101boyvideos.com/gfwlist +server=/voyeurmonkey.com/127.0.0.1#5335 +ipset=/voyeurmonkey.com/gfwlist +server=/javprime.net/127.0.0.1#5335 +ipset=/javprime.net/gfwlist +server=/avstar01.me/127.0.0.1#5335 +ipset=/avstar01.me/gfwlist +server=/igi-global.com/127.0.0.1#5335 +ipset=/igi-global.com/gfwlist +server=/nyaa.si/127.0.0.1#5335 +ipset=/nyaa.si/gfwlist +server=/api-priconne-redive.cygames.jp/127.0.0.1#5335 +ipset=/api-priconne-redive.cygames.jp/gfwlist +server=/jetbrains.team/127.0.0.1#5335 +ipset=/jetbrains.team/gfwlist +server=/freefacebook.com/127.0.0.1#5335 +ipset=/freefacebook.com/gfwlist +server=/kostenlosepornoclips.com/127.0.0.1#5335 +ipset=/kostenlosepornoclips.com/gfwlist +server=/visa-news.jp/127.0.0.1#5335 +ipset=/visa-news.jp/gfwlist +server=/marveldimensionofheroes.com/127.0.0.1#5335 +ipset=/marveldimensionofheroes.com/gfwlist +server=/kir2kos.net/127.0.0.1#5335 +ipset=/kir2kos.net/gfwlist +server=/swjfo.com/127.0.0.1#5335 +ipset=/swjfo.com/gfwlist +server=/iaablog.com/127.0.0.1#5335 +ipset=/iaablog.com/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=/nakedgirls.biz/127.0.0.1#5335 +ipset=/nakedgirls.biz/gfwlist +server=/card.io/127.0.0.1#5335 +ipset=/card.io/gfwlist +server=/disney.fr/127.0.0.1#5335 +ipset=/disney.fr/gfwlist +server=/karupsha.com/127.0.0.1#5335 +ipset=/karupsha.com/gfwlist +server=/faronicswise.co.uk/127.0.0.1#5335 +ipset=/faronicswise.co.uk/gfwlist +server=/guim.co.uk/127.0.0.1#5335 +ipset=/guim.co.uk/gfwlist +server=/kairakudoujin.net/127.0.0.1#5335 +ipset=/kairakudoujin.net/gfwlist +server=/bmw.com.do/127.0.0.1#5335 +ipset=/bmw.com.do/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=/alphabet.co.hu/127.0.0.1#5335 +ipset=/alphabet.co.hu/gfwlist +server=/vrsumo.com/127.0.0.1#5335 +ipset=/vrsumo.com/gfwlist +server=/justfullporn.org/127.0.0.1#5335 +ipset=/justfullporn.org/gfwlist +server=/appsonebay.net/127.0.0.1#5335 +ipset=/appsonebay.net/gfwlist +server=/sankei-books.co.jp/127.0.0.1#5335 +ipset=/sankei-books.co.jp/gfwlist +server=/tenbyfotolia.com/127.0.0.1#5335 +ipset=/tenbyfotolia.com/gfwlist +server=/joinmaidez.com/127.0.0.1#5335 +ipset=/joinmaidez.com/gfwlist +server=/jpg4.biz/127.0.0.1#5335 +ipset=/jpg4.biz/gfwlist +server=/degruyter.com/127.0.0.1#5335 +ipset=/degruyter.com/gfwlist +server=/vuvuzela.io/127.0.0.1#5335 +ipset=/vuvuzela.io/gfwlist +server=/erolabs.cloud/127.0.0.1#5335 +ipset=/erolabs.cloud/gfwlist +server=/softbank.tv/127.0.0.1#5335 +ipset=/softbank.tv/gfwlist +server=/pixnet.pro/127.0.0.1#5335 +ipset=/pixnet.pro/gfwlist +server=/akadns6.net/127.0.0.1#5335 +ipset=/akadns6.net/gfwlist +server=/hentaihaven.com/127.0.0.1#5335 +ipset=/hentaihaven.com/gfwlist +server=/penthouse.com/127.0.0.1#5335 +ipset=/penthouse.com/gfwlist +server=/vanish.ro/127.0.0.1#5335 +ipset=/vanish.ro/gfwlist +server=/zwtvusa.com/127.0.0.1#5335 +ipset=/zwtvusa.com/gfwlist +server=/facebookconsultant.org/127.0.0.1#5335 +ipset=/facebookconsultant.org/gfwlist +server=/javhdfree.net/127.0.0.1#5335 +ipset=/javhdfree.net/gfwlist +server=/javhaven.com/127.0.0.1#5335 +ipset=/javhaven.com/gfwlist +server=/harperapps.com/127.0.0.1#5335 +ipset=/harperapps.com/gfwlist +server=/pussysexgames.com/127.0.0.1#5335 +ipset=/pussysexgames.com/gfwlist +server=/newbeatsblackfriday.com/127.0.0.1#5335 +ipset=/newbeatsblackfriday.com/gfwlist +server=/ggsrv.com/127.0.0.1#5335 +ipset=/ggsrv.com/gfwlist +server=/tube4world.com/127.0.0.1#5335 +ipset=/tube4world.com/gfwlist +server=/jav.place/127.0.0.1#5335 +ipset=/jav.place/gfwlist +server=/japon-girls.com/127.0.0.1#5335 +ipset=/japon-girls.com/gfwlist +server=/youtubego.in/127.0.0.1#5335 +ipset=/youtubego.in/gfwlist +server=/ita-do.com/127.0.0.1#5335 +ipset=/ita-do.com/gfwlist +server=/iranx.net/127.0.0.1#5335 +ipset=/iranx.net/gfwlist +server=/umagazine.com.hk/127.0.0.1#5335 +ipset=/umagazine.com.hk/gfwlist +server=/intescort.com/127.0.0.1#5335 +ipset=/intescort.com/gfwlist +server=/instabang.com/127.0.0.1#5335 +ipset=/instabang.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=/indianhiddencams.com/127.0.0.1#5335 +ipset=/indianhiddencams.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=/independentdubaiescorts.com/127.0.0.1#5335 +ipset=/independentdubaiescorts.com/gfwlist +server=/incestporn.xxx/127.0.0.1#5335 +ipset=/incestporn.xxx/gfwlist +server=/visaluxuryhotels.com.ar/127.0.0.1#5335 +ipset=/visaluxuryhotels.com.ar/gfwlist +server=/sciencedirect.com/127.0.0.1#5335 +ipset=/sciencedirect.com/gfwlist +server=/readthedocs.org/127.0.0.1#5335 +ipset=/readthedocs.org/gfwlist +server=/duckgo.com/127.0.0.1#5335 +ipset=/duckgo.com/gfwlist +server=/igotpornpics.com/127.0.0.1#5335 +ipset=/igotpornpics.com/gfwlist +server=/pcstore.com.tw/127.0.0.1#5335 +ipset=/pcstore.com.tw/gfwlist +server=/hypnotube.com/127.0.0.1#5335 +ipset=/hypnotube.com/gfwlist +server=/premiumfs.de/127.0.0.1#5335 +ipset=/premiumfs.de/gfwlist +server=/mastercardservices.com/127.0.0.1#5335 +ipset=/mastercardservices.com/gfwlist +server=/dmm.com/127.0.0.1#5335 +ipset=/dmm.com/gfwlist +server=/hussiepass.com/127.0.0.1#5335 +ipset=/hussiepass.com/gfwlist +server=/jinsilubanzhao.com/127.0.0.1#5335 +ipset=/jinsilubanzhao.com/gfwlist +server=/huangse.love/127.0.0.1#5335 +ipset=/huangse.love/gfwlist +server=/nextmedia.com.tw/127.0.0.1#5335 +ipset=/nextmedia.com.tw/gfwlist +server=/zoho.com/127.0.0.1#5335 +ipset=/zoho.com/gfwlist +server=/hottystop.com/127.0.0.1#5335 +ipset=/hottystop.com/gfwlist +server=/av4.us/127.0.0.1#5335 +ipset=/av4.us/gfwlist +server=/hotsexvideo.mobi/127.0.0.1#5335 +ipset=/hotsexvideo.mobi/gfwlist +server=/ebay-sales.com/127.0.0.1#5335 +ipset=/ebay-sales.com/gfwlist +server=/javrave.club/127.0.0.1#5335 +ipset=/javrave.club/gfwlist +server=/steam-api.com/127.0.0.1#5335 +ipset=/steam-api.com/gfwlist +server=/airwick.nl/127.0.0.1#5335 +ipset=/airwick.nl/gfwlist +server=/historyofdota.org/127.0.0.1#5335 +ipset=/historyofdota.org/gfwlist +server=/nikefoampositeshoes.com/127.0.0.1#5335 +ipset=/nikefoampositeshoes.com/gfwlist +server=/illusionfb.cn/127.0.0.1#5335 +ipset=/illusionfb.cn/gfwlist +server=/paypal-here.com/127.0.0.1#5335 +ipset=/paypal-here.com/gfwlist +server=/akamqi.com/127.0.0.1#5335 +ipset=/akamqi.com/gfwlist +server=/newsapi.com.au/127.0.0.1#5335 +ipset=/newsapi.com.au/gfwlist +server=/sexygirlspics.com/127.0.0.1#5335 +ipset=/sexygirlspics.com/gfwlist +server=/mcdonaldsparties.co.nz/127.0.0.1#5335 +ipset=/mcdonaldsparties.co.nz/gfwlist +server=/horsecumshot.net/127.0.0.1#5335 +ipset=/horsecumshot.net/gfwlist +server=/kuke.com/127.0.0.1#5335 +ipset=/kuke.com/gfwlist +server=/press.vin/127.0.0.1#5335 +ipset=/press.vin/gfwlist +server=/stepsiblingscaught.com/127.0.0.1#5335 +ipset=/stepsiblingscaught.com/gfwlist +server=/hidefporn.ws/127.0.0.1#5335 +ipset=/hidefporn.ws/gfwlist +server=/hernudepics.com/127.0.0.1#5335 +ipset=/hernudepics.com/gfwlist +server=/nypost.com/127.0.0.1#5335 +ipset=/nypost.com/gfwlist +server=/hentaiworldporn.com/127.0.0.1#5335 +ipset=/hentaiworldporn.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=/hgamer.pro/127.0.0.1#5335 +ipset=/hgamer.pro/gfwlist +server=/verisign.com.au/127.0.0.1#5335 +ipset=/verisign.com.au/gfwlist +server=/tube2017.com/127.0.0.1#5335 +ipset=/tube2017.com/gfwlist +server=/cock4stepmom.com/127.0.0.1#5335 +ipset=/cock4stepmom.com/gfwlist +server=/indazn.com/127.0.0.1#5335 +ipset=/indazn.com/gfwlist +server=/chatwhores.sex/127.0.0.1#5335 +ipset=/chatwhores.sex/gfwlist +server=/facebook-pmdcenter.com/127.0.0.1#5335 +ipset=/facebook-pmdcenter.com/gfwlist +server=/hulupremium.com/127.0.0.1#5335 +ipset=/hulupremium.com/gfwlist +server=/yahoo.com.sb/127.0.0.1#5335 +ipset=/yahoo.com.sb/gfwlist +server=/foxsports.com.mx/127.0.0.1#5335 +ipset=/foxsports.com.mx/gfwlist +server=/leagueoflegends.info/127.0.0.1#5335 +ipset=/leagueoflegends.info/gfwlist +server=/vkcache.com/127.0.0.1#5335 +ipset=/vkcache.com/gfwlist +server=/hentaihaven.io/127.0.0.1#5335 +ipset=/hentaihaven.io/gfwlist +server=/postini.com/127.0.0.1#5335 +ipset=/postini.com/gfwlist +server=/hentai-space.supertop-100.com/127.0.0.1#5335 +ipset=/hentai-space.supertop-100.com/gfwlist +server=/visa.com.ec/127.0.0.1#5335 +ipset=/visa.com.ec/gfwlist +server=/hentai-cosplays.com/127.0.0.1#5335 +ipset=/hentai-cosplays.com/gfwlist +server=/bmw-motorrad.ru/127.0.0.1#5335 +ipset=/bmw-motorrad.ru/gfwlist +server=/identrust.co.uk/127.0.0.1#5335 +ipset=/identrust.co.uk/gfwlist +server=/hdsex.pro/127.0.0.1#5335 +ipset=/hdsex.pro/gfwlist +server=/hotindianbabe.com/127.0.0.1#5335 +ipset=/hotindianbabe.com/gfwlist +server=/9anime.ws/127.0.0.1#5335 +ipset=/9anime.ws/gfwlist +server=/youtube.com.mx/127.0.0.1#5335 +ipset=/youtube.com.mx/gfwlist +server=/familyswap.xxx/127.0.0.1#5335 +ipset=/familyswap.xxx/gfwlist +server=/china-facebook.com/127.0.0.1#5335 +ipset=/china-facebook.com/gfwlist +server=/bikaa.xyz/127.0.0.1#5335 +ipset=/bikaa.xyz/gfwlist +server=/scholar.google.lu/127.0.0.1#5335 +ipset=/scholar.google.lu/gfwlist +server=/hentaivn.net/127.0.0.1#5335 +ipset=/hentaivn.net/gfwlist +server=/thepornguy.org/127.0.0.1#5335 +ipset=/thepornguy.org/gfwlist +server=/supermario.com/127.0.0.1#5335 +ipset=/supermario.com/gfwlist +server=/thetread.com/127.0.0.1#5335 +ipset=/thetread.com/gfwlist +server=/guysnightlife.com/127.0.0.1#5335 +ipset=/guysnightlife.com/gfwlist +server=/youtube.com.au/127.0.0.1#5335 +ipset=/youtube.com.au/gfwlist +server=/guaranitermal.com/127.0.0.1#5335 +ipset=/guaranitermal.com/gfwlist +server=/cheapheadsetmall.com/127.0.0.1#5335 +ipset=/cheapheadsetmall.com/gfwlist +server=/grabhentai.com/127.0.0.1#5335 +ipset=/grabhentai.com/gfwlist +server=/chrome.com/127.0.0.1#5335 +ipset=/chrome.com/gfwlist +server=/mastercard.co.kr/127.0.0.1#5335 +ipset=/mastercard.co.kr/gfwlist +server=/beeg.rest/127.0.0.1#5335 +ipset=/beeg.rest/gfwlist +server=/iphoneunlockimei.com/127.0.0.1#5335 +ipset=/iphoneunlockimei.com/gfwlist +server=/yourtv.com.au/127.0.0.1#5335 +ipset=/yourtv.com.au/gfwlist +server=/proquest.com/127.0.0.1#5335 +ipset=/proquest.com/gfwlist +server=/binance.charity/127.0.0.1#5335 +ipset=/binance.charity/gfwlist +server=/udfs.com/127.0.0.1#5335 +ipset=/udfs.com/gfwlist +server=/cambiaip.org/127.0.0.1#5335 +ipset=/cambiaip.org/gfwlist +server=/fflnk.net/127.0.0.1#5335 +ipset=/fflnk.net/gfwlist +server=/gaystarnews.com/127.0.0.1#5335 +ipset=/gaystarnews.com/gfwlist +server=/mastercard.rs/127.0.0.1#5335 +ipset=/mastercard.rs/gfwlist +server=/roloxxx.com/127.0.0.1#5335 +ipset=/roloxxx.com/gfwlist +server=/swtor.com/127.0.0.1#5335 +ipset=/swtor.com/gfwlist +server=/mariokart7.com/127.0.0.1#5335 +ipset=/mariokart7.com/gfwlist +server=/pornaf.com/127.0.0.1#5335 +ipset=/pornaf.com/gfwlist +server=/flatandfuckedmilfs.com/127.0.0.1#5335 +ipset=/flatandfuckedmilfs.com/gfwlist +server=/gaybeeg.info/127.0.0.1#5335 +ipset=/gaybeeg.info/gfwlist +server=/gamerotic.com/127.0.0.1#5335 +ipset=/gamerotic.com/gfwlist +server=/escandinavia-arg.com/127.0.0.1#5335 +ipset=/escandinavia-arg.com/gfwlist +server=/ox.ac.uk/127.0.0.1#5335 +ipset=/ox.ac.uk/gfwlist +server=/bdsmpornonly.com/127.0.0.1#5335 +ipset=/bdsmpornonly.com/gfwlist +server=/fuq.com/127.0.0.1#5335 +ipset=/fuq.com/gfwlist +server=/gameroom.com/127.0.0.1#5335 +ipset=/gameroom.com/gfwlist +server=/bloomsburycollections.com/127.0.0.1#5335 +ipset=/bloomsburycollections.com/gfwlist +server=/nonstopfap.com/127.0.0.1#5335 +ipset=/nonstopfap.com/gfwlist +server=/fuckingmatures.com/127.0.0.1#5335 +ipset=/fuckingmatures.com/gfwlist +server=/mini-windsor.ca/127.0.0.1#5335 +ipset=/mini-windsor.ca/gfwlist +server=/uplynk.com/127.0.0.1#5335 +ipset=/uplynk.com/gfwlist +server=/xn--hb4aw0g.com/127.0.0.1#5335 +ipset=/xn--hb4aw0g.com/gfwlist +server=/freelifetimefuckbook.com/127.0.0.1#5335 +ipset=/freelifetimefuckbook.com/gfwlist +server=/vfsco.co.uk/127.0.0.1#5335 +ipset=/vfsco.co.uk/gfwlist +server=/paypalprepagata.com/127.0.0.1#5335 +ipset=/paypalprepagata.com/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=/mastercard.jo/127.0.0.1#5335 +ipset=/mastercard.jo/gfwlist +server=/sipriyearbook.org/127.0.0.1#5335 +ipset=/sipriyearbook.org/gfwlist +server=/freejavbt.com/127.0.0.1#5335 +ipset=/freejavbt.com/gfwlist +server=/naver.com/127.0.0.1#5335 +ipset=/naver.com/gfwlist +server=/pinterest.ec/127.0.0.1#5335 +ipset=/pinterest.ec/gfwlist +server=/fitnakedgirls.com/127.0.0.1#5335 +ipset=/fitnakedgirls.com/gfwlist +server=/minicooper.ca/127.0.0.1#5335 +ipset=/minicooper.ca/gfwlist +server=/hbox.jp/127.0.0.1#5335 +ipset=/hbox.jp/gfwlist +server=/bmw.com.mk/127.0.0.1#5335 +ipset=/bmw.com.mk/gfwlist +server=/kijijiautos.ca/127.0.0.1#5335 +ipset=/kijijiautos.ca/gfwlist +server=/mini.gp/127.0.0.1#5335 +ipset=/mini.gp/gfwlist +server=/av6k.com/127.0.0.1#5335 +ipset=/av6k.com/gfwlist +server=/amlg.io/127.0.0.1#5335 +ipset=/amlg.io/gfwlist +server=/fapality.com/127.0.0.1#5335 +ipset=/fapality.com/gfwlist +server=/fansteek.com/127.0.0.1#5335 +ipset=/fansteek.com/gfwlist +server=/fanleakstoday.com/127.0.0.1#5335 +ipset=/fanleakstoday.com/gfwlist +server=/trustcor.ca/127.0.0.1#5335 +ipset=/trustcor.ca/gfwlist +server=/facebooc.com/127.0.0.1#5335 +ipset=/facebooc.com/gfwlist +server=/ext-twitch.tv/127.0.0.1#5335 +ipset=/ext-twitch.tv/gfwlist +server=/facebolk.com/127.0.0.1#5335 +ipset=/facebolk.com/gfwlist +server=/amateur-exhibitionist.org/127.0.0.1#5335 +ipset=/amateur-exhibitionist.org/gfwlist +server=/amebaownd.com/127.0.0.1#5335 +ipset=/amebaownd.com/gfwlist +server=/evaelfie.com/127.0.0.1#5335 +ipset=/evaelfie.com/gfwlist +server=/escortamsterdam1.com/127.0.0.1#5335 +ipset=/escortamsterdam1.com/gfwlist +server=/airwick.jp/127.0.0.1#5335 +ipset=/airwick.jp/gfwlist +server=/vhxqa1.com/127.0.0.1#5335 +ipset=/vhxqa1.com/gfwlist +server=/nintendo.tw/127.0.0.1#5335 +ipset=/nintendo.tw/gfwlist +server=/canon-europe.com/127.0.0.1#5335 +ipset=/canon-europe.com/gfwlist +server=/volvopenta.it/127.0.0.1#5335 +ipset=/volvopenta.it/gfwlist +server=/volvogroup.nl/127.0.0.1#5335 +ipset=/volvogroup.nl/gfwlist +server=/entensity.net/127.0.0.1#5335 +ipset=/entensity.net/gfwlist +server=/instagramdi.com/127.0.0.1#5335 +ipset=/instagramdi.com/gfwlist +server=/harpercollins.com/127.0.0.1#5335 +ipset=/harpercollins.com/gfwlist +server=/nubiles-casting.com/127.0.0.1#5335 +ipset=/nubiles-casting.com/gfwlist +server=/twtrdns.net/127.0.0.1#5335 +ipset=/twtrdns.net/gfwlist +server=/enema-porn.com/127.0.0.1#5335 +ipset=/enema-porn.com/gfwlist +server=/adultlister.com/127.0.0.1#5335 +ipset=/adultlister.com/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=/adidas.nl/127.0.0.1#5335 +ipset=/adidas.nl/gfwlist +server=/extreme-board.com/127.0.0.1#5335 +ipset=/extreme-board.com/gfwlist +server=/thewonderful101.com/127.0.0.1#5335 +ipset=/thewonderful101.com/gfwlist +server=/dumps69.com/127.0.0.1#5335 +ipset=/dumps69.com/gfwlist +server=/dswz88.xyz/127.0.0.1#5335 +ipset=/dswz88.xyz/gfwlist +server=/drunkentop.com/127.0.0.1#5335 +ipset=/drunkentop.com/gfwlist +server=/drtuber.com/127.0.0.1#5335 +ipset=/drtuber.com/gfwlist +server=/beautyescortsamsterdam.com/127.0.0.1#5335 +ipset=/beautyescortsamsterdam.com/gfwlist +server=/lawdata.com.tw/127.0.0.1#5335 +ipset=/lawdata.com.tw/gfwlist +server=/tvb.com/127.0.0.1#5335 +ipset=/tvb.com/gfwlist +server=/bossae.com/127.0.0.1#5335 +ipset=/bossae.com/gfwlist +server=/bmwofcentralpa.com/127.0.0.1#5335 +ipset=/bmwofcentralpa.com/gfwlist +server=/dirtyonline.com/127.0.0.1#5335 +ipset=/dirtyonline.com/gfwlist +server=/illusionn2.com/127.0.0.1#5335 +ipset=/illusionn2.com/gfwlist +server=/yy55.tv/127.0.0.1#5335 +ipset=/yy55.tv/gfwlist +server=/dirtyfarmer.com/127.0.0.1#5335 +ipset=/dirtyfarmer.com/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=/dhlestudio.com.co/127.0.0.1#5335 +ipset=/dhlestudio.com.co/gfwlist +server=/deasians.com/127.0.0.1#5335 +ipset=/deasians.com/gfwlist +server=/bmw-motorrad.sk/127.0.0.1#5335 +ipset=/bmw-motorrad.sk/gfwlist +server=/rapetube.me/127.0.0.1#5335 +ipset=/rapetube.me/gfwlist +server=/czechcasting.com/127.0.0.1#5335 +ipset=/czechcasting.com/gfwlist +server=/paypal.hk/127.0.0.1#5335 +ipset=/paypal.hk/gfwlist +server=/hifacebook.info/127.0.0.1#5335 +ipset=/hifacebook.info/gfwlist +server=/adcommerce.tv/127.0.0.1#5335 +ipset=/adcommerce.tv/gfwlist +server=/czechbiporn.com/127.0.0.1#5335 +ipset=/czechbiporn.com/gfwlist +server=/mybridgestoneeducation.com/127.0.0.1#5335 +ipset=/mybridgestoneeducation.com/gfwlist +server=/developers.facebook.com/127.0.0.1#5335 +ipset=/developers.facebook.com/gfwlist +server=/ebaydts.com/127.0.0.1#5335 +ipset=/ebaydts.com/gfwlist +server=/yandex.ua/127.0.0.1#5335 +ipset=/yandex.ua/gfwlist +server=/starwarsbattlefront2.com/127.0.0.1#5335 +ipset=/starwarsbattlefront2.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=/crabporn.com/127.0.0.1#5335 +ipset=/crabporn.com/gfwlist +server=/okazudouga.blog.jp/127.0.0.1#5335 +ipset=/okazudouga.blog.jp/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=/sportsfacebook.com/127.0.0.1#5335 +ipset=/sportsfacebook.com/gfwlist +server=/discountbeatsbydre-us.com/127.0.0.1#5335 +ipset=/discountbeatsbydre-us.com/gfwlist +server=/hentairead.com/127.0.0.1#5335 +ipset=/hentairead.com/gfwlist +server=/lapriere.jp/127.0.0.1#5335 +ipset=/lapriere.jp/gfwlist +server=/netlock.hu/127.0.0.1#5335 +ipset=/netlock.hu/gfwlist +server=/mastercardbiz.com/127.0.0.1#5335 +ipset=/mastercardbiz.com/gfwlist +server=/webofscience.com/127.0.0.1#5335 +ipset=/webofscience.com/gfwlist +server=/ch9.ms/127.0.0.1#5335 +ipset=/ch9.ms/gfwlist +server=/miamifintechfestival.com/127.0.0.1#5335 +ipset=/miamifintechfestival.com/gfwlist +server=/cc18.biz/127.0.0.1#5335 +ipset=/cc18.biz/gfwlist +server=/gaypornmenu.com/127.0.0.1#5335 +ipset=/gaypornmenu.com/gfwlist +server=/vfsco.jp/127.0.0.1#5335 +ipset=/vfsco.jp/gfwlist +server=/ilongman.com/127.0.0.1#5335 +ipset=/ilongman.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=/iotinactionevents.com/127.0.0.1#5335 +ipset=/iotinactionevents.com/gfwlist +server=/sonypicturesmuseum.com/127.0.0.1#5335 +ipset=/sonypicturesmuseum.com/gfwlist +server=/scatfap.com/127.0.0.1#5335 +ipset=/scatfap.com/gfwlist +server=/ebay.com.sg/127.0.0.1#5335 +ipset=/ebay.com.sg/gfwlist +server=/yahoo.com/127.0.0.1#5335 +ipset=/yahoo.com/gfwlist +server=/scholar.google.ru/127.0.0.1#5335 +ipset=/scholar.google.ru/gfwlist +server=/nikebetterworld.org/127.0.0.1#5335 +ipset=/nikebetterworld.org/gfwlist +server=/learnwithleague.com/127.0.0.1#5335 +ipset=/learnwithleague.com/gfwlist +server=/zakzak.co.jp/127.0.0.1#5335 +ipset=/zakzak.co.jp/gfwlist +server=/drdrebeats-usa.com/127.0.0.1#5335 +ipset=/drdrebeats-usa.com/gfwlist +server=/camstreams.tv/127.0.0.1#5335 +ipset=/camstreams.tv/gfwlist +server=/privacysimplified.com/127.0.0.1#5335 +ipset=/privacysimplified.com/gfwlist +server=/softether-download.com/127.0.0.1#5335 +ipset=/softether-download.com/gfwlist +server=/bigboobsandhotsex.com/127.0.0.1#5335 +ipset=/bigboobsandhotsex.com/gfwlist +server=/xboxone.co/127.0.0.1#5335 +ipset=/xboxone.co/gfwlist +server=/headphonesbeatsaudio.com/127.0.0.1#5335 +ipset=/headphonesbeatsaudio.com/gfwlist +server=/newpppp.com/127.0.0.1#5335 +ipset=/newpppp.com/gfwlist +server=/paypal-business.net/127.0.0.1#5335 +ipset=/paypal-business.net/gfwlist +server=/bdsmboard.org/127.0.0.1#5335 +ipset=/bdsmboard.org/gfwlist +server=/sex-av.com/127.0.0.1#5335 +ipset=/sex-av.com/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=/youtube.ma/127.0.0.1#5335 +ipset=/youtube.ma/gfwlist +server=/kkff2484.live/127.0.0.1#5335 +ipset=/kkff2484.live/gfwlist +server=/youtube.jo/127.0.0.1#5335 +ipset=/youtube.jo/gfwlist +server=/byjhd.com/127.0.0.1#5335 +ipset=/byjhd.com/gfwlist +server=/ebaylocal.net/127.0.0.1#5335 +ipset=/ebaylocal.net/gfwlist +server=/visa.com.my/127.0.0.1#5335 +ipset=/visa.com.my/gfwlist +server=/playstation.net/127.0.0.1#5335 +ipset=/playstation.net/gfwlist +server=/tver.jp/127.0.0.1#5335 +ipset=/tver.jp/gfwlist +server=/vercel-dns.com/127.0.0.1#5335 +ipset=/vercel-dns.com/gfwlist +server=/brazzers-xxx.net/127.0.0.1#5335 +ipset=/brazzers-xxx.net/gfwlist +server=/gynoexam.info/127.0.0.1#5335 +ipset=/gynoexam.info/gfwlist +server=/yours-customised.mini.com/127.0.0.1#5335 +ipset=/yours-customised.mini.com/gfwlist +server=/dojinwatch.com/127.0.0.1#5335 +ipset=/dojinwatch.com/gfwlist +server=/acgcf.com/127.0.0.1#5335 +ipset=/acgcf.com/gfwlist +server=/miniso.pk/127.0.0.1#5335 +ipset=/miniso.pk/gfwlist +server=/dcard.link/127.0.0.1#5335 +ipset=/dcard.link/gfwlist +server=/volvotruckcenter.no/127.0.0.1#5335 +ipset=/volvotruckcenter.no/gfwlist +server=/visa.com.do/127.0.0.1#5335 +ipset=/visa.com.do/gfwlist +server=/blacksonblondes.com/127.0.0.1#5335 +ipset=/blacksonblondes.com/gfwlist +server=/sonypicturestelevision.com/127.0.0.1#5335 +ipset=/sonypicturestelevision.com/gfwlist +server=/sexflashgame.org/127.0.0.1#5335 +ipset=/sexflashgame.org/gfwlist +server=/toppornsites.com/127.0.0.1#5335 +ipset=/toppornsites.com/gfwlist +server=/amateurporn.photos/127.0.0.1#5335 +ipset=/amateurporn.photos/gfwlist +server=/texture.com/127.0.0.1#5335 +ipset=/texture.com/gfwlist +server=/elitvip.ru/127.0.0.1#5335 +ipset=/elitvip.ru/gfwlist +server=/ikea.qa/127.0.0.1#5335 +ipset=/ikea.qa/gfwlist +server=/sextop.net/127.0.0.1#5335 +ipset=/sextop.net/gfwlist +server=/vtsociety.org/127.0.0.1#5335 +ipset=/vtsociety.org/gfwlist +server=/scholar.google.pt/127.0.0.1#5335 +ipset=/scholar.google.pt/gfwlist +server=/visaeurope.lu/127.0.0.1#5335 +ipset=/visaeurope.lu/gfwlist +server=/swisssign.org/127.0.0.1#5335 +ipset=/swisssign.org/gfwlist +server=/ikea.cl/127.0.0.1#5335 +ipset=/ikea.cl/gfwlist +server=/teslaenergy.services/127.0.0.1#5335 +ipset=/teslaenergy.services/gfwlist +server=/ggpht.com/127.0.0.1#5335 +ipset=/ggpht.com/gfwlist +server=/mastercardezsavings.com/127.0.0.1#5335 +ipset=/mastercardezsavings.com/gfwlist +server=/pximg.net/127.0.0.1#5335 +ipset=/pximg.net/gfwlist +server=/gettyimages.dk/127.0.0.1#5335 +ipset=/gettyimages.dk/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=/tickdata.com/127.0.0.1#5335 +ipset=/tickdata.com/gfwlist +server=/animepornhd.com/127.0.0.1#5335 +ipset=/animepornhd.com/gfwlist +server=/ibook.eu/127.0.0.1#5335 +ipset=/ibook.eu/gfwlist +server=/handbags-nike.com/127.0.0.1#5335 +ipset=/handbags-nike.com/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=/citylab.com/127.0.0.1#5335 +ipset=/citylab.com/gfwlist +server=/aptoide.com/127.0.0.1#5335 +ipset=/aptoide.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=/amateurs-gone-wild.com/127.0.0.1#5335 +ipset=/amateurs-gone-wild.com/gfwlist +server=/instagrem.com/127.0.0.1#5335 +ipset=/instagrem.com/gfwlist +server=/bmw.ie/127.0.0.1#5335 +ipset=/bmw.ie/gfwlist +server=/paypalprepagata.net/127.0.0.1#5335 +ipset=/paypalprepagata.net/gfwlist +server=/nhentai.xxx/127.0.0.1#5335 +ipset=/nhentai.xxx/gfwlist +server=/my-formosa.com/127.0.0.1#5335 +ipset=/my-formosa.com/gfwlist +server=/scholar.google.com.mx/127.0.0.1#5335 +ipset=/scholar.google.com.mx/gfwlist +server=/allinternal.com/127.0.0.1#5335 +ipset=/allinternal.com/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=/9cao9.com/127.0.0.1#5335 +ipset=/9cao9.com/gfwlist +server=/bmw.ua/127.0.0.1#5335 +ipset=/bmw.ua/gfwlist +server=/ioffergift.com/127.0.0.1#5335 +ipset=/ioffergift.com/gfwlist +server=/adultvirtualworlds.net/127.0.0.1#5335 +ipset=/adultvirtualworlds.net/gfwlist +server=/sexsexe1.com/127.0.0.1#5335 +ipset=/sexsexe1.com/gfwlist +server=/adultinfojpn.com/127.0.0.1#5335 +ipset=/adultinfojpn.com/gfwlist +server=/twimg.com/127.0.0.1#5335 +ipset=/twimg.com/gfwlist +server=/adultblogtoplist.com/127.0.0.1#5335 +ipset=/adultblogtoplist.com/gfwlist +server=/intellearningseries.com/127.0.0.1#5335 +ipset=/intellearningseries.com/gfwlist +server=/alphabet.ch/127.0.0.1#5335 +ipset=/alphabet.ch/gfwlist +server=/adult3dporno.com/127.0.0.1#5335 +ipset=/adult3dporno.com/gfwlist +server=/9xlove.xyz/127.0.0.1#5335 +ipset=/9xlove.xyz/gfwlist +server=/cnn.it/127.0.0.1#5335 +ipset=/cnn.it/gfwlist +server=/91cy.app/127.0.0.1#5335 +ipset=/91cy.app/gfwlist +server=/61jxbs42.xyz/127.0.0.1#5335 +ipset=/61jxbs42.xyz/gfwlist +server=/rsg.sc/127.0.0.1#5335 +ipset=/rsg.sc/gfwlist +server=/vfsco.in/127.0.0.1#5335 +ipset=/vfsco.in/gfwlist +server=/sg120.me/127.0.0.1#5335 +ipset=/sg120.me/gfwlist +server=/intel.jo/127.0.0.1#5335 +ipset=/intel.jo/gfwlist +server=/18pornsex.com/127.0.0.1#5335 +ipset=/18pornsex.com/gfwlist +server=/akamaitech.net/127.0.0.1#5335 +ipset=/akamaitech.net/gfwlist +server=/gale.com/127.0.0.1#5335 +ipset=/gale.com/gfwlist +server=/fox10phoenix.com/127.0.0.1#5335 +ipset=/fox10phoenix.com/gfwlist +server=/avstar07.me/127.0.0.1#5335 +ipset=/avstar07.me/gfwlist +server=/youtubekids.com/127.0.0.1#5335 +ipset=/youtubekids.com/gfwlist +server=/bmwusatires.com/127.0.0.1#5335 +ipset=/bmwusatires.com/gfwlist +server=/bloomberg.com/127.0.0.1#5335 +ipset=/bloomberg.com/gfwlist +server=/nikeb.com/127.0.0.1#5335 +ipset=/nikeb.com/gfwlist +server=/minispecialoffers.ca/127.0.0.1#5335 +ipset=/minispecialoffers.ca/gfwlist +server=/cw.com.tw/127.0.0.1#5335 +ipset=/cw.com.tw/gfwlist +server=/appleantilles.com/127.0.0.1#5335 +ipset=/appleantilles.com/gfwlist +server=/bigboobspov.com/127.0.0.1#5335 +ipset=/bigboobspov.com/gfwlist +server=/pokemonletsgoeevee.com/127.0.0.1#5335 +ipset=/pokemonletsgoeevee.com/gfwlist +server=/bmw-welt.tv/127.0.0.1#5335 +ipset=/bmw-welt.tv/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=/ikea.rs/127.0.0.1#5335 +ipset=/ikea.rs/gfwlist +server=/kubakuba1996.com/127.0.0.1#5335 +ipset=/kubakuba1996.com/gfwlist +server=/nikesb.com/127.0.0.1#5335 +ipset=/nikesb.com/gfwlist +server=/vkuseraudio.com/127.0.0.1#5335 +ipset=/vkuseraudio.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=/pinterest.vn/127.0.0.1#5335 +ipset=/pinterest.vn/gfwlist +server=/sitepoint.com/127.0.0.1#5335 +ipset=/sitepoint.com/gfwlist +server=/sci-hub.st/127.0.0.1#5335 +ipset=/sci-hub.st/gfwlist +server=/amateur-threesomes.com/127.0.0.1#5335 +ipset=/amateur-threesomes.com/gfwlist +server=/aomedia.org/127.0.0.1#5335 +ipset=/aomedia.org/gfwlist +server=/ea-anz-press.com/127.0.0.1#5335 +ipset=/ea-anz-press.com/gfwlist +server=/delvenetworks.com/127.0.0.1#5335 +ipset=/delvenetworks.com/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=/ebayinternetsalestax.com/127.0.0.1#5335 +ipset=/ebayinternetsalestax.com/gfwlist +server=/stheadline.com/127.0.0.1#5335 +ipset=/stheadline.com/gfwlist +server=/tiburon.com/127.0.0.1#5335 +ipset=/tiburon.com/gfwlist +server=/boyspornpics.com/127.0.0.1#5335 +ipset=/boyspornpics.com/gfwlist +server=/oecd-ilibrary.org/127.0.0.1#5335 +ipset=/oecd-ilibrary.org/gfwlist +server=/bmw-connecteddrive.fi/127.0.0.1#5335 +ipset=/bmw-connecteddrive.fi/gfwlist +server=/anfutong.com/127.0.0.1#5335 +ipset=/anfutong.com/gfwlist +server=/libsolutions.net/127.0.0.1#5335 +ipset=/libsolutions.net/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=/easyanticheat.net/127.0.0.1#5335 +ipset=/easyanticheat.net/gfwlist +server=/thepaypalshop.com/127.0.0.1#5335 +ipset=/thepaypalshop.com/gfwlist +server=/eaassets-a.akamaihd.net/127.0.0.1#5335 +ipset=/eaassets-a.akamaihd.net/gfwlist +server=/swisssign.com/127.0.0.1#5335 +ipset=/swisssign.com/gfwlist +server=/softbankworld.com/127.0.0.1#5335 +ipset=/softbankworld.com/gfwlist +server=/huffingtonpost.fr/127.0.0.1#5335 +ipset=/huffingtonpost.fr/gfwlist +server=/volvoce.com/127.0.0.1#5335 +ipset=/volvoce.com/gfwlist +server=/ascelibrary.org/127.0.0.1#5335 +ipset=/ascelibrary.org/gfwlist +server=/disney.co.kr/127.0.0.1#5335 +ipset=/disney.co.kr/gfwlist +server=/mytvsuper.com/127.0.0.1#5335 +ipset=/mytvsuper.com/gfwlist +server=/bestsexcam.com/127.0.0.1#5335 +ipset=/bestsexcam.com/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=/foxbusinessgo.com/127.0.0.1#5335 +ipset=/foxbusinessgo.com/gfwlist +server=/static-verizon.com/127.0.0.1#5335 +ipset=/static-verizon.com/gfwlist +server=/decorativemodels.com/127.0.0.1#5335 +ipset=/decorativemodels.com/gfwlist +server=/surflite.co/127.0.0.1#5335 +ipset=/surflite.co/gfwlist +server=/babble.com/127.0.0.1#5335 +ipset=/babble.com/gfwlist +server=/achievementanalytics.com/127.0.0.1#5335 +ipset=/achievementanalytics.com/gfwlist +server=/javfun.me/127.0.0.1#5335 +ipset=/javfun.me/gfwlist +server=/ebayauthenticate.com.cn/127.0.0.1#5335 +ipset=/ebayauthenticate.com.cn/gfwlist +server=/mini-grouparchive.com/127.0.0.1#5335 +ipset=/mini-grouparchive.com/gfwlist +server=/bmw.gp/127.0.0.1#5335 +ipset=/bmw.gp/gfwlist diff --git a/luci-app-ssr-plus/root/etc/ssrplus/mosdns-config.yaml b/luci-app-ssr-plus/root/etc/ssrplus/mosdns-config.yaml new file mode 100644 index 00000000..a0b9f5c5 --- /dev/null +++ b/luci-app-ssr-plus/root/etc/ssrplus/mosdns-config.yaml @@ -0,0 +1,43 @@ +log: + level: info +plugins: + - tag: lazy_cache + type: cache + args: + size: 8000 + lazy_cache_ttl: 86400 + + - tag: forward_google + type: forward + args: + concurrent: 2 + upstreams: + + - tag: main_sequence_disable_IPv6 + type: sequence + args: + - exec: $lazy_cache + - exec: prefer_ipv4 + - exec: $forward_google + - matches: + - qtype 28 65 + exec: reject 0 + + - tag: main_sequence_with_IPv6 + type: sequence + args: + - exec: $lazy_cache + - exec: $forward_google + + - tag: udp_server + type: udp_server + args: + entry: DNS_MODE + listen: 0.0.0.0:DNS_PORT + + - tag: tcp_server + type: tcp_server + args: + entry: DNS_MODE + listen: 0.0.0.0:DNS_PORT + diff --git a/luci-app-ssr-plus/root/etc/ssrplus/netflix.list b/luci-app-ssr-plus/root/etc/ssrplus/netflix.list new file mode 100644 index 00000000..f98f711b --- /dev/null +++ b/luci-app-ssr-plus/root/etc/ssrplus/netflix.list @@ -0,0 +1,25 @@ +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 new file mode 100644 index 00000000..445ff62f --- /dev/null +++ b/luci-app-ssr-plus/root/etc/ssrplus/netflixip.list @@ -0,0 +1,30 @@ +8.41.4.0/24 +23.23.189.144/28 +23.246.0.0/18 +34.195.253.0/25 +34.210.42.111/32 +37.77.184.0/21 +38.72.126.0/24 +45.57.0.0/17 +52.24.178.0/24 +52.35.140.0/24 +52.89.124.203/32 +54.148.37.5/32 +54.204.25.0/28 +54.213.167.0/24 +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 +203.75.84.0/24 +203.198.13.0/24 +203.198.80.0/24 +207.45.72.0/22 +208.75.76.0/22 +210.0.153.0/24 diff --git a/luci-app-ssr-plus/root/etc/ssrplus/oversea_list.conf b/luci-app-ssr-plus/root/etc/ssrplus/oversea_list.conf new file mode 100644 index 00000000..ae50fb90 --- /dev/null +++ b/luci-app-ssr-plus/root/etc/ssrplus/oversea_list.conf @@ -0,0 +1,192 @@ +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 new file mode 100644 index 00000000..9055fcb9 --- /dev/null +++ b/luci-app-ssr-plus/root/etc/ssrplus/white.list @@ -0,0 +1,7 @@ +bilibili.com +bilibili.cn +bilivideo.com +bilivideo.cn +biliapi.com +biliapi.net +apple.com \ No newline at end of file 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 new file mode 100755 index 00000000..72b33818 --- /dev/null +++ b/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus @@ -0,0 +1,45 @@ +#!/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 +[ -s "/etc/config/shadowsocksr" ] || /etc/init.d/shadowsocksr reset + +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 +sed -i "s/option encrypt_method_v2ray_ss/option encrypt_method_ss/g" /etc/config/shadowsocksr +sed -i "s/option xtls/option tls/g" /etc/config/shadowsocksr +sed -i "/option vless_flow/d" /etc/config/shadowsocksr +sed -i "/option fingerprint 'disable'/d" /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 new file mode 100755 index 00000000..f637d509 --- /dev/null +++ b/luci-app-ssr-plus/root/usr/bin/ssr-monitor @@ -0,0 +1,134 @@ +#!/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 + #dns2tcp + if [ "$pdnsd_process" -eq 1 ]; then + icount=$(busybox ps -w | grep $TMP_BIN_PATH/dns2tcp | grep -v grep | wc -l) + if [ "$icount" -lt 1 ]; then #如果进程挂掉就重启它 + logger -t "$NAME" "dns2tcp tunnel error.restart!" + echolog "dns2tcp tunnel error.restart!" + dnsserver=$(uci_get_by_type global tunnel_forward 8.8.4.4:53) + kill -9 $(busybox ps -w | grep $TMP_BIN_PATH/dns2tcp | grep -v grep | awk '{print $1}') >/dev/null 2>&1 + ln_start_bin $(first_type dns2tcp) dns2tcp -L "127.0.0.1#$dns_port" -R "${dnsserver/:/#}" + fi + #dns2socks + elif [ "$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 $dnsserver tunnel error.restart!" + echolog "dns2socks $dnsserver tunnel error.restart!" + dnsserver=$(uci_get_by_type global tunnel_forward 8.8.4.4:53) + 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 127.0.0.1:$dns_port -q + fi + #mosdns + elif [ "$pdnsd_process" -eq 3 ]; then + icount=$(busybox ps -w | grep $TMP_BIN_PATH/mosdns | grep -v grep | wc -l) + if [ "$icount" -lt 1 ]; then #如果进程挂掉就重启它 + logger -t "$NAME" "mosdns tunnel error.restart!" + echolog "mosdns tunnel error.restart!" + dnsserver=$(uci_get_by_type global tunnel_forward 8.8.4.4:53) + kill -9 $(busybox ps -w | grep $TMP_BIN_PATH/mosdns | grep -v grep | awk '{print $1}') >/dev/null 2>&1 + ln_start_bin $(first_type mosdns) mosdns start -c /etc/mosdns/config.yaml + fi + fi + #chinadns-ng + if [ "$(uci -q get "dhcp.@dnsmasq[0]._unused_ssrp_changed")" = "1" ]; then + icount=$(busybox ps -w | grep $TMP_BIN_PATH/chinadns-ng | grep -v grep | wc -l) + if [ "$icount" -lt 1 ]; then #如果进程挂掉就重启它 + logger -t "$NAME" "chinadns-ng tunnel error.restart!" + echolog "chinadns-ng tunnel error.restart!" + chinadns=$(uci_get_by_type global chinadns_forward) + wandns="$(ifstatus wan | jsonfilter -e '@["dns-server"][0]' || echo "119.29.29.29")" + case "$chinadns" in + "wan") chinadns="$wandns" ;; + ""|"wan_114") chinadns="$wandns,114.114.114.114" ;; + esac + kill -9 $(busybox ps -w | grep $TMP_BIN_PATH/chinadns-ng | grep -v grep | awk '{print $1}') >/dev/null 2>&1 + ln_start_bin $(first_type chinadns-ng) chinadns-ng -l $china_dns_port -4 china -p 3 -c ${chinadns/:/#} -t 127.0.0.1#$dns_port -N -f -r + 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 new file mode 100755 index 00000000..547d910a --- /dev/null +++ b/luci-app-ssr-plus/root/usr/bin/ssr-rules @@ -0,0 +1,424 @@ +#!/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) + [ -z "$IFNAME" ] && IFNAME=$(uci -P /var/state get network.$name.device 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 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 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) + [ -z "$IFNAME" ] && IFNAME=$(uci -P /var/state get network.$name.device 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 new file mode 100755 index 00000000..5a2a3709 --- /dev/null +++ b/luci-app-ssr-plus/root/usr/bin/ssr-switch @@ -0,0 +1,155 @@ +#!/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 new file mode 100644 index 00000000..2c381259 --- /dev/null +++ b/luci-app-ssr-plus/root/usr/share/rpcd/acl.d/luci-app-ssr-plus.json @@ -0,0 +1,11 @@ +{ + "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 new file mode 100755 index 00000000..4015644f --- /dev/null +++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/chinaipset.sh @@ -0,0 +1,7 @@ +#!/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 new file mode 100755 index 00000000..332d51e5 --- /dev/null +++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua @@ -0,0 +1,505 @@ +#!/usr/bin/lua + +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 chain = arg[5] or "0" +local chain_local_port = string.split(chain, "/")[2] 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, + alterId = (server.v2ray_protocol == "vmess" or not server.v2ray_protocol) and tonumber(server.alter_id) or nil, + 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.tls == '1') or (server.reality == '1')) and server.tls_flow 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_ss) or nil, + uot = (server.v2ray_protocol == "shadowsocks") and (server.uot == '1') or nil, + ivCheck = (server.v2ray_protocol == "shadowsocks") and (server.ivCheck == '1') or nil, + } + } + } +end +function socks_http() + outbound_settings = { + version = server.socks_ver or nil, + servers = { + { + address = server.server, + port = tonumber(server.server_port), + users = (server.auth_enable == "1") and { + { + user = server.username, + pass = server.password + } + } or nil + } + } + } +end +function wireguard() + outbound_settings = { + secretKey = server.private_key, + address = server.local_addresses, + peers = { + { + publicKey = server.peer_pubkey, + preSharedKey = server.preshared_key, + endpoint = server.server .. ":" .. server.server_port + } + }, + mtu = tonumber(server.mtu) + } +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, + wireguard = function() + wireguard() + 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.tls == '1') and "tls" or (server.reality == '1') and "reality" or nil, + tlsSettings = (server.tls == '1') and { + -- tls + alpn = server.tls_alpn, + fingerprint = server.fingerprint, + allowInsecure = (server.insecure == "1"), + serverName = server.tls_host, + certificates = server.certificate and { + usage = "verify", + certificateFile = server.certpath + } or nil + } or nil, + realitySettings = (server.reality == '1') and { + show = false, + publicKey = server.reality_publickey, + shortId = server.reality_shortid, + spiderX = server.reality_spiderx, + fingerprint = server.fingerprint, + 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 + headers = (server.ws_host or server.tls_host) and { + -- headers + Host = server.ws_host or server.tls_host + } or nil, + path = server.ws_path, + maxEarlyData = tonumber(server.ws_ed) or nil, + earlyDataHeaderName = server.ws_ed_header 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.grpc_mode == "multi") 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.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 = server.tls_alpn or {"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"] = tonumber(server.concurrency) 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 hysteria = { + server = server.server_port and (server.server .. ":" .. server.server_port) or (server.server .. ":" .. server.port_range), + bandwidth = { + up = tonumber(server.uplink_capacity) and tonumber(server.uplink_capacity) .. " mbps" or nil, + down = tonumber(server.downlink_capacity) and tonumber(server.downlink_capacity) .. " mbps" or nil + }, + socks5 = (proto:find("tcp") and tonumber(socks_port) and tonumber(socks_port) ~= 0) and { + listen = "0.0.0.0:" .. tonumber(socks_port), + disable_udp = false + } or nil, + transport = { + type = server.transport_protocol, + udp = { + hopInterval = tonumber(server.hopinterval) and tonumber(server.hopinterval) .. "s" or nil + } + }, +--[[ + tcpTProxy = (proto:find("tcp") and local_port ~= "0") and { + listen = "0.0.0.0:" .. tonumber(local_port) +} or nil, +]] + tcpRedirect = (proto:find("tcp") and local_port ~= "0") and { + listen = "0.0.0.0:" .. tonumber(local_port) + } or nil, + udpTProxy = (proto:find("udp") and local_port ~= "0") and { + listen = "0.0.0.0:" .. tonumber(local_port) + } or nil, + obfs = (server.flag_obfs == "1") and { + type = server.obfs_type, + salamander = { password = server.salamander } + } or nil, + quic = (server.flag_quicparam == "1" ) and { + initStreamReceiveWindow = (server.initstreamreceivewindow and server.initstreamreceivewindow or nil), + maxStreamReceiveWindow = (server.maxstreamseceivewindow and server.maxstreamseceivewindow or nil), + initConnReceiveWindow = (server.initconnreceivewindow and server.initconnreceivewindow or nil), + maxConnReceiveWindow = (server.maxconnreceivewindow and server.maxconnreceivewindow or nil), + maxIdleTimeout = (tonumber(server.maxidletimeout) and tonumber(server.maxidletimeout) .. "s" or nil), + keepAlivePeriod = (tonumber(server.keepaliveperiod) and tonumber(server.keepaliveperiod) .. "s" or nil), + disable_mtu_discovery = (server.disablepathmtudiscovery == "1") and true or false + } or nil, + auth = server.hy2_auth, + tls = (server.tls_host) and { + sni = server.tls_host, + insecure = (server.insecure == "1") and true or false, + pinSHA256 = (server.insecure == "1") and server.pinsha256 or nil + } or { + sni = server.server, + insecure = (server.insecure == "1") and true or false + }, + fast_open = (server.fast_open == "1") and true or false, + lazy = (server.lazy_mode == "1") and true or false +} +local shadowtls = { + client = { + server_addr = server.server_port and server.server .. ":" .. server.server_port or nil, + listen = "127.0.0.1:" .. tonumber(local_port), + tls_names = server.shadowtls_sni, + password = server.password + }, + v3 = (server.shadowtls_protocol == "v3") and true or false, + disable_nodelay = (server.disable_nodelay == "1") and true or false, + fastopen = (server.fastopen == "1") and true or false, + strict = (server.strict == "1") and true or false +} +local chain_sslocal = { + locals = local_port ~= "0" and { + { + local_address = "0.0.0.0", + local_port = (chain_local_port == "0" and tonumber(server.local_port) or tonumber(chain_local_port)), + mode = (proto:find("tcp,udp") and "tcp_and_udp") or proto .. "_only", + protocol = "redir", + tcp_redir = "redirect", + --tcp_redir = "tproxy", + udp_redir = "tproxy" + }, + socks_port ~= "0" and { + protocol = "socks", + local_address = "0.0.0.0", + local_port = tonumber(socks_port) + } or nil + } or {{ + protocol = "socks", + local_address = "0.0.0.0", + ocal_port = tonumber(socks_port) + }}, + servers = { + { + server = "127.0.0.1", + server_port = (tonumber(local_port) == 0 and tonumber(chain_local_port) or tonumber(local_port)), + method = server.sslocal_method, + password = server.sslocal_password + } + } +} +local chain_vmess = { + inbounds = (local_port ~= "0") and { + { + port = (chain_local_port == "0" and tonumber(server.local_port) or tonumber(chain_local_port)), + protocol = "dokodemo-door", + settings = { + network = proto, + followRedirect = true + }, + streamSettings = { + sockopt = {tproxy = "redirect"} + }, + sniffing = { + enable = true, + destOverride = {"http","tls"} + } + }, + (proto:find("tcp") and socks_port ~= "0") and { + protocol = "socks", + port = tonumber(socks_port) + } or nil + } or { protocol = "socks",port = tonumber(socks_port) }, + outbound = { + protocol = "vmess", + settings = { + vnext = {{ + address = "127.0.0.1", + port = (tonumber(local_port) == 0 and tonumber(chain_local_port) or tonumber(local_port)), + users = {{ + id = (server.vmess_uuid), + security = server.vmess_method, + level = 0 + }} + }} + } + } +} +local tuic = { + relay = { + server = server.server_port and server.server .. ":" .. server.server_port, + ip = server.tuic_ip, + uuid = server.tuic_uuid, + password = server.tuic_passwd, + certificates = server.certificate and { server.certpath } or nil, + udp_relay_mode = server.udp_relay_mode, + congestion_control = server.congestion_control, + heartbeat = server.heartbeat and server.heartbeat .. "s" or nil, + timeout = server.timeout and server.timeout .. "s" or nil, + gc_interval = server.gc_interval and server.gc_interval .. "s" or nil, + gc_lifetime = server.gc_lifetime and server.gc_lifetime .. "s" or nil, + alpn = server.tls_alpn, + disable_sni = (server.disable_sni == "1") and true or false, + zero_rtt_handshake = (server.zero_rtt_handshake == "1") and true or false, + send_window = tonumber(server.send_window), + receive_window = tonumber(server.receive_window) + }, + ["local"] = { + server = tonumber(socks_port) and (server.tuic_dual_stack == "1" and "[::1]:" or "127.0.0.1:") .. (socks_port == "0" and local_port or tonumber(socks_port)), + dual_stack = (server.tuic_dual_stack == "1") and true or false, + max_packet_size = tonumber(server.tuic_max_package_size) + } +} +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, + hysteria = function() + print(json.stringify(hysteria, 1)) + end, + shadowtls = function() + local chain_switch = { + sslocal = function() + if (chain:find("chain")) then + print(json.stringify(chain_sslocal, 1)) + else + print(json.stringify(shadowtls, 1)) + end + end, + vmess = function() + if (chain:find("chain")) then + print(json.stringify(chain_vmess, 1)) + else + print(json.stringify(shadowtls, 1)) + end + end + } + local ChainType = server.chain_type + if chain_switch[ChainType] then + chain_switch[ChainType]() + end + end, + tuic = function() + print(json.stringify(tuic, 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 new file mode 100755 index 00000000..3750d3f9 --- /dev/null +++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/genred2config.sh @@ -0,0 +1,95 @@ +#!/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 new file mode 100755 index 00000000..66d2b255 --- /dev/null +++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh @@ -0,0 +1,47 @@ +#!/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 new file mode 100755 index 00000000..9424cfac --- /dev/null +++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssrplusupdate.sh @@ -0,0 +1,6 @@ +#!/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 new file mode 100755 index 00000000..219f06ac --- /dev/null +++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua @@ -0,0 +1,628 @@ +#!/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" +require "luci.model.ipkg" +-- 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 URL = require "url" +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 = { + -- plain + "none", + "plain", + -- aead + "aes-128-gcm", + "aes-192-gcm", + "aes-256-gcm", + "chacha20-ietf-poly1305", + "xchacha20-ietf-poly1305", + -- aead 2022 + "2022-blake3-aes-128-gcm", + "2022-blake3-aes-256-gcm", + "2022-blake3-chacha20-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.type = 'ssr' + 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.alter_id = info.aid + 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 == 'grpc' then + if info.path then + result.serviceName = info.path + elseif info.serviceName then + result.serviceName = info.serviceName + end + 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" + if info.sni and info.sni ~= "" then + result.tls_host = info.sni + elseif info.host then + result.tls_host = info.host + end + 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.v2ray_protocol = (v2_ss == "v2ray") and "shadowsocks" or nil + result.encrypt_method_ss = method + 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 + end + elseif szType == "sip008" then + result.type = v2_ss + result.v2ray_protocol = (v2_ss == "v2ray") and "shadowsocks" or nil + result.server = content.server + result.server_port = content.server_port + result.password = content.password + result.encrypt_method_ss = content.method + 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 + end + elseif szType == "ssd" then + result.type = v2_ss + result.v2ray_protocol = (v2_ss == "v2ray") and "shadowsocks" or nil + result.server = content.server + result.server_port = content.port + result.password = content.password + result.encrypt_method_ss = content.method + 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 + 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 url = URL.parse("http://" .. content) + local params = url.query + + result.alias = url.fragment and UrlDecode(url.fragment) or nil + result.type = "v2ray" + result.v2ray_protocol = "vless" + result.server = url.host + result.server_port = url.port + result.vmess_id = url.user + result.vless_encryption = params.encryption or "none" + result.transport = params.type or "tcp" + result.tls = (params.security == "tls" or params.security == "xtls") and "1" or "0" + result.tls_host = params.sni + result.tls_flow = (params.security == "tls" or params.security == "reality") and params.flow or nil + result.fingerprint = params.fp + result.reality = (params.security == "reality") and "1" or "0" + result.reality_publickey = params.pbk and UrlDecode(params.pbk) or nil + result.reality_shortid = params.sid + result.reality_spiderx = params.spx and UrlDecode(params.spx) or nil + if result.transport == "ws" then + result.ws_host = (result.tls ~= "1") and (params.host and UrlDecode(params.host)) or nil + result.ws_path = params.path and UrlDecode(params.path) or "/" + -- make it compatible with bullshit, "h2" transport is non-existent at all + elseif result.transport == "http" or result.transport == "h2" then + result.transport = "h2" + result.h2_host = params.host and UrlDecode(params.host) or nil + result.h2_path = params.path and UrlDecode(params.path) or nil + elseif result.transport == "kcp" then + result.kcp_guise = params.headerType or "none" + result.seed = params.seed + result.mtu = 1350 + result.tti = 50 + result.uplink_capacity = 5 + result.downlink_capacity = 20 + result.read_buffer_size = 2 + result.write_buffer_size = 2 + elseif result.transport == "quic" then + result.quic_guise = params.headerType or "none" + result.quic_security = params.quicSecurity or "none" + result.quic_key = params.key + elseif result.transport == "grpc" then + result.serviceName = params.serviceName + result.grpc_mode = params.mode or "gun" + elseif result.transport == "tcp" then + result.tcp_guise = params.headerType or "none" + if result.tcp_guise == "http" then + result.tcp_host = params.host and UrlDecode(params.host) or nil + result.tcp_path = params.path and UrlDecode(params.path) or nil + end + 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('wget -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, nil, true) 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, nil, true) 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 new file mode 100755 index 00000000..e49825ef --- /dev/null +++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.lua @@ -0,0 +1,198 @@ +#!/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 = "wget --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-unblockneteasemusic b/luci-app-unblockneteasemusic deleted file mode 160000 index 375cf4c1..00000000 --- a/luci-app-unblockneteasemusic +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 375cf4c122fa124b587ef561ad30d6934ece1316 diff --git a/luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/bug-report.yml b/luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 00000000..3e58fee2 --- /dev/null +++ b/luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,58 @@ +name: Bug 报告 +description: 在使用过程中遇到错误或非预期行为。 +labels: + - bug +body: + - type: textarea + id: description + attributes: + label: Bug 描述 + description: 简明地描述您所遇到的 Bug。 + validations: + required: true + - type: textarea + id: expected + attributes: + label: 预期行为 + description: 简明地描述您所希望发生的行为。 + - type: textarea + id: behaviour + attributes: + label: 实际行为 + description: 简明地描述实际发生的行为。 + - type: textarea + id: reproduce + attributes: + label: 复现步骤 + description: 复现报告行为的步骤。 + - type: textarea + id: debug-log + attributes: + label: 调试报告 + description: | + 使用下面的命令打印调试报告,以便我们排查问题。请注意,您只需贴上最后的链接,不必复制整个输出。 + 如果您使用 JavaScript 版本的插件,可以直接在 `状态信息` 中点击 `打印报告`。 + ```/usr/bin/unm-debug``` + validations: + required: true + - type: textarea + id: additional + attributes: + label: 其他信息 + description: 其他任何您认为有意义的信息。 + - type: checkboxes + id: terms + attributes: + label: 条款 + description: 提交此 issue 即表明您同意以下条款。 + options: + - label: 我确认我使用的插件是由 UnblockNeteaseMusic 项目或 ImmortalWrt 项目官方发行。 + required: true + - label: 我确认我已经升级到了最新的插件版本(包括核心和插件)。 + required: true + - label: 我确认我安装了正确版本的插件(基于 lua 语言的 LuCI 只能使用 2.x 版本)。 + required: true + - label: 我确认我没有混用 iptables 和 nftables 规则。 + required: true + - label: 我确认我已经在对应的客户端正确安装了 CA 证书。 + required: true diff --git a/luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/config.yml b/luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..bd9dfe4e --- /dev/null +++ b/luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,2 @@ +--- +blank_issues_enabled: false diff --git a/luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/feature-request.yml b/luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 00000000..94c654a5 --- /dev/null +++ b/luci-app-unblockneteasemusic/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,27 @@ +name: 功能请求 +description: 请求加入新的功能以满足您的日常使用所需。 +labels: + - enhancement +body: + - type: textarea + id: description + attributes: + label: 需求描述 + description: 清晰明了地描述您的需求。 + validations: + required: true + - type: textarea + id: expected + attributes: + label: 预期行为 + description: 简明地描述您所希望发生的行为。 + - type: input + id: openwrt-version + attributes: + label: OpenWrt 版本 + description: 您所使用的 OpenWrt 版本号。 + - type: textarea + id: additional + attributes: + label: 其他信息 + description: 其他任何您认为有意义的信息。 diff --git a/luci-app-unblockneteasemusic/.github/build-ipk.sh b/luci-app-unblockneteasemusic/.github/build-ipk.sh new file mode 100755 index 00000000..52f66294 --- /dev/null +++ b/luci-app-unblockneteasemusic/.github/build-ipk.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0-only +# +# Copyright (C) 2021-2022 Tianling Shen + +export PKG_SOURCE_DATE_EPOCH="$(date "+%s")" + +BASE_DIR="$(cd "$(dirname $0)"; pwd)" +PKG_DIR="$BASE_DIR/.." + +function get_mk_value() { + awk -F "$1:=" '{print $2}' "$PKG_DIR/Makefile" | xargs +} + +PKG_NAME="$(get_mk_value "PKG_NAME")" +if [ "$RELEASE_TYPE" == "release" ]; then + PKG_VERSION="$(get_mk_value "PKG_VERSION")-$(get_mk_value "PKG_RELEASE")" +else + PKG_VERSION="dev-$PKG_SOURCE_DATE_EPOCH-$(git rev-parse --short HEAD)" +fi + +TEMP_DIR="$(mktemp -d -p $BASE_DIR)" +TEMP_PKG_DIR="$TEMP_DIR/$PKG_NAME" +mkdir -p "$TEMP_PKG_DIR/CONTROL/" +mkdir -p "$TEMP_PKG_DIR/lib/upgrade/keep.d/" +mkdir -p "$TEMP_PKG_DIR/usr/lib/lua/luci/" + +cp -fpR "$PKG_DIR/luasrc"/* "$TEMP_PKG_DIR/usr/lib/lua/luci/" +cp -fpR "$PKG_DIR/root"/* "$TEMP_PKG_DIR/" + +echo -e "/etc/config/unblockneteasemusic" > "$TEMP_PKG_DIR/CONTROL/conffiles" +cat > "$TEMP_PKG_DIR/lib/upgrade/keep.d/$PKG_NAME" <<-EOF +/usr/share/unblockneteasemusic/core/ +/usr/share/unblockneteasemusic/core_local_ver +/usr/share/unblockneteasemusic/server.crt +/usr/share/unblockneteasemusic/server.key +EOF + +cat > "$TEMP_PKG_DIR/CONTROL/control" <<-EOF + Package: $PKG_NAME + Version: $PKG_VERSION + Depends: libc,$(get_mk_value "LUCI_DEPENDS" | xargs | tr " +" ", ") + Source: https://github.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic + SourceName: $PKG_NAME + Section: luci + SourceDateEpoch: $PKG_SOURCE_DATE_EPOCH + Maintainer: Tianling Shen + Architecture: all + Installed-Size: TO-BE-FILLED-BY-IPKG-BUILD + Description: LuCI support for UnblockNeteaseMusic +EOF + +echo -e '#!/bin/sh +[ "${IPKG_NO_SCRIPT}" = "1" ] && exit 0 +[ -s ${IPKG_INSTROOT}/lib/functions.sh ] || exit 0 +. ${IPKG_INSTROOT}/lib/functions.sh +default_postinst $0 $@' > "$TEMP_PKG_DIR/CONTROL/postinst" +chmod 0755 "$TEMP_PKG_DIR/CONTROL/postinst" + +echo -e "[ -n "\${IPKG_INSTROOT}" ] || { + (. /etc/uci-defaults/$PKG_NAME) && rm -f /etc/uci-defaults/$PKG_NAME + rm -f /tmp/luci-indexcache + rm -rf /tmp/luci-modulecache/ + exit 0 +}" > "$TEMP_PKG_DIR/CONTROL/postinst-pkg" +chmod 0755 "$TEMP_PKG_DIR/CONTROL/postinst-pkg" + +echo -e '#!/bin/sh +[ -s ${IPKG_INSTROOT}/lib/functions.sh ] || exit 0 +. ${IPKG_INSTROOT}/lib/functions.sh +default_prerm $0 $@' > "$TEMP_PKG_DIR/CONTROL/prerm" +chmod 0755 "$TEMP_PKG_DIR/CONTROL/prerm" + +curl -fsSL "https://raw.githubusercontent.com/openwrt/openwrt/master/scripts/ipkg-build" -o "$TEMP_DIR/ipkg-build" +chmod 0755 "$TEMP_DIR/ipkg-build" +"$TEMP_DIR/ipkg-build" -m "" "$TEMP_PKG_DIR" "$TEMP_DIR" + +mv "$TEMP_DIR/${PKG_NAME}_${PKG_VERSION}_all.ipk" "$BASE_DIR" +rm -rf "$TEMP_DIR" diff --git a/luci-app-unblockneteasemusic/.github/workflows/build-ipk.yml b/luci-app-unblockneteasemusic/.github/workflows/build-ipk.yml new file mode 100644 index 00000000..cbbeccf7 --- /dev/null +++ b/luci-app-unblockneteasemusic/.github/workflows/build-ipk.yml @@ -0,0 +1,61 @@ +name: Build ipk for luci-app-unblockneteasemusic + +on: + push: + branches: + - 'master' + paths: + - 'luasrc/**' + - 'root/**' + - 'Makefile' + - '.github/**' + + pull_request: + branches: + - 'master' + types: + - opened + - synchronize + - reopened + paths: + - 'luasrc/**' + - 'root/**' + - 'Makefile' + - '.github/**' + + release: + types: + - published + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout source tree + uses: actions/checkout@v3 + + - name: Build ipk file + env: + RELEASE_TYPE: ${{ github.event_name }} + run: | + pushd .github + fakeroot bash build-ipk.sh + echo "ASSET_NAME=$(ls *.ipk)" >> $GITHUB_ENV + popd + + - name: Publishing to GitHub Artifacts + uses: actions/upload-artifact@v3 + if: github.event_name != 'release' + with: + name: ${{ env.ASSET_NAME }} + path: .github/*.ipk + + - name: Publishing to GitHub Releases + uses: floralatin/upload-release-action@3688e13ae053ba3052eb4f0cfe03e78deb8f88d7 + if: github.event_name == 'release' + with: + repo_token: ${{ github.token }} + file: .github/*.ipk + tag: ${{ github.ref }} + file_glob: true diff --git a/luci-app-unblockneteasemusic/LICENSE b/luci-app-unblockneteasemusic/LICENSE new file mode 100644 index 00000000..f288702d --- /dev/null +++ b/luci-app-unblockneteasemusic/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/luci-app-unblockneteasemusic/Makefile b/luci-app-unblockneteasemusic/Makefile new file mode 100644 index 00000000..e9d41331 --- /dev/null +++ b/luci-app-unblockneteasemusic/Makefile @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: GPL-3.0-only +# +# Copyright (C) 2019-2022 Tianling Shen + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for UnblockNeteaseMusic +LUCI_DEPENDS:=+dnsmasq-full +ipset +node \ + @(PACKAGE_libustream-mbedtls||PACKAGE_libustream-openssl||PACKAGE_libustream-wolfssl) +LUCI_PKGARCH:=all + +PKG_NAME:=luci-app-unblockneteasemusic +PKG_VERSION:=2.14 +PKG_RELEASE:=3 + +PKG_MAINTAINER:=Tianling Shen + +define Package/luci-app-unblockneteasemusic/conffiles +/etc/config/unblockneteasemusic +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-unblockneteasemusic/README.md b/luci-app-unblockneteasemusic/README.md new file mode 100644 index 00000000..6a6c41f7 --- /dev/null +++ b/luci-app-unblockneteasemusic/README.md @@ -0,0 +1,63 @@ +### 项目简介 +这是一个用于解除网易云音乐播放限制的 OpenWrt 插件,完整支持 播放 / 下载 无版权 / 收费 歌曲
+原理为通过获取其他平台的音乐播放链接,替换网易云音乐内 无版权 / 收费 歌曲链接
+ +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FUnblockNeteaseMusic%2Fluci-app-unblockneteasemusic.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FUnblockNeteaseMusic%2Fluci-app-unblockneteasemusic?ref=badge_shield) + +### 功能说明 +1. 支持自定义音源选择,一般设置默认即可;如需高音质音乐,推荐选择“酷我”或“咪咕” +2. 支持使用 IPset / Hosts 自动劫持相关请求,客户端无需设置代理即可使用 +3. 支持 HTTPS 劫持,客户端信任证书后即可正常使用 +4. 支持将服务公开至公网(默认监听局域网),支持开启严格模式 +5. 支持设定代理,支持指定网易云音乐服务器 IP,支持设定 EndPoint +6. 支持手动/自动更新 Core,确保插件正常运作 +7. 支持设定 JOOX/Migu/QQ Cookie / Youtube API,以正常使用相关音源 +8. 支持无损音质(目前支持 酷狗、酷我、咪咕、pyncmd、QQ 音源) + +### 编译 +```bash + #进入 OpenWrt 源码 package 目录 + cd package + #克隆插件源码 + git clone --branch master https://github.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic.git + #返回上一层目录 + cd .. + #配置 + make menuconfig + #在 luci -> application 选中插件,开始编译 + make package/luci-app-unblockneteasemusic/compile V=s +``` + +### 使用方法 +- #### 路由器插件配置 +1. 在路由器 LuCI 界面“服务”选项中找到“解除网易云音乐播放限制” +2. 勾选“启用本插件” +3. “音源接口”选择“默认”(高音质音源推荐选择“酷我”或“咪咕”) +4. 点击“保存&应用” +- 现在您局域网下的所有设备,(一般情况下)无需任何设置即可自动解除网易云音乐播放限制 +- ##### 特别说明 +1. 首次使用本插件时,将会在后台下载核心程序,故启动时间可能会稍微长一点 +2. 如需使用网页端,请额外安装 Tampermonkey 插件:[NeteaseMusic UI Unlocker](https://greasyfork.org/zh-CN/scripts/382285-neteasemusic-ui-unlocker) +3. 推荐在客户端信任 [UnblockNeteaseMusic 证书](https://raw.githubusercontent.com/UnblockNeteaseMusic/server/enhanced/ca.crt),以便 HTTPS 通讯(若您不放心,也可以[自行签发证书](https://github.com/nondanee/UnblockNeteaseMusic/issues/48#issuecomment-477870013)) + +### 效果图 +#### LuCI 界面 + ![Image text](https://raw.githubusercontent.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic/master/views/view1.jpg) + ![Image text](https://raw.githubusercontent.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic/master/views/view2.jpg) + ![Image text](https://raw.githubusercontent.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic/master/views/view3.jpg) +#### UWP 网易云音乐客户端 + ![Image text](https://raw.githubusercontent.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic/master/views/view4.jpg) + +### 鸣谢 +[UnblockNeteaseMusic](https://github.com/UnblockNeteaseMusic/server)的开发者:[nondanee](https://github.com/nondanee)、[pan93412](https://github.com/pan93412)、[1715173329](https://github.com/1715173329)
+[luci-app-unblockmusic](https://github.com/maxlicheng/luci-app-unblockmusic)的开发者:[maxlicheng](https://github.com/maxlicheng)
+[luci-app-unblockmusic(二次修改)](https://github.com/coolsnowwolf/lede/tree/master/package/lean/luci-app-unblockmusic)的开发者:[Lean](https://github.com/coolsnowwolf)
+IPSet 劫持方式指导:[恩山 692049#125 楼](https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=692049&page=9#pid4104303) [rufengsuixing](https://github.com/rufengsuixing/luci-app-unblockmusic) [binsee](https://github.com/binsee/luci-app-unblockmusic)
+Hosts劫持方式指导:[UnblockNeteaseMusic](https://github.com/nondanee/UnblockNeteaseMusic) [云音乐安卓又搞事啦](https://jixun.moe/post/netease-android-hosts-bypass/)
+核心程序版本检测方法指导:[vernesong](https://github.com/vernesong) + +### 协议 +本项目使用 [GPL-3.0-only](https://spdx.org/licenses/GPL-3.0-only.html) 协议授权
+在遵循此协议的前提下,你可以自由修改和分发 + +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FUnblockNeteaseMusic%2Fluci-app-unblockneteasemusic.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2FUnblockNeteaseMusic%2Fluci-app-unblockneteasemusic?ref=badge_large) diff --git a/luci-app-unblockneteasemusic/luasrc/controller/unblockneteasemusic.lua b/luci-app-unblockneteasemusic/luasrc/controller/unblockneteasemusic.lua new file mode 100644 index 00000000..44f73b9d --- /dev/null +++ b/luci-app-unblockneteasemusic/luasrc/controller/unblockneteasemusic.lua @@ -0,0 +1,69 @@ +-- SPDX-License-Identifer: GPL-3.0-only +-- Copyright (C) 2019-2022 Tianling Shen + +module("luci.controller.unblockneteasemusic", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/unblockneteasemusic") then + return + end + + local page + page = entry({"admin", "services", "unblockneteasemusic"}, firstchild(), _("解除网易云音乐播放限制"), 50) + page.dependent = false + page.acl_depends = { "luci-app-unblockneteasemusic" } + + entry({"admin", "services", "unblockneteasemusic", "general"}, cbi("unblockneteasemusic/main"), _("基本设定"), 1) + entry({"admin", "services", "unblockneteasemusic", "upgrade"}, form("unblockneteasemusic/upgrade"), _("更新组件"), 2).leaf = true + entry({"admin", "services", "unblockneteasemusic", "log"}, form("unblockneteasemusic/log"), _("日志"), 3) + + entry({"admin", "services", "unblockneteasemusic", "status"}, call("act_status")).leaf = true + entry({"admin", "services", "unblockneteasemusic", "update_core"}, call("act_update_core")) + entry({"admin", "services", "unblockneteasemusic", "remove_core"}, call("act_remove_core")) +end + +function act_status() + local stat = luci.util.ubus("service", "list", { name = "unblockneteasemusic" }) + local running = next(stat) and next(stat.unblockneteasemusic) and stat.unblockneteasemusic.instances.unblockneteasemusic.running or false + + local e = { running = running } + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end + +function update_core() + local core_cloud_ver = luci.sys.exec("wget -qO- 'https://api.github.com/repos/UnblockNeteaseMusic/server/commits?sha=enhanced&path=precompiled' | jsonfilter -e '@[0].sha'") + local core_cloud_ver_mini = string.sub(core_cloud_ver, 1, 7) + local core_local_ver + if (not core_cloud_ver) or (not core_cloud_ver_mini) then + return "1" + else + core_local_ver = luci.sys.exec("cat '/usr/share/unblockneteasemusic/core_local_ver' 2>'/dev/null'") + if not core_local_ver or (core_local_ver ~= core_cloud_ver) then + luci.sys.call("rm -f /usr/share/unblockneteasemusic/update_core_successfully") + luci.sys.call("/usr/share/unblockneteasemusic/update.sh update_core_from_luci") + if not nixio.fs.access("/usr/share/unblockneteasemusic/update_core_successfully") then + return "2" + else + luci.sys.call("rm -f /usr/share/unblockneteasemusic/update_core_successfully") + return core_cloud_ver_mini + end + else + return "0" + end + end +end + +function act_update_core() + luci.http.prepare_content("application/json") + luci.http.write_json({ + ret = update_core(); + }) +end + +function act_remove_core() + local ret = {} + ret.ret = luci.sys.call("cd /usr/share/unblockneteasemusic && rm -rf core/* && rm -f core_local_ver") == 0 + luci.http.prepare_content("application/json") + luci.http.write_json(ret) +end diff --git a/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/log.lua b/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/log.lua new file mode 100644 index 00000000..5e2c81a4 --- /dev/null +++ b/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/log.lua @@ -0,0 +1,14 @@ +local fs = require "nixio.fs" +local conffile = "/var/run/unblockneteasemusic/run.log" + +f = SimpleForm("logview") + +t = f:field(TextValue, "conf") +t.rmempty = true +t.rows = 15 +function t.cfgvalue() + return fs.readfile(conffile) or "" +end +t.readonly="readonly" + +return f diff --git a/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/main.lua b/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/main.lua new file mode 100644 index 00000000..0dcc03c4 --- /dev/null +++ b/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/main.lua @@ -0,0 +1,246 @@ +local m, s, o + +m = Map("unblockneteasemusic", translate("解除网易云音乐播放限制")) +m.description = translate("原理:采用 [Bilibili/JOOX/酷狗/酷我/咪咕/pyncmd/QQ/Youtube] 等音源,替换网易云音乐 无版权/收费 歌曲链接
具体使用方法参见:GitHub @UnblockNeteaseMusic/luci-app-unblockneteasemusic") + +m:section(SimpleSection).template = "unblockneteasemusic/status" + +s = m:section(NamedSection, "config", "unblockneteasemusic") + +o = s:option(Flag, "enable", translate("启用本插件")) +o.description = translate("启用本插件以解除网易云音乐播放限制") +o.default = 0 +o.rmempty = false + +o = s:option(Value, "music_source", translate("音源接口")) +o:value("default", translate("默认")) +o:value("bilibili", translate("Bilibili音乐")) +o:value("joox", translate("JOOX音乐")) +o:value("kugou", translate("酷狗音乐")) +o:value("kuwo", translate("酷我音乐")) +o:value("migu", translate("咪咕音乐")) +o:value("pyncmd", translate("网易云音乐(pyncmd)")) +o:value("qq", translate("QQ音乐")) +o:value("youtube", translate("Youtube音乐")) +o:value("youtubedl", translate("Youtube音乐(youtube-dl)")) +o:value("ytdlp", translate("Youtube音乐(yt-dlp)")) +o.description = translate("自定义模式下,多个音源请用空格隔开") +o.default = "default" +o.rmempty = false + +o = s:option(Flag, "use_custom_cookie", translate("使用自定义 Cookie")) +o.description = translate("使用自定义 Cookie 请求音源接口") +o.default = 0 +o.rmempty = false + +o = s:option(Value, "joox_cookie", translate("JOOX Cookie")) +o.description = translate("在 joox.com 获取,需要 wmid 和 session_key 值") +o.placeholder = "wmid=; session_key=" +o.datatype = "string" +o:depends("use_custom_cookie", 1) + +o = s:option(Value, "migu_cookie", translate("Migu Cookie")) +o.description = translate("通过抓包手机客户端请求获取,需要 aversionid 值") +o.datatype = "string" +o:depends("use_custom_cookie", 1) + +o = s:option(Value, "qq_cookie", translate("QQ Cookie")) +o.description = translate("在 y.qq.com 获取,需要 uin 和 qm_keyst值") +o.placeholder = "uin=; qm_keyst=" +o.datatype = "string" +o:depends("use_custom_cookie", 1) + +o = s:option(Value, "youtube_key", translate("Youtube API Key")) +o.description = translate("API Key 申请地址:https://developers.google.com/youtube/v3/getting-started#before-you-start") +o.datatype = "string" +o:depends("use_custom_cookie", 1) + +o = s:option(Flag, "follow_source_order", translate("顺序查询")) +o.description = translate("默认为并行查询并返回第一个结果,开启后将严格按照配置音源的顺序进行查询") +o.default = 0 + +o = s:option(Flag, "search_album", translate("附加专辑名")) +o.description = translate("在其他音源搜索歌曲时携带专辑名称(默认搜索条件 歌曲名 - 歌手,启用后搜索条件 歌曲名 - 歌手 专辑名)") +o.default = 0 + +o = s:option(Flag, "enable_flac", translate("启用无损音质")) +o.description = translate("目前仅支持酷狗、酷我、咪咕、pyncmd、QQ 音源") +o.default = 0 + +o = s:option(Flag, "select_max_br", translate("选取最高音质")) +o.description = translate("选择所有音源中的最高码率替换音频。") +o.default = 0 + +o = s:option(ListValue, "replace_music_source", translate("音源替换")) +o.description = translate("当音乐音质低于指定数值时,尝试强制使用其他平台的高音质版本进行替换") +o:value("dont_replace", translate("不强制替换音乐音源")) +o:value("lower_than_192kbps", translate("当音质低于 192 Kbps(中)时")) +o:value("lower_than_320kbps", translate("当音质低于 320 Kbps(高)时")) +o:value("lower_than_999kbps", translate("当音质低于 999 Kbps(无损)时")) +o:value("replace_all", translate("替换所有音乐音源")) +o.default = "dont_replace" + +o = s:option(Flag, "disable_upgrade_check", translate("禁用更新检查")) +o.description = translate("禁止客户端检查更新,全平台支持") +o.default = 0 + +o = s:option(Flag, "block_ads", translate("屏蔽广告")) +o.description = translate("启用后,可屏蔽应用内部分广告。") +o.default = 0 + +o = s:option(ListValue, "local_vip", translate("伪装本地 VIP")) +o.description = translate("设置后,可以使用去广告、个性换肤、鲸云音效等本地功能") +o:value("", translate("禁用")) +o:value("cvip", translate("CVIP")) +o:value("svip", translate("SVIP")) + +o = s:option(Flag, "auto_update", translate("启用自动更新")) +o.description = translate("启用后,每天将定时自动检查最新版本并更新") +o.default = 0 + +o = s:option(ListValue, "update_time", translate("检查更新时间")) +for update_time_hour = 0,23 do + o:value(update_time_hour, update_time_hour..":00") +end +o.default = "3" +o.description = translate("设定每天自动检查更新时间") +o:depends("auto_update", 1) + +o = s:option(Button,"certificate", translate("HTTPS 证书")) +o.inputtitle = translate("下载 CA 根证书") +o.description = translate("Linux/iOS/MacOSX 在信任根证书后方可正常使用") +o.inputstyle = "reload" +o.write = function() + act_download_cert() +end + +function act_download_cert() + local t, e + t = nixio.open("/usr/share/unblockneteasemusic/core/ca.crt","r") + luci.http.header('Content-Disposition', 'attachment; filename="ca.crt"') + luci.http.prepare_content("application/octet-stream") + while true do + e = t:read(nixio.const.buffersize) + if (not e) or (#e == 0) then + break + else + luci.http.write(e) + end + end + t:close() + luci.http.close() +end + +o = s:option(Flag, "advanced_mode", translate("启用进阶设置")) +o.description = translate("非必要不推荐使用") +o.default = 0 + +o = s:option(ListValue, "log_level", translate("日志等级")) +o:value("debug", translate("调试")); +o:value("info", translate("信息(默认)")) +o:value("silent", translate("静默")) +o.default = "info"; +o:depends("advanced_mode", 1) + +o = s:option(Value, "http_port", translate("HTTP 监听端口")) +o.description = translate("程序监听的 HTTP 端口,不可与 其他程序/HTTPS 共用一个端口") +o.placeholder = "5200" +o.default = "5200" +o.datatype = "port" +o:depends({advanced_mode = true, hijack_ways = "dont_hijack"}) +o:depends({advanced_mode = true, hijack_ways = "use_ipset"}) + +o = s:option(Value, "https_port", translate("HTTPS 监听端口")) +o.description = translate("程序监听的 HTTPS 端口,不可与 其他程序/HTTP 共用一个端口") +o.placeholder = "5201" +o.default = "5201" +o.datatype = "port" +o:depends({advanced_mode = true, hijack_ways = "dont_hijack"}) +o:depends({advanced_mode = true, hijack_ways = "use_ipset"}) + +o = s:option(Value, "endpoint_url", translate("EndPoint")) +o.description = translate("具体说明参见:https://github.com/UnblockNeteaseMusic/server") +o.default = "https://music.163.com" +o.placeholder = "https://music.163.com" +o.datatype = "string" +o:depends("advanced_mode", 1) + +o = s:option(Value, "cnrelay", translate("UNM bridge 服务器")) +o.description = translate("使用 UnblockNeteaseMusic 中继桥(bridge)以获取音源信息") +o.placeholder = "http(s)://host:port" +o.datatype = "string" +o:depends("advanced_mode", 1) + +o = s:option(ListValue, "hijack_ways", translate("劫持方法")) +o:value("dont_hijack", translate("不开启劫持")) +o:value("use_ipset", translate("使用 IPSet 劫持")) +o:value("use_hosts", translate("使用 Hosts 劫持")) +o.description = translate("如果使用Hosts劫持,程序监听的 HTTP/HTTPS 端口将被锁定为 80/443") +o.default = "dont_hijack" +o:depends("advanced_mode", 1) + +o = s:option(Flag, "pub_access", translate("部署到公网")) +o.description = translate("默认仅监听局域网,如需提供公开访问请勾选此选项") +o.default = 0 +o:depends("advanced_mode", 1) + +o = s:option(Flag, "strict_mode", translate("启用严格模式")) +o.description = translate("若将服务部署到公网,则强烈建议使用严格模式,此模式下仅放行网易云音乐所属域名的请求;注意:该模式下不能使用全局代理") +o.default = 0 +o:depends("advanced_mode", 1) + +o = s:option(Value, "netease_server_ip", translate("网易云服务器 IP")) +o.description = translate("通过 ping music.163.com 即可获得 IP 地址,仅限填写一个") +o.placeholder = "59.111.181.38" +o.datatype = "ipaddr" +o:depends("advanced_mode", 1) + +o = s:option(Value, "proxy_server_ip", translate("代理服务器地址")) +o.description = translate("使用代理服务器获取音乐信息") +o.placeholder = "http(s)://host:port" +o.datatype = "string" +o:depends("advanced_mode", 1) + +o = s:option(Value, "self_issue_cert_crt", translate("自签发证书公钥位置")) +o.description = translate("[公钥] 默认使用 UnblockNeteaseMusic 项目提供的 CA 证书,您可以指定为您自己的证书") +o.placeholder = "/usr/share/unblockneteasemusic/core/server.crt" +o.datatype = "file" +o:depends("advanced_mode", 1) + +o = s:option(Value, "self_issue_cert_key", translate("自签发证书私钥位置")) +o.description = translate("[私钥] 默认使用 UnblockNeteaseMusic 项目提供的 CA 证书,您可以指定为您自己的证书") +o.placeholder = "/usr/share/unblockneteasemusic/core/server.key" +o.datatype = "file" +o:depends("advanced_mode", 1) + +s = m:section(TypedSection, "acl_rule", translate("例外客户端规则"), translate("可以为局域网客户端分别设置不同的例外模式,默认无需设置")) +s.template = "cbi/tblsection" +s.sortable = true +s.anonymous = true +s.addremove = true + +o = s:option(Flag, "enable", ("启用")) +o.width = "33%" +o.default = 0 +o.rmempty = false + +o = s:option(Value, "ip_addr", translate("IP 地址")) +o.width = "33%" +o.datatype = "ip4addr" +o.placeholder = "0.0.0.0/0" +o.rmempty = false +luci.ip.neighbors({ family = 4 }, function(entry) + if entry.reachable then + o:value(entry.dest:string()) + end +end) + +o = s:option(ListValue, "filter_mode", translate("规则")) +o.width = "33%" +o.default = "disable_all" +o.rmempty = false +o:value("disable_all", translate("不代理 HTTP 和 HTTPS")) +o:value("disable_http", translate("不代理 HTTP")) +o:value("disable_https", translate("不代理 HTTPS")) + +return m diff --git a/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/upgrade.lua b/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/upgrade.lua new file mode 100644 index 00000000..3657302a --- /dev/null +++ b/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic/upgrade.lua @@ -0,0 +1,19 @@ +local m, o + +m = SimpleForm("Version") +m.reset = false +m.submit = false + +o = m:field(DummyValue, "remove_core", translate("删除核心")) +o.rawhtml = true +o.template = "unblockneteasemusic/remove_core" +o.value = translate("") +o.description = "删除核心后,需手动点击下面的按钮重新下载,有助于解决版本冲突问题" + +o = m:field(DummyValue, "update_core", translate("更新核心")) +o.rawhtml = true +o.template = "unblockneteasemusic/update_core" +o.value = translate("") +o.description = "更新完毕后会自动在后台重启插件,无需手动重启" + +return m diff --git a/luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/remove_core.htm b/luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/remove_core.htm new file mode 100644 index 00000000..df97046f --- /dev/null +++ b/luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/remove_core.htm @@ -0,0 +1,32 @@ +<%+cbi/valueheader%> + + + + + +<%=self.value%> + +<%+cbi/valuefooter%> diff --git a/luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/status.htm b/luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/status.htm new file mode 100644 index 00000000..022c2efd --- /dev/null +++ b/luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/status.htm @@ -0,0 +1,21 @@ + + +
+

+ <%:Collecting data...%> +

+
diff --git a/luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/update_core.htm b/luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/update_core.htm new file mode 100644 index 00000000..8acb275e --- /dev/null +++ b/luci-app-unblockneteasemusic/luasrc/view/unblockneteasemusic/update_core.htm @@ -0,0 +1,36 @@ +<%+cbi/valueheader%> + + + + + +<%=self.value%> + +<%+cbi/valuefooter%> diff --git a/luci-app-unblockneteasemusic/root/etc/config/unblockneteasemusic b/luci-app-unblockneteasemusic/root/etc/config/unblockneteasemusic new file mode 100644 index 00000000..ce807ea6 --- /dev/null +++ b/luci-app-unblockneteasemusic/root/etc/config/unblockneteasemusic @@ -0,0 +1,7 @@ + +config unblockneteasemusic 'config' + option enable '0' + option disable_upgrade_check '1' + option auto_update '1' + option update_time '3' + diff --git a/luci-app-unblockneteasemusic/root/etc/init.d/unblockneteasemusic b/luci-app-unblockneteasemusic/root/etc/init.d/unblockneteasemusic new file mode 100755 index 00000000..fa653a0b --- /dev/null +++ b/luci-app-unblockneteasemusic/root/etc/init.d/unblockneteasemusic @@ -0,0 +1,247 @@ +#!/bin/sh /etc/rc.common +# SPDX-License-Identifier: GPL-3.0-only +# +# Copyright (C) 2019-2023 Tianling Shen + +USE_PROCD=1 + +START=99 +STOP=10 + +NAME="unblockneteasemusic" +UNM_DIR="/usr/share/$NAME" +RUN_DIR="/var/run/$NAME" + +IPT_N="iptables -t nat" +IPT_INPUT_RULE="unm_input_rule" + +is_enabled() { + local enabled + config_get_bool enabled "$1" "$2" "${3:-0}" + if [ "$enabled" -eq "1" ]; then + return 0 + else + return 1 + fi +} + +append_param() { + procd_append_param command "$1" $2 +} + +append_param_arg() { + local value + config_get value "$1" "$2" $4 + [ -n "$value" ] && append_param "$3" "$value" +} + +append_param_env() { + local value + config_get value "$1" "$2" $4 + [ -n "$value" ] && procd_append_param env "$3"="$value" +} + +append_param_boolenv() { + is_enabled "$1" "$2" "$4" && procd_append_param env "$3"="true" +} + +append_filter_client() { + local cfg="$1" + + is_enabled "$cfg" "enable" || return 1 + + local ip_addr filter_mode + config_get ip_addr "$cfg" "ip_addr" + config_get filter_mode "$cfg" "filter_mode" + [ -n "$ip_addr" -a -n "$filter_mode" ] || return 1 + + case "${filter_mode}" in + "disable_http") + ipset -! add "acl_neteasemusic_http" "${ip_addr}" + ;; + "disable_https") + ipset -! add "acl_neteasemusic_https" "${ip_addr}" + ;; + "disable_all") + ipset -! add "acl_neteasemusic_http" "${ip_addr}" + ipset -! add "acl_neteasemusic_https" "${ip_addr}" + ;; + esac +} + +start_service() { + config_load "$NAME" + is_enabled "config" "enable" || return 1 + + local update_time + config_get update_time "config" "update_time" "3" + sed -i "/$NAME/d" /etc/crontabs/root + echo -e "30 2 * * * /etc/init.d/unblockneteasemusic" >> "/etc/crontabs/root" + ! is_enabled "config" "auto_update" || echo -e "0 ${update_time} * * * $UNM_DIR/update.sh update_core" >> "/etc/crontabs/root" + /etc/init.d/cron restart + + mkdir -p "$RUN_DIR" + [ -s "$UNM_DIR/core/app.js" ] || { rm -f "$UNM_DIR/local_ver"; sh "$UNM_DIR/update.sh" "update_core_non_restart"; } + [ -s "$UNM_DIR/core/app.js" ] || { echo "Core Not Found, please download it before starting." >> "$RUN_DIR/run.log"; return 1; } + + procd_open_instance "$NAME" + procd_set_param command node "$UNM_DIR/core/app.js" + append_param "-a" "0.0.0.0" + + local http_port https_port hijack_ways + config_get http_port "config" "http_port" "5200" + config_get https_port "config" "https_port" "5201" + config_get hijack_ways "config" "hijack_ways" "use_ipset" + [ "$hijack_ways" != "use_hosts" ] || { http_port="80"; https_port="443"; } + append_param "-p" "${http_port}":"${https_port}" + + if is_enabled "config" "pub_access"; then + iptables -N "$IPT_INPUT_RULE" + iptables -t filter -I INPUT -j "$IPT_INPUT_RULE" + iptables -t filter -A "$IPT_INPUT_RULE" -p tcp --dport "${http_port}" -j ACCEPT + iptables -t filter -A "$IPT_INPUT_RULE" -p tcp --dport "${https_port}" -j ACCEPT + + echo "/etc/init.d/$NAME restart" > "$RUN_DIR/fw3.include" + fi + + local music_source + config_get music_source "config" "music_source" "default" + [ "$music_source" != "default" ] || music_source="kugou kuwo migu pyncmd" + append_param -o "$music_source" + + append_param_arg "config" "cnrelay" "-c" + append_param_arg "config" "endpoint_url" "-e" "https://music.163.com" + append_param_arg "config" "netease_server_ip" "-f" + append_param_arg "config" "proxy_server_ip" "-u" + is_enabled "config" "strict_mode" && append_param "-s" + + local log_level + config_get log_level "config" "log_level" "info" + procd_set_param env LOG_FILE="$RUN_DIR/run.log" + procd_append_param env LOG_LEVEL="$log_level" + + append_param_env "config" "joox_cookie" "JOOX_COOKIE" + append_param_env "config" "kuwo_cookie" "KUWO_COOKIE" + append_param_env "config" "migu_cookie" "MIGU_COOKIE" + append_param_env "config" "qq_cookie" "QQ_COOKIE" + append_param_env "config" "youtube_key" "YOUTUBE_KEY" + append_param_env "config" "self_issue_cert_crt" "SIGN_CERT" "$UNM_DIR/core/server.crt" + append_param_env "config" "self_issue_cert_key" "SIGN_KEY" "$UNM_DIR/core/server.key" + append_param_env "config" "local_vip" "ENABLE_LOCAL_VIP" + + append_param_boolenv "config" "follow_source_order" "FOLLOW_SOURCE_ORDER" + append_param_boolenv "config" "search_album" "SEARCH_ALBUM" + append_param_boolenv "config" "enable_flac" "ENABLE_FLAC" + append_param_boolenv "config" "select_max_br" "SELECT_MAX_BR" + append_param_boolenv "config" "disable_upgrade_check" "DISABLE_UPGRADE_CHECK" + append_param_boolenv "config" "block_ads" "BLOCK_ADS" + case "$(config_get "config" "replace_music_source")" in + "lower_than_192kbps") procd_append_param env MIN_BR="192000" ;; + "lower_than_320kbps") procd_append_param env MIN_BR="320000" ;; + "lower_than_999kbps") procd_append_param env MIN_BR="600000" ;; + "replace_all") procd_append_param env MIN_BR="9999999" ;; + esac + + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_set_param respawn + + local lan_addr="$(uci -q get network.lan.ipaddr)" + if [ "${hijack_ways}" = "use_ipset" ]; then + mkdir -p "/tmp/dnsmasq.d" + rm -f "/tmp/dnsmasq.d/dnsmasq-$NAME.conf" + cat <<-EOF > "/tmp/dnsmasq.d/dnsmasq-$NAME.conf" + dhcp-option=252,http://${lan_addr}:${http_port}/proxy.pac + ipset=/.music.163.com/neteasemusic + ipset=/interface.music.163.com/neteasemusic + ipset=/interface3.music.163.com/neteasemusic + ipset=/apm.music.163.com/neteasemusic + ipset=/apm3.music.163.com/neteasemusic + ipset=/clientlog.music.163.com/neteasemusic + ipset=/clientlog3.music.163.com/neteasemusic + EOF + /etc/init.d/dnsmasq reload 2>"/dev/null" + + ipset create "acl_neteasemusic_http" hash:ip + ipset create "acl_neteasemusic_https" hash:ip + ipset create "neteasemusic" hash:ip + config_foreach append_filter_client "acl_rule" + + local netease_music_ips="$(wget -qO- "http://httpdns.n.netease.com/httpdns/v2/d?domain=music.163.com,interface.music.163.com,interface3.music.163.com,apm.music.163.com,apm3.music.163.com,clientlog.music.163.com,clientlog3.music.163.com" |jsonfilter -e '@.data.*.ip.*')" + local netease_music_ips2="$(wget -qO- "https://music.httpdns.c.163.com/d" --post-data="music.163.com,interface.music.163.com,interface3.music.163.com,apm.music.163.com,apm3.music.163.com,clientlog.music.163.com,clientlog3.music.163.com" |jsonfilter -e '@.dns.*["ips"].*')" + echo -e "${netease_music_ips}\n${netease_music_ips2}" | sort -u | awk '{print "ipset add neteasemusic "$1}' | sh + + $IPT_N -N "netease_cloud_music" + for local_addr in "0.0.0.0/8" "10.0.0.0/8" "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"; do + $IPT_N -A "netease_cloud_music" -d "${local_addr}" -j "RETURN" + done + + $IPT_N -A "netease_cloud_music" -p "tcp" -m "set" ! --match-set "acl_neteasemusic_http" "src" --dport "80" -j "REDIRECT" --to-ports "${http_port}" + $IPT_N -A "netease_cloud_music" -p "tcp" -m "set" ! --match-set "acl_neteasemusic_https" "src" --dport "443" -j "REDIRECT" --to-ports "${https_port}" + $IPT_N -I "PREROUTING" -p "tcp" -m "set" --match-set "neteasemusic" "dst" -j "netease_cloud_music" + + echo "/etc/init.d/$NAME restart" > "$RUN_DIR/fw3.include" + elif [ "${hijack_ways}" = "use_hosts" ]; then + mkdir -p "/tmp/dnsmasq.d" + rm -f "/tmp/dnsmasq.d/dnsmasq-$NAME.conf" + cat <<-EOF > "/tmp/dnsmasq.d/dnsmasq-$NAME.conf" + dhcp-option=252,http://${lan_addr}:${http_port}/proxy.pac + address=/music.163.com/${lan_addr} + address=/interface.music.163.com/${lan_addr} + address=/interface3.music.163.com/${lan_addr} + address=/apm.music.163.com/${lan_addr} + address=/apm3.music.163.com/${lan_addr} + address=/clientlog.music.163.com/${lan_addr} + address=/clientlog3.music.163.com/${lan_addr} + address=/music.httpdns.c.163.com/0.0.0.0 + EOF + /etc/init.d/dnsmasq reload 2>"/dev/null" + + ip route add "223.252.199.10" dev lo + fi + + procd_close_instance + + procd_open_instance "log-check" + procd_set_param command "$UNM_DIR/log_check.sh" + procd_set_param respawn + procd_close_instance +} + +stop_service() { + config_load "$NAME" + + sed -i "/$NAME/d" "/etc/crontabs/root" + /etc/init.d/cron restart + + local settable + iptables -t filter -D INPUT -j "$IPT_INPUT_RULE" 2>"/dev/null" + iptables -F "$IPT_INPUT_RULE" 2>"/dev/null" + iptables -X "$IPT_INPUT_RULE" 2>"/dev/null" + + $IPT_N -D "PREROUTING" -p "tcp" -m set --match-set "neteasemusic" "dst" -j "netease_cloud_music" 2>"/dev/null" + $IPT_N -F "netease_cloud_music" 2>"/dev/null" + $IPT_N -X "netease_cloud_music" 2>"/dev/null" + + for settable in "acl_neteasemusic_http" "acl_neteasemusic_https" "neteasemusic"; do + ipset destroy "$settable" 2>"/dev/null" + done + + echo > "$RUN_DIR/fw3.include" + + rm -f "/tmp/dnsmasq.d/dnsmasq-$NAME.conf" + /etc/init.d/dnsmasq reload 2>"/dev/null" + + ip route del "223.252.199.10" 2>"/dev/null" + + rm -f "$RUN_DIR/run.log" +} + +reload_service() { + stop + start +} + +service_triggers() { + procd_add_reload_trigger "$NAME" +} diff --git a/luci-app-unblockneteasemusic/root/etc/uci-defaults/luci-unblockneteasemusic b/luci-app-unblockneteasemusic/root/etc/uci-defaults/luci-unblockneteasemusic new file mode 100755 index 00000000..900c6253 --- /dev/null +++ b/luci-app-unblockneteasemusic/root/etc/uci-defaults/luci-unblockneteasemusic @@ -0,0 +1,24 @@ +#!/bin/sh + +sed -e "s,local_vip '1',local_vip 'cvip',g" \ + -e "/local_vip '0'/d" \ + -i "/etc/config/unblockneteasemusic" + +uci -q batch <<-EOF >"/dev/null" + delete ucitrack.@unblockneteasemusic[-1] + add ucitrack unblockneteasemusic + set ucitrack.@unblockneteasemusic[-1].init=unblockneteasemusic + commit ucitrack +EOF + +uci -q batch <<-EOF >"/dev/null" + delete firewall.unblockneteasemusic + set firewall.unblockneteasemusic=include + set firewall.unblockneteasemusic.type=script + set firewall.unblockneteasemusic.path=/var/run/unblockneteasemusic/fw3.include + set firewall.unblockneteasemusic.reload=1 + commit firewall +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/luci-app-unblockneteasemusic/root/usr/bin/unm-debug b/luci-app-unblockneteasemusic/root/usr/bin/unm-debug new file mode 100755 index 00000000..30f93fcb --- /dev/null +++ b/luci-app-unblockneteasemusic/root/usr/bin/unm-debug @@ -0,0 +1,17 @@ +#!/bin/sh +# Copyright (C) 2021-2022 Tianling Shen + +command -v "curl" >"/dev/null" || { echo -e "curl is not found."; exit 1; } + +RUN_DIR="/var/run/unblockneteasemusic" +mkdir -p "$RUN_DIR" +/usr/share/unblockneteasemusic/debugging.sh 2>&1 | tee "$RUN_DIR/unm-debugging-output.txt" + +catbox_link="$(curl -fsS -F "reqtype=fileupload" -F "time=72h" -F "fileToUpload=@$RUN_DIR/unm-debugging-output.txt" "https://litterbox.catbox.moe/resources/internals/api.php")" +transfer_link="$(curl -fsS --upload-file "$RUN_DIR/unm-debugging-output.txt" "https://transfer.sh/unm-debugging-output.txt")" +echo -e "\n" +echo -e "Log is available at:" +echo -e "$catbox_link" +echo -e "$transfer_link" + +rm -f "$RUN_DIR/unm-debugging-output.txt" diff --git a/luci-app-unblockneteasemusic/root/usr/share/rpcd/acl.d/luci-app-unblockneteasemusic.json b/luci-app-unblockneteasemusic/root/usr/share/rpcd/acl.d/luci-app-unblockneteasemusic.json new file mode 100644 index 00000000..06f07423 --- /dev/null +++ b/luci-app-unblockneteasemusic/root/usr/share/rpcd/acl.d/luci-app-unblockneteasemusic.json @@ -0,0 +1,11 @@ +{ + "luci-app-unblockneteasemusic": { + "description": "Grant UCI access for luci-app-unblockneteasemusic", + "read": { + "uci": [ "unblockneteasemusic" ] + }, + "write": { + "uci": [ "unblockneteasemusic" ] + } + } +} diff --git a/luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/debugging.sh b/luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/debugging.sh new file mode 100755 index 00000000..a4b8098a --- /dev/null +++ b/luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/debugging.sh @@ -0,0 +1,95 @@ +#!/bin/sh +# Copyright (C) 2021-2022 Tianling Shen + +. /lib/functions.sh + +NAME="unblockneteasemusic" + +command -v "curl" >"/dev/null" || { echo -e "curl is not found."; exit 1; } + +echo -e "Launching luci-app-unblockneteasmusic Debugging Tool..." +echo -e "\n" + +echo -e "OpenWrt info:" +ubus call system board || cat "/etc/openwrt_release" +echo -e "\n" + +echo -e "uclient-fetch info:" +opkg info uclient-fetch +opkg info libustream-* +opkg info wget-ssl +wget -O- 'https://api.github.com/repos/UnblockNeteaseMusic/server/commits?sha=enhanced&path=precompiled' | jsonfilter -e '@[0].sha' || echo -e "Failed to connect to GitHub with uclient-fetch." +echo -e "\n" + +echo -e "Node.js info:" +opkg info node +echo -e "Node.js is placed at $(command -v node || echo "Not Found")" +echo -e "Node.js version: $(node -v 2>"/dev/null" || echo "Not Found")" +echo -e "\n" + +echo -e "luci-app-unblockneteasmusic info:" +opkg info "luci-app-unblockneteasemusic" +ls -lh "/etc/config/$NAME" "/etc/init.d/$NAME" "/usr/share/$NAME" +cat "/etc/config/$NAME" | sed -e "s,joox_cookie .*,joox_cookie 'set',g" \ + -e "s,migu_cookie .*,migu_cookie 'set',g" \ + -e "s,qq_cookie .*,qq_cookie 'set',g" \ + -e "s,youtube_key .*,youtube_key 'set',g" \ + -e "s,proxy_server_ip .*,proxy_server_ip 'set',g" +echo -e "\n" + +echo -e "UnblockNeteaseMusic Node.js info:" +echo -e "Git HEAD version: $(cat "/usr/share/$NAME/core_local_ver" 2>"/dev/null" || echo "Not Found")" +echo -e "Core version: $(node "/usr/share/$NAME/core/app.js" -v 2>"/dev/null" || echo "Not Found")" +ls -lh "/usr/share/$NAME/core" 2>"/dev/null" +echo -e "\n" + +echo -e "Netease networking info:" +curl -fsv "http://music.163.com/song/media/outer/url?id=641644.mp3" 2>&1 | grep "Location" || echo -e "Cannot connect to NeteaseMusic." +curl -sSL "http://httpdns.n.netease.com/httpdns/v2/d?domain=music.163.com" || echo -e "Cannot connect to Netease HTTPDNS." +config_load "$NAME" +config_get custom_proxy "config" "proxy_server_ip" +[ -n "$custom_proxy" ] && { curl -sL -x "$custom_proxy" "http://music.163.com/song/media/outer/url?id=641644.mp3" 2>&1 | grep "Location" || echo -e "Cannot connect to NeteaseMusic via proxy."; } +echo -e "\n" + +echo -e "Port status:" +config_get unm_port "config" "http_port" "5200" +config_get unm_ports "config" "https_port" "5201" +[ "$(config_get "config" "hijack_ways")" = "use_hosts" ] && { unm_port="80"; unm_ports="443"; } +netstat -tlpen | grep "$unm_port" || echo -e "No instance found on port $unm_port." +netstat -tlpen | grep "$unm_ports" || echo -e "No instance found on port $unm_ports." +echo -e "\n" + +echo -e "PROCD running info:" +running_stat="$(ubus call service list '{"name": "unblockneteasemusic", "verbose": true}' | \ + sed -e 's,"JOOX_COOKIE".*","JOOX_COOKIE": "set",g' \ + -e 's,"MIGU_COOKIE".*","MIGU_COOKIE": "set",g' \ + -e 's,"QQ_COOKIE".*","QQ_COOKIE": "set",g' \ + -e 's,"YOUTUBE_KEY".*","YOUTUBE_KEY": "set",g')" +[ "$(echo -e "$running_stat" | jsonfilter -e "@.$NAME.instances.$NAME.running")" == "true" ] || is_stopped=1 +echo -e "$running_stat" + +echo -e "\n" + +[ -n "$is_stopped" ] || { + echo -e "Firewall info:" + iptables -t "nat" -L "netease_cloud_music" 2>"/dev/null" || echo -e 'Chain "netease_cloud_music" not found.' + echo -e "" + ipset list "neteasemusic" 2>"/dev/null" || echo -e 'Table "neteasemusic" not found.' + echo -e "" + ipset list "acl_neteasemusic_http" 2>"/dev/null" || echo -e 'Table "acl_neteasemusic_http" not found.' + echo -e "" + ipset list "acl_neteasemusic_https" 2>"/dev/null" || echo -e 'Table "acl_neteasemusic_https" not found.' + echo -e "" + cat "/tmp/dnsmasq.d/dnsmasq-$NAME.conf" + echo -e "\n" + + echo -e "Testing source replacing..." + lan_ip="$(uci -q get "network.lan.ipaddr" || echo "127.0.0.1")" + + curl -sSL -X "POST" "https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=" --data "params=bf3kf%2BOyalbxNS%2FeHAXquH8D2nt2YrhBzww4zy5rj2H%2BeAhdOIaGh4HHHzcoREFcu9Ve35LUgc%2BGE1YJD1HxrJ87ucm5zK%2FFn1lLvHFv1A8ZAuyU1afjG28s2Xja6zpfg00T0EcCeqkK61OpTfAaqw%3D%3D&encSecKey=6bab0dfa7ee3b292f9263a7af466636731cdbbd1d8747c9178c17477e70be899b7788c4a4e315c9fdb8c6e787603db6f9dff62c356f164d35b16b7f2d9ad5ede3cc7336130605521a8f916d308ce86b15c32b81c883ae2ba9c244444d91e1683be93fa0ea3e2a85207c9d693b86b5bb31adb002dd56c0bbcce9c73ec3bf5c105" + echo -e "" + curl -ksSL -X "POST" -x "http://$lan_ip:$unm_port" "https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=" --data "params=bf3kf%2BOyalbxNS%2FeHAXquH8D2nt2YrhBzww4zy5rj2H%2BeAhdOIaGh4HHHzcoREFcu9Ve35LUgc%2BGE1YJD1HxrJ87ucm5zK%2FFn1lLvHFv1A8ZAuyU1afjG28s2Xja6zpfg00T0EcCeqkK61OpTfAaqw%3D%3D&encSecKey=6bab0dfa7ee3b292f9263a7af466636731cdbbd1d8747c9178c17477e70be899b7788c4a4e315c9fdb8c6e787603db6f9dff62c356f164d35b16b7f2d9ad5ede3cc7336130605521a8f916d308ce86b15c32b81c883ae2ba9c244444d91e1683be93fa0ea3e2a85207c9d693b86b5bb31adb002dd56c0bbcce9c73ec3bf5c105" + echo -e "" +} + +cat "/var/run/$NAME/run.log" 2>"/dev/null" || echo -e "Log is not avaiable." diff --git a/luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/log_check.sh b/luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/log_check.sh new file mode 100755 index 00000000..b43162dd --- /dev/null +++ b/luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/log_check.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-3.0-only +# Copyright (C) 2019-2023 Tianling Shen + +NAME="unblockneteasemusic" + +log_max_size="10" #使用KB计算 +log_file="/var/run/$NAME/run.log" + +while true; do + sleep 300 + [ -s "$log_file" ] || continue + [ "$(( $(ls -l "$log_file" | awk -F ' ' '{print $5}') / 1024 >= log_max_size))" -eq "0" ] || echo "" > "$log_file" +done diff --git a/luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/update.sh b/luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/update.sh new file mode 100755 index 00000000..abebf0b1 --- /dev/null +++ b/luci-app-unblockneteasemusic/root/usr/share/unblockneteasemusic/update.sh @@ -0,0 +1,104 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-3.0-only +# Copyright (C) 2019-2023 Tianling Shen + +NAME="unblockneteasemusic" +UNM_DIR="/usr/share/$NAME" +RUN_DIR="/var/run/$NAME" +mkdir -p "$RUN_DIR" + +LOCK="$RUN_DIR/update_core.lock" +LOG="$RUN_DIR/run.log" + +check_core_if_already_running() { + if [ -e "$LOCK" ]; then + echo -e "\nA task is already running." >> "$LOG" + exit 2 + else + touch "$LOCK" + fi +} + +clean_log(){ + echo "" > "$LOG" +} + +check_core_latest_version() { + core_latest_ver="$(wget -qO- 'https://api.github.com/repos/UnblockNeteaseMusic/server/commits?sha=enhanced&path=precompiled' | jsonfilter -e '@[0].sha')" + [ -n "$core_latest_ver" ] || { echo -e "\nFailed to check latest core version, please try again later." >> "$LOG"; rm -f "$LOCK"; exit 1; } + if [ ! -e "$UNM_DIR/core_local_ver" ]; then + clean_log + echo -e "Local version: NOT FOUND, latest version: $core_latest_ver." >> "$LOG" + update_core + else + if [ "$(cat $UNM_DIR/core_local_ver)" != "$core_latest_ver" ]; then + clean_log + echo -e "Local version: $(cat $UNM_DIR/core_local_ver 2>"/dev/null"), latest version: $core_latest_ver." >> "$LOG" + update_core + else + echo -e "\nLocal version: $(cat $UNM_DIR/core_local_ver 2>"/dev/null"), latest version: $core_latest_ver." >> "$LOG" + echo -e "You're already using the latest version." >> "$LOG" + rm -f "$LOCK" + exit 3 + fi + fi +} + +update_core() { + echo -e "Updating core..." >> "$LOG" + + mkdir -p "$UNM_DIR/core" + rm -rf "$UNM_DIR/core"/* + + for file in $(wget -qO- "https://api.github.com/repos/UnblockNeteaseMusic/server/contents/precompiled" | jsonfilter -e '@[*].path') + do + wget "https://fastly.jsdelivr.net/gh/UnblockNeteaseMusic/server@$core_latest_ver/$file" -qO "$UNM_DIR/core/${file##*/}" + [ -s "$UNM_DIR/core/${file##*/}" ] || { + echo -e "Failed to download ${file##*/}." >> "$LOG" + rm -f "$LOCK" + exit 1 + } + done + + for cert in "ca.crt" "server.crt" "server.key" + do + wget "https://fastly.jsdelivr.net/gh/UnblockNeteaseMusic/server@$core_latest_ver/$cert" -qO "$UNM_DIR/core/$cert" + [ -s "$UNM_DIR/core/${cert}" ] || { + echo -e "Failed to download ${cert}." >> "$LOG" + rm -f "$LOCK" + exit 1 + } + done + + [ -z "$update_core_from_luci" ] || touch "$UNM_DIR/update_core_successfully" + echo -e "$core_latest_ver" > "$UNM_DIR/core_local_ver" + [ -n "$non_restart" ] || /etc/init.d/"$NAME" restart + + echo -e "Succeeded in updating core." > "$LOG" + echo -e "Current core version: $core_latest_ver.\n" >> "$LOG" + rm -f "$LOCK" +} + +case "$1" in + "update_core") + check_core_if_already_running + check_core_latest_version + ;; + "update_core_non_restart") + non_restart=1 + check_core_if_already_running + check_core_latest_version + ;; + "update_core_from_luci") + update_core_from_luci=1 + check_core_if_already_running + check_core_latest_version + ;; + "remove_core") + "/etc/init.d/$NAME" stop + rm -rf "$UNM_DIR/core" "$UNM_DIR/core_local_ver" "$LOCK" + ;; + *) + echo -e "Usage: $0 update_core | remove_core" + ;; +esac diff --git a/luci-app-unblockneteasemusic/views/view1.jpg b/luci-app-unblockneteasemusic/views/view1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad5acca9eef37e43725c09392bcfde80760ef817 GIT binary patch literal 805187 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

Q2Pg7x30F>r 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≶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

l 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 E8*C<<+5i9m literal 0 HcmV?d00001 diff --git a/luci-app-unblockneteasemusic/views/view2.jpg b/luci-app-unblockneteasemusic/views/view2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da74790cbb3da3fbadaf339951155bdc57fddc9e GIT binary patch literal 78114 zcmeFZ1yCH}wxJz(%CrFUN-90!2_do*V<^SH@+I?I1 z)w^}~?(W^He|OE)bbsByKJ!_h^PTfMf7br&LSZS&D#$`XLqkKE{oSGdY(h!>sQE^krlsVrp$}9sxmJ zJvXn2%(AAo_LWsSUI}##Epyl8l#KF48d}MsiW_W=to`b^(-)(M_P@UA1{E{ru74g| zeGI98lU5aMp-gT#hc^BdUGSe2mJQj(>f2!keHP2&=(7nUuti2Itq)j0AXFP#T^4YA z)OH;ewYRa_cI~9J@gNh^b{U*4ZSbk@J(s7y(==D2GM2JI?DOt-C+xz>kCk!D0YO&% zIp1TW`&*@p>9Lt&q!nq@aiY`ymmich+#39Wn)ajFMm1R5SUa#cSZS-XH{AdGXbTqkY1@ox}L({RAQBMw!ULdnXPRI4uYYLjdvW0KYFbw_C%=-kJay|KTwOAsV@KkQ=DeU_eHSoPt7f&gD$02Vv^6Z zz2bh_(Rh6PY&6+w`c)mb*wXLVxcF@&IvZ{D} zHtc_b{j<*gw|9+|*FLL1P&t2~Vxv1`|1q1eoA39>U6K!EG<&ynIFvvu^FStjhP51% z0{IF^oHAG}5GYUu(OanQerlrv1CG4RVM_NHqZHAsf?N&JWNDczd8miYSrnh7r-@x$ zh0e8L#}8Q7S(RaA6QCWLvF<*hSck0?nOupd|DbG{C&5%Zf9>JcBk6HOBx^XtScv>U zY~tnx+5&<&C>Y{jsK^w+LxZkR6$65axi^ScJ*OB#W1MgLPq06~hx44PIv zB&#GZp|CIbI<;u0D(Hnik_&0yZ6UeO(%TkP=*2uUNl;p;$`VwNib`iMoNt@M$=pE9d{82cQPBp?#Qr)sl#(Psm`dZAX#Q_1}ypY}_k zNP>XZkMDDrng%*iC9_03HI;nF31fCs#`b$nTFGYswYe7RoCf|YH z_2IR?5y=aQu<~JuUNU6nUd2WUK*m|lvvw&B-QF><=ga3BMW6ix7>Sfwe`eRlsAJu4 z(5|*rlQAtzb*_#e=~;culTs1SX%&8I+3rz5%3C;k-eaQ5Sa&Dvv~4G>@~)Q^kLQt) zmnf)dIEYf&d^plx?3eDi0e38dA0A-EJxcAMbLL=;vlWcL_XkS7Z_Uo-vIT>hiVTjS zG*7lHKxpQ%eq!ByZmgvXxc0H8xnlNSipqcP?%jwmv?_f4Niixn2E`O|rC$ z9eMuJ*wC%k(XN(22(OxuyQYfrDmHzaHv)2@EdH^;WF@m8W0aIcD5GVgBQwDM(4<#y zjah{{m3)wr;wxq})7qRy5Z+H-@?JDL6#QXUbq=AR$dDD>sH&o5!E4W_p?#~qJ6x1o z77ioaj+;>UQfLE!0dVa;%_-7QS+10uXn*jSSIZ*iQy(oUI(X>l8s}iqSEpA;mzxN7 zf8#MAL{)E@Y@c7yh5uC7_qGq+{7cmj_wTfJmme(3J{>my(kYdyP6!qaaZ7uaUl|if zYp7ti!jw+4J469ia%;QOiTV>%A-TKyS(ya%?ENd620m?HUwHUiE6-~NIJ(l+wAK9m z57g;ALG^Wi`BcLd;qjauP1N~p$+O^Qxb@v43(ccHX5Q$9>#I)f?Ui#?9|R#-%ycAk z<2+s4AWgdDfolEAnH_xGzhBHg{|~h)?s#+iX3k&NclMdls^L*!W?ftk zZ@uJr=JA3?lT}ifZ?EoS1`A0bIi3QQm)Cd^zX8V|D1qmyFhYC!fLpt^o5#MeW}z)` z$x7+Oq3!;VH+l)I)@q$@1u9%au>QmptIEnsS?I)<1uz;jOy9;f}_|DX!>NedkWYtJgRd-RdIs@~!63nw;_VT_x zu9vD|D=&%C3$(ldPsC1J)->$Svw=WRG=6;G$7I%}wHfdlChiduLxDef_>dwaJZ;Xq);IQCpW?Y+u*I}{6|u9sKiZ2Y>@KbfR^!Rc z6eY}D_bZC;<|;h+Sf|2g?8xGbx}r*O;EQz1Uek)dH46u&Mc^?4lWvh&f0|}RryrF( zY8`*5u$X^6;LIH>%_AHwaYtG?+x`JFU@dDhn!MgT^;BvF58a$ng}6FvTtD!YM_`oM zC$T1M5X8rRr;UD<3`&_i0j~f)4cd{_{CGOuuM6YaJ}1B3aLNz_XoJ`l$Uh#i-dBsj{l4s_#a^e(jZd~pHuDc)oqg z!Ps{ws4FR7XgQCxR2~-@GFvTZR zZNJg)KHc1?3MK68Ms_)s8OAzR)lQv<@+#=mtd)7GG>Ut8$G+pAJhu+AHz?t{f8eeI zmwwrCwNOGxzn}`^7`1|xvO{rQ;o zZH{c!+C2+?YnuwJy$oPK5X&1%WdT{#X+~rY&nnpNB;OJnI){C;i|sD>DNE$=<*r?l zVBzUuL{j^p>@i>H=!dl@JL#7JM17s|fbzl#ok^Vhk=j6!q^Urr)!2sof6YSE5IH}U zSKXB290%LPM&bXKrM!Mmz_zRZ{mWtEeJ{unp_nPC=hug@z)sm-(cu+rauRZS5*)U3fV|xMG%Tuw$=Pc}cb6Q{J&4Jbc3H0AdP`4UbxC z#-)zmmz!G73~5z@@fyzzX>py;6MzA>mlhdkC&g0Za+l?(28-b@gJ}APa`Ck~HMA4# zUlS|Qomvb#RZv>L=;f@35+swH#24e}rMf_A*kIjzg%m3woe&wNctrsR>nyat%^WxG z(MiClaN_It9uP)Azr-sC(RsvX69k8>bXc{}&^0OyCKv-Dl6Hw~Ke%ey;`m*rs`A!Q zl~)|~D(?wrvjtsQ`0B>;%4>r-U{ZZiTq%)2qXNg{Sw?Q)HK~JRz069a6sLK0gKb^B z_!Zaz0@SYn8pzr)7WE*a7qEbrj}9EYeI7~QVjf|H$aJlt!DRvZd^9UxWV7}yvD9g@ ztvQ@jkCXug*C@^(b6}w%sRi!dEg`FXPmcK+xC!4pi{=*R9^h|q-bimW|e~zE1!zrN(3QD-nv#HdMNJGI8F~TvP>R_Y;MPevw)X(oX(ij zN}W^dOZsJqfPHGD+A-WgjEoqLEN&Fm39(BGcbfNxdR$A3Cd4OhX;5}FhRH-xvy4Gi zE-X6k+&Gsf{m_psrA9$2HDb8v_~@Ggv;saa+tiIjO=J6qW*3#8BdewMIc{*~7((li zJ{yMcBH_gm{+zT5$4gmN18n@?%S|VrP;tU&X+Tp#Mh#{#GpcJvmf?>E1@d}fkl#vV z5wY#pD@cQzSvPH;OF;A*V^oUmO+E1u?l}3~75owKc_UsQjXWkOZa1G_v=zS04?tDW zHr%=qwd`6M^di!eP@Q%-prQvrCM7`z0A=v{UD>WFS~D4312s3mX|zi5h5;Aho3bYD zM`9EKIKM+Cc@eyekef7y_bTGDA%QeQqDh>4AHC!xw#{<$EQWfsjS`!sx{x9uf_f4` zO%`wb9^pReS7$=&AlDzQCK@URc*Gx#Geh%K0Bl4xau<{cES>EL8w@QL>;`OK1@{%2 zgZNs2WXKHLM$Kj~({rwtwb3UmZPzlL)duWyaJOD*^dNGZv}@grnJZTOL;*LbI#@S! zoh@^gOct`$3H69j?X==iEW5R&^$o+-ZVpG#pt|>`zs(gYjaLC}T;ui0gs^g}9$8zj z`mgQ90XVU|nFZFR-wu(r^fnIh^Y%8iUHhBm_#75zo2>kSVnpMf1U8H(3VmnYSS|U= zE7JG-?`P^RFuUU-UjOiVcWUP9Eq>C``Bhy#`p$>e_r@8|7s#d`;>D=HIp zIOJ#NuXN?@cc_d2(-)L3ef~gYD)S_Sch!@3MiGK|a7+Zpzl9(E)+w@(mG_Cb8V0e} zKW-=MT+V5XpNwxT&5d;io044?+YkIs znw{BJ#5>oT-0nU))LDFq7bxbH2KJe=Nx>(L^>RVt2;Geik@tsFmG^0Scp_d7T@&e? zkOnQ8WyN*Skjz)(XB}?I)g-3O(GNkA+-@?57qi`o?fWN@jOutN$k&cm;eoO&eM5{I zMYRd0c*OUQL?%qPmh^i0EhZmt6DbxpOyF>>l3 zxkdVFx3C;BBGn?%34z5SW94E2ZBD4?$B9RTc=tBV$v6?*!Z^~1i~iq;3|8gwvk5O6-;o?QWcTdlj&w%59v=IAt4zu*!D?v>Iu8kL*MO z6&6!@T;zbY+>hY>cs&Hyl`e=~o08`a82)$B=zJQSZvLhYSv-<9CM?Of>B)WaPZ*xZ zJS%L92OT=H@1ue%@mVBRWYJfFs?13#;|_Ari4J(+_fmTcxxs`-{-vRCBn zmRK4;1SG8P+nMPL^tRpQ?WR06jmK;QWhB$R;y*hb6VmHc(gKFnl4~hi;RKQyp&=(i ztrbE89ckGGDJ=$MoFY(hiXbwdSfN|2mgr%jYla<5x_xd)ukDO_xc=YfN;HhFqg(2k z!|jcSPPTz28yeT|8$V#X;Y$+a5u}Db{!z^|nb3qXJ+vTE%tFS%3%U2cG!&WULB49 zLggtSbA(Z$4I@;OZyJo1qbo)trKiHLj+PSNHfu)sKC(H{8>e=*dg zin*7&0Nkurt?SJACJWR?3*1)itovjpkai9oGi4A5Xjf0{H|+5Uas$LYjUr$bd%Iuf za?@;DfJM{wk|DXg9ko0voEIr^26G&!g?f1d?hdeVkuGl;b)m~m6gaXxZ}EFn&+U7e zn0ORwKI4bW4H|zn4;e!T@-~zelu<*)l~nLAy^AoW)5}G2ILkkU4 zIDPI>Mip|7afb1-glo?(M}O_X@I+fEbzdw`RG<7jT6}T+vX4>BWsNcjZOJ7jz;Vd2 zA#FH`%5|FpA-Q#jXcoFtFF~q^qI-v3@3|S&5TQGPW?e#$wQHg}(Yf+ClQRYznQ5T? zx<{4+(2tZ#;T~N<1ZTs!^ruRPjRMwb>23y_(gk}kA=-~2X#!;{;$kU5ZzWDlINp(U zlLcD&`-E(X^Vw=`|B86_rDSvMy2T>eVQ!JMu!x=rDrE@r-I1lUKs@>3e3_-|p{wjL z$YRMBDW%Ge+TXp(>*joHh5##CG3$JkOi9R{R%;rASrf$Nz)Z@C}SJr~2_>MQ?^NBsH{Ok!$ZudQvTjz6HjGQbq4_jyHw2%|bYxL!=T3fjzrG zi@b$sMihS;E(ig^b9+Z8R)1{USK{k**;T={JgOHvDTPh!og{XM1u<^R^QiK$ zLas<${{<9>@z9J!9A8s+2-yiz3HJ1MlVjIW1ZhjbdK5_*fi%Jdf+L6wSZ8e=#6y2D z@{OCBMA{MP6Ui%fNaT*sgG)AmR@rI9f2)&V>BSutDNG9=_izhhcZhHt*iQ>8+`z7K zh&jPTYP0|&NQ%3Am=8_lGJx1P1R zpS1IGuIAM>8jK8aK&_oQCpauFRN?3iORgBS<%Tk-(ykUIJ_KS}?ka_iT2dRldky>T z7<_46{Af_vFgj6po`p=&;|4R93ybzC4>ak?CMGeWa8Q*PUQf!H))s$Ihe`y{uL?QG zPHN^_lB$sA3Bsi&877tgre;7df6EU-5m+^n$J}eP0nYJeHUSCf2sA8Q>kw0#Za^qQpG6zm#g}kM0v5Z9XWp^^|nUuBpABkO}eRCL_o&De@z^6M4*uxP=I20>40qFUz>moFy&!Y06u|JsyDP zn;8QEk&||8426|aQ%|gj{1yOQ9oX%!8Dm-<8cpn@(#BO`+uxC?+zzrJ9qgjD{OrD= zZgs{rs~Ng#d#&&80(Nt8ie?bd6=+8XTBV+$-6TUk#QZGTq|m2U3Uad$IkdrUe%lE$ z&hoYhUp71=81f&6vgS>lfP9)^5%~jU#anpWdo}1|6*9e3T3PCv3{Bv-Bjlo)w>BQ3 zgCQrk7r8Z6durb5a;%30P%P~rBj70zI;nA|PR!$b=S71#W@d`^JYgCvnPn_w9`@$oq%}z6I3sI2+oMp3Yar(HiLandxdy|CqsJl_ z1S|+)Tb$H!>oP20B^=fR*MdmsCS{|u&(yvhMt}upgm=C3?yhh{>4K_-hxn@+oiVV> zl70zKi$cU}9Yl?mjGL5Q4`{%=&*M7mNGVg%LhTrgpU^n8M_Ua_&~~y*Rm~)Mv~1L2 zGu4}GxCjPPCYo)2gz;RPj0%8J1w`5R?IC;$i#O4ZxxZ{mN6>9(2IR|Vr2KvB-ut#t6}xPP?;=?6=#okol6HOYz|K-3 zq~rj@@_4+<;_MM-x0_mI>vdLKl6BYv+^(g~%6*%Yi(@?S95UDa z$T9RwK`ASJxSC5u)XPPF0#Pw}e2=b+LLUKoWk~iovcL;!C7DCHRqI|QzfestTa%7> zF}5DVkb&`(EY=HOkpepR)lO1q$c(6bJ@pZyQ3gA=mw8{WC(>SO^jbg%ru?f24fuhN7pcZ<$KIoTBT7hnxYV9Mi?x~t6nZ~^$~0(%9*09*1=*aDqOEM+h3`RO~1EoCVI>}QC6DTJ*S1;ieDUp>bu;YqNj3 zonp^@3;%{K)l7`$%Dqo27oQBiRouJnXx+giZD=a1DXKywt-I7(cxH>aTWu&fBGMb4 zW%SFt0$=Ws+2L>xwdHu8YEO&)wh|RSgogh*nzHLy6m(t{M=c@%o z|B~dv6Fn2LxazRBki@{}lN$ErVU$l=y*VF(rh}!)iHeHLIttIQz`+D{_{J}%IpAu0 zD`$X9xCv|qDajO%VeVS`Q;?774M$We&&cc5)B1Tq(Zr9%8b8d2U%ZN*{c?c|e$IcO z+U(o{S${bH1{^GlB46yEzxANzm43^>3DZk1N(}Umv3IYSbQ!^{acaw!s2$NQcmS=C zKZ96A&1>(9ch5fF<~vqZ;5Y`h(dR0%x0IiFwh!)?+0qzXNx&wA5w_3BStOtllYzUT|J%?J`9y?PQ zfXkHx%ogerBMYWM`${+bVvcb~WoFWFWXahysCeB5uucBlNE^8FWhUE( zTa2vj8)@vklBNX4D;;6?r=xEMgc};pn@D!k{dHg1f#2=9{X2cEB$51hNs}$@?Jc)z z+ZiJ!27H9LdTvc#ZB?H3#1)Wn zPEoyI{1UVICcVFhwswUhpNbznrbeZwo^9cB__d?Rp4WLQ&^p{);k%Dyuv;KiPpQ1a z0-MoCc|IBm5gawz8FjL7mFmH#d-VH~`*qv|XI6_6_NwTWxddIt)tL>ERtKwPT0ZM&QHzVJAvv|R(&AJNwJw9+&<1ValvsC*wsV|r@q6nB`9adwU*p9|JhgLI%I^om!w zh?!vUqm0iEVS$SlcibJe_54Oza4ab$R+n-i2&hHAi529rGJd7_h_$XCc`J>|aFZgE zN6c6HD>yS+&qJI|=|6MLx}9Ph(EPjQym7H4C1Mv4J=C4f6kap|vqK*2L+hAdyhbvrXa!aCtrBHIbEj9tPbG zDa`wqbh@*^myPU`^o3D0wgQ26UsKji944YE=UAe@0bGKqnQywq>{{Q0m9tH^IH$iX z$zZM)%H243Ak7|?Yss8FQ35`%9X!|RA8dWs42(s459m+eY+GfiZexnwtvokNlflZ7 zgjJQHAv#$1Cx{l4k3^MxLi=f$KJKCJ5{X>vZ9Hx9gVQ3I6xDn&R1WeESOPOqa?5ByZL0^LCjyGdr&l@h6#=3?<0rV&Fl(tf0SI)c8bxG%R1P z76S~%);GjT(B0g|u@rYbi{Zpt=ig1-vu}u=d)03+3M@||v|09WMR7eL(-P&u#v@|z zsA%kw(IQ>9f{0pprEB!?&UGsc$hse)NR~$-fV*$d!;(?N^gOB|F7ZAU%qoV?%)tEZ zA146v)O1KG$lvqwC9U?TG=1e=L zCz)))?8Dw$q*SOa$sh`9-TEW1_)AY=3o2&N#^Hv}Cb2Yp7SjRIv}6(mRgE4^I5io> z$v4ui=U76If9)F3O7Rw#kR%`SY0v_uzOyHwpL5g*aho}171v=!0kr#DYiNd4kwF3IIEQul33IFOVH%d&gLqnHsk z4gOHcvK;OfJJ>e=YQqSsf}UmqD#Hazozc}&hV&@E=NF?c#;&FK~$S%=)H(9TW0OkL|@_pSXLd~)-+iQ zfa_~{b+QB#_A=;p$6aPm7Mkl{&G^nRrYGU(Yq)DMd=)0b+5xL*6UXL_W#9J0S%KA1 z{J*BZCf69W>7x6!j@mtLLRaWXR>N#IQH48MxH{+^BcW1!16fg2uemeSl2%K{z{254 z3MNAx>_~aT*J`Rac*cLy{*nm7|EWQrY&gVmouBQ)fQ1 zJnm9KIb2;rg@dq4S`m>Xx#LWzhoy*$?|ovi$c)OUqi@3v*bceNr3jp+W_dE)sp)$v z01DgRyY!ZSNSo%2TXZXyXCkX%Ym~g- zFuDO=3ubJC)?E{dkfP8O1=mPk1dZZ5C$?gS2*a>hyj7%ZT~Qi46%G&DF+es8&P1RI zqXR~hL3GGZqt^r8gXC=z z@y7vh!(Sul0b4z$U)p!f)wXu-R*x;B*m7q#K9b-8xyPZNvgO)?beoB1dA+@nRJ?$f z!Xh?GHybBHCCsu(`vBo`@sA;S$=`k~mt@3m9wY6s1R`_SC+i2xqY-e=%*+q?fJq@^$ z+Ymk^FF6rN)eutI@f%#4k_rasWzpI!fa7?EQNGnakio=@5*fBLbvW#!0#F&++!iIB znNrrr&F1`NY}XR>AE{ID4zL8z>?4h7X-R<6p@i831E2vAb~)tm9!4NC_H#2>$Sz5S zd<@?J34AfyBp;ta@kN39YpYXL@i2iBJiGXLpsE4nt9G+`9f;a*MvB4Uf%{8=*3*P$ zp1w7{kbo{FP2OE3E6s|lIfw+hT!_FmLmUHtPtDv3TD@-BF3vlt2vWb2=6qEc$1 z&I(3Rl~1YWrW+1dW+|09f}GI4d`PY(abwydljH0Tb)1mZB`i_LG>6RaqGw1$ym`1oO+dPaf0)jOt!@WRDG*g4&Y$ zZ1p-oX;}Bl4B)gE?GY+WFYu$RkW6o~I;%E3w;L;F28UzV&8bP zFeAn*_x@g(EILtZPTQH}-{7tq$FK@dr*$2Xf|*Yv)?*OzqyQw3RtvcgQ(HAc-&HlU45)~Hpbv)ZcL*lpYHYu2!CSh3_?<$9G(I;2i z_4d+L!v3)AQ1)?6c8X*Dj8|loPwWYVTU2!LWiuzl3hIg`B#?}HBoVP^)i*um{0I>Gh^}C z3xgD%4-sgtR%iJ)Cdl^p3*9Ge6=8~>=$dSi4C?h@BVm>t87|*AH%!y7&ik1`_xv}} z5Y)_&RG*AKj?!TTK+U5Am7~ru3Vy;AR7ql;*R(+*^`JzxY#pH)8Yn#MecimN*B50) z;{s);EUGP+UdrmT2<;xgI$0DYgZ*AXfIXz?aK<*py>Q69X*-zA950qzKSZLdR~s%L zm&Nw(DyH8lGh#7twOrHL}Wsr`L(Nvax+BseIT zMp&H$bInRWM-$QPkom)q$>1x1Zvs&BvF3XpdONLSN%QlvzQL`MN>VsHK=|0e>Bm~1O|dC2J*zmq2JGR^hb6dZ4k;oJq+3xN|>ToZ29`IaWpZgpNWl~}D3 zKOBCiVY&}+9VInbIc%%D4d&#W?!OD>$F`IG_eV|r?_$x!DK)=jzT3aE&}@_Z8)!02 zvFSS#mT4c2Z+kEO$Fo7VL64BE{rD9U z%P1Cv{qsYP$CoIL*%s3t&HwxMyq9OWt#{jnP;w=)>7ZK`gxlb#l>Y>f%cAK+x9G|I z{Cqzlu2L{}v#I_21#O#gkRr)|Jo=ErXFSYgQ+JBMsen?sCyk!dmeK1EVY6~O<%pfJAUuz-CiQxiI+O>IcjZ^?emH0 zxajGy*w+GqzCTcL?+KdM#otpCWBa8xA46SKfBvSN=}+;Wj}G((ItKoMB77sM_%74W zNRA&A)o~8DTX_BSAwQVzX9?D?E1!+u@0`E*Rr}(CRD@aHFr8PB2R?ki2o`=VGSu*ngFf5$+FEaMSDg3u7-))T;Z) z>i65=`Rc$2!#me`-BbUdMiu10A>g2w)jL%`Zp`|Vgogh8zpiAh-=`gi2gMC@Pj6;< zxNq;H_YH>y4;GZhv!tfMkUvneRX^vQ$46yMi!Of+2>nYXI6AdaNEr@>4*t^SD0m^A z_;A}|MP{PO&whk6I~hDA*Mk83oppcBkoXpx$&WJ~_TlcOKYn)hKAU0sh}}w*Ja*W# zUiHm5tbB>v^M!xN^r=q8+}CJF7x)LNSt;ABoYR^T)%p`7QmeP`Wq+NZufk97pw;b; z&A{B2uI#jvGC1Lkz?`@JHX!=nzko>}{C`p>|370W{!_~T)HCHjo9BOS^Vl2w%lm)0 z>|aPHLl}V0#r>o2SU8{EJH%}SsRYCh!<(opysr#DwHnV=c87gu!aJU+iz zufZr~R@RI<54#mp?r=1oPr}1%jPlEaO6*)`K6m^NQ>`;5E3Q@!T;j9^i*G7>>?a8T z$#yEnui(l$<NW0tgNIi2-> zD5#M|sDkLq_wf%U*SN*N8=TfgR$UNOnz5`XtQ6#(8Z^2XMJhLqke8eaOU(N*QiiwG zJ=C{XB_a3=l0I+Ktu><@Q&MJ*tw-b;x9D`(2#pTwH*y~oGLShM^4Y4Aem?I&mGlzr zZD2DI=qdWCBXEuVi&I|~{3>#R%jFK)>5bd^G@U=7)35{`V>Ulf?p!+Qs)WtTp05hg`?8Y9aPYC*QX5j`{T$o-?$l)qw3m-w#shkDJlXM`66b)MN z6%AOXq}!7TTpf}P)i`vDtCa+Kb4pVj&6O7}7!=a`Q&w|(-qF-x8%9^}`-zXAutg5< zDJ_Ym_OQv4VoNTaD;}%zeq21+Y0xsV;G0cc2+57}aj3{+l6$(EKage47~RMkjt1<{ zDAfke$Y;#*ED77CBi2&)P$6o@!hjXwd8)hL06T-kbkvqF3$$p zc|F`|9$kUt6>b1nt;Ok_)oedJIg51L4WavyhQEup>(q(M?JZi_yStDy1c5JSnal+v zS56wk7LCH2tQEKU6qd-*qYD#>BVnUQ!Wv~!MK~$L*Y&HGA7e+V{d-w_Co^_&HYYZk*_E5aT2|R#JQuttC4b(j@S$7G8Md(5nD=fGu-Be6=}+!W>11;~ z)f(TQ5z*qx;gmY4L2%FDWv*)mDEazqHia?>N0<*`29@tbPwjK7pZ-J$gfB89dA!fK z10>^YZwYusyZf@sRa$8h$DF?E%OMoEsI+G<+)Q|c)i7o)T2j>>m`f&%z;9*f66WpZ z+TPM)S=H>^VvfkxMotUu<|}mswe9`%v&*j$NQa963Q-HpksAZK{|4iBU-*vQ>ixPA z^`y6D(~`PV;!70B>?3DXaP0d6v3>IW@v4(MZiPC(Q#h=-r0<{tA~zWa`{0Z2-8&p(^obB(v${MBA2kt&nwrsWIHH}ih483 zW=Kz0w-BNDDVNzHj>}%~_}UQ*6J6w!JOgB(C;;(HrrT$C@O%GS#(*mF#|Jvb%c9J~ z7CsrN*tZhQpMSNo=r-NJHvy|)mwtgTb-WKIfs_M%TeKfCvegM|)&h<{fIjcHS$}p9 zRDNROeYtz*>svLdu3jo;hT(2TsR+#+?>3WvYd<^~rrK5wk{g>5H^u1$ure7s4={)->?x&w?N7yTH*%$ZrbMI?v@uBc> zVDZ~dp5yLcWsL7obwupv-T(X2#pDk}zrT+Qb4b-&|E1~w7}>$RxmS^X1ziWzopxb# z725QBSCIOA7@7wB6Z4<-`Om)e&vEq6Ipn{YYX1+LKkao)dH&{~35MvUm38y|BmIp} z{>UFFC^A`j!H@l)ImkNG*O**k8)&5TPcP--g{i>6C3~vb5rwvU{+U!uV%J4$%k7Nj z6X`B__Y=!z+L&~Ff(u6XQcq7d1g36l`p}Bx;gfsQr@s`pbqZN6=j~$Qrz7gYq2To| zO^Q(3NH32p+U8t5O0!hxvSz|Gh0Mq`0x#U}oZYEjCIm={+6nP4k zvQYMj6n2kg0)5Pll&PQ7;{)sDwv0afE-}=0ROc;}_Np>Y7h0J^>LKfKj$VIYlfxu4 zYDr9UXV@3hZ{V+W-NG~-c8R7_HK+|Stb|Ht%d7HOWNxXKpeQ6wnP2<*5-a47{|$PF zL%V)sXtDc68BSOa+4@1oq0eB9GnKjWuHIg|hC*vnhnvc_iN*F;`greRcST9OF@C!j@8h&d`6a!pHzQMiA&ILM z5};49A;Z_V-s6!S?3Q5zq)3ljQP$0rCYoghbD`^H=>8q5}=}-%0>G`?m1I16s92I8T)D<535X;*SGvsO0S5zMeVm_%Js?XAW1YaY>#!ecajmVPQ$l&x`(#D=fEx*X^ok<$PL9+fhYH+{8T)5D%Q~- zZA81s_udsKC2A4S%R9un?o*NG{K?emGwD%1wjW}N@z|JKfUlw1U#CE#ZQHgj51t8u zriDyR!q&u6TGov^Zmz6nE*q2>4v)>3i5wN9%jq_S?6Rk4>yvZc@*~5OA3Nh4N{{{2 zE0R`noM={mWz^#m7k2{&jK=cyImpeL}fS;`jeVUwC0jaK%BnqdG;6)v`|1P*_7a~40{vc z822Q0u5n^qCX~we?aW!0-Ej}~q`*3Sg`_U=9rQ7=$BR5?gs3UVUR%oba3_1FdMpqExbq}&}T!#~ccy6s8WWGfc5ntlo5d#g!dqvNpx z8V~uD*)_rMAR&LcjPiz6N5i?S3+)7b$zC)S9PIg@c6+YPUB)flLFw5R5iqNLCmbVt za-M%g>j>{y&2YVpf}RfoH*MNodprS`!=Xn^!!Ac498qnq{nIDvWH7> zZ8-qkiKujBVcgkay2S8;(tm0v4xBO zE=keC!k zY0^Kxv7cK1jNBP6X8eBu1fJ-zMQ>33h~M@)nwVm)Lk#C;uhDz|Gl8-^c{VA`ESil{ z+oG6_&jN3WgvZY&0k^&-p|PAEBnJ*S3fis%K&+9U-Cai+zHT4~`KE)$ZkxS?cW1_5 zFPxLo1||P~&fC9vT$s}Doa5aYQXSC#C3of1opHmF!V(j~=R&TS4Co(UO*9n17wq{t zySG0;4LWZ35aWp-`|J4l;{@aIbjA!sMsMM#{w3rAq>3Tz!ZZJ~CYRW2)UW;Tqxk?Do=vQC( z_qy-dIbYIbn(92ml@P{CAN)RNLVyl65fpujXUyZy7|*-w6UYYUar>k6 z7q>3LAIIIOf0r|0I%?y7OGX#ie<`FkT#*5R_p&ow?`R}-nX-kfD+Ulrii?sI2IdfCnU>PwOf1dw|DQowYxudtMl4t^r;}LVq%#Xk57XUk3c*I3vEGBG z^1j!KNZQI2TxB#q5HbFF(tWBV$Dz(SopOY^O&c%QoYvp5x{^7vz5mN~Yz^hI)@jV3 zG0g~dK&|KD{IIV!!1*}2Sdr53h0>Z=K_tbQ?9i2xVaHyiH2^X=L~T;J(~9Sa7vqSg zg(#)|BA@H&mq#Zgr0-qkve=3#w-Ht9ZEd zdWwIWbo@(SmU^BQA?G8?NznKdnmlM}cp1U^yfM7Lh-8g>eX0QXE$R9FTA?t#9Nn2V zK`2K0uyH`(y|0V?XH`9A>m18ipmwnX zf2|FN_Sqh1E7kq+p8Ywn5oUSV6}kC~kGp7FwsY;Tp7R{3f=B_o@uc>6KSi7|u-hd8j83NCVdTQ#x9Bh=V~dvkh^ZHE&#Og>kavzbUGs9Gv{jv_ia z#wi_doLg;D@^pR(S0;klwjLWKH1E5n#lRrXXek>(Df|vE(DSZYGUDK~@&Xm!TmTX%wQ!fgJjHd-obF@aRp`Qh!V4sNWBWwbOI72m}*9PQPgzL>J zgt5k;NT+e3o_rkaNsP2fvwKy$zdWNY$F-wmtVLO3nwlE*zmQ9WCNok7~I%gT89UYIo zpHo_;vwxrh54~Mn5$2|L_piTvOEhEHJduAD_9=XYgzR1PH7uK@$-hq6H9VyKgA4GS zdb)V>{0Fy_TlV>Z{vX^oLs^G{?uFm4R4d$}0;&VMjDl=y{+Gs)Sa}&fGm4x3v(uzuOTaPeZu^eHp!KSnkR-<;?K9-bzlGeM+LLR7Fk(%VpAoT-?>5Q zZ4^5`OK+$8sM6>cy+aOd{%#<CG#n>u zUZ%18*wAo`K)MMZ5=kk_=?6;B{3>$><=F2tyYwF4&`FuvLpOfjCmL2lM_T}$D=Q@x zb|+4c*Mcgey33TicLY-FFJumjqq9=KIIovBGY9Mwdz@GW3pyipx{`oA@Re@370uw*q zTjvYrw~wH>m78O5Wcp)>q0dB!!M`E^QidAz+nT1YXF295y5*zq+AX_9rrQwciFmHG zh%9RJLJsWYQPBJHD(cNA;7uV1D&Ir?sE!E+c?C_AV6oYM&v?(@+DC&yQMBb}Za+g!dIx zJH!$ZFMd;&(%$btiv|>Ro;5M!#-CQ31$&~XTU!65F$yA}6q}QhAUn`rfB5M)(FDX7 z7&rPOu$jv3HyhjF5Gu_=@ylO)?7-FGIbvwn+148%PDJt?PVlxN$g}B+|9C~*X=e?N z80n?h!>}d$R%YJu!e>9X0z*4?M!N|eI7-b#Hh=D}IGiVRiMvEmKXC8zED18J{k!W0 zEM5`pA#dn+(BE>i<$TUmJr*)pe>&@9$B}2R@)S7JbtTi%aL#fe@zoW@j`?AOwxCFq z?(~33gKWc#DZ_g`?c@w_P9Y?K0jSb;?1Xr8E)2&GxD-9xs#{$^o%V^+pA-W74i!x3 zHKw*|jr*E2l!z?_7xZp<`;GnN4kT!q*E(+uY9*Gls)pTYr$t2+X0T`d6FnVqD}(6c zkMzD97sNK?pl2UJn)QSvM~~smoHe9osowvH;q6$-Pzjluy+a|QZz3dyuc}k7jML@D z6GaZh4(zapF%OY{%bj@WR@`v;Fh8v6Lm$mWIuvvCx9lVOD(9Gs)xvoTJ_dV8+kF=o z1NTo*3I)_wk=zmNMEj{IEn^WOGXM6uy>!MgdcY3FS0ySidB(iSuUog)%hOS3Yr+Bb z`$+1bJ+ok~0#8&Lov?`TOhn%8Uml^<{911<+3!!>po**`^ay{>C1Pl~v0O#}(a*k& z<<5M{ml{Zo<3t=ouWw(JPK?N?ZX-|=WAVA#Ixt{t0qi9nEgr;SMFxKl z>~^`E$RY;=ndlofm3cv(j{FXm?-h2d%IA0Czb#p<&sWtY@qLq>peBsKi(sTr1+dY~ zUPEw#zS6E7(nctUJCkOx5y>H6aP%@BcnJ1ewz7RMKwakceRdzVFNpD%;8WHlZ%Z4r zy;&+sp3#|l7A9Z0S@FLY>GDV{tBWYpqg=g~?nU`BWAlu>h}#m>D_iVkVxlfm4zCN1 zDteR0VpNM93H^C1_F}kN(#x6C9>37ZD#Eg2>08Gg-=s%xX1vFv%{yv(pVOW&r@#2n zxWCvtSMq0Gsdd=4^p*1W*IMuL(ZfyIn=h#%JLm)d;8HrlWu6q-&P*2+ zvE{Ux`en4n1891wM<^FB>HYj5Sj&r_zI__xTJQg17sG7lq_yjZ(eBPk_ve&$3MT`%Az9r9g|FD33ml!Iox?8Q<r1;q>==1E0=y+8&v+c)cvB@RLPmw&lRkb#HqU=hx>-XAt#D(L|MLD=f%R zqDO2i^(T&=*P*7HOC2>rE}KQASjp39v|0GXzz@O^)YF=*^j%&LIT$=YuH#Bgy}U|E z+}?H*$Q5r0RJqx|$%hbBh#5QG|1f7k7@ueTdW*q}N&(usZe+j&%s3!(Xt;yaWzT)ai|z z8XbliD`aTRsK_6Wz&Xg3cPPkXf$ygX$%X|d{ezpgqaw`bkD$(0F}O9SL{d*d(!@5Q zkb@_snq!>x0LD||`zfhSPhXr(x$(J@(IR9-&|+^Xp>*tPo3n+?A= z`%{`x)*O|Us+*4$wXjvwa4!gV+R0AN2;XKDeyK(K-iJg_M}?*zMZTXt6D@bu?DE~U zENufxYywfHXnyPx+So?Zok+yEFvWsiy{;Q_Q&xHOW2c}bwpsH5H7+DmD zx1)vA0l@;H1IX6$BbzksH?Ws8LsX-Cqc5yIW$bItm8FX6yF)5z1n|-#(R6~~`YC3! zFmL0N|sWlq4b9q=He!Bp$1^?X*6|5l1!NSzl{&X(gs~ruQvtjrLT_ z1Sy@>h*{kDm}Ml^7*>4|A}m?YB*Sd0s(+8a{5zFv;Soxh7dhXb>8w{W7jO-l=`0EM?j(3-IEGt%L{5~KD>Y%P zd4Fu?;nbMMSeYAr8kGR=XfEXYNHUq#daH-vCSq#2=6lueZ}3l-GV*k_aW6@zD0j7$ zBgr{waz#eFBb~%(I-I?ESV`Yo3`_7JvXp8?mCEr<;cp*)?}!Y+!xC5hUBjC)h~h|i zo1Lw3=z;Rylq#!}xjuUsdvja@8?R%DcU!FtF?nyA!kB`6o)IlA;g1Zpu1~ZC`AqWe z@Xsk_48Tvi^%^Io!T3FDT_UGwi*ENF36U}&6)W|7%3}XEdLpS-6ol6b>r6(q{Jhqb z%~E!)>Q9~j887=EVZ5?skie;baJ>KE@UUDG{=?D3@S1(+GU7FWh8eBUU36%e+!Waw zN)kKupxc(92rppJ#kSz0O;p896%NuViMmKrglcQgbRE?t@~awiO*zZM=TEFeZnzMz zCYLMbS+&cPdBE&bn-Y$A4O@+YnyBnE3BBEm_DQkaEFEcJSGWMx8*!Pott^$u1vX2ed{RYVFU&7Il2a zY`|M-dZxW_+eqS(1U!>)J(TSn1_5A>B2&E}U4fr%!gXtVqhF7CaUke3V-o84;MWGL z^CjHL>-05u+R#L7>Oq_|$^5<5UO4D8UxR zAOp|^*SX#esULIaSyOXs67Xx>X+PC%IVpw&O4^yQooS(sbhqMH1bTO8nnRp=(@?{N zxt4RPiqFT(7t*9aRIutPsac#g+BExSv1Lo+SgFe5@y;r!{)4|`dUwQ|x_m>D~Z z7P#rBIq=kj8igPB7Pf&PsIbu2>|L#J-(!!ICq(=_?)M^?;RAGGL|ep-2JRo_1vHA@ zMI!WOP+a*Tu%+sNN7d$Kr)-fKVvm276It1RUnEZbDGO*TnANX$@9!7jzGe_uMlD8U=(f{ZGq{AR6^7L&@f2* zzo}vH-*eAlQjQK~o@%A3$B!4cRB6ltPl|2V*RjJRbD)Li;kv~qd?kzF{rX;hg59uH zbCYHvqJCTM!D&Lfb{n|Iht@@G%!k--mrh~n#{4oIMTQm*}%ed43=RJD}7fW zaH>;3&PC%0`>sdUKU>5RU!IZJz=54V31nW2FJGzNb0i>hf_JI%Lba`N8YZpRW0gx6 zxBXc8cUin}NWcbSM=9djaR)ljX9RB-S+e5(BsDn;$p1iLHx!*bWD~j7BNK|$Nie(r zg$y;GBll7tsdk=;gqdxQUjFa~Ksj1vuR@!VZ9|(Xc%mOU%}I8>rX*6`G#-_Z%TD4O zr)yzLACA^+)u3MP(bF`9#B4fWQ^FqHaIE?YZJv=#WYy~hWtG;5s&lX^c%Rw1@&ZcL1E%l&fI8dcA85TzH19&afP9e)S!X}#;4pOchi zi7SAlbKp!xW$tc%eQz^CGm|wwY-jEiB|onCArdG!WsROf2B6uTc}FFz>8DUnKmVLq z8ykSrWpB&Nui$TMyj8*MiRJ+%WSLV(D3@tD=FQPR8EO91?mXCYrH?XhZP8=P-pxYR z_6wC+rlVK%dn`jfG4k>5BQb8Au)3jSxCL*Nq6m1@~11CcG?Og4tyA7JK>jA)-aq~ zv^4ZQ0nH7TRgUIzAg6u|i?YRH7Z>o}7Q`^`K?Q``PzAX&NLU1uZ_Bme`HI+~bo+n!C#CWIh zdLeg@y$$z@SDWtlVwgt(KWn+?6HL}*T(Q*>RCSVrx|G@-EfyM4a9@8Mi13ya4`3hD#i}B~rFv zWnH-vNy=tS>y$8jetOTAQkw8zq=Hrq6W)KkO#p;SdA~L-sG|U13NSrjv4>z{QR~>j zIo$$Rg6j7}WJW|i* z0_u0Rsz^ArIld~1LL)UJsM7wk!uWznJn&L{%DNvLf1^$5*}B6LlF%G}A+bTSYDLlD z*=t%rB`XVv)TU%#9iy#9h8jXoM{=l{TIo6f(4^9ns_zwz{{seF&qzV+T%U2H0rw)U>)KooDq zom9^Zd7}KqO5dqyY>%Iv-eB68RKgTpzbWCfJ~U&CFuujP=NLoPwv~4~mngb!dZEiz zFlDjRkVoc%17}R*h%tPBpp3{TKfC)^)37gxSoROE}G{-)S<&W$1nsV zwY}!-DUKReVKa7%f{pc~QjQJEsQEZ~RpV_ zM2@W8Bp=Y+tlp>lQH4(DwRrOAM+4Y$R{7->PB8cF4=~EPGJ8K(w%qIC>G3Y`)lTII z)Q+NEKUM0~fmZ#dsZSC}QpU|Pa@&~^2?_^MTN{5i1TUeB%k?hMMdu5zhhQzZ6ku-l59Iu(NF4fzilRU{9<@Ooi)!N{rC#WcTgFAQfhAp zE)vy4+-6ZIY5D|ppwc!5MqQf!pS3lX4kJdU7 zd;nZBCdH@#>_e-25bqE;Mp-U2Z^R|hBZjYTS(srh{Jrk<3xNc29NEln7yk+e82A_5 z@38R*CI$!r!N=%nzgzFfKHXjH)e3rxiW)3n6a!R3xth{;u8F~#$CLb((Csl&KQ1Hs zN(Zrge?D+bO+^>iaz2q=>dxK1NkD2v-81UI-m_r4+nN$@QT$ILQObFE2P;ICJ?1^e z<)xgV5;FRFt}Levg|^~iV@1h~SO+!clILdV#9~4v=e#rqNy*A>K;;H9&V)XAVGviug7>dV_ ze2!@I`L%tZ{^Qy>6v~t(gW@-wc+PNq-VQQi!Qt&cNfF*Skbg{5z@Z4aOF_DQRm;Sae=&5i zsTV`sx&|Yi$X*^SUTR`YY=xuT(QvV-nV#o<<%ta3P5nMmvPL|tkvgof&HZp)#i&kA zCKO=R44&oWXS5=srL_&$R6?}WIZZ+1^Or9PQjVOy4axu~)v`5I^KSa6hoy7suM03i zSm{{VE2_0dwSU-AA~RZEC$I#wjj9uZvz9H~Zcov-DZMfl0pZKUu4PW-{IvFmAtmT> zx3f8{8&Oru_;>hTqD;zVs?InkBKP@&`_5B{DNB$)+Meqm5Z!DgIX2O_ZiOwE2(MDN z&$%jcd*GG|vEu!0uzSO8K}RTGoWN4@V3X8Mkl$x8PlhP~bW3a!ioMS{!b@I(;4c}D z0^6k8?AWt1365LzKU9D%wd}_)WRudBtUiZpD^rr`WLBhC#Lbxz(J<_o$r@D#+%XLt zVu{)D&RMKs*ipMQ{#9O(t2!zy%_o{4F*4XpzRD?-^g=5YV&!A%3tRM4K{paEb0-+Q z|5k;(0N|&T#!4ACIXQPQR6C#49$S4Sa=W>8)aRO|^9}N2-GTQSjX2+Ei+Wj39q0Nf zO+|%fjycp#!}N~s5HlZ~iIt)_*7_x1Bq2ffBdPAGZR`g!1D0!z2L9M1sHxu2kux6f zAU%k)m>0kjgj*uJU5xL2%?iGZ*>u+t0~FL_5xtD3LFI z%%I7~ZoTWBYA03<-NkmC9bwG5XgBWq4OtkxHe$qhYu0T<>#Ej-lNf7+8Y_cO^Sauw zTFLu-emjAtUsgrKu(i0r6eoLNc0*iUnJCeMT5etbqQ5j_S<@p+TTOTVsDtnqyX;rN z#2M=?=FHJ>)j4EW*6J~3C+LlhgRB`#sXU);VwSZ-zt5mTxEV^%k=olo~i!e^!S}6ru)b`i_m)I z)|Fo#wE#imwlc+ks>%^6DHWBjaX(jo(>P3+LL?UI?-*?``3A%;*AwW!e}|v^1XQ@B zOUk+hFCdVZY9FQcQMIYH+!9DX+m@US?S*S|g0qJJ-h6V)d5+87?lbWe+`LxCDioj20PYo9OoV44DnMUP0JjIJnMps*)Ce(qwxk$7r7E63hYX3un(nAHrHR` zYZi#tB?qD0!REBkRX0(WkZ=suqep4`gtVo8;dm@ zoj0Ek_)H?a)B>Lv-Sti6yg+3iU4f{8HIlY!-4uHVR-p$(!p^3;7-!Xr3tNxn69d1s z3V;CdQy$HAb5nLkyy$eTyxrc+7(rqcEyu#NPKo6-b-=sA&@!ry26%?GZqNSRuWqWt z{(bol1d%B;*Q-ow1!8r(dmm8?lwM^UcQ>R_=L7&%q3*Z~s7SeMDj{&GCU96;y$b4t z`q}YRh@{tCrZQW^>6BJHP8yc1-zCrvsb6cJ@$aNNNQN)sA;jkP8?y_K9&T& zvRt1^)~lq{7@o&+yb|fP985oOdfwhxG zrw3V@IP~vo5>!g(1?c~YQDl~+VUyYE#+jBOb-e`0*P|z)yQxA@pfhEj=ONvn!6CTx zNQ!?#AH%k-qOP~|` z8#JLYYf?v64Kx!+=13niwoHq^jDTPzk)$QWdF(yb@-D*7_GZ*Q=SpAh@e_HQj#Wk9 zeWPV)qbq4CT7=E;6WB|~bhxQ=V-TR_XL-xb5Mq3V<#?pAe0#6v!wK7*#2Kpp8{;5| zn-b+}t=#^=(%P3sz?3kuqB8V&Y#)u~>>+hQvU9L|4J;Str>(xQ(m=xdLtVS**juHPgxgzDOZ3bZ2ETg>VJOq)ZD3{>#{mA>vk3% zUlDK_WFIb4u3L^#yw1a!5J#ux#kw_Ndtn70YEag;hl0xtM;Q*M@yEG%CCvy-u6J3# zO{^N#F^1I$!*CBc$8a2+GUZ^{_S4Q#VmCVoDK%cy!x0Zmmo04 ztYN)K6|sl~qF!3TX>|nC#Kx)HB;du@cS;0hhj@$4VQ zF?QVKEH+Z}p9=d+dtcj{0$2|+egCGc`w3H_pm5^e-f}}Tk8RxGYKtjVAx92Xl}xm- z)Yfh~drYnw_nzTGY6NFoVUGNX=RylH3Dh!xq}3p@scf(degaKJ;mzq$Gj*OhCrF^0 zP!4^Td8pDF`8m9i0X8c0cn?mivr=9FDKlmtoq03suljo`??CZY+W1Rf8EY+amwW~l zASKD*nmx#w6ANrM?xPk#1?!t1kYpyMeAKsdw4oy=|Z6mth@HL zw@sQEy?Y+G0p!{IEJ(1M$RA^sM+S>sB8%0`VwJEX`l?|={=q@g%{n0=B3o=Jsh^ol z(`*EkIC*$9J~DEHF`eh{Gf-yH|G^2dXkfaWL&lK#1B8BG^lk?x|L5AWfB)h(fafkB zi%9TAn4&tz1b4ZQ|B71&71-uTpJ>MQR2Ck=HAfQY3(>v|DQFF(zFE#Q4I)7+of8<- zSJT*9v75Q=mQsVAEx6AV|6Pq}yYPNq{Rb!ebA0Hye-4?WLM-9idtvbp(F~^$Y^+Sr zNi2>sx=R2J*2} z=gwgg;isF5V{y&THIEsr=%HaNF3_psYm(x( zrHCP`k)$XbRck70V}7G4^Aoc^`A*;nM4~Nvh6@$D@$O_)^#x554)w;OrEq~WpC*?m zsUj&c_Gt6BR=v=9~Q#*tdKSi0yQv-$QaUWbd_`-=qF73gJJv)%lCeke4pr zXLcj;?(ksdqojF%CZ8?Su{SiWxbUZn>%(g4&!bJuwRB6W>?+(8fu2B-5MTfo- zZs?*Nf0QRwt8-5^K?@e1VTOGVN z_EJcB9Y^;1>)F`gV)ECl>_+nMVSX0$)0{JdoOf}2EH~ju(eDE2DL3#&@a+&9N%N}v z!`&R>+XRWWE8fXmc>5$b=;ZdHmTy; zgXP#X&WhQZggy9ZM0{uLEQph|Bmg&CLe*FQZQ?{YyXjqYV?LWAVSuuOctmJHWPDWEP(D8bY z)G@=br@_b=?<$F_t&-&UB}L&jGq*5em;8HY{CA&~ME(k*;XdkWvIJ_;mMR_06_0tP zSz)qp9&Mk9*^*RTA@7W0=)$_1p<05Ii!_lDhO4qdXnWcu?rn_6RvAiS zE+j+5=@HS00h1RZ535*0UmPoa1oDD!T zKH;k+xbFxxok=31tZ6Owc2kwf1-386jWkvV63-Ku<3aqQ4uTHLU`RmIjKQ$g4Q3^W z_K0rX7ZlUZ@K1}U23$=y0NNVtF~gyeP>vglmGrAD<~33JC_Xxa_4ezWO!d7R@83d& z)R7%R{kMEv=Ye7*1fi7@Qm0!@%AZv7yMY7N1V{2D3Yfy%7sSk6_1L(ForOx%xS*;k}Y< zK>aDIgqLa2yrJXAl+ndyzaY-k8Q9F>>7jE6PyQ*9v5ktCo&75xu{E8Nc}6!MWiV|S z39p5=Tq8)ev5pu-Qh(T@W~c)<(O{G_K^?;21+vn@?Qv#8JNsk*8KI{bbjJSN|s7 ziu+TaZpOAAB{d7{*+6n~eLI=9#T;=I8A)G3A%{GqR? z@SNX0xY7Pm`4;+k`kK37R;l&>KkNTSe}R@y$SA9MSZox6iz8wq##RHe>7C^d?x3k3 za8-F+uCgub#|an?aj_M%n=rXMWib~pGQJ(Qq*oL9s4_bGvKORMZC1N2zlm)5R{ zc6&r1+`F3nu-ufpE~e~Pr=5~d9zlwB#TqGIsq;kX`5)0>{>y)+|LWJ^e|Kj8*?OK) z2jXu%4=}v%?GrX#ZD(z8{CnQunz$tU`rpWX{m-w&qwH%QotGpuy}xRpx6NqUf4oej znu0Q~Z}lep9$o!$Va6Q%ily=XhuzTY8$+&`Rp73I?^;evwE{TrFD*Zkah3~TM zvil0mzj6ka_`=WwgXIQg=dd#>{*7|(7Rv-0oO^>Cb48Qo<34DzbH-M$jE3&XHbt!h zB$?R+zBixa$iAoEqy!1>lqJi`c+8P<4?gbY#OiYI!1CMDeA)wm55nTD`G%5LJk|^L za!wa>VDNt&;J3>^)~XDE59y=R+1M%LO4TvRGxP5}+khzJz+wyMNd(rVf5(FF;oA>j zTSGpO0vTZ+>_HOhj6T*6K^Ag^VNPkQ@Rsm?i%}Dz9$j+%UmoCz(4fs8xi!dGskEM8 z{_`|NJ)k0S4NenmQ#5hr3~>HzsI_%+sqNN|YdOOQ%YWfdJDY2FRC@1w@tXU?)-ga> zZ;w7&HlJdkX3Q{%f3lNhWd7xxmr%A@ol6?W;J1^B?DCrteUJamj&$-wSCT=30o3xs zfDLj}P7nM;_9A?J4-5$C=D+8DnIG6ZpN1|2li2g@1eby{!0z5D5zV_YD4ZxXjG*LDg zex2S>o7vo8CEvVwa=ot+bb^ZHf1kZPnTm@81jFvb+y232_myp6h>6-z!QU)z$Uh+vZDk^U>UeURcHYQ;4n{Oke$HO2nNG`w! z_L$xMdHoVCck>^dUL-(ZJCDM0FUN*A&r7=h z0Y=m%Vl6?;Lwk?J^k0+-pjvwKCT&la=|>f`iUpyvVGS%?E)++3y;JsK3B zLxwL$z&~((eBKHYGOA{@bLg*chobvVw8Y905);afh>W*}_WCC(6mP3;P)XhG=QJ7k z_$Gd>?*b}%6Qlda>P{$=Yr*aTZ#uGXlE0V#;G7F#cmb%vH6r=#@wD_iKxjIN%#Rtgm zFpRu|Wvjs9aJ^EfdQ-2==@tBo~+0{2cuF65{y=&D6Oj zZs|4I?8&z`2gO5yQ|&&0`;UKo?o3V3VRe)wY7&NoR8m!sM`KBQ9u$h6Xr45Mzbpqq z-f2!_sG(nGAZ_}bmivpVtaA!-hlyg?7}!JTI&3>Wac|+Y`$2ZUZ}xSDNPPXQ)*Y+} zjZ&K-{Nc2V)_(0b@YVppS==iM61%GsS^I#8X7cvMVPTI&Tq0RJ(?n-dn_nED8FkZ& zO*Ivjthk%sp~e=4*CKr7Sjf-DV{)ZL^|gNHE-?stFFp&=8Nt7Zn{v*E#f#^icaOP{ zJ-Dn~!0v-`ZCYZW!WNMkQ>e>rgb+Kj|>4W@GG z`sqpAd-i`8B5UdT2S?WMXSJB6T&uJHeu9_SUHhjzs+KaIL81?c(85K9P|*E;dxS8_jp_Xl+9yGF*Tjvs-UbGC_*u7q~Jv zQGfnoeb$ukj>HNPDS4COj!<55f13~HaVCu}A7y&wKi>yoiIn|+_XeI1y(cf*6E1Ci zLG5;aLn`YAMYwj#b=&9@AQu=zu{ET*G74c%B$&M)T{B~kOC2`rrm0W$wR(BWu3AjX zeDd?Ni_>b~S_J4lp!~Mu#ge`|oc}{|KFIxKpMmAy`)$_hUf?gYuI~f?(w1eocp>|) z^11h9b)6Db2b0j+|1{Fa5U1+nl9ZkWnTOS(6G!CBDaCYF4mJ#<0-K9&USp5rs^EPj zJyc~l6=~Ca!}=(-aSZroYwLmXsN3{us<}aJuy#Q3TwQ+eiMld=#5ekFSXoP(k8>$h zSXkb6tM#=Ga_;I>BjI2WAyV2F(DeCW$B3g3*?Nlq5#%utrVI;#3%_NZF&3F)At}vK zVJnfFF`^9Ki&WW zD~!p8_LhM!iIkkvw2e!Kb07$3N)im$#Q+NuH7qI_EB6F=>uDu*yJ1E@=H+I)RDB-u zaK7nW!A`C^WOJ_LzJ?^HLLb|pU537y?ZJ82-ze8QqaQQ2c6{^c202z~!reXHzWZYM z=Wi0}uon{N7iv`V1>igts}7-!E8WRqT~_)2UgOkig!TD*+h|a&wX2c<@hzA6io>HD zo*NO!C6_sz@_sa2SvE!|Fa&{|DwMlw@rS`(Y$-v+U%rL{>Mz zhboyY(Pm{Lhk-8r@?INqde;)?hj^3hzHjMfKF|60_h(Isfml9o6Z8GLr@fNt%sMv! z;PT)DfOY4?q_$J0w>7mF(dm>*GZ_Wd9owC2sW6Y4uZ@j+HDajJvhH&nV8Cp!lj!=) z$at#81nImY56+Cpx|KpZ%02gGcl$KJxyMu$8Mm63D7di7s?f*FM$|6Gtk+gsa$@8t4;X`Qs)+)i^yU|_fG{kPAku$_y! zZXcJId#?0#Zd#H(Q03U4f(PokG8!cQ+^KtAB`S2T^XR1wlI$qUC;nOFUUFEd^|cA< zdK++?rIW)W-+21G9RRDpJXJE8X%B2W5Bf{K?22m^wBPO4V$ea2kx%Dy7T4`GJ$vz* zUq4+^H|~7)KAbWqpne~JmOC4F0`;dscx!+stOW7L^)O*4QLY zS1(fQe3Cfu;X~WY&HbhGOE>Vb`b-q|!xFjzwdH$_e*t!1UBb>GuW?1K+jM2kH;l~@ z-%V(dB~l%!n3imLZPScV_7rQ3r(_Q7tw&_Y+r~RTTFnhnrZTjeA%5YU!M6ubypV+C zuD=8cKeY5Ft-lBdh}A^$#S7cETW>|?zxY6H&(Z?|J_BH-e`j)Ay}c7Vd?!7r`z*n+ zouA420~jUrd)(`t6b_7-g&VopdE`2il4llimn3~u!zZycVtcYurSY)TZsSc#Uvr(H zF4M4=m(O7=e-EWpJE)-}J?*|dr7!ImfU}XjT-$TVKKYide|BrqXZ9xSg8)QF2u0Ik z_!cQWYD}aey<;YtmwcSRk#^E2o0@4u0ngl`DxBWhnU7e3;og^V)o%-%SNnTDXpcc} z?@SM0$jqf~Pw~)s=!*@3T}$a}9@jb0QW)HJ1{H1(add?}&)q?A{N9l^qB!|f(%B4Z zF$OrhL`lLbq4+zaDP0Dla+k^JbX7FL{kcWG|6J)w&+i9k~p@g99VolqR z_(V34FoVaq9E+yU-*XRXGVMdH!}~bi4b|qeK$$URg)v61aWRLOO-cIx2w(na>gL~a zez@8S0sH7lq$JsraLa!SUWGhb^95zMZ^e|boxgl;2WWxj$DGNgd*ra=!)Y3G(-@+i zONi;pm6Z-hCpi+DV$H>*8M__HEr$rgVO9SNdv6sKcl3RG65QPycM00K6WrZh8mF-a z8i(M)o!|ryPUB8+hv4oO+(M9qsQ3u%HG-`P934GuTAy3&sKTCNpna2!xRnf-$9 zza0TV%i{55>gx=0RVA3Uhg+r(O@y1>nE?Nr`1~)bxA;r(38xAO=25C-(-zq9bqGAu z3%2ey;uDhz_Ua@X9Xm^I&Rthm+nm3_(-;5X3MOiWZsi{BHfyf$jj~II*RP4~pr45^ z?k-*O-^y6Ox>*}D5F${TPFbGysB zQVrx(_0q^|w?R8THAiT2YwZD)`5ShLmur0}Rnu=Q`Aek( z66iB*&)zn5gb!TfY%?}V=iX6KTp$?L&cn#0&D2IVnqPb;0;m$|iu-aV9d00nyv9&U zQH+Ss(=;eBymhtqY9F)%`?b|&a^?ndoo;J`<^K-Q6DppkFj~uvY5x_pe{tP9AM`78 zZmaaoMAWj@qn9Q$V8`}_lSJ`qXga1M_8=Tj3VF;#zz0iU&U9ANOBc}=oECVFxZrI! zw_!w$zrb{;Wb3`Tu=g1Q%IU(?Z0m}{}%!QV~e*T)Ww^|Jd^JqTusqi!cQcg ztN4FhpITU9^7?cbJZuQ)%SwXe#L1G;qdP)P@(K)>h~1{RpIz&U^`&6&j;&6OZAR4Z z_#u4>DrqC2+9|S!K(qS;xMjDf${0-?6lU(Z@NVk?$CydZQQyc4L3zGlovb-u7txo>sO9=XkYmh09* z;+7joqS#?@&rVO?pKDR3-JYqPJe67G57nuUnm9O9U>d9MgHoLQAbwCX_oGK8o)L} z9NoE&Vt@YWJczc0`F?AKf6^1xqaLIaWZ6Y3ZS3HQRNka25TdyBQ5iIqD#Z9l>joYh z|MSz7mX%kNUYpS3Nr^RSUg+%+%llF3jip~aCur{rQ4$3d=qnu7U~vrgfvvCnNsX_{ z?JAbuaK97RW5q)h;RK5T#x6#Q3tqR$eC&h5;MIw>{lu0zH%DyM1rZTRV}n(v}X(ACi$am$qkd90%>BNK+IlWD712e3?(`qm7Vzl3GN+EiFUJerYRoV5O?&_Qs@ziiaErg$GIO&4Q*B zNN<9ap3LSj-6$v62DxSvR-iDc-*rN@CkjAJK3Zluy)?=i*NOjfRFpaopy(C(o5$DQ zZky61MkSm6N#gy{r)Vms?17>60U)md4F){?Um4kzk&LIPN7&1Dt%^6#4MlFeo<~WK zv9Q$Vh;MmY*`-r6FLOOX-?3RN@K?I{5G%2XK8sG;jSoV;^2wvP6Qu>4rU zCGMULSY)XC6fSK9CU2f{QG#ND)7;^3G8oS)cDklS@V&6h48yxB^9g=;?{26hM*s;9 zX<0GT!v{yJdv1#AopNWf_CtE^>3VVHH2#kZ={^vm0vtWp9j|gZjs*%CyhURZ=rA3Y z_ap8g-y`AFh64Iv0T_#g;h5R151;>5CRt0LfmPQUAMN9DjZG26bf5 z_aIbBrMJl&EOh$LXn*x$s38+VPtB4FxYDf`iWlJFr%^6yq3u7Sosdm>W7f2ejJmfn zyNN6}T}F`!oNGEdU)(9s-Y8~HZbKBqQ5t{SGkxyCCZolP%^aRoG9O6$$_I~3QM?G@ z!W}oj`c0|)FqpMNY06(^|G-pUU+z@!-3fC&1lcs=SVv_@S=D;+LB&0x%yUANYP2-m>g^N?-@!I_qndo&4gZ+bJj zhF5D-C7`?u`<@c<57iE^AKJG1B560H!pbryC6q*S=Z2Yih{;B5IN(MnTO%U7hQc{K zT{1G4BuuoAT65H@vOad-%H*HTp(;dPCn2eH8vmCB&$b;#z4XUm8}Aq9$@}xd4U966=E6{Gx8Y z3KP!q4!WYxC|;<~9+(6-J~GhfSqX#?tZaPw6Jmz%ZmF1(YB)%Ir^b9ms+Xi9D$ z#ZcmUrT1ZGOT?XWql}a-M?J?jEMQvBxK~vBR8^N#Kq3*uR(@`Kk%`xY=?+;H96QX? z+24biN5-h6SR)1pxy$WCfD{Wc6=-6SSW4DbKT|yT`N6j-gq@{#1Ovvcm|ii&DIy&g z+%%#H3}oD*sivWW5n2o5DAcAZTzKn)yA*Qq`v~TPCxM)8NW)@ms%2HV%rvVeUb>Kg zauU~;n8C7+3L;4E)buEBKU7J?h#8w3QXOc#5l?M2VX^FNeavdwO7Tz{!Mg7Ty>~zGLdya*8Kc_4w3$ zAnfC2a$KxVm;Pn07FK(Q^_;J4fB|2{X@I2Hq$xYOF@=Sx2GG7yP~d4nP1`oP*hT^W zI~XS=889BMcTq`vqLtL~jr3S>{Ff_*A|HNz}Z5CLkl(`k5Zd{sPZ`mg2hR{8*4 zqUafZlzD$#X7=K`k*}NH7reU~aa=PmUHu(wQdhRV&OwYn{D*HucJT5`>OK$NalzZ~ zL6RfG@$ny=;dGvfXoOyseHHXI6w8rDONBpgbmJo=hJ zgNBtF2F}T2`Me<3da9nWl-Q!A=FfLVl^g z$8oYo8ZP4&(>`mToTEFG$33N}q9pm8QCugXdaLe;{d~mL;epkLhwz8dIc^f|30Rj2 zq94QHpZfXz5G^N3!M=UqWt5Kwg{SuFQ6O+uv?9uAedWeuQq;2SX5<-S!hTWUGqTci z8D-EG9;8%i_^A(n_;TR4VzarHW7h}{ zlcO@waRRur>^ppfoYv%eNs?!@13RL8bYhmew#pr1?;3!6p%z}&fxOH*N*9Q#4tN-i z@#Tm>hfMQxq5HN{)R;7UV<6CtYt^6k0$F=!FJiaQ4i~FxYOx*d<5QZfUv&5fWE(99;~a%f5d4#{?9M=<79l( zALX6`_Mi?0-MP%dX{y{5Q$^h0X{^zX(O`ssd@oeGB?blpEnw!6zT-5Ti4kyMf!jpP4@io+{>7 z9*7hF!AUUxpB5K}&MNf{b`reIYKCMIyfXG6{$>5y@+w!-Hyd-ad;|M|gG;?;=KZo% zvFkbSc5@Z+w`r03DB>TSlADxdY!F9?mc#Y^ejtB0yFbDZ$}a=6;1Jndc>C@(W5uG@I2c8o=^q^S4~=tislSFA|Lc4H zzkZ%&-!-5Zk$~I}*=QV+?62VEpj+#74*i*ratV_v_Dn`PW?2&st(ce#x8b zEu*4!m%8LkjpJucAq?B;+^b#LLPqmziDjm(_6h{4<1^1uq{666(IFT~@07pCm*Me8 z(VDd*0a7(1IhLbNoeeW zgVazo@5_*nf(=T;Wh`MPZ}$D+*&>%~-Tv6#LNl&Q1@xTWwD+QHF%raDYQh?nc`K8d+3Q$Qon2nAI&?Vg>4Mm~mTh0`(Dh$3wS z$gy{7`mJg4y>k0Hku*7gdtmqu5!mdr6>Ujj2N}f}=sx{`U`6}GO5P)xN7t}OBT}bl%j&Li&n7GS# zZJSz-00+-sOgDl|`0)9R748##U}tI&l+&E(l?T7;~F z$+Xo$M4LV?_c-cGq@ip}05qu}S3e|@|_&dj1rS531)!api@Fzr^)+3@lV~iLzAbN zY7`P&G#9hvK*;jQT*ld4;}V#-ef%A=$AO`9q8=Nfcf6EYmAIa9xn7oRk9kzXxbehM zr92~mbq2Q$($AXJV&~prKb`-nVP6<|=aIqJa5I(Tgh?p=3y|^%bvfB*1-_lnJ%Vo; zTZ)~f=KXbOuTi#k?Ey`6j%H37dArTPSn*b$kcT&Y!`2>zkrs>XWlUs#YV3AD{}}s& z0ZY>WaCh|Z=<{UGh5Stuy+t;H4KFH#Fl`>&3mqNmJ|<^+S826AH2tG86qQc5%Z`ha z?ht5ZTc=Bo9Pw6PvesgQ3i*fA&)Ri0P_+#qaaQNr1nXq#|3iUa(KiG7< zxKi0-BwSI-FJgM!`eQu9`&H3KP+<$qxy~xis%LgL=#}}5yv~^3^cn71?&>5%q2A9i zW!|x+30Cw6cViYQwhTE}IvCA>iL}cQOxM0h0Yg8n#l$!S9gNM(L~PfB>9?B1vKG;P zzRofMA|*y=7W(Aal?fiO+Jii@dx;P*MTAX5|AgotaV-a+D-Hfw;|90Lj(C0@!ok5z zq3-|bu{p}VAj_>F9}UZBqVRYsPb?IeWan^J#7Z5cKNY1QNwSdq>Mj4CxQK+9TDVI1 zZep`^z-oG<&}pekx`}rnBNs6_H}#4n)?bQKz;}%Aqo}bDQ5latdGo~)w~*tAuH$<4 z>UWA&j|3gVuOdf`hRxOo4R>#SzqBOCwUNz&?eOT;U%K$KgfL0>;!)+e+(`SHBDuCW zy^U$LXzXpyw1cWI)dM&sbathO-%9EWJD@`@d0YGq3!_w$QcL}WX^j*?s`9)5yU7o& z4%Y4+FV8Pt;oXKhd1|_R7Bp4_v_F0&i;NO>B(yRPXmEmu=+S?19-d^6C-xE2rj5@M zs;Va0q@}QbkOh#fRT*%cwkUPadCU44 z_=x(BAZI61jd@??Z!HLXFf(hduEfy1O!wsh=3%2sb7-~k$`a;#>~8r($RLUg24qL* zdq;BS`_)Sjq`ZMn+G>2|({_xKL7Mpk!aC*4FEBB2xcK+rv9aA80ZAI_3HHp7XJjT^}vzK{o>R#73ZZQ|%E;2g7E(79jycmw`rE3~|9 zRq?6@1c(Czz=2Q`tz|QoGb=);7}LOf@IA(iCm;lczwT=DtX%zeJbfMj=~nVoAXhIa z=@P}hJk1qiZa2xdD1&Ry{Wh|?<*t9Q3km~c2BF+ik4kMTA@Q~dp3uv-d zWfM@n*>J`EIS^3~;!F*ut77-p?9O(O++#@grgwR}c-I!z_MFg*LLN|>->*0|fCXPh z>khh&M6p546!L#&h|_H&TE3W4fe=`gs*W4%zOC^=L9wt+9Qt=#d0?pj&Dt0bj(wWY z4ivhuC_d4nyJCZu)3Rmyfj@Rsz%IGkDiU|3#eO(UA+gs!>= z`$#x)3*IwIxWRyk&`i%trwrZqCF?0?XoIrsu2Yo6BL;VSWVaE*x84JaLWqykjEo-$ zkZF*9cr(TxQ81!Sx7&AEFC}UsoMK6ZE&;f?vmWk*yAi9}Io63P#LNXs48p#nOkxb3 z9DXy2%aHg^bs|wS$JAPy5fs@1ElqMcx64UXga*G*tY&J;EA^-#QgnpNSe+>zVe140 zqN+2lQD=w_H-TN%#K8MA4C_PzS?n`#E!BzTUz$a;{q(5y0+6u9R`=u^;BTvwFs1CK zN<}_k5RRn8A2NWLMp$tHQ|i8QT*mz)Q$S51qaA;VGra|qVR9=)ri)ySZatp#_&8iF zKIsAJc#ddvWlNxnva_N@S!k>8Jb67R+!|J1N>!tD_HL*s4(ccpeDLRYOM?oz3IEa? z4OZnJT*l{79amHF-}p^d2XteW1l`u(UD20@4b7{et^=5Wo%M^m;1w;_1thpJqIFea zqb|p%qhV(L-_bo*j~8oY*5kIMO)jWia$SIo@B(5T%!P?(6N=kO%=#$5iu~G)`h@G) zn4{P%+wqV)&p~$2kw4j>jK-FF2PQ&nx{rB*P1x3j>=9@}Xe1Hs=zwpT1F?t1-NOJsUfwvTV%Cp>9{2$M$9uCCQvd;TtbKlS1BOt($3BRaCB zN!yefLt&=7Y*eMmUTtUu{X3~*+5x<<%RjKr+bNC!U&CU1wv9)ZM5CBi!Ja<<$3Zre z$3NtMA3%D#mw1kUf4_hy{_X|4AQ!U)cfUx62er$GaPSm!88kdk1&>k>JIzuZzvNzM z+TS1jaSW>K(9^4wH9%4@LHxh5FTBUQCNkwp@V)S$V&J2P$E2tmzbEO6HgEAAKhX1( zT2OE?NMY)-=lHC_XCMXU)+2JC=I0(2b8}W8>a4(>!Qh`Fz(zuguu7K0qgwzVD=O_u zrDD%V>|X=q*0p@>?X~TdcTa$+Whu#!bY`@VusmiG-wA^FFZ1ywOwe?*?6tR7e)vG0@JJON*Xm(IhQw;BZdmk!whPsUt@(s98g2U3aC`%?ge8yP79hX$X~z3p zDL>H{+X}#d+vSOYm--DwSenOSYA-&&)R3=SYBn@E62t%pmKr;iXH6pw6lSs+NFi$s z7RJX^ZZv{&u2y}1UfgOklYg%GYyRGXIIX_RGMe;3rw;&SToy9ct5CPl z(iy+j2pL3nq>f&2CuoNWMBC{wV}eXGDll+)yRa?u)Br+<^KblVyWDum#*{?k`gbq) z&NO1@WL+boFV_9|$Sj0Z|-EpLl5Rt)*iV{1dSO zxMXsv)y;v!8{PzF)veXt;I(?^0an225~1-N0*+1NSoqu3=k0|R+=_#d zM!whhRu4d;m<>hRpJ8nFOITR^GMFz^_MU9~Wz}+N;SaA}Se4Mo={oN!0^imQvDF3< zT30IO_iq2_UUW~N&(+{Xr?t-a*RUAvj*9_&R3)LYgaCrw-FIap_^Z*V6`b5~-|9RE z9r|!(tfwsr6S|R|;Rp{GSPnR+2%McRi({C{CT+e!+1$?rWIJz^BK%E1l@(aGg6A1( z0%I^qzg{C>@q%+}QpW=|O&DtPQ)iyW9MlFeu+W51r6cSex}xkbWq8pMH^O8I+2L&? zZ0;!30czPXC~u04h-CXSGVV|tR{zpZ<8-n%>C}#VXtc!Kxow!GbbMyp_;#7)meRxd z9~HkGsV7m1HQiM9x@6l)#|bffHxdNF^smWr7%qgNCEGQLSOr3aO2iW^B_xJr;2_@_ z_lGZUSrW<;&GNyTv*UTW&`>{QybcJokfnqf2XX)E^VfYx|2imN*!+X(T+MDm3|gTp z=-tIKNKDX5{3G9!Y03WB9LX3;XIj8c;`EX8_G7ESvi@6R@Y>mA>Q~=n>Q0Xv`ePqs zFQ>_y@L%AuewiyxRB&5G4(jtd*Y(QvXj0&^bI&WdIQe||?Ag^fkz0oB<74N7Ki%~x zxP7f8F}=Id)jNIZ6Z~i%V$j8vnyI@=pOTu`KaN0@lw*}@*ozJJgvq@T)6j$!NI*Nq zTN{BH;6_gT#<4wbTs=njmIWQmdg6>T;rD}Gi5&*Csx$Ifo%#q)FjKiKC2DdjxK({L(^nhtLn2zyr6_jr_LYmxEKR?=S`@WtL@(@Xq?U-?@Tw9Hdn#b=ed5s&D{_Y7b2&OwF)!AfQ5nfz9!tD2v2 zJ%Kv5RWod5)P@u8SCwXmQ>}B>rgt3wS>A4a^3))MsyITHX7aG-doc;qto71#4S&*_ z^r~;L65HV{th!drMB{FFal~w@{1z{@w6B^D{f(*1v+!mC0EcduIHD=KA9Cv*Fo83k zVSN(UK9PPd{EBew>w5qEpb=$k z@vO%>*};q>C6-8o#c2EIHtXNkL>h^E6Ox~hj=tW{@)qf4XfI|JZ>@OF>uaQiwnKxm z`X`T?5S{mH%S~&T>PjVC-ha08Qi*BTp5ucSHSaxBxMen4pno>Alxw(y5oMU_jXI!; zCD57;LFkfgX1^esZJ{)WQUzFZ^yppTKrY~OCxt5;9eXXl=J+9)w54B$8iJA$(57aI z0_U_$t1g3B{P74l13akt;o_{pm9_9jHmj^ISXi9|)cnPtDV#*$3Lji7WzXnt1(6x2 zbi|M7jZ%>oGjuX=FdH3 zVZ4jO2hL3ef29Yp%edPF`lE4-+_5N<$F6ipZ|IpJsH73`OW_!S+WYha?)}mg%0{sm zTOX}rzUD-ri{7dl?G*ro&BP!rR~^YkiB9ul<`wdSoCc$d0huyJwH6%`X3G3|_u*7W z#lfTI4ejxMFU1jMt2HBgchA|IRMbSNlLXWWJz2eCF60Ik3V3mdwKjKc^ty5xU{{f5 zX1j+2zW0lWHqJ<-`*&b|H9J31dG>2&sGXg?kB`qrHtj|_zk|w&6JhzRYHl+Z_{2;gU)Cv*)+A>>R>`zF3oJ&78~{0c1BIB zgA-sM9ysS4*z`Ey5{7sU8qt!O2oE;ku^|z;tvpauWDrKyLWgLUnN-a9Zj;d69oN1m zAqR-ZOZ6s(RFK6CmqVW|(Y=s;AmWJ`;4;YMbL=nS&#w0!AS8V|7!TgQmZ2j1DWwmE zu94Kb{_sFF>2|Yc-)w{KjM7IZf;-tN_895_N6NzJ0OgXN_%0oK#YR3PNJ8>PmC_23 zjfx&-{`MzL4$p!`I=yL!ha?cc$I`;n9^Z<73(W2|SHMa|t;%ZuQ_CjwdjRX~W1r$s zC0I)AZG)T@r&JjS!%9nH#CtRaVQZIwg8>F4_~D@BgjY_r-_XCKB2OY?>5FaO_I=$HG7S(I|{p28Imu5jH8;% zlWBk#1Y;t|mD8iUoF&VJH;*Wa4tPM*Z7wc;yhhLzHWYabl>`r<%fZ#eGK9Z;hv*Bj zW0g+bzl$)u;*r*v?f}+p_mM4zlQ77c)y8tWUUtsPZ`}#HPt2~Dm#Z{&jr{7o1n==Z z4+wNt`uds-RLQNoXVY8?VGo_*dpvv*wXWA+V^de_lK*!02DZ0KgVCBF=_s>{zDxgc zHJ6L6KF1J>0VMyWt{3Y}G-_4+x9MXh>jonF^kjC`DxuB&I}lZAumV*k`iBeM8zXK7 zWl_1xtY>*9IpH^r^JuRUJpE_LoGn1o=_sw6z=SeND+h3;vP7)ZN z@h$QO*XfV^jBDPUMse)1tNBI7HMHy8<5Jm?-R8mHR^(SL_T=}fyu+4MO&*r|;Ad)H zFIhOge{te%Uc2mPayfOj1*wn>57scQo!UEzi=);1uhn}0*PqP4yh;A}(#IJI45&2F z#BOw`EVB2kG8)^s?jRcn#cU6W^Jr8t3fxQlD@pS=GGGZ$ z?EedIKOCZ5dBqwr#y-AP%I&*NHI3r~6SX-cGtVY$JN<(cI-_s#zIS~bjgte16U#7S zs!z@T;DTNSY(w1p1j4llCC!7V`+GO(B{Q?NNUB!@k0n7#`z`iKoV&qwl+-QG&>cYTNH~5aCAwcFjzJ#5`DX-PSoS zNICpLF>_j$?#o^8CeC=J`HbRgN`23<z3`vj?lEe&yjP>$!DBh_bZ_bGI3r-^tV10#1XFw@X^Kjc5T@i0i<4wM_0V@Lba z&XH?lL0WVqDI!5NsT+ytK+k4_1RO# zt&{Bpc1PzZQ*A0W2p4S=Yn@2KQ--l^mVIk%uQXdlc`0oN{Z(2ct`liLzp-C@LM2yb zDP&r-U-qYAyG29>$j%CPyb#cjG|{voxs4Iu?-eE9>%XkoG&we zkTPUYv|jG0e3AOT=zLg-kL<2D7PZVQE=^o{2nJN1<_htEJRk^L2GV%2A$WQlZg4`db32=MM^^qy4y z*G6L*JZGr(Ch+ngPk11!B7BLmLFtfimc(5H>!r5P2vf;g-u!Yni*4o;rt{$&!x!vM zB|SE3L38;|KZYIu!rt^3?F>=k2eNNv=BE7}Cn(jV4Ym3tX1$hq;i1uO%Qrtcnr|PX z!S2oI8ai42A7T1M@;vKKI+3BnrTYW})^UnVx!P63j#L?YoHW}5mJE=EKSm07hUs}5 zl{IlO(a8J>6GFnYOgEwJ2><@=04*C065U%}4dp zewcBpx7q=!a}4+r-!pb3)>`VH>tIDSnr1QxRBBUkcCC=>ju_Uw|1b%4RRLtCk2+~B z`8C{CC7he!{x}Qpc3x?5{;aOg9AB$Tc&C%lB_8N?@xgB5(``nra9EEqpGsf}`Re-* z4-0C4m^A8s$*#K%CPpqX+R*KC+bdHmj&Tx{?;2~A(wQT3k-^{546rp=RbUrNbv6kV z-OG8mBr5y+sBioBNFM}=CJ*W!W9m=FjO#2JX1!5z_Ls7bbu1f?z$5P`_1mI)RlT_X z$Z*hO1s6VL5)fKfl@MM8v^KYO>P%tOhJkHdvB?df!^JT zYsyo+t&ZZ!RQ?9csyX70RxyXY+e^M-tz_w&Wz}w_weKI<_qR{?QmJ%=i(!DA!7kM> zzOo;&d`>;+g!|UWYlqUx3KY!n)sdggX!6~t{MU0{!r&6Hki=K<~)t55P2%1-Ik%G-4E#M<|yJ$i}C zmZc9D^TW#>PD?r}wAQ_BOj=g#0!;A`iDifVlyLu4L}PL~4vvImxbT#Doj5Rm40&g4 ztxqY@eVv^QOjD{K+b4~fr>Sf_$!a>wPig@=#*z7QA3TfJkVVU{OzbFCpdYc1zA-6gJVkiojPZ6&HVS*$>;l}yEnT3 zu%NQ!mByPGqdB%p2)gu=69QO|grZ53GsoGYG!p|(?lo?H&zH_f2t}05Dz{+&P96w}L>(Oc)v ziKstdl>AIcGpwBkGD)sJ?N9Y{k-Yo99sPzfHrQ`@od%_B04q)%2OTK|AHRR6BzRpg z9Jh_r;gjr?NQN1KbzbPniO27xNr?k{>+by45k`F<OZ2GY99%M&Kb{yQTHSeh1*0&8U2WVQQavgeBx;1Y7WB(9n6R zymZ9*&+tq#f0Eq6@K0AA$9T?+XXl?rwR|HgqM>CKURS(IOFvHJwd-@(y@`R1et{{c zn;+5q%T~wS1HZ^ioTPe3=$JcFDD@W}Zr+A?-VC6AOHlX%uy4RTe_ikOL=#D*Nj*G5 zYoA3*7n($b&lPBO;P5jcZ=0Fn@vc=#TOwQL_xun8{3W5umt!>Hb6-MLSdsB#nIn1x z)2~|TNW^ek2`D((1+Qi72>-x_1UTPC5fCKIh_bF(h8)nn%U zSFgcEF1J01wK6)}Z@HSrMn=S&$B)EG`{$+By!%?@XL)kqfj<{6O8G|n($v#bGU{sD zc(bO}N&vIX1XKMAkXXp?0A&|xaFxgAwv@}5?g&g3CmY|XnhhDcQ=}TiWA9}vGI@4h zZ`E8Z{hYJ7!kLskA-Q0)#`h-GAZeJ|`%C`1`$4Im^_DZL#KL{M=uO z6NUdScj$DAGc@i;Ltx|2BdQed#4q2LCybYjOLTwsn;PYFrB1YXE{r&&Se@I$p4150 zJc3l>YqJ;E(|y*MBsTMelP4M>>BLYipw~roqVqr4mpH^xnYWJnw z4+Z#qdmX#)0-n6s9TIxHG@ZjMnb^_gaIKDw6t}1X_@S9K%LG~e0@%`Zs>YH>w1x}z z264{R~0;jQ%teww&fm>%Stef_WLal)g{C z&hFo?{%*S%xT>oWi&87h{~;oD!P)&RwF{G3Y6rV;=6d(km=mZuW2gNr&*M}m+5Zo) ze&Go$D8EHue@j#Q)%{??vHJ>Lq<17lJbdV5dtKt)XRqGmhA$M#;_;KsDUAz$l6d$6 zxIG4N1#Dy}y*cQi>PjxJuWfjEOvxkIH$O2(^K5_P%N!YS`#PT#6XQ@0u;FP6aOJsq z!Cmja`AQ2g0CTSx!Y+Dg3sU2Ue89Tnn|Jg1B#tTq4hMI9ol<=)3w-jX;IkyjOajx4 zi_*q5A#?xlN1a-kqO5aK;Pnl`1#|u0f;qXB4m0uiQ!m3F@#>57>kMWk-74dmJx?># z(_e|o*{(~|I^wlB9~m*_RI$^E3yav{ngmWc@tIs}xj(UIp6*eG-@dF^_c^?)$5d=w z!+Y%ic{qH|%*c%Jq}VTbeSmFLY^;4-J|I+@kUU?j{UKPmi@tq1JlLYaUyv%XG>d=G(|r^xBL9CD?8o0 zLV+JNPb~$^$7C|9wgi1YP$(6#9dgJUXPG%}cMZ$>>?t&`fULlgRnXVx$wk)20M2we z8V|eDi0r^@ZX+UdOt*F!oEdhCE0!&@^ZHL1ta;>6v>5Ww^EChqam`-DP`(US&OW** zb+TxI6crI|94mt@xUf-aF*xO`wUd{9&2;*}`K!3FUcCvx#OSO>q60i)yjrg}sz16g zbC#G|2|CbUi}YbkE-}C=s8^-5CrYE%Z}>3sBTllCO}OHno7UrAlBqWLjiL#jA` z?IlvNsLHX$1>XewveT0r>i3j9Ag?&<==( zhp=e2^xm%&l6`XHM7p}m*dJI-!2;V#RBMs8#iT9!p#^_qrOg`Y#B(2kdDIh(@u7a*d!J+fk<|uHp+SW?;roZx@2mq&GmJGfPvOvT@g$-FGh}Duz_JI4%K3G$ajM@{7%K?&%5i#?_`=fhiSsRjMlC+_ z{lMwhptrDDu`A7mmOG~W%%yBIsj&VLFSb!yr{vqmLVVnz0%yN>iX{o4Hm39QyNaUO zH$d0Snx|zB8UFNGSvk|ib(ETgr0Xi_9K#?Y&R42Q_%MIeG`n0l&yNQignM4tru~b2 z)knjXdv12`lUNLyVa+Umg+;?~a(cT<(ah_!m(_r_a~nsBEON~* ztFr(}#kW&wn$B4Sausn(&Tk-hj5g<6Y2PbH7ET`h<6M@6ReeTA(&9f!${n%a90f<5 zxC!3PwM^SamSir76r!rBg*$~#8r{6_J+nxeywr&KHBTYOEolY6{7HU;rRna>!(xa8 zo3XpW>Ru}zo*$>!Qad_r#Wvs6^2hFqn<=SpV5}AWM*|uas-P!sJ9^{rAzt>lcgv+@ zzb<=nGso%iy=4+`pXGQl>9f=T>3894jw9`CV^M$G&J|VBhNtnyOHGLF{Jp4Jj5DMU zGa3(FsVMc^quJ!T51k(1aIwdyAIXe$=FJX^ z9f@~|7P+?Q$CSHKVj2AY(boNy-PnoRA%k%?+)*{ZsY$wFz+nb52vP#oBML1XgfH{0 z4Z7k43i4xrSVI?J(lVW$<4l?BC~)P!F;6 zn{x$A`w!8dm^>yH84RI7m^L~7 zIyTBxI7al)d5=Cm;8uW2H>c~g$XccRT!VxB`{dbI+a^uFW7|)D7GktkHA7gk4+=s_ z%bNweaV^Zx&CJq1{zz}; z)v7Ge1TOOiWKNHH@x}~X4f4c^>*n4rV^;74Uk;FPy0JsvUzbnopBb@vQIs*Cb%y*Z*~i#ZJsGW|eN0=-6W zl*m!?K%YtW`Zs&?aiCAnrE?(k>8xg>OWrfZ9HRcUOp0y+GH z8?n;a7>c(3yt3>+>BF`aqvdL=)<3vVpEk=>&I^edAjq0QxKG0K7Zd&APK5=f zwo!L4#7G#KpmlXnvsTkC*JFwP zqc^{d`0{$gb>?zQL4tsC=Z8f81H=78f(ciDpUfMy{jBeFHEB_KN3rmc?yu@UxZXmv z#Ot5b>MyB&FC!JZJ8$;mNNwT_V5j9x4AX%<)O^N64O;!K*0VON=;O$Y$I#@86fd zfs7kn-xI{ojCRh63&Vq>{}L^QEWoJ0rp+_Ij`gKUURMm5b@iYwY?u9)d;G60{*UMR z|C?vAbA|7l<~<|}QLJoG?Vqr^M)_g|1aM_3)XW%$4N$@Q52A6hSwoomY<2@8cTC7( zYIinzC(kg-T{HHdu2e}7(&ZB0HV;4d)eQ62@6Mt8%!n?C^Mo`6GR|-;v#3a0(==mv zmars|vS=8P?%!2uJAJ;`6b6{2ZFf!e(LJYS(V>pO2A33Q2Z)bXXqKJ$pvxXq;}C zSD}v&7tN@0Rx@H+PQju|*l$g%a|2$I;FdMxWTDP=P@RNBOMc zgDI%xCGm?B0&N=^ihpCM%*=Y87~18ya;vU`YU8}>*1~OhEchGL8M7}6plX~AK74Y6 zX3=J)z!53rZ`SRlimF$?P(6XFiZDY=+&C=Sl@jU5clv~*(q9~hhV!F^caeQDTd7b! z`qfChlcb>`81necmUWo7rx{Fr*gyyuPc&5bGl&BIK~P8@17&Ym%O=+}(WW4l;UNj9 zQ`|Hj^12DKT5?YguSrxf>6q_`D_ z;uO~c#ogT@!CPE{yVGLDAp{R@!6_~wIJ7vS#S7i}_RM!??{m(~KIg~TGyBZWkL1sK z*PE<&t;~AX^W689;gta=AaN@CyK;!i%c zVqC6LR_0nZ^>z2^L+i@A{B!1dr7-G&pqhi-5j0m~O6EDY)fV;W7Z6}Dj&T^WyaUSQDtxy3b`a4&xTA}nlRx%|0%53A+AY)Rr zG&Q?;9v8>Taezy>ql|qdot?1dq?4uqsvOpuGREbVJs<9NVzZps%gCN}XsE}tFm_xW zA)L(bl{8pxNnQSZ2`X5T48}=s*g4j1ka9)#abhH07F=R2o4*UZz2YAz8s&^%&!1Ya z)Kd3NYwQj(?Rfi#EA(N#v{r~oKMqTkqNjcp;Lo+2yj2qwk)ozUOqQ;Q-3XjA@=w&Knw(6eSNSO4S#) z>9$6c?^#ZdsA&9`UeLcUs|^zE@}NEWa$WFgho$ic*spev-9dDBhc#0PW*e4G#i^dc z-bChPhrDtnP0xKRW>A;cK{Qgjm`sBPNf?!4H%5W$-<2yTnH{l2$i!LQ36;~%si=Qwu zziU)ZV?(!~aGza#T=VSg7@y&p96Bu{UlQLJ7Qk# zj(Vti^XGKq^Nk%!RMC0gYtW%)TWraSFk5XI*#|U^Ze6_)gq2?cH7@~= z$0Dwhc-oF!+WY131=35Aj(( z(D-l~pbepM*|uPsPph}x8M0aV)Zdom^;k}dS2jQMeED_W3&O=wA3V|0WTC3+ZsO>2OktcO;ZI`6l?$b3+GLT*dWzVlgQ|!9OaxE`V za#_C1f-oGl|9B1*(x>GgIa)D#8J`=t^F z7=}vLn)pfI(!C!ghl1Ww@5|iZRjA7lFuxbeh;hoZN>?ZrWE31iUch$8b4Y7AaoFzS z*Qyb?j{0pb%sCC|i&Wyd5=(~HSD2dpHCHEhm?%|#I4n>^U7s_B3>S~=BD|S~)X^mF zexEuE9WwFvd*`Q?7?{(efCKvM5+_YX^FbD#WAJO|j*{KxD)0S4)se;-wT~{=<6SH2JjM`XjiIsLY4J!|FAh|Dzl2xuV9~ptqM4u4OHE zEbwkIwi~8Y(Ar9iB95u8Lu& z@hF^b3d0w(4RS-Snsq#2A7;%bm0fi{vLDSSJ|_#sY&b`K2S*O?-~Osze5qT<;~Q1O zrf~le+fTT@Lzh?kGJpiH?AJy$y^>@Ocd$P30qZLg3(l-C1+-YRDj2muH`q4s%q^r^ zcuSk7{(zd!nBSXwh;c$#C4CQ5gI@R6ejYpT_?xD$b48sA>j;ocr1l;GRBd-HiZoi#xt3b7p`T zRkPww^{5a)Xmc++dyi+fg-oy35Q$w7YVmbFY%&;L7^KbgE21&nd9N}$W(T&Y%q?`6|vzAh7 zeF>qwx7{+lgvE^!W~6ioyFnyiV0QW%BnGESO)L&yLZgkAbHT^e=Ap6`JR>QvQo0MG_wUFl_UBPGU z*+G!v?f()(*YI%QFvKfJaTh{;%tW~_R3UkoE$#40>l3cNmtpIO!N{lTE1WwG(UMi4 zJ(1_c>d(4c58dhwN3#q_&JfXWY6{8@-c7&1$O!vg<3CZFnAnrb&B)>8_c{ZWP1PzU z@iA3WH1@zYqc?u#sa4A3OmmAIoZZ5J8|QWBt+MaQ>b@~l7bRHORcz&_Tw9QTzsMO) z>VjFza->=0H&R_!&vEcR@$2!FP>EoLoc^h^dP}W6uk7aVzSsP)tw3iCXDW*lZ`MdU zZ&i~KG$21|0d%T-wYVG~nZtDm)0gVG-$#win^LvZ3g;K&yBg86xB2wr%iryPa8g!CI?ByoU= z;k8uC91*SVvI;oF7i39&=i`W%{k)it=R9cjZ^GM^Cw?Zm1xF_TIBa%0Km^OldKe*F zJpPKvAZvAp-tX+d;A9jhYq9TRh*#~Ajc<3t%XKo`(pesAia)2Au-!ACx?d9pb!1xy zl3`|T_TO9$c^1E7FQWyT@{VI}ykW2Nng2Cds^0qb5SRL>zHZ8PY|fTz4{63=cWx(O z==f>aHxo3ZU2bZ?5IbTB+jZXWPb~eIuo0vum;!WE7$;wgpoj>ozJ`w|vmY9&8siA@ z-0A%1Yra$kDSs|bZGQPZbg)lny6U4-#3!a3wV0idPrsjZeMJ&a6(hRLD-D|blcS!6 zW~@e2>I=x8EB5PK%5J1&J1ULg&8&)Uh$zF4Hqkz+ldTG&QO!TV(J!Rk=P|3(C=k!m zysg~HM-Lo7xC6N|eCf8KC8~!zH(TBBm2DSW6DoPTK{gBw6B+-v9#Qp}PsKH2I{(URk|0;Y*ccRcVRtoWN%otU>)2lar2m zfLm1#JYZsKUu?)E5qzU!6r8>j@!f0T{rlnVKlTnX=r6xr8h3Vc8e3=|J$|V7Bj9EC z&~^?{${*LAcGl2H>q!0fnJ3sv30EjaUZ&KXu-pY~?%VSRyRSr%dCS2r(ppoC+#XqA zw~ZA^*OY9U#8L7$N5rKy=f zSu~fd?(CDOybiQw!pjUiESPN!okFJ_)`_x#&jibUD4$)N{L-=)qmNT@8rF%&#>pFD zjFZ=xXnZO(Afi_;LhO)6CsfOo&!vpY5iSk@c}PWZ`jXsDk%Q2}PHjS)cU$J|_t94- zDFTETRfHH3SU;zSs3`^>VzE0aV-NnWbDL-u^B6WnQEykQGzP)-&8AiYXbhFiji zXISjI<;f#EmBbZ{H8%TM!lL}I(!YEaPs`?4q~c0)cbry=icQ0clXG0>u1(l`j#Inu zVe6gEuusPnsclMd_z zXpCZvlKI4|DN>qf$1;Gj6ggLs8+YMdDNW-tl2XD5B3t*@goQmhiGPB;vfP2H-F&s7 z;DMagK6uwdU?yIlOFf$Xw8%CW$9Zy6PNJ4v_c86G)qp8Cj|JaPv7-T^u(Ef}3T7Q% zb)P&5kLS?7(95+L5)fs`(&=XLaZQP;Ln3jgk=P1cwRrsh$?ik>9R81wW4U=zYB+$= z=Lzc1OCM2XDg&`SYBg6@-iN4bN3jVtWlWU`6HH0?UDFw!D?&7np!DjX1S+uYB3Gyo z?R(!QWyZoDi3MF+x8E*Q@f_Pi5oymbJhS>IRRmuUqIvU88jY>JBUHdiiA-;{!XEbq zfW%t`$kB*2HF*q`_-DS@a@}H4WVF9vn=H$k{L4hkqS7-PX~$|Ga^`mCd2TmFL0J}I zX!*{tDKdXTi7suz#y&eaMVTv0O8COix9m9JBNcVLB3WV~CMmdshM$qqt&Ar|a`@F- zUX4IyKe^EF#m5*zY--fbLVPz77Hm{&!?qQx>WS1*BesrmV)SNJ?xSHzZ0;6EmR$C& zr6We{9Jm5?RBPV&2`)0VD-R6r;$%&{_SVjbPrM|E?&BRtnJ-c6Q9i5nC&iq&^KRF*k(q4%53U%rttZn0eL{ z-03urGPU1NSRhO)wa;W!rvwmwy?e+5=Gyk;d9~l4(qQgZak?#(T+;x<6eSvmx)SB( zdz0(%!m2EnxXJsT#lP-VN#mdBI`(mFblj=6;~JOCK$poJWA_1#CI+x>4HJ+ME1ap*UbDxbIhph)@%(NUWwXh30$-*oj;U* z9h%9N=*psTXp80|MBw^Usl_m?me{b3ePpQ(=NShB&R7c77UK^~LzfivFLije%SS#L z+>|mI3Wn#fDaUr6O$eymnq*%B$NWq+b23C=K<6d2#Z|w7pYm;_kFqCvyME5;sNUYk zgfXYcmixI(g;#L?^;jG5O8sB5QcH&SO&a{1>GJtMZL)OUO%HMh7yR@y{CWuYzdQtL zD!rwW?bxt5LdWYgh$QmMrpn z{hu`-lB;zaJB2o(a_V#63{hvX-S9t6;C(c|}@$``d zAh*GMrNMUCaT`o?Z^13YRLPz*<2+KZVAK&FOqh*UM#1$!_ip4MxKduHkE$Jf$}<6G$71cAF$9!v$otzaxc8xT^F>5d}0o8n|R3H z+de>nA0~U5&pkG}PmxQHSL7DJe`t+)bx&Cx->yG@Z!;2jSS|jgU5edheWpE($lc(# z?kYKhciAFoOQAq%{PNfECQbPJ36~OTd!7CR=}+PTgz-mMXW{NZkR96#tjU&8|^T`|-k&SXj zuLChgx8R%+Wj4BycN0$5FBY^i zv5g8Ogebl>S69N1cDimgz=ca2#mRmAlLXEj!0j|DQ+2|CzrUB`2(B@hQjl)OmsX~l zdV7b*asI6QqZQfM$}&zv{?e}&)iYjubn|ULjHMxzSbg|lYanx7%0bJna&1^{2;13i zV%51~Xg4gdmdQQ$WY3c1OUat6k!Wc~Cd>P4cd_bjYMYEx^URd+9A;cdyG+WpEjFqy zfk_+x1G(zfEd9 z&S3J1R_)9>8f}SmU&O#T{j8d3v%w)JTChX8=Yo)V*$c#4muH}~_KHg|IUTsO1!}nF zKi1+cQ|r$8W7{*sYgf=vr=NkE|AndMq(j8GETf+DKlC74%?4j??t2E&hkJj^a3KD*>w2Od~q57)lY2A zI?9giX@>|+rDn;Q$Ke_qg0~*Fp6oUSDoTU+@dIizK0h6Z0|rB)f}=`1u&`}8{-G^BDjMnt zqI@nvzJhnMf@R919u&#Oom2F#V^u>|J)HHjeAj8|4=mQQd;3nmQ?OgCoJS4VD|3FG`&;94WsL zPKoNVp}2Qrr5^NPYjtqoE-j-H!!BPUjDF8mj9QCg61_fNMd~d2fK@7sq*;CyNyq%Ze?nENk2=&p(nW>AluY6&euI ztF>h6vf6kvK1aON$^7{bbp|hS6*55@lxlBjO2Q1=3;bhEho`G1V=tfo@vPNhA}OLw zPNHj8bF#$twbmZ(_2De;soxZh6v zr9kDcqgv(Plt|;3)<)erOi;9h6ZMcm9l;`c$*>FMuLY4O1{u-FfDvL~#H){A8WJF4 zvan1T9;;c&Wk4UM&=*Ba2aqC*(^CHUyHxsFlyN%(QTi*UBPi&0YBTxF;-$yu2e*t% z6!_+-J9z)H;2+wB(!&Jm9oJmsADRXV<@FEk0kjl&r{P9keBN6z*>Fa2@WYug=6I&` zRsMxcop=j0CwW_SHBi{=26u%jQLs0VkCR*I8)C!L&5WtU*rFHQ~aOM9EwR` zr_X=|p*I~z1yqixn$-mNO{3zVIRP_zB6;>f{|dHgD5JcSy$rQ18!x02K*@{IR9SvhwuA$gNL=#l>?UED>PJ|D-8vsi^F`wL42P%&4+c(*`8Ut zi?8Q4#xdf5%O@sEh+%(v8{GCD?a+sJex!Vv+D6v7(CoXPo1~a^;S^`os56xwIBwp* zP};ljekH}EO?_6F`Gi3K85$+I{5Cr)iHx~_(7gZm`!&%o4^yrdv*S0L|DF7pH%02g zOgvN}&=@5+poU%X|M#s!{&e#HE%~K2cPf3~|G!)QFE>ireYbCRTK%}NDAZ(6D-W2* z1nsv@2A;9SDGdo41;6uEPR%6*PZGM0;Z^RdbM?6E4@(ozLSs1I#^)7msy|X}^8vke zmfxGuUvXv(md8!+dbgcs5dvQaUh!SK(%A~$Dp71%_3w`uC3qF={y4Nqf2C#oT^iIs zSQ7F%CP{8T@L=5eHEY5AZ9<4QIiKW2F4r)%-V5r1fIKhj(LG1+J|^mqv`-5z$nDRn zRsRn{)c;(K|7|VNf7L(QW&Z_#f3$n`*OU#k*V(I2!GmJFazdjsHaUkho5)RQ5eQAkB96))c83|~Cxi8@n$*$}BBw$b z>;7RT!LRrVgR1;9Wje2I^5XE z)ybvi(wlHH(-3<*e00XaU%#Elh2%S~qiNpZ)E&592mc6SbJ1w$P!EVe+U9(SBWA#T z{$(n>FZTxDJ!OPNEjLDCm_zm+;|&QE#;x{Ox&oOO9p?9`l12ms{?ca($>b>%q6WH9 zm+=!~xE9Xkzk1(n_CB^CYGCwJtVjIuHT#SThL39hM3A~uyV@%U8w z9gVu*DLT*?Yjr6q?|E8_ch`CaG(E#T)7ecRK$eVf9QMpnG)+{}55m~SX?XZ5w7woX z?UefHnstEa5BI%R?^hnYM-IK`h8;}gHpZ5QsD}i*jXpsc$wzH&#JMHuH%hSA%IupS zE%2Fo=zev8kNIorG?EIY_&}Tnw9a2TjjzkoaW)$HfPs%jlP`~EP*&pTDpaJ}|pXb*|d zOD{oYXi2@r(F5F;L_pDc?5@BaaP&$XS51MVNQd`rdBU(9VUgS@^VHtY{%QHwjXS=J_yEnCaSwGy zNE(a6R3#mHv})a9hZlHg`&hztom`##O;J!YlbYFW8o8zLOUA%7SC+sK&ux9s zMH!9y_a8Z%ge0iL3&U}v{+ z?&Tz4gri+$ZA$f7CFb{!MwVFA_=Q`~Mm*1@yej$jK*R%`pi_}YZvuaEwxW7M;>RvxEjrHf}7h^==IK8d^A)oO7sifn)yl_zkoDh6|SXET#iJ7Om4KNY0V( zD?oo8S_``D3@Mj$M&taLJ{eU1(yAqsjG$aQEP~xlFVOHd z5i4@Hy(m9d`{~+n0%Cfv&eWfUm=(gW*wspFlZr<)*Zm~xbZC>mJCf)fiK@Mn%VkQ) zoV?CId?jQ|32$&)C*{*W8Ykh~C0rEPL#O}qO^x2ZfsHt-%V*zdk8>_sn96c`ky`Ik zI1nmFUW>0GVKpHRqkO3X9vC$ym#X|;v|7%*-~0(+P`5wlRCan!l%h=Y&e20GxPpY0 z?n13Jgd{7%VI-M^aB(D^aj|fc$J~J2KeompZBmI~|J^k~agB`eDmb?QAVLurojQ3i z;XRTL(;l^{{U`~b(~m0gH7nsyktFKCGZw70ZLb}nt)iZgYxa@rkvhXNfiVlG)EsuE zygAKPayk$qXMOIaN;pa+RU9_u0IBGX^Z2oFXQMDy3EksGWV9Zw}kaJm2~?t~ZNK z=~15ZNICkh(j3tRr3=-|H#QQ~iv1+4pjJg5+-F00dWI0b^GZ(J5^5ip_PC0gkMg{KUPxIoq2qZw02iKYN?wpaZh*vJJt*2PN zB}uQN%4EXAH)}~H1Ge__k4qYF>h89zqK;z{i$PVoAZIVxcnW< z`0r|CnCd5o$U=@EI10s+u0Uc}W{8GPqcpBM^m3%xADOtwE|yHtS2p1Vjivfj^n5FC zk;GB>xdt@b$~O5`oXeMs@-de%!xk%s9Iuc!TCbB9{A(c2+_+u~2KAZ8+h<0Z>g36F zl}clY>-A>U)CS;#*wY{161y1Ap zJPkc*Giy6G%DTC%7HAc4Z^}`s)c0N5x$N@x$s?)9}Xm#AJdl4CE)6S+_d9}iwabqF9I&qql z8`%W^YfZF_jQyp^^fFm=K)arP%1=9TvP+bk9C<>6o?JMhN}&)wDEE8 z;={DwY)hj^zc{r==?90)RuA$ipPeSdZl|?u#X zhM?p6Thbu2;qshjg?Nnv+tH&PFm?_2h53$l75wWzH2%D`+phh=BXv9(L(BcDZ5nYK zb{C^vPh-8P?~Znk`jc>QUau-qVssI8yO1b<3|aL~us?D>(_epShZ`+tq=QicrfYOG zHUtUu;9LUVU)Jen5WHWkUWH^tx|t?_BK77LCcV7l%GF#}+eNuLl>{ISB(*T!jVXrt z!C6&yv&8IIcQt?%3iC>oYd2#Q+*z=<1@z@$Ju|^w`?cJ_wpbleutZ~ ztOnFlcH*P0zp|J}ji{Q#nimjs@*r(Jm44;5rcQjNVWOt}@=LFkOXiua=D@qnWg=P@ zoV*u~V?)}h`Qcu`l^O4wYXssS+Tik=N8Qd#j|`MhI$V0g;vd=>=lo6W$|r`X0QbFnTMbj2h&3P zQ_1I@`QleNLHSc8|Jk7V=iq?(!EgD?5=ph>Bi1Kwv5SlBj;>jW%4D70dz2Oe^uKZs zfrn?NA|d%^lNQ1}+N5_wv@R6Y%!TepA`9E?=%-4~km zcbLC`Gz8!z-uj40WZ69SAUB5?Ow`!_&si7E7QmBv!?Q1I+e$jZL<_LwDa_PW&3D05 zMZCxs(}m)p>g}?S3Xx78J~x;B@XG2|_S#lTD??V+UB|N%I6y#};OvQat31}rOX3=Y zVzp=ZUpro(Ql3M`u1_{$E8l6QPnajCglUNi5}K#kX&|h~RjM{T!nc{(6PSAnTxR1h z3rQV8$91u7?kW9tG_AT49=`mlD+}I;eezJYR=D&U{01s;E$~Q(JKvwjRE#I5IXwpg zh&cG1uFtftt0VGzlaBI>L5X(s8C#{@if@FWIE{Z4B|le}j_5e;TjkpCZ?$!*$~&Jl zHBGb!8%BOR)-(Pc^D4T_CA_rIgvD+1K%}m9rf+5gak2~id-kOE*4#wt(dJAN0na(@ znOXn4()xryyBX372wlpHaIoDXStxZYeQRpPMJi6bc6z)p>nTZ}5btB4Bq&w&;?o0x z?>3zOC23Ne!V9_%kKEQXV%KfeHs99O2a{Iblk;<0s?8(#?;6{uW;#>#b$+1JY0qCx zM1r+S$pZj_l=hK=i$ko!QbZRhVNMtV{<|ONa(Rf9XtaDrsLC+X9h+>F_&mM2hJRl( z=C-Rexvo`vztezUx_gH9_X@ubYqNLDy>>^mS0D-#rl1gj@aYO1QVmr=py;##auTNC ziKS2xU`W}?468%v29X}zB74j`i8lxRGHX^gDV*Pa?HOA7uMA3zH|gr|PT41M zS9R00DeUh>Qd*5m00&Sog_7{;X}l4yFKX_FlEV*%MIPB`!&tewZB0M z`EGDX8_<3FDrR~vT6^RaY+%LUThVm~BJol_j(zZ3bETc;v;+h2!`(XMraoAI%in^D z3>JW)>#0mx8VwP;=O+QdKSP(?@>?EC;2IC&A$5?On*5l!&4s(9=~LFt=3vPtpcf2y zWfD>x0u>LkFOSO%#lmzo$Y~!QS{Jb3RL7t6(_N)VBtRa%)zwR|rE=`E7ZuWw@WN)+ z*Aj4Us0~^eLPl*=Zs2i#J5X{m;eQCe4Ra9}Z@cf1hIn^%!-uawR~a}70DP+hjhBqN`4<TNAY~WiJ;7# zDBA`iE***hBXaX001#AM1n~I8-R7(u)P-`sJ7+@%LL7U}CeLQrU=ATSfV1o7Hb8tN z!K!Sd=eNmgu77Cg%u0B!D$@ey1ju3en4Nw7sX5n+a)@I*9$`=syMH9b1oI`d%iDy; zUvSq0p>`+x`(AGb>uf7}^6d0z_4*WgE#m$l(qXK%|FUpE2-zWn2>0Rd*YW=CFzN7%1jQTmy^2kUl+1$9qwTH$K|~l?$H>xjA(b3=X=^FzM)N zz;Ga#&sW%jOHXB(du&X?J#c!1PTPWd5J`>g*#*zj=-$uvRn+E3FFpT_8B9dN3Z~T8 z_q9Zx?R~g5TB=WCoIOe|po510B5peM)=pQ@_3_K^c{oF{{lKdz!uvn8wH*NPJ}7k2 zoN}BmY5MGv^PEaR_!JuoRoI%I1-j*l3&W*duHE9<42qOz#u`^?xZ2xaWrat3K4+py z*>_UNWjRxhc9(IE_<(`yJghxH#Nt-3S$}ZA16ntx|5>QL*|Hh0HE@PVMIpHhAHF__ zKv1{SGipt+>BkJX7+c+ExdH-`ZBh#nC@ekb)*TLYnvYIYvn5)%sIDg1{ zjLfH-A-zJ}3 zIY)R-uTXsD5R^l#jd)=@hT{o9nJQMaW)_F%Q6?P`xQO1);7amqR7uxK5Ib7tom;vG zXQr|akJ;C@w6(9ZWKB$kb6IeK)~Po4IgrO65t89+WJphxD?=}7$vL~n>M&04tAA*@ zYkc`$9_#QE#5sIr)o^2!EqFeQDegFXHuMXwsmM`7+fZ-w4UTM*>Fk1-(5HWa;Xq z{@yvQ!~vbUJ-Lfm`RRF1rS*`{hynz_G8r$997`O&NjxMQercOtOa0y} z6KUL}uo=_+6x5Q0!aLMvdjE@9H9 zVoz!t96+E#2OzGEl!s}gxPKj{dG8!;I8ECI6C8b)@>M1?$EbTQbor`yb!!swn1BB2 zv7sS!`esYXGyjcbT1Y95M&sR`Y zkYZ3Eia%p41$}~vT!D@STqmcf6!{#sLmp@#4)zX!^D~n$0{+||Row%+G^vKq#Q2%><*#H=13<#RD7A^8oF2-;k>Khvu9n0(5efyH+Tff&j#OrUoBa;1GdR z#L5f=bst$u(_q1`3SWQxde`)VvVAP6J*i{mu+Tf2qb6N$3pr1ai>sp6;*`YC%2)M< zzlYLEFt{OBLo_n((gXKg~<py63f38M8;E4yRg3I*iyJ z0LKLmEi_}-V{<%I-wLC}hfe&xOgAJf@J;q4hgv=+*sXmp+HB}K&>5D(KCTonvu_VkoLh!Cvh^rukk!!hPZ~EC521H-Z zU!0bEx@Ie{V0v6kpQj=CFn`&Ki#S(o^LsZBOI_su%*++_h+0rVmG{U#MJL znXDZqlMD~eyTcamNM?pN*aDJ*bCOl zSB}?tt88R97rZg3(%HB`>X4_!b^Pjea9Zd!5a50WL(N&~hY;vLw5Kder6&Fa>&w&6 zMj+O^>8Yo>b^siFyRM-&C=4;kV-vVSF+7{?H+DkN-8b)6ompzs?_)-J+}f ze-*JITD2N|J3gK#-yq3p|?H9`3OD zXd?hTU2kP+;==hqXNdnJ^-CQ4HQLX-K8?_@Io-&miot-gG=6CBqa%0@*Anpp&JeAo zhUu4eBPdE1oPT6*R2^UaKj#Fh zx-R0owF%Wl#M?}M0%bf2Z!$JeN}u*Yj#ZKBRuVym>nZKLhG~-?ZKhk^RK}QkK1Xtr z@wgG2U}52ngZod1)m7UtJ4}FE5$`6I@afg*>dDE)XBQw>5_EA^(wy(dE!2TdH2&|e zDsOk5+YSf)i@zAfovqm0nduk5F9=;hD1Js>wRI9lZBx8HpJVIP={fKec#qJrO??v} z4YUye2!x;t)TExyZTOS8Ym$1nz&Gixlq5sx0xwra(6~4_hq*6`CwO%J zq49-Jho{E(_=4;=BsVm3umSwZ6u?bT+bRSQLIZ)GU$x;qO2W-1?NKpV>&)wY?!C#! zQz}85wx3P{;=T6MCwF?=I^JxOm;L@U-^V3vjUu8ylI$9<%+q?xc95KSt-1%QO&PNk zp{Mxnx8z8;_TM|(S6;VUnH8@gH^Fd6D4;F54t@pT5Zr;g&fBl9J_3NN4`wBQdks)O z&HmI4zIIHxsY&2W+t|8ymR9!dmqMBarmBy<3tPA-HGj(AQQIOOO)T9j>q#uk)bP7!#+&%Gu-EHX%yWdDkk_Iu(ehY3FMuy|ox=*GdR z{e5Wm_2cVJ&0`w1sKVTC2M33ARJW*DSs31C1BG4#T}!e1Y%9B=wg-+v@pc@{Y=)M7 z`Fve|dhZV8xhcGt1PO|2||G&`fm}OK+kWvZi8L z1!^|>1*hrZA)GJT96sBhubn;i7H)QE$3AwaBCg%m_>yg;N!qF>5%p7RPa~_A!3()v z{+|Ne%6S1l?D^JtrhYh*MTx0Oo%qz!?19+QNt{Fs#%?Q;BN)fl=!gS&kT+lIdDsUY zi<*nwpu$Or;yd7N^>3QE{Rxmb5&)SAT>@N>!Ql^uJ<&Q;!TP%NJXF6rXai#VR(*!T zU&oP1A^K}cTQ$_$^&;m4>>xBz9g2cx82K#$MYi5eGbz-KM^JI7>&fH>%pr7>ZcOCh zDaduI{7F>M~-5KqkkO8(Ff zsCd}@0piyBARzphyfz6xUz>h_K55XWvDBFe!Q5v4l26TgB!ehw_y$u+k(wKr9LIKx zFaq_@W5Wtd(@T4;&Q;kwK+oQ@{j-=G?Vl9DP*d^Hw9g@-qAr+6AW-~g*0jov_e7rV z+N6h#g0JY0F<08njwbW=Y+VZOssY1}ci-@=3B@#pnX2ctfCtnA4h8f^h& zy>;yF4tnT9_GjXjWw?!dcjSkfV_=PUqs9@uIg(djB8_vXZ~ zSct`qj+0KwNo`G#H35Vt;7pC-rID5*&Uh?*TXOyOcCBviGFqi>TNw=K4X;p^u-PsL z1xi@7Ev0+(+Rwt;xzz4&*lIpaBx2C z(BYF4L{S~-1r-_HUxCHY5~ z4T>AF8f}c@nMEYjc@S2Q3uq7O)$aG4{59Kz{X;tl0Wnc?O|QQ`nf#C9?4+3!Jb{}a zBlsEu`W}T(O_HGa5;0GT4RMPM)7O{xt(!x9nKnM{JDkRV7ep0uk`tCL`>eF8n|uM2uz3!1X` z+hTrJ({eB&q8;ukpfH-~la8U&FG13&_I4V-uMqB#L`PsqZwG~1g{oUvmv_0%Pypab z7KNq%(AXe<^(YhOcJ^Vtq5q|~^ABe_f#bNY>w4}%31^8S7ABg8Eqy)e?z!m)uKXOf zn?ys|XtY_jxs;jnGjy35Nv9`;7;{WpB}5y=BW7kULOq)`G-2a*|K4Byb^m|<{CuA0 z{dwN6_w(+p+%&KRsPHwA-S}8_@t}Xb+u7jvGq(NBso$D`F@;t(=Ps8xz?nG658q0BAZn9C_1S zg^ZIg*fj8KoX2AxpU=0!;_W;}${rkFKEa6r37nvitFNz*)^kog?G0;P_^>S`kpIf( z4B*NzCdOnUx+9axR|ga#C6}8{uf2eBP$-{SkkbT;#Z7}a5{^W^-K1mFfOYq}pQy25 zbD*DEiF^*pE~VUtdd=(Ch(fs!wB^iA2BWE$41Cid=)O%O zM7dO%#M4dS9aK_@Fq<&hZ3}})keRU){3fOmEa$|$d&h&BXg;Z7_#`@OD4B7J+xJn7 z_3CoLfR*qHaV(*DbuKGPvV81G_<*>3Y>=NQUAG}A*EDfSH8fo=f{yiDBt~kheozt6 zdcwT@6#-3@u6pS+Vw$=-XBmygRyS8UTL&(ehqy)`wCO8=w3zl!0uJ_>H|9>Cf9>aJ z82iDu?j}*2n^zigEp&-XWuv?JKC1Bzc@wMCXXIuMw>Mt7Tc8Cr{B>-QMDObK(DbEB zY#|jbPR1fxp}6d)dqm9F)t?A(+nI2YuW`{m+TzYJvs-=Mf3h$|rz**OhFDsiuM%UT zJP!{Pf@ohjRV17ujv!v4_m-$S9`35)A~`J1d#M9iHvL=*_yTyjQa*q79n}jN7I2BV zck8+LDA(y3+d$1Pc}Wb*w#b4b>w8?~ zatr#(nv~yuOGH7Wi#L)|W&9ZVNFdFH0Voh!@=0q)DoW8eNumvcgQbuaZ((KAm*d#Vx9&dZ5n)TelbLFEM>{{ zB~u)B8*P0OrqIecvDdO*fK&Y`AU_E6j^c*HigoZQszO|jKYXPC)cnAq0SoP!W`v=P zU^6`%u(v|j2p%r!I|*1DRLWD82;^v0^CR`Je+lvXUcUoimjh4}o%c6Sq6NH* zJ!?N~vY#DYySo*v{_&eJ(;}zJaJHT5z(if^k@ScavQ$V`eforxa@+YN{0eF*Dgj}H zrYqS5(7zA@O(v7b*yM4a9>oQ1dj0H9bg>{f+Q}47?8)u4-a*`Av@mvjs;k`XxhwBC zi^NQ0iPJ-oO@+(#xkGL!3nis4e6kRfafzTBR}2vrdKTEn3UrOaSzjNiPHMC^tsiGBle8s~lm~m6SiA++;FbzII3{(^b>>IyT~sU}4F> z^%^p_#c8V#(#Z-+8j#VlsMY`w8RpS{b1@dT-+VP4^Z)#Sdc6Ouu$!+OLvBj` E0ghKtz5oCK literal 0 HcmV?d00001 diff --git a/luci-app-unblockneteasemusic/views/view3.jpg b/luci-app-unblockneteasemusic/views/view3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..633154e0b7bcaab6f8b99b858c95f653002fbd3e GIT binary patch literal 169344 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⋘TqJp=p`4|M!~=2JL3(EJGR&Q;*7dX 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 LslUSc_ryN{G)r#? literal 0 HcmV?d00001 diff --git a/luci-app-unblockneteasemusic/views/view4.jpg b/luci-app-unblockneteasemusic/views/view4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7144b8a474e8be18d72dd58374168a540d2053d5 GIT binary patch literal 120071 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�t}v~At;I5t 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 AM*si- literal 0 HcmV?d00001 diff --git a/luci-app-wechatpush b/luci-app-wechatpush deleted file mode 160000 index 4649b21c..00000000 --- a/luci-app-wechatpush +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4649b21cebe036f3abc16c81e546c22e46129818 diff --git a/luci-app-wechatpush/Makefile b/luci-app-wechatpush/Makefile new file mode 100644 index 00000000..02ad0b3b --- /dev/null +++ b/luci-app-wechatpush/Makefile @@ -0,0 +1,23 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-serverchan +PKG_VERSION:=2.06.2 +PKG_RELEASE:=10 + +PKG_MAINTAINER:=tty228 + +LUCI_TITLE:=LuCI support for serverchan +LUCI_PKGARCH:=all +LUCI_DEPENDS:=+iputils-arping +curl +jq + +define Package/$(PKG_NAME)/conffiles +/etc/config/serverchan +/usr/share/serverchan/api/diy.json +/usr/share/serverchan/api/logo.jpg +/usr/share/serverchan/api/ipv4.list +/usr/share/serverchan/api/ipv6.list +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-wechatpush/README.md b/luci-app-wechatpush/README.md new file mode 100644 index 00000000..ed2fdd2a --- /dev/null +++ b/luci-app-wechatpush/README.md @@ -0,0 +1,45 @@ +# 简介 +- 用于 OpenWRT 路由器上进行 微信/Telegram 推送的插件 +- 支持列表: +- 微信推送/Server酱 https://sct.ftqq.com/ +- 企业微信/应用推送 https://work.weixin.qq.com/api/doc/90000/90135/90248 +- 微信推送/WxPusher https://wxpusher.zjiecode.com/docs +- 微信推送/推送加 http://www.pushplus.plus/ +- Telegram/BotFather https://t.me/BotFather +- 精力有限,如需要钉钉推送、飞书推送、Bark推送等请尝试 https://github.com/zzsj0928/luci-app-pushbot +- 依赖 iputils-arping + curl + jq 命令,安装前请 `opkg update`,小内存路由谨慎安装 + + +#### 主要功能 +- 路由 IP、IPv6 变动推送 +- 设备 上线、离线 推送 +- 设备在线列表及流量使用情况 +- CPU 负载、温度监视、PVE 宿主机温度监控 +- 路由运行状态定时推送 +- 路由 Web、SSH 登录提示,自动拉黑、端口敲门 +- 无人值守任务 + +#### 已知问题 +- 基于 X86 OpenWrt v19.07.10 制作,不同系统不同设备,可能会遇到各种问题,**如获取到错误的温度信息、页面显示错误、报错等,自行适配** +- 部分设备无法读取到设备名,脚本使用 `cat /tmp/dhcp.leases` 命令读取设备名,**如果 DHCP 中不存在设备名,则无法读取设备名**(如二级路由设备、静态IP设备、OpenWrt 作为旁路网关等情况),请使用设备名备注,或在高级设置处设置从光猫获取 +- 使用主动探测设备连接的方式检测设备在线状态,以避免 Wi-Fi 休眠机制,主动探测较为耗时,**如遇设备休眠频繁,请自行调整超时设置** +- 流量统计功能依赖 wrtbwmon ,自行选装或编译,**该插件与 Routing/NAT 、Flow Offloading 冲突,开启无法获取流量,自行选择** + +#### PS +- 新功能看情况开发,忙得头晕眼花 +- 欢迎各种代码提交 +- 审美无能,推送样式将就用吧 +- 提交bug时请尽量带上设备信息,日志与描述如执行 /usr/share/serverchan/serverchan 后的提示、日志信息、/tmp/serverchan/ 目录下的文件信息,**并附上 sh -x /usr/share/serverchan/serverchan t1 的详细运行信息** ) +- 三言两句恕我无能为力 + +#### Download +- [luci-app-serverchan](https://github.com/tty228/luci-app-serverchan/releases) +- [wrtbwmon](https://github.com/brvphoenix/wrtbwmon) +- [luci-app-wrtbwmon](https://github.com/brvphoenix/luci-app-wrtbwmon) +- **L大版本直接编译 luci-app-wrtbwmon ,非原版 LuCI 如使用以上 wrtbwmon,请注意安装版本号** + +#### Donate +如果你觉得此项目对你有帮助,请捐助我们,以使项目能持续发展,更加完善。 + +![image](https://github.com/tty228/Python-100-Days/blob/master/res/WX.jpg) + diff --git a/luci-app-wechatpush/luasrc/controller/serverchan.lua b/luci-app-wechatpush/luasrc/controller/serverchan.lua new file mode 100644 index 00000000..aa612c88 --- /dev/null +++ b/luci-app-wechatpush/luasrc/controller/serverchan.lua @@ -0,0 +1,34 @@ +module("luci.controller.serverchan", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/serverchan") then + return + end + + local page = entry({"admin", "services", "serverchan"}, alias("admin", "services", "serverchan", "setting"), _("微信推送"), 30) + page.dependent = true + page.acl_depends = { "luci-app-serverchan" } + + entry({"admin", "services", "serverchan", "setting"}, cbi("serverchan/setting"), _("配置"), 40).leaf = true + entry({"admin", "services", "serverchan", "advanced"}, cbi("serverchan/advanced"), _("高级设置"), 50).leaf = true + entry({"admin", "services", "serverchan", "client"}, form("serverchan/client"), _("在线设备"), 80) + entry({"admin", "services", "serverchan", "log"}, form("serverchan/log"), _("日志"), 99).leaf = true + entry({"admin", "services", "serverchan", "get_log"}, call("get_log")).leaf = true + entry({"admin", "services", "serverchan", "clear_log"}, call("clear_log")).leaf = true + entry({"admin", "services", "serverchan", "status"}, call("act_status")).leaf = true +end + +function act_status() + local e = {} + e.running = luci.sys.call("busybox ps|grep -v grep|grep -c serverchan >/dev/null") == 0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end + +function get_log() + luci.http.write(luci.sys.exec("[ -f '/tmp/serverchan/serverchan.log' ] && cat /tmp/serverchan/serverchan.log")) +end + +function clear_log() + luci.sys.call("echo '' > /tmp/serverchan/serverchan.log") +end diff --git a/luci-app-wechatpush/luasrc/model/cbi/serverchan/advanced.lua b/luci-app-wechatpush/luasrc/model/cbi/serverchan/advanced.lua new file mode 100644 index 00000000..8a1177a5 --- /dev/null +++ b/luci-app-wechatpush/luasrc/model/cbi/serverchan/advanced.lua @@ -0,0 +1,168 @@ +local nt = require "luci.sys".net +local fs = require "nixio.fs" + +m = Map("serverchan", translate("提示:")) +m.description = translate("如果你不了解这些选项的含义,请不要修改这些选项") + +s = m:section(TypedSection, "serverchan", "高级设置") +s.anonymous = true +s.addremove = false + +a = s:option(Value, "up_timeout", translate('设备上线检测超时(s)')) +a.default = "2" +a.optional = false +a.datatype = "uinteger" + +a = s:option(Value, "down_timeout", translate('设备离线检测超时(s)')) +a.default = "20" +a.optional = false +a.datatype = "uinteger" + +a = s:option(Value, "timeout_retry_count", translate('离线检测次数')) +a.default = "2" +a.optional = false +a.datatype = "uinteger" +a.description = translate("若无二级路由设备,信号强度良好,可以减少以上数值
因夜间 wifi 休眠较为玄学,遇到设备频繁推送断开,烦请自行调整参数
..╮(╯_╰)╭..") + +a = s:option(Value, "thread_num", translate('最大并发进程数')) +a.default = "3" +a.datatype = "uinteger" +a.description = translate("低性能设备请勿更改设置值,或酌情减少参数") + +a = s:option(Value, "soc_code", "自定义温度读取命令") +a.rmempty = true +a:value("", translate("默认")) +a:value("pve", translate("PVE 虚拟机")) +a.description = translate("自定义命令如需使用特殊符号,如引号、$、!等,则需要自行转义,并在保存后查看 /etc/config/serverchan 文件 soc_code 设置项是否保存正确
可以使用 eval `echo $(uci get serverchan.serverchan.soc_code)` 命令查看命令输出及错误信息
执行结果需为纯数字(可带小数),用于温度对比") + +a = s:option(Value, "server_host", translate("宿主机地址")) +a.rmempty = true +a.default = "10.0.0.2" +a.description = translate("") +a:depends({soc_code = "pve"}) + +a = s:option(Value, "server_port", translate("宿主机 SSH 端口")) +a.rmempty = true +a.default = "22" +a.description = translate("SSH 端口默认为 22,如有自定义,请填写自定义 SSH 端口
请确认已经设置好密钥登陆,否则会引起脚本无法运行等错误!
PVE 安装 sensors 命令自行百度
密钥登陆例(自行修改地址与端口号):
opkg update #更新列表
opkg install openssh-client openssh-keygen #安装openssh客户端
echo -e \"\\n\" | ssh-keygen -t rsa # 生成密钥文件(空密码)
pve_host=`uci get serverchan.serverchan.server_host` || pve_host=\"10.0.0.3\" # 读取配置文件中的 pve 主机地址,如果不存在请自行填写
pve_port=`uci get serverchan.serverchan.server_port` || pve_host=\"22\" # 读取配置文件中的 pve 主机 ssh 端口号,,如果不存在请自行填写
ssh root@${pve_host} -p ${pve_port} \"tee -a ~/.ssh/id_rsa.pub\" < ~/.ssh/id_rsa.pub # 传送公钥到 PVE
ssh root@${pve_host} -p ${pve_port} \"cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys\" # 写入公钥到 PVE
ssh -i /root/.ssh/id_rsa root@${pve_host} -p ${pve_port} sensors # 使用私钥连接 PVE 测试温度命令
刷机党自行将 /root/.ssh/ 加入备份列表,避免重复操作") +a:depends({soc_code = "pve"}) + +a = s:option(Button, "soc", translate("测试温度命令")) +a.inputtitle = translate("输出信息") +a.write = function() + luci.sys.call("/usr/share/serverchan/serverchan soc") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "serverchan", "advanced")) +end + +if nixio.fs.access("/tmp/serverchan/soc_tmp") then +e = s:option(TextValue,"soc_tmp") +e.rows = 2 +e.readonly = true +e.cfgvalue = function() + return luci.sys.exec("cat /tmp/serverchan/soc_tmp && rm -f /tmp/serverchan/soc_tmp") +end +end + +a = s:option(Flag, "gateway_info_enable", translate("从光猫获取主机名等信息")) +a.default = 0 +a.rmempty = true +a.description = translate("适用于 OpenWrt 作为旁路网关,无法获取设备主机名及完整的局域网设备列表时
仅测试通过 HG5143F/HN8145V 天翼网关,不保证通用性") + +a = s:option(Value, "gateway_host_url", translate('光猫登录地址 URL')) +a.rmempty = true +a.default = "http://192.168.1.1/cgi-bin/luci" +a:depends({gateway_info_enable = "1"}) + +a = s:option(Value, "gateway_info_url", translate('设备列表 JSON URL')) +a.rmempty = true +a.default = "http://192.168.1.1/cgi-bin/luci/admin/allInfo" +a.description = translate('使用 F12 控制台自行抓取
ip、devName、model 为必须项,JSON 文件信息范例:
{"pc1":{"brand":"","devName":"RouterOS","onlineTime":45,"model":"","upSpeed":229376,"downSpeed":7707033,"type":"pc","ip":"192.168.1.7"}}') +a:depends({gateway_info_enable = "1"}) + +a = s:option(Value, "gateway_logout_url", translate('光猫注销登录 URL')) +a.rmempty = true +a.default = "http://192.168.1.1/cgi-bin/luci/admin/logout" +a.description = translate("非必须项,但可能会影响其他用户登录 Web 管理页面,如 HG5143F") +a:depends({gateway_info_enable = "1"}) + +a = s:option(Value, "gateway_username_id", translate('登录页面帐号输入框 ID')) +a.rmempty = true +a.default = "username" +a:depends({gateway_info_enable = "1"}) + +a = s:option(Value, "gateway_password_id", translate('登录页面密码输入框 ID')) +a.rmempty = true +a.default = "psd" +a.description = translate("浏览器右键-检查元素") +a:depends({gateway_info_enable = "1"}) + +a = s:option(Value, "gateway_username", translate('光猫登录帐号')) +a.rmempty = true +a.default = "useradmin" +a:depends({gateway_info_enable = "1"}) + +a = s:option(Value, "gateway_password", translate('光猫登录密码')) +a.rmempty = true +a.description = translate("使用普通账号即可,不需要超密") +a:depends({gateway_info_enable = "1"}) + +a = s:option(Flag, "err_enable", translate("无人值守任务")) +a.default = 0 +a.rmempty = true +a.description = translate("请确认脚本可以正常运行,否则可能造成频繁重启等错误!") + +a = s:option(Flag, "err_sheep_enable", translate("仅在免打扰时段重拨")) +a.default = 0 +a.rmempty = true +a.description = translate("避免白天重拨 DDNS 域名等待解析,此功能不影响断网检测
因夜间跑流量问题,该功能可能不稳定") +a:depends({err_enable = "1"}) + +a = s:option(DynamicList, "err_device_aliases", translate("关注列表")) +a.rmempty = true +a.description = translate("只会在列表中设备都不在线时才会执行
免打扰时段一小时后,关注设备五分钟低流量(约100kb/m)将视为离线") +nt.mac_hints(function(mac, name) a :value(mac, "%s (%s)" %{ mac, name }) end) +a:depends({err_enable = "1"}) + +a = s:option(ListValue, "network_err_event", translate("网络断开时")) +a.default = "" +a:depends({err_enable = "1"}) +a:value("", translate("无操作")) +a:value("1", translate("重启路由器")) +a:value("2", translate("重新拨号")) +a:value("3", translate("修改相关设置项,尝试自动修复网络")) +a.description = translate("选项 1 选项 2 不会修改设置,并最多尝试 2 次。
选项 3 会将设置项备份于 /usr/share/serverchan/configbak 目录,并在失败后还原。
【!!无法保证兼容性!!】不熟悉系统设置项,不会救砖请勿使用") + +a = s:option(ListValue, "system_time_event", translate("定时重启")) +a.default = "" +a:depends({err_enable = "1"}) +a:value("", translate("无操作")) +a:value("1", translate("重启路由器")) +a:value("2", translate("重新拨号")) + +a = s:option(Value, "autoreboot_time", "系统运行时间大于") +a.rmempty = true +a.default = "24" +a.datatype = "uinteger" +a:depends({system_time_event = "1"}) +a.description = translate("单位为小时") + +a = s:option(Value, "network_restart_time", "网络在线时间大于") +a.rmempty = true +a.default = "24" +a.datatype = "uinteger" +a:depends({system_time_event = "2"}) +a.description = translate("单位为小时") + +a = s:option(Flag, "public_ip_event", translate("重拨尝试获取公网 IP")) +a.default = 0 +a.rmempty = true +a:depends({err_enable = "1"}) +a.description = translate("重拨时不会推送 IP 变动通知,并会导致你的域名无法及时更新 IP 地址
请确认你可以通过重拨获取公网 IP,否则这不仅徒劳无功还会引起频繁断网
移动等大内网你就别挣扎了!!") + +a = s:option(Value, "public_ip_retry_count", "当天最大重试次数") +a.rmempty = true +a.default = "10" +a.datatype = "uinteger" +a:depends({public_ip_event = "1"}) + +return m diff --git a/luci-app-wechatpush/luasrc/model/cbi/serverchan/client.lua b/luci-app-wechatpush/luasrc/model/cbi/serverchan/client.lua new file mode 100644 index 00000000..c082a992 --- /dev/null +++ b/luci-app-wechatpush/luasrc/model/cbi/serverchan/client.lua @@ -0,0 +1,34 @@ +f = SimpleForm("serverchan") +f.reset = false +f.submit = false + +local o = require "luci.dispatcher" +local fs = require "nixio.fs" +local jsonc = require "luci.jsonc" +local sys = require "luci.sys" + +local sessions = {} +local session_path = "/var/serverchan/client" +if fs.access(session_path) then + for filename in fs.dir(session_path) do + local session_file = session_path .. "/" .. filename + local file = io.open(session_file, "r") + local t = jsonc.parse(file:read("*a")) + if t then + t.session_file = session_file + sessions[#sessions + 1] = t + end + file:close() + end +end + +local client_count = sys.exec("cat /tmp/serverchan/ipAddress | wc -l") +t = f:section(Table, sessions, translate("当前共 ".. client_count .. "台设备在线")) +t:option(DummyValue, "name", translate("主机名")) +t:option(DummyValue, "mac", translate("MAC")) +t:option(DummyValue, "ip", translate("IP")) +t:option(DummyValue, "usage", translate("总计流量")) +t:option(DummyValue, "uptime", translate("在线时间")) + + +return f diff --git a/luci-app-wechatpush/luasrc/model/cbi/serverchan/log.lua b/luci-app-wechatpush/luasrc/model/cbi/serverchan/log.lua new file mode 100644 index 00000000..d794f7d7 --- /dev/null +++ b/luci-app-wechatpush/luasrc/model/cbi/serverchan/log.lua @@ -0,0 +1,6 @@ +f = SimpleForm("serverchan") +f.reset = false +f.submit = false +f:append(Template("serverchan/serverchan_log")) + +return f diff --git a/luci-app-wechatpush/luasrc/model/cbi/serverchan/setting.lua b/luci-app-wechatpush/luasrc/model/cbi/serverchan/setting.lua new file mode 100644 index 00000000..4715d2a3 --- /dev/null +++ b/luci-app-wechatpush/luasrc/model/cbi/serverchan/setting.lua @@ -0,0 +1,536 @@ +local nt = require "luci.sys".net +local fs = require "nixio.fs" +local e = luci.model.uci.cursor() +local net = require "luci.model.network".init() +local sys = require "luci.sys" +local ifaces = sys.net:devices() + +m = Map("serverchan", translate("ServerChan"), +translate("「Server酱」,英文名「ServerChan」,是一款从服务器推送报警信息和日志到微信的工具。

如果你在使用中遇到问题,请到这里提交:") +.. [[
]] +.. translate("GitHub 项目地址") +.. [[]] +) + +m:section(SimpleSection).template = "serverchan/serverchan_status" + +s = m:section(NamedSection, "serverchan", "serverchan", translate("")) +s:tab("basic", translate("基本设置")) +s:tab("content", translate("推送内容")) +s:tab("ipset", translate("自动封禁")) +s:tab("crontab", translate("定时推送")) +s:tab("disturb", translate("免打扰")) +s.addremove = false +s.anonymous = true + +-- 基本设置 +a = s:taboption("basic", Flag, "serverchan_enable", translate("启用")) +a.rmempty = true + +a = s:taboption("basic", MultiValue, "lite_enable", translate("精简模式")) +a:value("device", translate("精简当前设备列表")) +a:value("nowtime", translate("精简当前时间")) +a:value("content", translate("只推送标题")) +a.widget = "checkbox" +a.default = nil +a.optional = true + +a = s:taboption("basic", ListValue, "jsonpath", translate("推送模式")) +a.default = "/usr/share/serverchan/api/serverchan.json" +a.rmempty = true +a:value("/usr/share/serverchan/api/serverchan.json", translate("微信 Server酱")) +a:value("/usr/share/serverchan/api/qywx_mpnews.json", translate("企业微信 图文消息")) +a:value("/usr/share/serverchan/api/qywx_markdown.json", translate("企业微信 markdown版(不支持公众号)")) +a:value("/usr/share/serverchan/api/wxpusher.json", translate("微信 wxpusher")) +a:value("/usr/share/serverchan/api/pushplus.json", translate("微信 pushplus")) +a:value("/usr/share/serverchan/api/telegram.json", translate("Telegram")) +a:value("/usr/share/serverchan/api/diy.json", translate("自定义推送")) + +a = s:taboption("basic", Value, "sckey", translate('微信推送/新旧共用'), translate("").."Server酱 sendkey 点击这里
") +a.rmempty = true +a:depends("jsonpath", "/usr/share/serverchan/api/serverchan.json") + +a = s:taboption("basic", Value, "corpid", translate('企业ID(corpid)'), translate("").."获取说明 点击这里") +a.rmempty = true +a:depends("jsonpath", "/usr/share/serverchan/api/qywx_mpnews.json") +a:depends("jsonpath", "/usr/share/serverchan/api/qywx_markdown.json") + +a = s:taboption("basic", Value, "userid", translate('帐号(userid)')) +a.rmempty = true +a.description = translate("群发到应用请填入 @all ") +a:depends("jsonpath", "/usr/share/serverchan/api/qywx_mpnews.json") +a:depends("jsonpath", "/usr/share/serverchan/api/qywx_markdown.json") + +a = s:taboption("basic", Value, "agentid", translate('应用id(agentid)')) +a.rmempty = true +a:depends("jsonpath", "/usr/share/serverchan/api/qywx_mpnews.json") +a:depends("jsonpath", "/usr/share/serverchan/api/qywx_markdown.json") + +a = s:taboption("basic", Value, "corpsecret", translate('应用密钥(Secret)')) +a.rmempty = true +a:depends("jsonpath", "/usr/share/serverchan/api/qywx_mpnews.json") +a:depends("jsonpath", "/usr/share/serverchan/api/qywx_markdown.json") + +a = s:taboption("basic", Value, "mediapath", translate('图片缩略图文件路径')) +a.rmempty = true +a.default = "/usr/share/serverchan/api/logo.jpg" +a:depends("jsonpath", "/usr/share/serverchan/api/qywx_mpnews.json") +a.description = translate("只支持 2MB 以内 JPG,PNG 格式
900*383 或 2.35:1 为佳 ") + +a = s:taboption("basic", Value, "wxpusher_apptoken", translate('appToken'), translate("").."获取 appToken 点击这里
") +a.rmempty = true +a:depends("jsonpath", "/usr/share/serverchan/api/wxpusher.json") + +a = s:taboption("basic", Value,"wxpusher_uids",translate('uids')) +a.rmempty = true +a:depends("jsonpath", "/usr/share/serverchan/api/wxpusher.json") + +a = s:taboption("basic", Value, "wxpusher_topicIds", translate('topicIds(群发)'), translate("").."接口说明 点击这里
") +a.rmempty = true +a:depends("jsonpath", "/usr/share/serverchan/api/wxpusher.json") + +a = s:taboption("basic", Value, "pushplus_token", translate('pushplus_token'), translate("").."获取pushplus_token 点击这里
") +a.rmempty = true +a:depends("jsonpath", "/usr/share/serverchan/api/pushplus.json") + +a = s:taboption("basic", Value, "tg_token", translate("TG_token"), translate("").."获取机器人点击这里
与创建的机器人发一条消息,开启对话
") +a.rmempty = true +a:depends("jsonpath", "/usr/share/serverchan/api/telegram.json") + +a = s:taboption("basic", Value, "chat_id", translate('TG_chatid'), translate("").."获取 chat_id 点击这里") +a.rmempty = true +a:depends("jsonpath", "/usr/share/serverchan/api/telegram.json") + +a = s:taboption("basic", TextValue, "diy_json", translate("自定义推送")) +a.optional = false +a.rows = 28 +a.wrap = "soft" +a.cfgvalue = function(self, section) + return fs.readfile("/usr/share/serverchan/api/diy.json") +end +a.write = function(self, section, value) + fs.writefile("/usr/share/serverchan/api/diy.json", value:gsub("\r\n", "\n")) +end +a:depends("jsonpath", "/usr/share/serverchan/api/diy.json") + +a = s:taboption("basic", Button, "__add", translate("发送测试")) +a.inputtitle = translate("发送") +a.inputstyle = "apply" +function a.write(self, section) + luci.sys.call("cbi.apply") + luci.sys.call("/usr/share/serverchan/serverchan test &") +end + +a = s:taboption("basic", Value, "device_name", translate('本设备名称')) +a.rmempty = true +a.description = translate("在推送信息标题中会标识本设备名称,用于区分推送信息的来源设备") + +a = s:taboption("basic", Value, "sleeptime", translate('检测时间间隔(s)')) +a.rmempty = true +a.optional = false +a.default = "60" +a.datatype = "and(uinteger,min(10))" +a.description = translate("越短的时间响应越及时,但会占用更多的系统资源") + +a = s:taboption("basic", ListValue, "oui_data", translate("MAC设备信息数据库")) +a.rmempty = true +a.default = "" +a:value("", translate("关闭")) +a:value("1", translate("简化版")) +a:value("2", translate("完整版")) +a:value("3", translate("网络查询")) +a.description = translate("需下载 4.36 MB 原始数据,处理后完整版约 1.2 MB,简化版约 250 kB
若无梯子,请勿使用网络查询") + +a = s:taboption("basic", Flag, "oui_dir", translate("下载到内存")) +a.rmempty = true +a:depends("oui_data", "1") +a:depends("oui_data", "2") +a.description = translate("懒得做自动更新了,下载到内存中,重启会重新下载
若无梯子,还是下到机身吧") + +a = s:taboption("basic", Flag, "reset_regularly", translate("每天零点重置流量数据")) +a.rmempty = true + +a = s:taboption("basic", Flag, "debuglevel", translate("开启日志")) +a.rmempty = true + +a = s:taboption("basic", DynamicList, "device_aliases", translate("设备别名")) +a.rmempty = true +a.description = translate("
请输入设备 MAC 和设备别名,用“-”隔开,如:
XX:XX:XX:XX:XX:XX-我的手机") + +-- 设备状态 +a = s:taboption("content", ListValue, "serverchan_ipv4", translate("IPv4 变动通知")) +a.rmempty = true +a.default = "" +a:value("", translate("关闭")) +a:value("1", translate("通过接口获取")) +a:value("2", translate("通过URL获取")) + +a = s:taboption("content", ListValue, "ipv4_interface", translate("接口名称")) +a.rmempty = true +a:depends({serverchan_ipv4 = "1"}) +for _, iface in ipairs(ifaces) do + if not (iface == "lo" or iface:match("^ifb.*")) then + local nets = net:get_interface(iface) + nets = nets and nets:get_networks() or {} + for k, v in pairs(nets) do + nets[k] = nets[k].sid + end + nets = table.concat(nets, ",") + a:value(iface, ((#nets > 0) and "%s (%s)" % {iface, nets} or iface)) + end +end +a.description = translate("
一般选择 wan 接口,多拨环境请自行选择") + +a = s:taboption("content", TextValue, "ipv4_list", translate("IPv4 API列表")) +a.optional = false +a.rows = 8 +a.wrap = "soft" +a.cfgvalue = function(self, section) + return fs.readfile("/usr/share/serverchan/api/ipv4.list") +end +a.write = function(self, section, value) + fs.writefile("/usr/share/serverchan/api/ipv4.list", value:gsub("\r\n", "\n")) +end +a.description = translate("
会因服务器稳定性、连接频繁等原因导致获取失败
如接口可以正常获取 IP,不推荐使用
从以上列表中随机地址访问") +a:depends({serverchan_ipv4 = "2"}) + +a = s:taboption("content", ListValue, "serverchan_ipv6", translate("IPv6 变动通知")) +a.rmempty = true +a.default = "disable" +a:value("0", translate("关闭")) +a:value("1", translate("通过接口获取")) +a:value("2", translate("通过URL获取")) + +a = s:taboption("content", ListValue, "ipv6_interface", translate("接口名称")) +a.rmempty = true +a:depends({serverchan_ipv6 = "1"}) +for _, iface in ipairs(ifaces) do + if not (iface == "lo" or iface:match("^ifb.*")) then + local nets = net:get_interface(iface) + nets = nets and nets:get_networks() or {} + for k, v in pairs(nets) do + nets[k] = nets[k].sid + end + nets = table.concat(nets, ",") + a:value(iface, ((#nets > 0) and "%s (%s)" % {iface, nets} or iface)) + end +end +a.description = translate("
一般选择 wan 接口,多拨环境请自行选择") + +a = s:taboption("content", TextValue, "ipv6_list", translate("IPv6 API列表")) +a.optional = false +a.rows = 8 +a.wrap = "soft" +a.cfgvalue = function(self, section) + return fs.readfile("/usr/share/serverchan/api/ipv6.list") +end +a.write = function(self, section, value) + fs.writefile("/usr/share/serverchan/api/ipv6.list", value:gsub("\r\n", "\n")) +end +a.description = translate("
会因服务器稳定性、连接频繁等原因导致获取失败
如接口可以正常获取 IP,不推荐使用
从以上列表中随机地址访问") +a:depends({serverchan_ipv6 = "2"}) + +a = s:taboption("content", Flag, "serverchan_up", translate("设备上线通知")) +a.default = 1 +a.rmempty = true + +a = s:taboption("content", Flag, "serverchan_down", translate("设备下线通知")) +a.default = 1 +a.rmempty = true + +a = s:taboption("content", Flag, "cpuload_enable", translate("CPU 负载报警")) +a.default = 1 +a.rmempty = true + +a = s:taboption("content", Value, "cpuload", "负载报警阈值") +a.default = 2 +a.rmempty = true +a:depends({cpuload_enable = "1"}) + +a = s:taboption("content", Flag, "temperature_enable", translate("CPU 温度报警")) +a.default = 1 +a.rmempty = true +a.description = translate("请确认设备可以获取温度,如需修改命令,请移步高级设置") + +a = s:taboption("content", Value, "temperature", "温度报警阈值") +a.rmempty = true +a.default = "80" +a.datatype = "and(uinteger,min(1))" +a:depends({temperature_enable = "1"}) +a.description = translate("
设备报警只会在连续五分钟超过设定值时才会推送
而且一个小时内不会再提醒第二次") + +a = s:taboption("content", Flag, "client_usage", translate("设备异常流量")) +a.default = 0 +a.rmempty = true + +a = s:taboption("content", Value, "client_usage_max", "每分钟流量限制") +a.default = "10M" +a.rmempty = true +a:depends({client_usage = "1"}) +a.description = translate("设备异常流量警报(byte),你可以追加 K 或者 M") + +a = s:taboption("content", Flag, "client_usage_disturb", translate("异常流量免打扰")) +a.default = 1 +a.rmempty = true +a:depends({client_usage = "1"}) + +a = s:taboption("content", DynamicList, "client_usage_whitelist", translate("异常流量关注列表")) +nt.mac_hints(function(mac, name) a:value(mac, "%s (%s)" %{ mac, name }) end) +a.rmempty = true +a:depends({client_usage_disturb = "1"}) +a.description = translate("请输入设备 MAC") + +a = s:taboption("content", Flag, "web_logged", translate("web 登录提醒")) +a.default = 0 +a.rmempty = true + +a = s:taboption("content", Flag, "ssh_logged", translate("ssh 登录提醒")) +a.default = 0 +a.rmempty = true + +a = s:taboption("content", Flag, "web_login_failed", translate("web 错误尝试提醒")) +a.default = 0 +a.rmempty = true + +a = s:taboption("content", Flag, "ssh_login_failed", translate("ssh 错误尝试提醒")) +a.default = 0 +a.rmempty = true + +a = s:taboption("content", Value, "login_max_num", "错误尝试次数") +a.default = "3" +a.datatype = "and(uinteger,min(1))" +a:depends("web_login_failed", "1") +a:depends("ssh_login_failed", "1") +a.description = translate("超过次数后推送提醒,并可选自动拉黑") + +-- 自动封禁 + +a = s:taboption("ipset", Flag, "web_login_black", translate("自动拉黑非法登录设备")) +a.default = 0 +a.rmempty = true +a:depends("web_login_failed", "1") +a:depends("ssh_login_failed", "1") + +a = s:taboption("ipset", Value, "ip_black_timeout", "拉黑时间(秒)") +a.default = "86400" +a.datatype = "and(uinteger,min(0))" +a:depends("web_login_black", "1") +a.description = translate("0 为永久拉黑,慎用
如不幸误操作,请更改设备 IP 进入 LUCI 界面清空规则") + +a = s:taboption("ipset", DynamicList, "ip_white_list", translate("白名单 IP 列表")) +a.datatype = "ipaddr" +a.rmempty = true +luci.ip.neighbors({family = 4}, function(entry) + if entry.reachable then + a:value(entry.dest:string()) + end +end) +a:depends("web_logged", "1") +a:depends("ssh_logged", "1") +a:depends("web_login_failed", "1") +a:depends("ssh_login_failed", "1") +a.description = translate("忽略推送,仅在日志中记录,并忽略拉黑操作,暂不支持掩码位表示") + +a = s:taboption("ipset", Flag, "port_knocking", translate("端口敲门")) +a.default = 0 +a.rmempty = true +a.description = translate("登录成功后开放端口") + +a = s:taboption("ipset", Value, "ip_port_white", "端口") +a.default = "" +a.rmempty = true +a.description = translate("例:'22'、'21:25'、'21:25,135:139'") +a:depends("port_knocking", "1") + +a = s:taboption("ipset", DynamicList, "port_forward_list", "端口转发") +a.default = "" +a.rmempty = true +a.description = translate("例:将本机(10.0.0.1)的 13389 端口转发到 10.0.0.2 的3389:
'10.0.0.1,13389,10.0.0.2,3389'
IPv6 未测试") +a:depends("port_knocking", "1") + +a = s:taboption("ipset", Value, "ip_white_timeout", "放行时间(秒)") +a.default = "600" +a.rmempty = true +a.datatype = "and(uinteger,min(0))" +a.description = translate("0 为永久放行,慎用
连接成功后不断开就不需要重新连接,故不需要设置太大
注:响应时间与检测间隔和每一次检测所需的时间相关,故反应不是很快,将就用吧") +a:depends("port_knocking", "1") + +a = s:taboption("ipset", TextValue, "ip_black_list", translate("IP 黑名单列表")) +a.optional = false +a.rows = 8 +a.wrap = "soft" +a.cfgvalue = function(self, section) + return fs.readfile("/usr/share/serverchan/api/ip_blacklist") +end +a.write = function(self, section, value) + fs.writefile("/usr/share/serverchan/api/ip_blacklist", value:gsub("\r\n", "\n")) +end +a:depends("web_login_black", "1") +a.description = translate("可在此处添加或删除,timeout 后的数字为剩余时间(秒),添加时只需要输入 IP") + +-- 定时推送 +a = s:taboption("crontab", ListValue, "crontab", translate("定时任务设定")) +a.rmempty = true +a.default = "" +a:value("", translate("关闭")) +a:value("1", translate("定时发送")) +a:value("2", translate("间隔发送")) + +a = s:taboption("crontab", ListValue, "regular_time", translate("发送时间")) +a.rmempty = true +for t = 0, 23 do +a:value(t, translate("每天"..t.."点")) +end +a.default = 8 +a.datatype = uinteger +a:depends("crontab", "1") + +a = s:taboption("crontab", ListValue, "regular_time_2", translate("发送时间")) +a.rmempty = true +a:value("", translate("关闭")) +for t = 0, 23 do +a:value(t, translate("每天"..t.."点")) +end +a.default = "关闭" +a.datatype = uinteger +a:depends("crontab", "1") + +a = s:taboption("crontab", ListValue, "regular_time_3", translate("发送时间")) +a.rmempty = true + +a:value("", translate("关闭")) +for t = 0, 23 do +a:value(t, translate("每天"..t.."点")) +end +a.default = "关闭" +a.datatype = uinteger +a:depends("crontab", "1") + +a = s:taboption("crontab", ListValue, "interval_time", translate("发送间隔")) +a.rmempty = true +for t = 1, 23 do +a:value(t, translate(t.."小时")) +end +a.default = 6 +a.datatype = uinteger +a:depends("crontab", "2") +a.description = translate("
从 00:00 开始,每 * 小时发送一次") + +a = s:taboption("crontab", Value, "send_title", translate("微信推送标题")) +a:depends("crontab", "1") +a:depends("crontab", "2") +a.placeholder = "OpenWrt By tty228 路由状态:" +a.description = translate("
使用特殊符号可能会造成发送失败") + +a = s:taboption("crontab", Flag, "router_status", translate("系统运行情况")) +a.default = 1 +a:depends("crontab", "1") +a:depends("crontab", "2") + +a = s:taboption("crontab", Flag, "router_temp", translate("设备温度")) +a.default = 1 +a:depends("crontab", "1") +a:depends("crontab", "2") + +a = s:taboption("crontab", Flag, "router_wan", translate("WAN信息")) +a.default = 1 +a:depends("crontab", "1") +a:depends("crontab", "2") + +a = s:taboption("crontab", Flag, "client_list", translate("客户端列表")) +a.default = 1 +a:depends("crontab", "1") +a:depends("crontab", "2") + +e = s:taboption("crontab", Button, "_add", translate("手动发送")) +e.inputtitle = translate("发送") +e:depends("crontab", "1") +e:depends("crontab", "2") +e.inputstyle = "apply" +function e.write(self, section) +luci.sys.call("cbi.apply") + luci.sys.call("/usr/share/serverchan/serverchan send &") +end + +-- 免打扰 +a = s:taboption("disturb", ListValue, "serverchan_sheep", translate("免打扰时段设置"), translate("在指定整点时间段内,暂停推送消息
免打扰时间中,定时推送也会被阻止。")) +a.rmempty = true +a:value("", translate("关闭")) +a:value("1", translate("模式一:脚本挂起")) +a:value("2", translate("模式二:静默模式")) +a.description = translate("模式一停止一切检测,包括无人值守。") + +a = s:taboption("disturb", ListValue, "starttime", translate("免打扰开始时间")) +a.rmempty = true + +for t = 0, 23 do +a:value(t, translate("每天"..t.."点")) +end +a.default = 0 +a.datatype = uinteger +a:depends({serverchan_sheep = "1"}) +a:depends({serverchan_sheep = "2"}) + +a = s:taboption("disturb", ListValue, "endtime", translate("免打扰结束时间")) +a.rmempty = true + +for t = 0, 23 do +a:value(t, translate("每天"..t.."点")) +end +a.default = 8 +a.datatype = uinteger +a:depends({serverchan_sheep = "1"}) +a:depends({serverchan_sheep = "2"}) + +a = s:taboption("disturb", ListValue, "macmechanism", translate("MAC过滤")) +a:value("", translate("disable")) +a:value("allow", translate("忽略列表内设备")) +a:value("block", translate("仅通知列表内设备")) +a:value("interface", translate("仅通知此接口设备")) +a.rmempty = true + +a = s:taboption("disturb", DynamicList, "serverchan_whitelist", translate("忽略列表")) +nt.mac_hints(function(mac, name) a :value(mac, "%s (%s)" %{ mac, name }) end) +a.rmempty = true +a:depends({macmechanism = "allow"}) +a.description = translate("AA:AA:AA:AA:AA:AA\\|BB:BB:BB:BB:BB:B 可以将多个 MAC 视为同一用户
任一设备在线后不再推送,设备全部离线时才会推送,避免双 wifi 频繁推送") + +a = s:taboption("disturb", DynamicList, "serverchan_blacklist", translate("关注列表")) +nt.mac_hints(function(mac, name) a:value(mac, "%s (%s)" %{ mac, name }) end) +a.rmempty = true +a:depends({macmechanism = "block"}) +a.description = translate("AA:AA:AA:AA:AA:AA\\|BB:BB:BB:BB:BB:B 可以将多个 MAC 视为同一用户
任一设备在线后不再推送,设备全部离线时才会推送,避免双 wifi 频繁推送") + +a = s:taboption("disturb", ListValue, "serverchan_interface", translate("接口名称")) +a:depends({macmechanism = "interface"}) +a.rmempty = true + +for _, iface in ipairs(ifaces) do + if not (iface == "lo" or iface:match("^ifb.*")) then + local nets = net:get_interface(iface) + nets = nets and nets:get_networks() or {} + for k, v in pairs(nets) do + nets[k] = nets[k].sid + end + nets = table.concat(nets, ",") + a:value(iface, ((#nets > 0) and "%s (%s)" % {iface, nets} or iface)) + end +end + +a = s:taboption("disturb", ListValue, "macmechanism2", translate("MAC过滤2")) +a:value("", translate("disable")) +a:value("MAC_online", translate("列表内任意设备在线时免打扰")) +a:value("MAC_offline", translate("列表内设备都离线后免打扰")) +a.rmempty = true + +a = s:taboption("disturb", DynamicList, "MAC_online_list", translate("在线免打扰列表")) +nt.mac_hints(function(mac, name) a:value(mac, "%s (%s)" %{ mac, name }) end) +a.rmempty = true +a:depends({macmechanism2 = "MAC_online"}) + +a = s:taboption("disturb", DynamicList, "MAC_offline_list", translate("任意离线免打扰列表")) +nt.mac_hints(function(mac, name) a:value(mac, "%s (%s)" %{ mac, name }) end) +a.rmempty = true +a:depends({macmechanism2 = "MAC_offline"}) + +return m diff --git a/luci-app-wechatpush/luasrc/view/serverchan/serverchan_log.htm b/luci-app-wechatpush/luasrc/view/serverchan/serverchan_log.htm new file mode 100644 index 00000000..56fe70d6 --- /dev/null +++ b/luci-app-wechatpush/luasrc/view/serverchan/serverchan_log.htm @@ -0,0 +1,33 @@ +<% +local dsp = require "luci.dispatcher" +-%> + + +

+ <%:自动刷新%> + + +
diff --git a/luci-app-wechatpush/luasrc/view/serverchan/serverchan_status.htm b/luci-app-wechatpush/luasrc/view/serverchan/serverchan_status.htm new file mode 100644 index 00000000..e36561dd --- /dev/null +++ b/luci-app-wechatpush/luasrc/view/serverchan/serverchan_status.htm @@ -0,0 +1,22 @@ + + +
+

+ <%:Collecting data...%> +

+
diff --git a/luci-app-wechatpush/root/etc/config/serverchan b/luci-app-wechatpush/root/etc/config/serverchan new file mode 100644 index 00000000..82001daa --- /dev/null +++ b/luci-app-wechatpush/root/etc/config/serverchan @@ -0,0 +1,11 @@ + +config serverchan 'serverchan' + option serverchan_enable '0' + option sleeptime '60' + option serverchan_ipv6 '0' + option serverchan_up '1' + option serverchan_down '1' + option cpuload_enable '1' + option cpuload '2' + option temperature_enable '0' + diff --git a/luci-app-wechatpush/root/etc/init.d/serverchan b/luci-app-wechatpush/root/etc/init.d/serverchan new file mode 100755 index 00000000..fca7dc2a --- /dev/null +++ b/luci-app-wechatpush/root/etc/init.d/serverchan @@ -0,0 +1,26 @@ +#!/bin/sh /etc/rc.common + +START=99 +STOP=10 + +start() { + state=`pgrep -f "/usr/share/serverchan/serverchan"` + if [ ! -z "$state" ]; then + restart + else + /usr/share/serverchan/serverchan & + fi + echo "serverchan is starting now ..." +} + +stop() { + kill -9 `pgrep -f "/usr/share/serverchan/serverchan"` 2>/dev/null + echo "serverchan exit ..." +} + +restart(){ + stop + sleep 1 + start + echo "restarted." +} diff --git a/luci-app-wechatpush/root/etc/uci-defaults/luci-serverchan b/luci-app-wechatpush/root/etc/uci-defaults/luci-serverchan new file mode 100755 index 00000000..4b4c9d43 --- /dev/null +++ b/luci-app-wechatpush/root/etc/uci-defaults/luci-serverchan @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@serverchan[-1] + add ucitrack serverchan + set ucitrack.@serverchan[-1].init=serverchan + commit ucitrack +EOF + +rm -rf /tmp/luci-* +exit 0 \ No newline at end of file diff --git a/luci-app-wechatpush/root/usr/share/rpcd/acl.d/luci-app-serverchan.json b/luci-app-wechatpush/root/usr/share/rpcd/acl.d/luci-app-serverchan.json new file mode 100644 index 00000000..8f1e66f1 --- /dev/null +++ b/luci-app-wechatpush/root/usr/share/rpcd/acl.d/luci-app-serverchan.json @@ -0,0 +1,11 @@ +{ + "luci-app-serverchan": { + "description": "Grant UCI access for luci-app-serverchan", + "read": { + "uci": [ "serverchan" ] + }, + "write": { + "uci": [ "serverchan" ] + } + } +} diff --git a/luci-app-wechatpush/root/usr/share/serverchan/api/diy.json b/luci-app-wechatpush/root/usr/share/serverchan/api/diy.json new file mode 100644 index 00000000..8839f6d2 --- /dev/null +++ b/luci-app-wechatpush/root/usr/share/serverchan/api/diy.json @@ -0,0 +1,42 @@ +{ + "_//": "-------------------------------------------------------------------------------", + "_readme": "这是 自定义 api 文件,这里以 telegram 为例", + "_readme": "特殊符号请使用斜杠转义,变量使用 ${var} 表示", + "_//": "-------------------------------------------------------------------------------", + "_api": "【DIY 推送】", + "_url": "api 地址", + "_data": "生成的 json 文件路径,一般不需要改,如 api 不支持 json,请参考 serverchan 推送接口", + "_content_type": "post 内容类型,这里为 json", + "_//": "-------------------------------------------------------------------------------", + "_str_title_start": "标题粗体字开始符号", + "_str_title_end": "标题粗体字结束符号", + "_str_linefeed": "换行符号", + "_str_splitline": "换行+分隔符", + "_str_space": "空格", + "_str_tab": "TAB(用在行首,生成文字区块)", + "_//": "-------------------------------------------------------------------------------", + "_type": + { + "_readme": "下文中,text 为 telegram 推送需要的键值名称,参见 telegram 官方文档,后面的内容为生成标题所需要的字符串和变量,${1} 为标题内容变量,${nowtime} 为推送时间,${2} 为推送内容变量", + "_readme": "下文中,chat_id 为 telegram 推送需要的键值名称,参见 telegram 官方文档,${chat_id} 为从脚本配置中读取名为 chat_id 的变量,其实就是你填写的机器人的 chat_id ", + "_readme": "type 对象因为需要转义变量,前后必须使用 斜杠+双引号 转义", + "_readme": "参照上文说明,填写下文相关参数" + }, + "_//": "-------------------------------------------------------------------------------", + + "url": "https://api.telegram.org/bot${tg_token}/sendMessage", + "data": "@${tempjsonpath}", + "content_type": "Content-Type: application/json", + "str_title_start": "", + "str_title_end": "", + "str_linefeed": "\\n", + "str_splitline": "\\n----\\n", + "str_space": " ", + "str_tab": " ", + "type": + { + "text":"\"${str_title_start}${1}${str_title_end}${str_splitline}${nowtime}${2}\"", + "chat_id":"\"${chat_id}\"", + "parse_mode":"\"HTML\"" + } +} diff --git a/luci-app-wechatpush/root/usr/share/serverchan/api/ip_blacklist b/luci-app-wechatpush/root/usr/share/serverchan/api/ip_blacklist new file mode 100644 index 00000000..e69de29b diff --git a/luci-app-wechatpush/root/usr/share/serverchan/api/ipv4.list b/luci-app-wechatpush/root/usr/share/serverchan/api/ipv4.list new file mode 100644 index 00000000..2da5af84 --- /dev/null +++ b/luci-app-wechatpush/root/usr/share/serverchan/api/ipv4.list @@ -0,0 +1,8 @@ +cip.cc +ddns.oray.com/checkip +www.net.cn/static/customercare/yourip.asp +myip.ipip.net/s +ip.3322.net +ip.threep.top +10086.cn/web-Center/commonservice/getUserIp.do --referer http://10086.cn -XPOST +https://www.taobao.com/help/getip.php -H 'authority: www.taobao.com' \ No newline at end of file diff --git a/luci-app-wechatpush/root/usr/share/serverchan/api/ipv6.list b/luci-app-wechatpush/root/usr/share/serverchan/api/ipv6.list new file mode 100644 index 00000000..70cf0b0c --- /dev/null +++ b/luci-app-wechatpush/root/usr/share/serverchan/api/ipv6.list @@ -0,0 +1,5 @@ +ipv6.ddnspod.com +speed.neu6.edu.cn/getIP.php +6.ipw.cn +10086.cn/web-Center/commonservice/getUserIp.do --referer http://10086.cn -XPOST +https://www.taobao.com/help/getip.php -H 'authority: www.taobao.com' \ No newline at end of file diff --git a/luci-app-wechatpush/root/usr/share/serverchan/api/logo.jpg b/luci-app-wechatpush/root/usr/share/serverchan/api/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a89fa5cc291f3834ef76eb1e33c814ddabca6e14 GIT binary patch literal 33685 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

HCLuD)v~ZL!KsVcG~Iw$offG#-N6MWfLp#h1h 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 ", + "type": + { + "touser": "\"${userid}\"", + "msgtype": "\"markdown\"", + "agentid": "\"${agentid}\"", + "markdown": { + "content": "\"${1}${str_linefeed}${nowtime}${2}\"" + } + } +} diff --git a/luci-app-wechatpush/root/usr/share/serverchan/api/qywx_mpnews.json b/luci-app-wechatpush/root/usr/share/serverchan/api/qywx_mpnews.json new file mode 100644 index 00000000..258b7db7 --- /dev/null +++ b/luci-app-wechatpush/root/usr/share/serverchan/api/qywx_mpnews.json @@ -0,0 +1,33 @@ +{ + "_api": "这是企业微信图文信息 api 文件", + "_api": "【企业微信】", + + "url": "\"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$(curl -s \"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corpid}&corpsecret=${corpsecret}\"|jq '.access_token'|sed 's/\"//g')\"", + "data": "@${tempjsonpath}", + "content_type": "Content-Type: application/json", + "str_title_start": "

", + "str_title_end": "

", + "str_linefeed": "\\n", + "str_splitline": "
", + "str_space": " ", + "str_tab": "
  • ", + "type": + { + "touser": "\"${userid}\"", + "msgtype": "\"mpnews\"", + "agentid": "\"${agentid}\"", + "mpnews":{ + "articles":[ + { + "title": "\"${nowtime}${str_linefeed}${1}\"", + "thumb_media_id": "\"`curl \"https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=$(curl -s \"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corpid}&corpsecret=${corpsecret}\"|jq '.access_token'|sed 's/\"//g')&type=image\" -F \"file=@${mediapath}\"|jq '.media_id'|sed 's/\"//g'`\"", + "author": "\"\"", + "content_source_url": "\"\"", + "content": "\"${2}\"", + "digest": "\"\"" + } + ] + }, + "safe":0 + } +} diff --git a/luci-app-wechatpush/root/usr/share/serverchan/api/serverchan.json b/luci-app-wechatpush/root/usr/share/serverchan/api/serverchan.json new file mode 100644 index 00000000..a0a8245e --- /dev/null +++ b/luci-app-wechatpush/root/usr/share/serverchan/api/serverchan.json @@ -0,0 +1,17 @@ +{ + "_api": "这是 serverchan api 文件", + "_api": "【serverchan】", + + "url": "\"https://sctapi.ftqq.com/${sckey}.send\"", + "data": "\"text=${1}&desp=${nowtime}${str_linefeed}${2}\"", + "content_type": "Content-Type:application/x-www-form-urlencoded", + "str_title_start": "#### ", + "str_title_end": "", + "str_linefeed": "%0D%0A%0D%0A", + "str_splitline": "%0D%0A%0D%0A----%0D%0A%0D%0A", + "str_space": " ", + "str_tab": " ", + "type": + { + } +} diff --git a/luci-app-wechatpush/root/usr/share/serverchan/api/telegram.json b/luci-app-wechatpush/root/usr/share/serverchan/api/telegram.json new file mode 100644 index 00000000..3638365c --- /dev/null +++ b/luci-app-wechatpush/root/usr/share/serverchan/api/telegram.json @@ -0,0 +1,20 @@ +{ + "_api": "这是 telegram api 文件", + "_api": "【telegram】", + + "url": "https://api.telegram.org/bot${tg_token}/sendMessage", + "data": "@${tempjsonpath}", + "content_type": "Content-Type: application/json", + "str_title_start": "", + "str_title_end": "", + "str_linefeed": "\\n", + "str_splitline": "\\n----\\n", + "str_space": " ", + "str_tab": " ", + "type": + { + "text":"\"${str_title_start}${1}${str_title_end}${str_splitline}${nowtime}${2}\"", + "chat_id":"\"${chat_id}\"", + "parse_mode":"\"HTML\"" + } +} diff --git a/luci-app-wechatpush/root/usr/share/serverchan/api/wxpusher.json b/luci-app-wechatpush/root/usr/share/serverchan/api/wxpusher.json new file mode 100644 index 00000000..20443462 --- /dev/null +++ b/luci-app-wechatpush/root/usr/share/serverchan/api/wxpusher.json @@ -0,0 +1,23 @@ +{ + "_api": "这是 wxpusher api 文件", + "_api": "【wxpusher】", + + "url": "http://wxpusher.zjiecode.com/api/send/message", + "data": "@${tempjsonpath}", + "content_type": "Content-Type: application/json", + "str_title_start": "#### ", + "str_title_end": "", + "str_linefeed": "\\n", + "str_splitline": "\\n----\\n", + "str_space": " ", + "str_tab": " ", + "type": + { + "summary":"\"${1}\"", + "content":"\"${2}\"", + "appToken":"\"${wxpusher_apptoken}\"", + "topicIds":"[\"${wxpusher_topicIds}\"]", + "uids":"[\"${wxpusher_uids}\"]", + "contentType":3 + } +} diff --git a/luci-app-wechatpush/root/usr/share/serverchan/serverchan b/luci-app-wechatpush/root/usr/share/serverchan/serverchan new file mode 100755 index 00000000..157f211e --- /dev/null +++ b/luci-app-wechatpush/root/usr/share/serverchan/serverchan @@ -0,0 +1,1436 @@ +#!/bin/sh + +# 读取设置文件 +function get_config(){ + while [[ "$*" != "" ]]; do + eval ${1}='`uci get serverchan.serverchan.$1`' 2>/dev/null + shift + done +} + +# 初始化设置信息 +function read_config(){ + get_config "serverchan_enable" "lite_enable" "device_name" "sleeptime" "oui_data" "oui_dir" "reset_regularly" "debuglevel" "device_aliases" \ + "serverchan_ipv4" "ipv4_interface" "serverchan_ipv6" "ipv6_interface" "serverchan_up" "serverchan_down" "cpuload_enable" "cpuload" "temperature_enable" "temperature" "client_usage" "client_usage_max" "client_usage_disturb" "client_usage_whitelist" "web_logged" "ssh_logged" "web_login_failed" "ssh_login_failed" "login_max_num" "web_login_black" "ip_white_list" "ip_black_timeout" "port_knocking" "ip_white_timeout" "ip_port_white" "port_forward_list" \ + "regular_time" "regular_time_2" "regular_time_3" "interval_time" \ + "serverchan_sheep" "starttime" "endtime" "serverchan_whitelist" "serverchan_blacklist" "serverchan_interface" "MAC_online_list" "MAC_offline_list" \ + "up_timeout" "down_timeout" "timeout_retry_count" "thread_num" "soc_code" "server_host" "server_port" "err_enable" "err_sheep_enable" "err_device_aliases" "network_err_event" "system_time_event" "autoreboot_time" "network_restart_time" "public_ip_event" "public_ip_retry_count" \ + "jsonpath" "sckey" "corpid" "userid" "agentid" "corpsecret" "mediapath" "wxpusher_apptoken" "wxpusher_uids" "wxpusher_topicIds" "pushplus_token" "tg_token" "chat_id" \ + "gateway_info_enable" "gateway_host_url" "gateway_info_url" "gateway_logout_url" "gateway_username_id" "gateway_password_id" "gateway_username" "gateway_password" + + for str_version in "wrtbwmon" "iputils-arping" "curl" "iw"; do + eval `echo ${str_version:0:2}"_version"`=`opkg list-installed|grep -w ^${str_version}|awk '{print $3}'` 2>/dev/null + done + dir="/tmp/serverchan/" && mkdir -p ${dir} && mkdir -p ${dir}/client + tempjsonpath="/tmp/serverchan/temp.json" + ip_blacklist_path="/usr/share/serverchan/api/ip_blacklist" + [ ! -z "$oui_dir" ] && [ "$oui_dir" -eq "1" ] && oui_base="${dir}oui_base.txt" || oui_base="/usr/share/serverchan/oui_base.txt" + debuglevel=`echo "$debuglevel"` && [ -z "$debuglevel" ] && logfile="/dev/null" || logfile="${dir}serverchan.log" + serverchan_blacklist=`echo "$serverchan_blacklist"|sed 's/ /\n/g'` 2>/dev/null + serverchan_whitelist=`echo "$serverchan_whitelist"|sed 's/ /\n/g'` 2>/dev/null + device_aliases=`echo "$device_aliases"|sed 's/ /\n/g'|sed 's/-/ /'` 2>/dev/null + err_device_aliases=`echo "$err_device_aliases"|sed 's/ /\n/g'` 2>/dev/null + client_usage_whitelist=`echo "$client_usage_whitelist"|sed 's/ /\n/g'` 2>/dev/null + ip_white_list=`echo "$ip_white_list"|sed 's/ /\n/g'` 2>/dev/null + mark_mac_list="${MAC_online_list} ${MAC_offline_list}" + mark_mac_list=`echo "$mark_mac_list"|sed 's/ /\n/g'|sed 's/-/ /'` 2>/dev/null + ipv4_urllist=`cat /usr/share/serverchan/api/ipv4.list` 2>/dev/null + ipv6_urllist=`cat /usr/share/serverchan/api/ipv6.list` 2>/dev/null + port_forward_list=`echo "$port_forward_list"|sed 's/ /\n/g'|sed 's/,/ /g'` 2>/dev/null + [ -z "$serverchan_ipv4" ] && serverchan_ipv4=0 + [ -z "$serverchan_ipv6" ] && serverchan_ipv6=0 + [ -z "$sleeptime" ] && sleeptime="60" + [ -z "$ip_black_timeout" ] && ip_black_timeout="86400" + [ -z "$ip_white_timeout" ] && ip_white_timeout="600" + [ "$iw_version" ] && wlan_interface=`iw dev 2>/dev/null|grep Interface|awk '{print $2}'` >/dev/null 2>&1 + [ -z "$up_timeout" ] || [ "$up_timeout" -eq "0" ] && up_timeout="2" + [ -z "$down_timeout" ] || [ "$down_timeout" -eq "0" ] && down_timeout="20";down_timeout=`expr ${down_timeout} / 2 + 1` + [ -z "$timeout_retry_count" ] && timeout_retry_count="2";[ "$timeout_retry_count" -eq "0" ] && timeout_retry_count="1" + [ -z "$server_port" ] && server_port="22" + str_title_start=`jq -r '.str_title_start' ${jsonpath}` + str_title_end=`jq -r '.str_title_end' ${jsonpath}` + str_linefeed=`jq -r '.str_linefeed' ${jsonpath}` + str_splitline=`jq -r '.str_splitline' ${jsonpath}` + str_space=`jq -r '.str_space' ${jsonpath}` + str_tab=`jq -r '.str_tab' ${jsonpath}` + disturb_text=`jq -r '._api' ${jsonpath}` + ( echo "$lite_enable"|grep -q "content" ) && str_title_start="" && str_title_end="" && str_splitline="" && str_linefeed="" && str_tab="" +} + +# 初始化 +function serverchan_init(){ + enable_detection + if [ -f "/usr/share/serverchan/errlog" ]; then + cat /usr/share/serverchan/errlog > ${logfile} + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】载入上次重启前日志" >> ${logfile} + echo "--------------------------------------------------------" >> ${logfile} + fi + down_oui & + get_syslog + set_ip_black + + rm -f ${dir}fd1 ${dir}sheep_usage ${dir}old_sheep_usage ${dir}client_usage_aliases ${dir}old_client_usage_aliases /usr/share/serverchan/errlog >/dev/null 2>&1 + [ ! -f "/usr/sbin/wrtbwmon" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】未安装 wrtbwmon ,流量统计不可用" >> ${logfile} + [ -z "$ip_version" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法获取依赖项 iputils-arping 版本号,请确认插件是否正常运行" >> ${logfile} + [ -z "$cu_version" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法获取依赖项 curl 版本号,请确认插件是否正常运行" >> ${logfile} + [ -z "${sckey}${tg_token}${pushplus_token}${corpid}${wxpusher_apptoken}${wxpusher_uids}${wxpusher_topicIds}" -a "${jsonpath}" != "/usr/share/serverchan/api/diy.json" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】请填写正确的 key " >> ${logfile} && return 1 + local interfacelist=`getinterfacelist` && [ -z "$interfacelist" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法获取接口在线时间等信息,可能存在多个接口或配置错误,请确认插件是否正常运行" >> ${logfile} + return 0 +} + +# 推送 +function diy_send(){ + ( ! echo "$lite_enable"|grep -q "content" ) && ( ! echo "$lite_enable"|grep -q "nowtime" ) && local nowtime=`date "+%Y-%m-%d %H:%M:%S"` + ! jq -r '.' ${3} >/dev/null 2>&1 && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】json 文件格式错误,这不是一个标准的 json 文件,请检查 ${3} 文件是否有特殊符号未转义或语法错误" >> ${logfile} && return 1 + local diyurl=`jq -r .url ${3}` && local diyurl=`eval echo ${diyurl}` + local type=`jq -r '.type' ${3}` && local type=`eval echo ${type}` + local data=`jq -r '.data' ${3}` && local data=`eval echo ${data}` + local content_type=`jq -r '.content_type' ${3}` + ! jq "$type" ${3} > ${tempjsonpath} && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】type:{ } 字段转义变量后格式错误,请检查 type:{ } 字段内是否有特殊符号未转义或语法错误" >> ${logfile} && return 1 + + [ $4 ] && echo '{"url":"'${diyurl}'","content_type":"'${content_type}'","type":'`jq "$type" ${3}`'}' > ${dir}debug_send_json + [ $4 ] && echo -e "${send_title}" "${send_content}" > ${dir}debug_send_content + [ $4 ] && cat ${tempjsonpath} > ${dir}debug_send_data + [ $4 ] && ! jq -r '.' ${dir}debug_send_json && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】转义变量后格式错误,请检查 ${dir}debug_send_json 字段内是否有特殊符号未转义或语法错误" >> ${logfile} + [ $4 ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【debug】json 文件已保存至:${dir}debug_send_json" >> ${logfile} + [ $4 ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【debug】推送内容预览文件保存至:${dir}debug_send_content" >> ${logfile} + [ $4 ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【debug】如果收不到信息,请检查 ${dir}debug_send_data 文件,或使用下列命令手动测试返回值 (可能需要关闭日志自动刷新方便选中)" >> ${logfile} + [ $4 ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【debug】"'curl -X POST -H "'$content_type'" -d "@'${dir}debug_send_data'" "'${diyurl}'" ' >> ${logfile} + + curl -X POST -H "$content_type" -d "$data" "${diyurl}" + [ $? -ne "0" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】网络错误或 URL 错误,推送失败,curl 返回值为 ${tmp_value}" >> ${logfile} && return 1 || return 0 +} + +# 下载设备MAC厂商信息 +function down_oui(){ + [ -f ${oui_base} ] && local logrow=$(grep -c "" ${oui_base}) || local logrow="0" + [ $logrow -lt "10" ] && rm -f ${oui_base} >/dev/null 2>&1 + if [ ! -z "$oui_data" ] && [ "$oui_data" -ne "3" ] && [ ! -f ${oui_base} ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】设备MAC厂商信息不存在,重新下载" >> ${logfile} + wget --no-check-certificate -t 3 -T 15 -O ${dir}oui.txt https://standards-oui.ieee.org/oui/oui.txt >/dev/null 2>&1 + if [ -f ${dir}oui.txt ] && [ "$oui_data" -eq "1" ]; then + cat ${dir}oui.txt|grep "base 16"|grep -i "apple\|aruba\|asus\|autelan\|belkin\|bhu\|buffalo\|cctf\|cisco\|comba\|datang\|dell\|dlink\|dowell\|ericsson\|fast\|feixun\|\ +fiberhome\|fujitsu\|grentech\|h3c\|hisense\|hiwifi\|honghai\|honghao\|hp\|htc\|huawei\|intel\|jinli\|jse\|lenovo\|lg\|liteon\|malata\|meizu\|mercury\|meru\|moto\|netcore\|\ +netgear\|nokia\|omron\|oneplus\|oppo\|philips\|router_unkown\|samsung\|shanzhai\|sony\|start_net\|sunyuanda\|tcl\|tenda\|texas\|tianyu\|tp-link\|ubq\|undefine\|VMware\|\ +utstarcom\|volans\|xerox\|xiaomi\|zdc\|zhongxing\|smartisan" > ${oui_base} && echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】设备MAC厂商信息下载成功" >> ${logfile} || echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】设备MAC厂商信息下载失败" >> ${logfile} + fi + if [ -f ${dir}oui.txt ] && [ "$oui_data" -eq "2" ]; then + cat ${dir}oui.txt|grep "base 16" > ${oui_base} && echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】设备MAC厂商信息下载成功" >> ${logfile} || echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】设备MAC厂商信息下载失败" >> ${logfile} + fi + rm -f ${dir}oui.txt >/dev/null 2>&1 + fi +} + +# 清理临时文件 +function deltemp(){ + unset title content ipAddress_logrow online_list online_mac mac_online_status gatewayinfo gateway_iplist + rm -f ${dir}title ${dir}content ${dir}tmp_downlist ${dir}send_enable.lock ${tempjsonpath} ${dir}cookies.txt >/dev/null 2>&1 + [ ! -f ${dir}ipAddress ] && rm -f ${dir}client/* >/dev/null 2>&1 + LockFile unlock + [ -f ${logfile} ] && local logrow=$(grep -c "" ${logfile}) || local logrow="0" + [ $logrow -gt 500 ] && sed -i '1,100d' ${logfile} && echo "`date "+%Y-%m-%d %H:%M:%S"` 【清理】日志超出上限,删除前 100 条" >> ${logfile} +} + +# 检测程序开关 +function enable_detection(){ + [ ! "$1" ] && local time_n=1 + for i in `seq 1 $time_n`; do + get_config serverchan_enable;[ -z "$serverchan_enable" ] || [ "$serverchan_enable" -eq "0" ] && `/etc/init.d/serverchan stop` || sleep 1 + done +} + +# 获取 ip +function getip(){ + [ ! "$1" ] && return + + # 从接口获取 IPv4 + if [ $1 == "wanipv4" ] ;then + [ ! -z "$ipv4_interface" ] && local wanIP=$(/sbin/ifconfig ${ipv4_interface}|awk '/inet addr/ {print $2}'|awk -F: '{print $2}'|grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') + [ -z "$ipv4_interface" ] && local wanIP=$(getinterfacelist|grep '\"address\"'|grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') + echo "$wanIP" + + # 从 URL 获取 IPv4 + elif [ $1 == "hostipv4" ] ;then + local url_number=`echo "$ipv4_urllist"|wc -l` + local rand_number=`rand 1 $url_number` + function get_hostipv4() + { + local ipv4_URL=`echo "$ipv4_urllist"| sed -n "${1}p"|sed -e 's/\r//g'` + [ ! -z "$ipv4_interface" ] && local tmp_hostIP=$(curl -k -s -4 --interface ${ipv4_interface} -m 5 ${ipv4_URL}) || local tmp_hostIP=$(curl -k -s -4 -m 5 ${ipv4_URL}) + [ -z "$tmp_hostIP" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】IP 获取失败,当前使用的 API 为 $ipv4_URL" >> ${logfile} + echo $tmp_hostIP|grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|head -n1 + } + local hostIP=`get_hostipv4 ${rand_number}` + [ -z $hostIP ] && local rand_number=`expr $rand_number + 1` && [ $rand_number -gt $url_number ] && local rand_number=1;[ -z $hostIP ] && local hostIP=`get_hostipv4 ${rand_number}` + [ -z $hostIP ] && local rand_number=`expr $rand_number + 1` && [ $rand_number -gt $url_number ] && local rand_number=1;[ -z $hostIP ] && local hostIP=`get_hostipv4 ${rand_number}` + [ -z $hostIP ] && [ `expr $(date +%s) - $(date -r /usr/share/serverchan/api/ipv4.list +%s)` -gt "86400" ] && wget --no-check-certificate -t 3 -T 15 -O /usr/share/serverchan/api/ipv4.list https://raw.githubusercontent.com/tty228/luci-app-serverchan/master/root/usr/share/serverchan/api/ipv4.list >/dev/null 2>&1 && ipv4_urllist=`cat /usr/share/serverchan/api/ipv4.list` 2>/dev/null && echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】多次获取 IP 失败,重新同步 API 列表" >> ${logfile} + [ ! -z $hostIP ] && echo $hostIP + + # 从接口获取 IPv6 + elif [ $1 == "wanipv6" ] ;then + [ ! -z "$ipv6_interface" ] && local wanIPv6=$(ip addr show ${ipv6_interface}|grep -v deprecated|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|sort -nr|head -n1|awk '{print $2}') + [ -z "$ipv6_interface" ] && local wanIPv6=$(ip addr show|grep -v deprecated|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|sort -nr|head -n1|awk '{print $2}') + echo "$wanIPv6" + + # 从 URL 获取 IPv6 + elif [ $1 == "hostipv6" ] ;then + local urlv6_number=`echo "$ipv6_urllist"|wc -l` + local rand_numberv6=`rand 1 $urlv6_number` + function get_hostipv6() + { + local ipv6_URL=`echo "$ipv6_urllist"| sed -n "${1}p"|sed -e 's/\r//g'` + [ ! -z "$ipv6_interface" ] && local tmp_hostIPv6=$(curl -k -s -6 --interface ${ipv6_interface} -m 5 ${ipv6_URL}) || local tmp_hostIPv6=$(curl -k -s -6 -m 5 ${ipv6_URL}) + [ -z "$tmp_hostIPv6" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】IP 获取失败,当前使用的 API 为 $ipv6_URL" >> ${logfile} + echo $tmp_hostIPv6|grep -oE "([\da-fA-F0-9]{1,4}(:{1,2})){1,15}[\da-fA-F0-9]{1,4}"|head -n1 + } + local hostIPv6=`get_hostipv6 ${rand_numberv6}` + [ -z $hostIPv6 ] && local rand_numberv6=`expr $rand_numberv6 + 1` && [ $rand_numberv6 -gt $urlv6_number ] && local rand_numberv6=1;[ -z $hostIPv6 ] && local hostIPv6=`get_hostipv6 ${rand_numberv6}` + [ -z $hostIPv6 ] && local rand_numberv6=`expr $rand_numberv6 + 1` && [ $rand_numberv6 -gt $urlv6_number ] && local rand_numberv6=1;[ -z $hostIPv6 ] && local hostIPv6=`get_hostipv6 ${rand_numberv6}` + [ -z $hostIPv6 ] && [ `expr $(date +%s) - $(date -r /usr/share/serverchan/api/ipv4.list +%s)` -gt "86400" ] && wget --no-check-certificate -t 3 -T 15 -O /usr/share/serverchan/api/ipv6.list https://raw.githubusercontent.com/tty228/luci-app-serverchan/master/root/usr/share/serverchan/api/ipv6.list >/dev/null 2>&1 && ipv6_urllist=`cat /usr/share/serverchan/api/ipv4.list` 2>/dev/null && echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】多次获取 IP 失败,重新同步 API 列表" >> ${logfile} + [ ! -z $hostIPv6 ] && echo $hostIPv6 + fi +} + +# 获取接口信息 +function getinterfacelist(){ + [ `ubus list|grep -w -i "network.interface.wan"|wc -l` -ge "1" ] && ubus call network.interface.wan status && return + local ubuslist=`ubus list|grep -i "network.interface."|grep -v "loopback"|grep -v -i "wan6"|grep -v -i "lan6"|grep -v -i "ipsec_server*"|grep -v -i "VPN*"|grep -v -i "DOCKER*"` + [ `echo "${ubuslist}" |wc -l` -eq "1" ] && ubus call ${ubuslist} status && return +} + +# 获取接口在线时间 +function getinterfaceuptime(){ + getinterfacelist|grep \"uptime\"|sed $'s/\"uptime": //g'|sed $'s/\,//g' +} + +# 查询 MAC 地址 +function getmac(){ + # 已保存的 MAC + [ -f "${dir}ipAddress" ] && local tmp_mac=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + ( echo "$tmp_mac"|grep -q "unknown" ) && unset tmp_mac # 为unknown时重新读取 + [ -f "${dir}tmp_downlist" ] && [ -z "$tmp_mac" ] && local tmp_mac=`cat ${dir}tmp_downlist|grep -w ${1}|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + # DHCP + ( echo "$tmp_mac"|grep -q "unknown" ) && unset tmp_mac # 为unknown时重新读取 + [ -f "/tmp/dhcp.leases" ] && [ -z "$tmp_mac" ] && local tmp_mac=`cat /tmp/dhcp.leases|grep -w ${1}|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + # arp + [ -z "$tmp_mac" ] && local tmp_mac=`cat /proc/net/arp|grep "0x2\|0x6"|grep -w ${1}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` + + [ -z "$tmp_mac" ] && local tmp_mac="unknown" + echo $tmp_mac |tr -d '\n\r' +} + +# 查询主机名 +function getname(){ + # 自定义备注 + local tmp_name=`echo "$device_aliases"|grep -i $2|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + [ -f "${dir}ipAddress" ] && [ -z "$tmp_name" ] && local tmp_name=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $3}'|grep -v "^$"|sort -u|head -n1` + # 已保存的 主机名 + ( ! echo "$tmp_name"|grep -q -w "unknown\|*" ) && [ ! -z "$tmp_name" ] && echo "$tmp_name" && return || unset tmp_name # 为unknown时重新读取 + [ -f "${dir}tmp_downlist" ] && [ -z "$tmp_name" ] && local tmp_name=`cat ${dir}tmp_downlist|grep -w ${1}|awk '{print $3}'|grep -v "^$"|sort -u|head -n1` + # 静态地址备注名 + ( ! echo "$tmp_name"|grep -q -w "unknown\|*" ) && [ ! -z "$tmp_name" ] && echo "$tmp_name" && return || unset tmp_name # 为unknown时重新读取 + [ -z "$dhcp_config" ] && dhcp_config=`uci show dhcp|grep "ip\|mac\|name"` + for dhcp_config_str in "host" "domain"; do + [ -z "$dhcp_config_str" ] && break # 退出整个循环 + local dhcp_ip_n=`echo "$dhcp_config"|grep -w ^dhcp.@${dhcp_config_str}.*ip=.${1}|sed -nr 's#^dhcp.(.*).ip.*#\1#gp'` 2>/dev/null + [ ! -z "$dhcp_ip_n" ] && [ -z "$tmp_name" ] && local tmp_name=`uci get dhcp.${dhcp_ip_n}.name` 2>/dev/null + local dhcp_mac_n=`echo "$dhcp_config"|grep -i ^dhcp.@${dhcp_config_str}.*mac=.${2}|sed -nr 's#^dhcp.(.*).mac.*#\1#gp'` 2>/dev/null + [ ! -z "$dhcp_mac_n" ] && [ -z "$tmp_name" ] && local tmp_name=`uci get dhcp.${dhcp_ip_n}.name` 2>/dev/null + [ ! -z "$tmp_name" ] && break + done + # DHCP + ( ! echo "$tmp_name"|grep -q -w "unknown\|*" ) && [ ! -z "$tmp_name" ] && echo "$tmp_name" && return || unset tmp_name # 为unknown时重新读取 + [ -f "/tmp/dhcp.leases" ] && [ -z "$tmp_name" ] && local tmp_name=`cat /tmp/dhcp.leases|grep -w ${1}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` + # 光猫 + ( ! echo "$tmp_name"|grep -q -w "unknown\|*" ) && [ ! -z "$tmp_name" ] && echo "$tmp_name" && return || unset tmp_name # 为unknown时重新读取 + local tmp_name=`echo "$gatewayinfo"|grep -w ${1}|awk '{print $2}'` + # MAC设备信息数据库 + ( ! echo "$tmp_name"|grep -q -w "unknown\|*" ) && [ ! -z "$tmp_name" ] && echo "$tmp_name" && return || unset tmp_name # 为unknown时重新读取 + [ -f "$oui_base" ] && local tmp_name=$(cat $oui_base|grep -i $(echo "$2"|cut -c 1,2,4,5,7,8)|sed -nr 's#^.*16)..(.*)#\1#gp'|sed 's/ /_/g') + [ ! -z "$oui_data" ] && [ "$oui_data" -eq "4" ] && local tmp_name=$(curl -sS "https://standards-oui.ieee.org/oui/oui.txt"|grep -i $(echo "$2"|cut -c 1,2,4,5,7,8)|sed -nr 's#^.*16)..(.*)#\1#gp'|sed 's/ /_/g') + + [ -z "$tmp_name" ] && local tmp_name="unknown" + echo $tmp_name |tr -d '\n\r' +} + +# 从光猫处获取设备信息 +function getgateway(){ + [ -z "$gateway_info_enable" ] || [ "$gateway_info_enable" -ne "1" ] && return + # 登录 + local loginfo=`curl -s -L "${gateway_host_url}" -c ${dir}cookies.txt -d "${gateway_username_id}=${gateway_username}&${gateway_password_id}=${gateway_password}"` 2>/dev/null + [ ! -z "$loginfo" ] && local mytoken=$(echo $loginfo |sed 's/{/\n/g' | grep token |awk '/realRestart/{print $2}'| sed $'s/\'//g') + # 获取 + [ ! -z "$mytoken" ] && local get_gateway=`curl -s -b ${dir}cookies.txt "${gateway_info_url}" -d 'token='$mytoken | jq '.[] | iterables| "\(.ip) \(.devName) \(.model)"'|sed 's/unknown//g'|sed 's/ / /g'|sed 's/ /_/g'|sed 's/_/ /'|sed 's/\"//g'` + # 注销 + [ ! -z "$get_gateway" ] && [ ! -z "$gateway_logout_url" ] && curl -s -b ${dir}cookies.txt "${gateway_logout_url}" -d 'token='$mytoken 2>/dev/null + [ -z "$get_gateway" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】获取光猫信息失败,可能当前用户未注销或设置错误" >> ${logfile} + + echo "$get_gateway" +} + +# 查询设备接口 +function getinterface(){ + [ -z "${1}" ] && return + [ "${1}" == "unknown" ] && return + + [ -f "${dir}ipAddress" ] && local ip_interface=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $5}'|grep -v "^$"|sort -u|head -n1` + [ -f "${dir}tmp_downlist" ] && [ -z "$ip_interface" ] && local ip_interface=`cat ${dir}tmp_downlist|grep -w ${1}|awk '{print $5}'|grep -v "^$"|sort -u|head -n1` + if [ -z "$ip_interface" ] && [ ! -z "$wlan_interface" ]; then + for interface in $wlan_interface; do + local ip_interface=`iw dev $interface station dump 2>/dev/null|grep Station|grep -i -w ${1}|sed -nr 's#^.*on (.*))#\1#gp'` >/dev/null 2>&1 + [ ! -z "$ip_interface" ] && echo "$ip_interface" && return + done + fi + [ -z "$ip_interface" ] && local ip_interface=`cat /proc/net/arp|grep "0x2\|0x6"|grep -i -w ${1}|awk '{print $6}'|grep -v "^$"|sort -u|head -n1` + echo $ip_interface |tr -d '\n\r' +} + +# ping +function getping(){ + local ip_interface=`getinterface ${2}` + [ "$iw_version" ] && [ "$ip_interface" ] && local wlan_online=`iw dev ${ip_interface} station dump 2>/dev/null|grep -i -w ${2}|grep Station` >/dev/null 2>&1 + [ "$wlan_online" ] && return 0 + for i in `seq 1 ${4}`; do + ( ! echo "$ip_ms"|grep -q "ms" ) && local interface=`cat /proc/net/arp|grep -w ${1}|awk '{print $6}'|grep -v "^$"|sort -u|head -n1` && [ ! -z "$interface" ] && local ip_ms=`arping -I ${interface} -c 20 -f -w ${3} ${1}` 2>/dev/null + ( ! echo "$ip_ms"|grep -q "ms" ) && local ip_ms=`ping -c 5 -w ${3} ${1}|grep -v '100% packet loss'` 2>/dev/null + ( ! echo "$ip_ms"|grep -q "ms" ) && sleep 1 + done + ( echo "$ip_ms"|grep -q "ms" ) +} + +# CPU 占用率 +function getcpu(){ + local AT=$(cat /proc/stat|grep "^cpu "|awk '{print $2+$3+$4+$5+$6+$7+$8 " " $2+$3+$4+$7+$8}') + sleep 3 + local BT=$(cat /proc/stat|grep "^cpu "|awk '{print $2+$3+$4+$5+$6+$7+$8 " " $2+$3+$4+$7+$8}') + printf "%.01f%%" $(echo ${AT} ${BT}|awk '{print (($4-$2)/($3-$1))*100}') +} + +# 获取SOC温度 (取所有传感器温度最大值) +function soc_temp(){ + # Intel + [ -z "$soc_code" ] && local soctemp=`sensors -j 2>/dev/null|jq -r '."coretemp-isa-0000"."Package id 0"."temp1_input"'` + # AMD + [ -z "$soc_code" ] && [ -z "$soctemp" ] || [ "$soctemp" == "null" ] && local soctemp=`sensors -j 2>/dev/null|jq '."k10temp-pci-00c3"."Tctl"."temp1_input"'` + [ -z "$soc_code" ] && [ -z "$soctemp" ] || [ "$soctemp" == "null" ] && local soctemp=`sensors -j 2>/dev/null|jq '."zenpower-pci-00c3"."Tctl"."temp1_input"'` + + # 通用(只能取最高温度,不一定是 CPU,特殊设备自行修改) + # 将 grep °C 改为温度所在行的特别字符串,如 grep Core 0 等,就可以指定设备了 + [ -z "$soc_code" ] && [ -z "$soctemp" ] || [ "$soctemp" == "null" ] && local soctemp=`sensors 2>/dev/null|grep °C|sed -nr 's#^.*:.*\+(.*)°C .*#\1#gp'|sort -nr|head -n1` + # 将 thermal_zone* 改为 thermal_zone0 thermal_zone1 等,就可以指定设备了 + [ -z "$soc_code" ] && [ -z "$soctemp" ] || [ "$soctemp" == "null" ] && local soctemp=`cat /sys/class/thermal/thermal_zone*/temp 2>/dev/null|sort -nr|head -n1|cut -c-2` + + # Intel + [ "$soc_code" == "pve" ] && [ ! -z "$server_host" ] || [ "$soctemp" == "null" ] && local soctemp=`ssh -i /root/.ssh/id_rsa root@${server_host} -p ${server_port} sensors -j 2>/dev/null|jq -r '."coretemp-isa-0000"."Package id 0"."temp1_input"'` + # AMD + [ "$soc_code" == "pve" ] && [ ! -z "$server_host" ] && [ -z "$soctemp" ] || [ "$soctemp" == "null" ] && local soctemp=`ssh -i /root/.ssh/id_rsa root@${server_host} -p ${server_port} sensors -j 2>/dev/null|jq '."k10temp-pci-00c3"."Tctl"."temp1_input"'` + [ "$soc_code" == "pve" ] && [ ! -z "$server_host" ] && [ -z "$soctemp" ] || [ "$soctemp" == "null" ] && local soctemp=`ssh -i /root/.ssh/id_rsa root@${server_host} -p ${server_port} sensors -j 2>/dev/null|jq '."zenpower-pci-00c3"."Tctl"."temp1_input"'` + # PVE 应该没啥特殊设备了,懒得写了 + + [ ! -z "$soctemp" ] && echo "$soctemp" && return + [ ! -z "$soc_code" ] && eval `echo "$soc_code"` 2>/dev/null +} + +# 流量数据 +function usage(){ + [ ! -f "/usr/sbin/wrtbwmon" ] || [ ! "$1" ] && return + # 更新 + if [ $1 == "update" ] ;then + function version_le() { test "$(echo "$@"|tr " " "\n"|sort -n|head -n 1)" == "$1"; } + function version_ge() { test "$(echo "$@"|tr " " "\n"|sort -r|head -n 1)" == "$1"; } + [ ! -z "$wr_version" ] && ( version_ge "${wr_version}" "1.2.0" ) && wrtbwmon -f ${dir}usage.db 2>/dev/null && return + [ ! -z "$wr_version" ] && ( version_le "${wr_version}" "1.0.0" ) || [ -z "$wr_version" ] && wrtbwmon update ${dir}usage.db 2>/dev/null && return + # 获取 + elif [ $1 == "get" ] ;then + [ ! -f "${dir}usage.db" ] && [ ! "$3" ] && echo `bytes_for_humans 0` && return + [ ! -f "${dir}usage.db" ] && [ "$3" ] && echo 0 && return + [ -z "$total_n" ] && total_n=`cat ${dir}usage.db|head -n1|grep "total"|sed 's/,/\n/g'|awk '/total/{print NR}'` 2>/dev/null + [ -z "$total_n" ] && total_n="6" + [ "$2" ] && local tmptotal=`cat ${dir}usage.db|sed 's/,,,/,0,0,/g'|sed 's/,,/,0,/g'|sed 's/,/ /g'|grep -i -w ${2}|awk "{print "'$'$total_n"}"|grep -v "^$"|sort -u|head -n1` 2>/dev/null + [ -z "$tmptotal" ] && local tmptotal="0" + [ ! "$3" ] && echo `bytes_for_humans ${tmptotal}` || echo $tmptotal + # 剔除 + elif [ $1 == "down" ] ;then + [ "$2" ] && sed -i "/,${2},/d" ${dir}usage.db 2>/dev/null + fi +} + +# 流量数据单位换算 +function bytes_for_humans { + [ ! "$1" ] && return + [ "$1" -gt 1073741824 ] && echo "`awk 'BEGIN{printf "%.2f\n",'$1'/'1073741824'}'` GB" && return + [ "$1" -gt 1048576 ] && echo "`awk 'BEGIN{printf "%.2f\n",'$1'/'1048576'}'` MB" && return + [ "$1" -gt 1024 ] && echo "`awk 'BEGIN{printf "%.2f\n",'$1'/'1024'}'` KB" && return + echo "${1} bytes" +} + +# 设备异常流量检测 +function get_client_usage(){ + [ -z "$client_usage" ] && return + [ "$client_usage" -ne "1" ] && return + [ -z "$client_usage_max" ] && return + + [ -z "$get_client_usage_time" ] && get_client_usage_time=`date +%s` + ( echo $client_usage_max|sed -r 's/.*(.)$/\1/'|grep -q "K\|k" ) && client_usage_max=`expr ${client_usage_max%?} \* 1024` + ( echo $client_usage_max|sed -r 's/.*(.)$/\1/'|grep -q "M\|m" ) && client_usage_max=`expr ${client_usage_max%?} \* 1048576` + ( echo $client_usage_max|sed -r 's/.*(.)$/\1/'|grep -q "G\|g" ) && client_usage_max=`expr ${client_usage_max%?} \* 1073741824` + [ -z "$client_usage_disturb" ] && client_usage_disturb="0" + [ "$client_usage_disturb" -eq "0" ] && [ -f "${dir}ipAddress" ] && local MACLIST=`cat ${dir}ipAddress|awk '{print $2}'|grep -v "^$"|sort -u` + [ "$client_usage_disturb" -eq "1" ] && [ ! -z "$client_usage_whitelist" ] && local MACLIST=`echo "$client_usage_whitelist"` + [ -z "$MACLIST" ] && return + + if [ "$((`date +%s`-$get_client_usage_time))" -ge "60" ]; then + > ${dir}client_usage_aliases + for mac in $MACLIST; do + ( ! cat ${dir}ipAddress|grep -q -i -w $mac|grep -v "^$"|sort -u|head -n1 ) && continue + echo "$mac" `usage get ${mac} bytes` >> ${dir}client_usage_aliases + [ -f "${dir}old_client_usage_aliases" ] && get_client_usage_bytes=`cat ${dir}old_client_usage_aliases|grep -i -w $mac|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` || continue + [ -z "$get_client_usage_bytes" ] && get_client_usage_bytes="0" + if [ "$((`usage get ${mac} bytes`-$get_client_usage_bytes))" -ge "$client_usage_max" ]; then + local ip=`cat ${dir}ipAddress|grep -i -w $mac|awk '{print $1}'|grep -v "^$"|sort -u|head -n1` + local ip_name=`getname ${ip} ${mac}` + local tmp_usage=$(bytes_for_humans $(expr `usage get ${mac} bytes` - ${get_client_usage_bytes})) + local time_up=`cat ${dir}ipAddress|grep -w ${ip}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` + local ip_total=`usage get $mac` && [ ! -z "$ip_total" ] && local ip_total="${str_linefeed}${str_tab}总计流量: ${str_space}${str_space}${str_space}${str_space}${ip_total}" + local time1=`date +%s` + local time1=$(time_for_humans `expr ${time1} - ${time_up}`) + if [ -z "$title" ]; then + title="${ip_name} 流量异常" + content="${content}${str_splitline}${str_title_start} 设备流量异常${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${mac}$ip_total${str_linefeed}${str_tab}一分钟内流量: ${str_space}${str_space}${tmp_usage}${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + elif ( echo "$title"|grep -q "流量异常" ); then + title="${ip_name} ${title}" + content="${content}${str_splitline}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${mac}$ip_total${str_linefeed}${str_tab}一分钟内流量: ${str_space}${str_space}${str_space}${tmp_usage}${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start} 设备流量异常${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${mac}$ip_total${str_linefeed}${str_tab}一分钟内流量: ${str_space}${str_space}${str_space}${tmp_usage}${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + fi + fi + done + cat ${dir}client_usage_aliases > ${dir}old_client_usage_aliases + get_client_usage_time=`date +%s` + fi +} + +# 时间单位换算 +function time_for_humans { + [ ! "$1" ] && return + + if [ "$1" -lt 60 ]; then + echo "${1} 秒" + elif [ "$1" -lt 3600 ]; then + local usetime_min=`expr $1 / 60` + local usetime_sec=`expr $usetime_min \* 60` + local usetime_sec=`expr $1 - $usetime_sec` + echo "${usetime_min} 分 ${usetime_sec} 秒" + elif [ "$1" -lt 86400 ]; then + local usetime_hour=`expr $1 / 3600` + local usetime_min=`expr $usetime_hour \* 3600` + local usetime_min=`expr $1 - $usetime_min` + local usetime_min=`expr $usetime_min / 60` + echo "${usetime_hour} 小时 ${usetime_min} 分" + else + local usetime_day=`expr $1 / 86400` + local usetime_hour=`expr $usetime_day \* 86400` + local usetime_hour=`expr $1 - $usetime_hour` + local usetime_hour=`expr $usetime_hour / 3600` + echo "${usetime_day} 天 ${usetime_hour} 小时" + fi +} + +# 计算字符真实长度 +function length_str { + [ ! "$1" ] && return + + local length_zh=`echo "$1"|awk '{print gensub(/[\u4e00-\u9FA5A-Za-z0-9_]/,"","g",$0)}'|awk -F "" '{print NF}'` + local length_en=`echo "$1"|awk '{print gensub(/[^\u4e00-\u9FA5A-Za-z0-9_]/,"","g",$0)}'|awk -F "" '{print NF}'` + + echo `expr $length_zh / 3 \* 2 + $length_en` +} + +# 截取字符,避免中文乱码 +function cut_str { + [ ! "$1" ] && return + [ ! "$2" ] && return + + [ `length_str $1` -le "$2" ] && echo "$1" && return + local temp_length=$2 + while [ $(length_str `echo "$1"|cut -c -$temp_length`) -lt "$2" ]; do + temp_length=`expr $temp_length + 1` + done + while [ $(printf "%d" \'`echo "$1"|cut -c $temp_length`) -ge "128" ] && [ $(printf "%d" \'`echo "$1"|cut -c $temp_length`) -lt "224" ]; do + temp_length=`expr $temp_length + 1` + done + temp_length=`expr $temp_length - 1` + + echo $(echo "$1"|cut -c -$temp_length)"..." +} + +# 随机数 +function rand(){ + local min=$1 + local max=$(($2- $min + 1)) + local num=$(date +%s%N) + echo $(($num % $max + $min)) +} + +# 在线设备列表 +function serverchan_first(){ + [ -f "${dir}ipAddress" ] && local IPLIST=`cat ${dir}ipAddress|awk '{print $1}'|grep -v "^$"|sort -u` + for ip in $IPLIST; do + read -u 5 + { + down $ip + echo "" >&5 + }& + done + wait + unset ip IPLIST + + local IPLIST=`cat /proc/net/arp|grep "0x2\|0x6"|awk '{print $1}'|grep -v "^169.254."|grep -v "^$"|sort -u|grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'` + gatewayinfo=`getgateway` + local gateway_iplist=`echo "${gatewayinfo}"|awk '{print $1}'` + [ ! -z "$gateway_iplist" ] && local IPLIST=`echo -e "${IPLIST}\n${gateway_iplist}"|grep -v "^$"|sort -u` + for ip in $IPLIST; do + read -u 5 + { + up $ip + echo "" >&5 + }& + done + + wait +} + +# 创建计划任务 +function serverchan_cron(){ + function del_cron(){ + ( echo `crontab -l 2>/dev/null`|grep -q "serverchan" ) && crontab -l > conf && sed -i "/serverchan/d" conf && crontab conf && rm -f conf >/dev/null 2>&1 + } + function re_cron(){ + /etc/init.d/cron stop + /etc/init.d/cron start + } + del_cron + if [ -z "$serverchan_enable" ]; then + re_cron + return + fi + + # 重置流量 + if [ ! -z "$reset_regularly" ] && [ "$reset_regularly" -eq "1" ]; then + crontab -l 2>/dev/null > conf && echo -e "0 0 * * * rm /tmp/serverchan/usage.db >/dev/null 2>&1" >> conf && crontab conf && rm -f conf >/dev/null 2>&1 + crontab -l 2>/dev/null > conf && echo -e "0 0 * * * rm /tmp/serverchan/usage6.db >/dev/null 2>&1" >> conf && crontab conf && rm -f conf >/dev/null 2>&1 + fi + [ ! -z "$regular_time_2" ] && local regular_time_2=",${regular_time_2}" + [ ! -z "$regular_time_3" ] && local regular_time_3=",${regular_time_3}" + # 定时发送 + if [ ! -z "$regular_time" ] || [ ! -z "$regular_time_2" ] || [ ! -z "$regular_time_3" ]; then + crontab -l 2>/dev/null > conf && echo -e "0 $regular_time$regular_time_2$regular_time_3 * * * /usr/share/serverchan/serverchan send &" >> conf && crontab conf && rm -f conf >/dev/null 2>&1 + # 间隔发送 + elif [ ! -z "$interval_time" ]; then + crontab -l 2>/dev/null > conf && echo -e "0 */$interval_time * * * /usr/share/serverchan/serverchan send &" >> conf && crontab conf && rm -f conf >/dev/null 2>&1 + fi + + re_cron +} + +# 免打扰检测 +function serverchan_disturb(){ + [ -z "$serverchan_sheep" ] || [ -z "$starttime" ] || [ -z "$endtime" ] && return 0 + + # 非免打扰时间 + if [ `date +%H` -ge $endtime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a `date +%H` -ge $endtime -a $starttime -gt $endtime ]; then + unset sheep_starttime + rm -f ${dir}sheep_usage ${dir}old_sheep_usage 2>/dev/null + disturb_text=`jq -r '._api' ${jsonpath}` + return 0 + # 免打扰 + else + [ -z "$sheep_starttime" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【免打扰】夜深了,该休息了" >> ${logfile} && sheep_starttime=`date +%s` + # 挂起 + if [ "$serverchan_sheep" -eq "1" ] ;then + while [ `date +%H` -lt "$endtime" ]; do + enable_detection + sleep $sleeptime + done + # 静默 + elif [ "$serverchan_sheep" -eq "2" ] ;then + disturb_text="【免打扰】" + return 1 + fi + fi +} + +# 文件锁 +function LockFile(){ + if [ $1 = "lock" ] ;then + [ ! -f "${dir}serverchan.lock" ] && > ${dir}serverchan.lock && return + while [ -f "${dir}serverchan.lock" ]; do + enable_detection 1 + done + LockFile lock + fi + [ $1 = "unlock" ] && rm -f ${dir}serverchan.lock >/dev/null 2>&1 + return 0 +} + +# 检测黑白名单 +function blackwhitelist(){ + [ ! "$1" ] && return 1 + + [ -z "$serverchan_whitelist" ] && [ -z "$serverchan_blacklist" ] && [ -z "$serverchan_interface" ] && [ -z "$MAC_online_list" ] && [ -z "$MAC_offline_list" ] && return 0 + [ ! -z "$serverchan_whitelist" ] && ( echo "$serverchan_whitelist"|grep -q -i -w $1 ) && return 1 + [ ! -z "$serverchan_blacklist" ] && ( ! echo "$serverchan_blacklist"|grep -q -i -w $1 ) && return 1 + [ ! -z "$serverchan_interface" ] && ( ! echo `getinterface ${1}`|grep -q -i -w $serverchan_interface ) && return 1 + [ ! -z "$MAC_online_list" ] && [ ! -z "$mac_online_status" ] && return 1 + [ ! -z "$MAC_online_list" ] && ( echo "$MAC_online_list"|grep -q -i -w $1 ) && return 1 + [ ! -z "$MAC_offline_list" ] && [ -z "$mac_online_status" ] && return 1 + + return 0 +} + +# 重启网络服务 +function network_restart(){ +cat>${dir}network_restart</dev/null 2>&1 & +/etc/init.d/firewall restart >/dev/null 2>&1 & +/etc/init.d/dnsmasq restart >/dev/null 2>&1 & +EOF + chmod 0755 ${dir}network_restart && ${dir}network_restart + rm -f ${dir}network_restart >/dev/null 2>&1 +} + +# 查看无人值守任务设备是否在线 +function geterrdevicealiases(){ + [ -z "$err_device_aliases" ] && return + [ -f ${dir}ipAddress ] && local logrow=$(grep -c "" ${dir}ipAddress) || local logrow="0";[ $logrow -eq "0" ] && return + + local MACLIST=`cat ${dir}ipAddress|awk '{print $2}'|grep -v "^$"|sort -u` + for mac in $MACLIST; do + [ -z "$err_mac" ] && [ ! -z "$mac" ] && local err_mac=`echo "$err_device_aliases"|grep -i $mac|grep -v "^$"|sort -u|head -n1` + done + # 进入免打扰时间已经超过一小时 + if [ ! -z "$sheep_starttime" ] && [ "$((`date +%s`-$sheep_starttime))" -ge "3600" ]; then + > ${dir}sheep_usage + local MACLIST=`echo "$err_device_aliases"|grep -v "^$"|sort -u` + for mac in $MACLIST; do + [ ! -z "$mac" ] && local tmptotal=`usage get ${mac} bytes` + [ ! -z "$tmptotal" ] && awk 'BEGIN{printf "%.0f\n",'$tmptotal'/'204800'}' 2>/dev/null >> ${dir}sheep_usage + done + old_sheep_usage=`cat ${dir}old_sheep_usage` 2>/dev/null + sheep_usage=`cat ${dir}sheep_usage` 2>/dev/null + [ "$old_sheep_usage" == "$sheep_usage" ] && [ -z "$sheep_nousage_starttime" ] && sheep_nousage_starttime=`date +%s` + [ "$old_sheep_usage" != "$sheep_usage" ] && unset sheep_nousage_starttime && cat ${dir}sheep_usage 2>/dev/null > ${dir}old_sheep_usage + [ ! -z "$sheep_nousage_starttime" ] && [ "$((`date +%s`-$sheep_nousage_starttime))" -ge "300" ] && unset err_mac + fi + [ -z "$err_mac" ] +} + +# 无人值守任务 +function unattended(){ + [ -z "$err_enable" ] || [ "$err_enable" -ne "1" ] && return + [ ! -z "$err_sheep_enable" ] && [ "$err_sheep_enable" -eq "1" ] && [ -z "$sheep_starttime" ] && return + geterrdevicealiases;[ $? -eq "1" ] && return + + if [ ! -z "$system_time_event" ]; then + local interfaceuptime=`getinterfaceuptime` + if [ ! -z "$autoreboot_time" ] && [ `cat /proc/uptime|awk -F. '{run_hour=$1/3600;printf("%d",run_hour)}'` -ge "$autoreboot_time" ] && [ "$system_time_event" -eq "1" ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【无人值守任务】重启路由器咯" >> ${logfile} + cat ${logfile} > /usr/share/serverchan/errlog + sleep 2 && reboot && exit + elif [ ! -z "$network_restart_time" ] && [ ! -z "$interfaceuptime" ] && [ `echo "$interfaceuptime"|awk -F. '{run_hour=$1/3600;printf("%d",run_hour)}'` -ge "$network_restart_time" ] && [ "$system_time_event" -eq "2" ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【无人值守任务】重新拨号咯" >> ${logfile} + ifup wan >/dev/null 2>&1 + sleep 60 + fi + fi + + # 重拨尝试获取公网 IP、待弃用或改进 + [ -z "$public_ip_today" ] && public_ip_today=`date +"%d"` + [ -z "$public_ip_count" ] && public_ip_count="0" + [ $public_ip_today -ne `date +"%d"` ] && public_ip_today=`date +"%d"` && public_ip_count=1 + if [ ! -z "$public_ip_event" ] && [ ! -z "$public_ip_retry_count" ] && [ "$public_ip_count" -le "$public_ip_retry_count" ]; then + public_ip_count=`expr $public_ip_count + 1` + local wanIP=`getip wanipv4` + local hostIP=`getip hostipv4` + if [ ! -z "$wanIP" ] && [ ! -z "$hostIP" ] && ( ! echo "$wanIP"|grep -q -w ${hostIP} );then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【无人值守任务】重拨尝试获取公网 ip,当前第 $public_ip_count 次 " >> ${logfile} + ifup wan >/dev/null 2>&1 + sleep 60 + local wanIP=`getip wanipv4` && local hostIP=`getip hostipv4` + [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "1" ] && local IPv4=${wanIP} + [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "2" ] && local IPv4=${hostIP} + [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "1" ] && local IPv6=`getip wanipv6` + [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "2" ] && local IPv6=`getip hostipv6` + [ ! -z "$wanIP" ] && [ ! -z "$hostIP" ] && ( ! echo "$wanIP"|grep -q -w ${hostIP} ) && echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $last_IPv6 >> ${dir}ip + fi + fi +} + +# 检测网络状态 +function rand_geturl(){ + # 获取网络状态 + function getcheck(){ + local urllist="https://www.163.com https://www.qq.com https://www.baidu.com https://www.qidian.com https://www.douban.com" + local url_number=`expr $(echo "$urllist"|grep -o ' '|wc -l) + 1` + local url_str=`echo "$urllist"|awk -v i=$(rand 1 $url_number) '{print $i}'` + echo `curl -k -s -w "%{http_code}" -m 5 ${url_str} -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.58" -o /dev/null` + } + local check=`getcheck` + while [ -z "$check" ] || [[ $check -ne 200 && $check -ne 301 && $check -ne 302 ]]; do + local check=`getcheck` + if [ ! -z "$check" ] && [[ $check -eq 200 || $check -eq 301 || $check -eq 302 ]]; then + [ ! -z "$network_enable" ] && [ "$network_enable" -eq "404" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【网络状态】网络恢复正常.." >> ${logfile} + local network_enable="200" + else + [ -z "$network_enable" ] || [ "$network_enable" -eq "200" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】当前网络不通!停止检测! " >> ${logfile} + local network_enable="404" + # 无人值守、待弃用或改进 + [ -z "$network_err_time" ] && network_err_time=`date +%s` + if [ ! -z "$network_err_event" ] && [ "$((`date +%s`-$network_err_time))" -ge "600" ]; then + > ${dir}send_enable.lock && serverchan_first && deltemp + geterrdevicealiases + if [ "$?" -eq "0" ]; then + [ -f /usr/share/serverchan/autoreboot_count ] && retry_count=`cat /usr/share/serverchan/autoreboot_count` && rm -f /usr/share/serverchan/autoreboot_count >/dev/null 2>&1 + [ ! -z ${retry_count} ] && retry_count=0;retry_count=`expr $retry_count + 1` + if [ "$network_err_event" -eq "1" ] ;then + if [ "$retry_count" -lt "3" ] ;then + echo "$retry_count" > /usr/share/serverchan/autoreboot_count + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】正在尝试重启路由,当前第 $retry_count 次 " >> ${logfile} + cat ${logfile} > /usr/share/serverchan/errlog + sleep 2 && reboot && exit + fi + [ "$retry_count" -eq "3" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】已经重启路由2次,修复失败,请主人自行修复哦" >> ${logfile} + elif [ "$network_err_event" -eq "2" ] ;then + [ "$retry_count" -lt "3" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】正在尝试重启网络,当前第 $retry_count 次 " >> ${logfile} && ifup wan >/dev/null 2>&1 + [ "$retry_count" -eq "3" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】已经重启网络2次,修复失败,请主人自行修复哦 " >> ${logfile} + elif [ "$network_err_event" -eq "3" ] ;then + if [ "$retry_count" -eq "1" ] ;then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】正在尝试修复网络,当前第 1 次,重启网络服务中 " >> ${logfile} && network_restart + elif [ "$retry_count" -eq "2" ] ;then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】正在尝试修复网络,当前第 2 次,关闭可能造成网络断开的软件" >> ${logfile} + [ `uci get koolproxy.@global[0].enabled 2>/dev/null` -eq "1" ] && [ `uci get koolproxy.@global[0].koolproxy_mode 2>/dev/null` -eq "1" ] && /etc/init.d/koolproxy stop >/dev/null 2>&1 + [ `uci get adbyby.@adbyby[0].enable 2>/dev/null` -eq "1" ] && [ `uci get adbyby.@adbyby[0].wan_mode 2>/dev/null` -eq "0" ] && /etc/init.d/adbyby stop >/dev/null 2>&1 + [ `uci get passwall.@global[0].enabled 2>/dev/null` -eq "1" ] && [ `uci get passwall.@global[0].proxy_mode 2>/dev/null|grep global` ] && /etc/init.d/koolproxy stop >/dev/null 2>&1 + local shadowsocksr_enabled=`uci get shadowsocksr.@global[0].global_server 2>/dev/null|grep nil` + local shadowsocksr_run_mode=`uci get shadowsocksr.@global[0].run_mode 2>/dev/null|grep all` + [ -z "$shadowsocksr_enabled" ] && [ ! -z "$shadowsocksr_run_mode" ] && /etc/init.d/shadowsocksr stop >/dev/null 2>&1 + sleep 60 && network_restart + elif [ "$retry_count" -eq "3" ] ;then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】正在尝试修复网络,当前第 3 次,备份设置项,并修改相关设置" >> ${logfile} + mkdir -p /usr/share/serverchan/configbak + cp -p -f /etc/config/network /usr/share/serverchan/configbak/network + cp -p -f /etc/config/dhcp /usr/share/serverchan/configbak/dhcp + cp -p -f /etc/config/firewall /usr/share/serverchan/configbak/firewall + cp -p -f /etc/firewall.user /usr/share/serverchan/configbak/firewall.user + uci set network.wan.peerdns='0' + uci delete network.wan.dns + uci add_list network.wan.dns='223.5.5.5' + uci add_list network.wan.dns='119.29.29.29' + uci delete network.wan.mtu + uci commit network + uci set dhcp.@dnsmasq[0].port='53' + uci set dhcp.@dnsmasq[0].resolvfile='/tmp/resolv.conf.auto' + uci delete dhcp.@dnsmasq[0].server + uci delete dhcp.@dnsmasq[0].noresolv + uci commit dhcp + uci delete firewall.redirect + >/etc/firewall.user + uci commit firewall + sleep 60 && network_restart + elif [ "$retry_count" -eq "4" ] ;then + echo "$retry_count" > /usr/share/serverchan/autoreboot_count + cat ${logfile} > /usr/share/serverchan/errlog + sleep 2 && reboot && exit + elif [ "$retry_count" -eq "5" ] ;then + echo "$retry_count" > /usr/share/serverchan/autoreboot_count + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】修复失败,还原设置中,请自行检查网络设置" >> ${logfile} + cp -p -f /usr/share/serverchan/configbak/network /etc/config/network + cp -p -f /usr/share/serverchan/configbak/dhcp /etc/config/dhcp + cp -p -f /usr/share/serverchan/configbak/firewall /etc/config/firewall + cp -p -f /usr/share/serverchan/configbak/firewall.user /etc/firewall.user + cat ${logfile} > /usr/share/serverchan/errlog + sleep 2 && reboot && exit + fi + fi + fi + elif [ -f /usr/share/serverchan/autoreboot_count ]; then + network_err_time=`expr $network_err_time - 600` && sleep 60 + fi + enable_detection + sleep $sleeptime + fi + continue + done + rm -f /usr/share/serverchan/autoreboot_count >/dev/null 2>&1 +} + +# 检测 ip 状况 +function ip_changes(){ + [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "1" ] && local IPv4=`getip wanipv4` + [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "2" ] && local IPv4=`getip hostipv4` + [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "1" ] && local IPv6=`getip wanipv6` + [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "2" ] && local IPv6=`getip hostipv6` + + # 存在临时文件 + if [ -f ${dir}ip ]; then + local last_IPv4=$(cat "${dir}ip"|grep IPv4|awk '{print $2}'|grep -v "^$"|sort -u|head -n1) + local last_IPv6=$(cat "${dir}ip"|grep IPv6|awk '{print $2}'|grep -v "^$"|sort -u|head -n1) + if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -ne "0" ] && [ ! -z "$IPv4" ] && ( ! echo ${IPv4}|grep -w -q ${last_IPv4} ); then + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}当前IP:${IPv4}" >> ${logfile} + echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $last_IPv6 >> ${dir}ip + title="IP 地址变化" + content="${content}${str_splitline}${str_title_start} IP 地址变化${str_title_end}${str_linefeed}${str_tab}当前 IP:${IPv4}" + fi + + if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] && [ ! -z "$IPv6" ] && ( ! echo "$IPv6"|grep -w -q ${last_IPv6} ); then + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}当前IPv6:${IPv6}" >> ${logfile} + echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $IPv6 >> ${dir}ip + [ -z "$title" ] && title="IPv6 地址变化" + [ ! -z "$title" ] && title="IP 地址变化" + content="${content}${str_splitline}${str_title_start} IPv6 地址变化${str_title_end}${str_linefeed}${str_tab}当前 IPv6:${IPv6}" + fi + + # 临时文件目录为空 + else + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}路由器已经重启!" >> ${logfile} + [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -ne "0" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 当前IP: ${IPv4}" >> ${logfile} + [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 当前IPv6: ${IPv6}" >> ${logfile} + echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $IPv6 >> ${dir}ip + title="路由器重新启动" + content="${content}${str_splitline}${str_title_start} 路由器重新启动${str_title_end}" + [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -ne "0" ] && content="${content}${str_linefeed}${str_tab}当前IP:${IPv4}" + [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] && content="${content}${str_linefeed}${str_tab}当前IPv6:${IPv6}" + fi + + # IP 变化,悄咪咪的重启 ddns 和 zerotier + if [ ! -z "$content" ] ;then + [ -z "$ddns_enabled" ] && ddns_enabled=$(uci show ddns|grep "enabled"|grep "1") + [ -z "$ddns_enabled" ] && ddns_logrow=0 || ddns_logrow=$(echo "$ddns_enabled"|wc -l) + if [ $ddns_logrow -ge 1 ]; then + /etc/init.d/ddns restart >/dev/null 2>&1 + fi + [ -z "$zerotier_enabled" ] && zerotier_enabled=$(uci get zerotier.sample_config.enabled) + if [ ! -z "$zerotier_enabled" ] && [ $zerotier_enabled -eq "1" ] ; then + /etc/init.d/zerotier restart >/dev/null 2>&1 + fi + fi +} + +# 检测设备上线 +function up(){ + [ -f ${dir}ipAddress ] && ( cat ${dir}ipAddress|grep -q -w $1 ) && return + + local ip_mac=`getmac $1` + local ip_name=`getname ${1} ${ip_mac}` + local ip_interface=`getinterface ${ip_mac}` + getping ${1} ${ip_mac} ${up_timeout} "1";local ping_online=$? + + # 连通 + if [ "$ping_online" -eq "0" ]; then + LockFile lock + [ ! -z "$serverchan_blacklist" ] && local tmp_mac=`echo "${serverchan_blacklist}"|grep -w -i ${ip_mac}` + [ ! -z "$serverchan_whitelist" ] && local tmp_mac=`echo "${serverchan_whitelist}"|grep -w -i ${ip_mac}` + echo "{'ip': '${1}','mac': '${ip_mac}','name': '${ip_name}','uptime': '0秒','interface': '${ip_interface}','usage': '0 bytes'}" > ${dir}client/${1} + # ??? + if [ ! -z "$tmp_mac" ] && ( cat ${dir}ipAddress|grep -q -w -i ${tmp_mac} ); then + usage down ${1} + echo "${1} ${ip_mac} ${ip_name} `date +%s` ${ip_interface}" >> ${dir}ipAddress + LockFile unlock && return + # ??? + elif [ ! -z "$tmp_mac" ] && [ -f "${dir}tmp_downlist" ] && ( cat ${dir}tmp_downip|grep -q -w -i ${tmp_mac} ); then + local tmp_downip=`cat ${dir}tmp_downlist|grep -w -i ${tmp_mac}|awk '{print $1}'|grep -v "^$"|sort -u|head -n1` + usage down $tmp_downip + sed -i "/^${tmp_downip} /d" ${dir}tmp_downlist + LockFile unlock && return + fi + # 从离线二次验证区恢复信息 + [ -f "${dir}tmp_downlist" ] && local tmp_downip=`cat ${dir}tmp_downlist|grep -w ${1}|grep -v "^$"|sort -u|head -n1` + if [ ! -z "$tmp_downip" ]; then + cat ${dir}tmp_downlist|grep -w ${1}|grep -v "^$"|sort -u|head -n1 >> ${dir}ipAddress + sed -i "/^${1} /d" ${dir}tmp_downlist + # up + else + usage down $1 + echo "$1 ${ip_mac} ${ip_name} `date +%s` ${ip_interface}" >> ${dir}ipAddress + blackwhitelist ${ip_mac};local ip_blackwhite=$? + [ -f "${dir}send_enable.lock" ] || [ -z "$serverchan_up" ] || [ -z "$ip_blackwhite" ] && LockFile unlock && return + [ ! -z "$serverchan_up" ] && [ "$serverchan_up" -ne "1" ] && LockFile unlock && return + [ -z "$ip_blackwhite" ] || [ "$ip_blackwhite" -ne "0" ] && LockFile unlock && return + + [ -f "${dir}title" ] && local title=`cat ${dir}title` + [ -f "${dir}content" ] && local content=`cat ${dir}content` + if [ -z "$title" ]; then + local title="$ip_name 连接了你的路由器" + local content="${str_splitline}${str_title_start} 新设备连接${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${1}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}${str_linefeed}${str_tab}网络接口:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_interface}" + elif ( echo ${title}|grep -q "连接了你的路由器" ); then + local title="${ip_name} ${title}" + local content="${str_splitline}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${1}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}${str_linefeed}${str_tab}网络接口:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_interface}" + else + local title="设备状态变化" + local content="${str_splitline}${str_title_start} 新设备连接${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${1}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}${str_linefeed}${str_tab}网络接口:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_interface}" + fi + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}新设备 ${ip_name} ${1} 连接了">> ${logfile} + #[ ! -z "$serverchan_blacklist" ] && local title="你偷偷关注的设备上线了" + [ ! -z "$title" ] && echo "$title" >${dir}title + [ ! -z "$content" ] && echo -n "$content" >>${dir}content + fi + fi + LockFile unlock +} + +# 检测设备离线 +function down(){ + local ip_mac=`getmac $1` + local ip_name=`getname ${1} ${ip_mac}` + local ip_interface=`getinterface ${ip_mac}` + + getping ${1} ${ip_mac} ${down_timeout} ${timeout_retry_count};local ping_online=$? + # 离线,置入二次验证区 + if [ "$ping_online" -eq "1" ]; then + LockFile lock + [ ! -f "${dir}send_enable.lock" ] && cat ${dir}ipAddress|grep -w ${1}|grep -v "^$"|sort -u|head -n1 >> ${dir}tmp_downlist + sed -i "/^${1} /d" ${dir}ipAddress + rm -f ${dir}client/${1} >/dev/null 2>&1 + LockFile unlock + # 更新主机名或 MAC + else + local tmp_name=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $3}'|grep -v "^$"|sort -u|head -n1` + local tmp_mac=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + if [ ${ip_name} != ${tmp_name} ] || [ ${ip_mac} != ${tmp_mac} ]; then + LockFile lock + local tmp_str=$(echo "$1 ${ip_mac} ${ip_name} `cat ${dir}ipAddress|grep -w ${1}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` ${ip_interface}") + sed -i "/^${1} /d" ${dir}ipAddress + echo "$tmp_str" >> ${dir}ipAddress + LockFile unlock + fi + local time_up=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` + local time1=`date +%s` + local time1=$(time_for_humans `expr ${time1} - ${time_up}`) + echo "{'ip': '${1}','mac': '${ip_mac}','name': '${ip_name}','uptime': '${time1}','interface': '${ip_interface}','usage': '`usage get $ip_mac`'}" > ${dir}client/${1} + fi +} + +# 设备离线通知 +function down_send(){ + [ ! -f "${dir}tmp_downlist" ] && return + + local IPLIST=`cat ${dir}tmp_downlist|awk '{print $1}'` + for ip in $IPLIST; do + local ip_mac=`getmac ${ip}` + blackwhitelist ${ip_mac};local ip_blackwhite=$? + [ -z "$serverchan_down" ] || [ -z "$ip_blackwhite" ] && continue + [ ! -z "$serverchan_down" ] && [ "$serverchan_down" -ne "1" ] && continue + [ -z "$ip_blackwhite" ] || [ "$ip_blackwhite" -ne "0" ] && continue + [ ! -z "$serverchan_blacklist" ] && local tmp_mac=`echo "${serverchan_blacklist}"|grep -w -i ${ip_mac}` + [ ! -z "$serverchan_whitelist" ] && local tmp_mac=`echo "${serverchan_whitelist}"|grep -w -i ${ip_mac}` + [ ! -z "$tmp_mac" ] && ( cat ${dir}ipAddress|grep -q -w -i ${tmp_mac} ) && continue + + local ip_name=`getname ${ip} ${ip_mac}` + local time_up=`cat ${dir}tmp_downlist|grep -w ${ip}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` + local ip_total=`usage get $ip_mac` && [ ! -z "$ip_total" ] && local ip_total="${str_linefeed}${str_tab}总计流量: ${str_space}${str_space}${str_space}${str_space}${ip_total}" + local time1=`date +%s` + local time1=$(time_for_humans `expr ${time1} - ${time_up}`) + if [ -z "$title" ]; then + title="${ip_name} 断开连接" + content="${content}${str_splitline}${str_title_start} 设备断开连接${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}$ip_total${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + elif ( echo "$title"|grep -q "断开连接" ); then + title="${ip_name} ${title}" + content="${content}${str_splitline}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}$ip_total${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start} 设备断开连接${str_title_end}${str_linefeed}${str_tab}客户端名:${str_space}${str_space}${str_space}${str_space}${str_space}${ip_name}${str_linefeed}${str_tab}客户端IP: ${str_space}${str_space}${str_space}${str_space}${ip}${str_linefeed}${str_tab}客户端MAC:${str_space}${str_space}${str_space}${str_space}${ip_mac}$ip_total${str_linefeed}${str_tab}在线时间: ${str_space}${str_space}${str_space}${str_space}${time1}" + fi + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}设备 ${ip_name} ${ip} 断开连接 " >> ${logfile} + done + + rm -f ${dir}tmp_downlist >/dev/null 2>&1 +} + +# 当前设备列表 +function current_device(){ + ( echo "$lite_enable"|grep -q "content" ) || ( echo "$lite_enable"|grep -q "device" ) && return + [ -f ${dir}ipAddress ] && local logrow=$(grep -c "" ${dir}ipAddress) || local logrow="0";[ $logrow -eq "0" ] && return + + [ -f ${dir}usage.db ] && local ip_total_db="总计流量${str_space}${str_space}${str_space}${str_space}" + content="${content}${str_splitline}${str_title_start} 现有在线设备 ${logrow} 台,具体如下${str_title_end}${str_linefeed}${str_tab}IP 地址${str_space}${str_space}${str_space}${str_space}${str_space}${str_space}${str_space}${str_space}${str_space}${ip_total_db}客户端名" + local IPLIST=`cat ${dir}ipAddress|awk '{print $1}'` + for ip in $IPLIST; do + local ip_mac=`getmac ${ip}` + local ip_total=`usage get ${ip_mac}` + local ip_name=`getname ${ip} ${ip_mac}` + local ip_name=`cut_str $ip_name 15` + if [ "${#ip}" -lt "15" ]; then + local n=`expr 15 - ${#ip}` + for i in `seq 1 $n`; do + local ip="${ip}${str_space}" + done + unset i n + fi + if [ ! -z "$ip_total" ]; then + local n=`expr 11 - ${#ip_total}` + for i in `seq 1 $n`; do + local ip_total="${ip_total}${str_space}" + done + fi + content="${content}${str_linefeed}${str_tab}${ip}${ip_total}${ip_name}" + unset i n ip_total ip_mac ip_name + done +} + +# 检测 cpu 状态 +function cpu_load(){ + if [ ! -z "$temperature_enable" ] && [ "$temperature_enable" -eq "1" ] && [ ! -z "$temperature" ]; then + [ -z "$temperature_time" ] && temperature_time=`date +%s` + local cpu_wendu=`soc_temp`; + [ -z "$cpu_wendu" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取设备温度,请检查命令" >> ${logfile} + + if [ `expr $cpu_wendu \> $temperature` -eq "1" ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!警报!!】 CPU 温度过高: ${cpu_wendu}" >> ${logfile} + else + temperature_time=`date +%s` + fi + + if [ "$((`date +%s`-$temperature_time))" -ge "300" ] && [ -z "$temperaturecd_time" ]; then + title="CPU 温度过高!" + temperaturecd_time=`date +%s` + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text} CPU 温 度过高: ${cpu_wendu}" >> ${logfile} + content="${content}${str_splitline}${str_title_start} CPU 温度过高${str_title_end}${str_linefeed}${str_tab}CPU 温度已连续五分钟超过预设${str_linefeed}${str_tab}接下来一小 时不再提示${str_linefeed}${str_tab}当前温度:${cpu_wendu}℃" + elif [ ! -z "$temperaturecd_time" ] && [ "$((`date +%s`-$temperaturecd_time))" -ge "3300" ] ;then + unset temperaturecd_time + fi + fi + + if [ ! -z "$cpuload_enable" ] && [ "$cpuload_enable" -eq "1" ] && [ ! -z "$cpuload" ]; then + [ -z "$cpuload_time" ] && cpuload_time=`date +%s` + local cpu_fuzai=`cat /proc/loadavg|awk '{print $1}'` 2>/dev/null + [ -z "$cpu_fuzai" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取设备负载,请检查命令" >> ${logfile} + + if [ `expr $cpu_fuzai \> $cpuload` -eq "1" ]; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!警报!!】 CPU 负载过高: ${cpu_fuzai}" >> ${logfile} + cputop log + else + cpuload_time=`date +%s` + fi + + if [ "$((`date +%s`-$cpuload_time))" -ge "300" ] && [ -z "$cpucd_time" ]; then + unset getlogtop + if [ ! -z "$title" ] && ( echo "$title"|grep -q "过高" ); then + title="设备报警!" + else + title="CPU 负载过高!" + fi + cpucd_time=`date +%s` + echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text} CPU 负 载过高: ${cpu_fuzai}" >> ${logfile} + content="${content}${str_splitline}${str_title_start} CPU 负载过高${str_title_end}${str_linefeed}${str_tab}CPU 负载已连续五分钟超过预设${str_linefeed}${str_tab}接下来一小 时不再提示${str_linefeed}${str_tab}当前负载:${cpu_fuzai}" + cputop + elif [ ! -z "$cpucd_time" ] && [ "$((`date +%s`-$cpucd_time))" -ge "3300" ] ;then + unset cpucd_time + fi + fi +} + +# CPU 占用前三 +function cputop(){ + [ -z "$1" ] && content="${content}${str_splitline}${str_title_start} 当前 CPU 占用前三的进程${str_title_end}" + local gettop=`top -bn 1|grep -v "top -bn 1"` + for i in `seq 5 7`; do + local top_name=`echo "${gettop}"|awk 'NR=='${i}|awk '{print ($8 ~ /\/bin\/sh|\/bin\/bash/) ? $9 : $8}'` + local top_load=`echo "${gettop}"|awk 'NR=='${i}|awk '{print $7}'` + local temp_top="${top_name} ${top_load}" + [ ! -z "$1" ] && local logtop="$logtop $temp_top" + [ -z "$1" ] && content="${content}${str_linefeed}${str_tab}${temp_top}" + done + unset i + [ ! -z "$1" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!警报!!】 CPU 占用前三: ${logtop}" >> ${logfile} +} + +# 生成日志监控文件,避免后台影响 wait 语句 +function get_syslog(){ + kill -9 `pgrep -f "logread -f -p notice"` 2>/dev/null + [ -z "$web_logged" ] && [ -z "$ssh_logged" ] && [ -z "$web_login_failed" ] && [ -z "$ssh_login_failed" ] && return + rm -f ${dir}login_monitor >/dev/null 2>&1 + +cat>${dir}get_syslog<> ${dir}login_monitor & +EOF + chmod 0755 ${dir}get_syslog && ${dir}get_syslog + rm -f ${dir}get_syslog >/dev/null 2>&1 +} + +# 登陆提醒通知 +function login_send(){ + [ -z "$web_logged" ] && [ -z "$ssh_logged" ] && [ -z "$web_login_failed" ] && [ -z "$ssh_login_failed" ] && return + [ ! -f ${dir}login_monitor ] && return + # 登录 + cat ${dir}login_monitor|grep -i "accepted login"|awk '{print $4" "$8" "$NF}' >> ${dir}web_login + cat ${dir}login_monitor|grep -i "Password auth succeeded\|Pubkey auth succeeded"|awk '{print $4" "$8" "$NF}'|sed -nr 's#^(.*):.[0-9]{1,5}#\1#gp' | sed -e 's/%.*//' >> ${dir}ssh_login + + # 非法登录 + cat ${dir}login_monitor|grep -i "failed login"|awk '{print $NF}' >> ${dir}web_failed + cat ${dir}login_monitor|grep -i "Bad password attempt\|Login attempt for nonexistent user from"|awk '{print $NF}'|sed -nr 's#^(.*):.[0-9]{1,5}#\1#gp'|sed -e 's/%.*//' >> ${dir}ssh_failed + # 读取信息后清空,避免重复统计次数 + echo "" > ${dir}login_monitor + set_ip_black + + # Web 登录提醒 + for login_ip in `cat ${dir}web_login|awk '{print $3}'|grep -v "^$"|sort -u`; do + [ -z "$login_ip" ] && continue + add_ip_white ${login_ip} + local login_time=`cat ${dir}web_login|grep -w ${login_ip}|awk '{print $1}'|grep -v "^$"|sort -u|head -n1` + local login_mode=`cat ${dir}web_login|grep -w ${login_ip}|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + echo "$ip_white_list"|grep -w -q "$login_ip" && echo "`date "+%Y-%m-%d"` ${login_time} 【info】设备 ${login_ip} 通过 Web ${login_mode} 登陆了路由器 " >> ${logfile} && continue + if [ ! -z "$web_logged" ] && [ "$web_logged" -eq "1" ]; then + if [ -z "$title" ]; then + title="${login_ip} 通过 Web 登陆了路由器" + content="${content}${str_splitline}${str_title_start} 登陆信息${str_title_end}${str_linefeed}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + elif ( echo "$title"|grep -q "登陆了路由器" ); then + title="${login_ip} ${title}" + content="${content}${str_splitline}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start} 登陆信息${str_title_end}${str_linefeed}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + fi + fi + sed -i "/^${login_ip}$/d" ${dir}ssh_failed + sed -i "/^${login_ip}$/d" ${dir}web_failed + echo "`date "+%Y-%m-%d"` ${login_time} ${disturb_text}设备 ${login_ip} 通过 Web ${login_mode} 登陆了路由器 " >> ${logfile} + done + echo "" > ${dir}web_login + unset login_ip login_time login_mode + # SSH 登录提醒 + for login_ip in `cat ${dir}ssh_login|awk '{print $3}'|grep -v "^$"|sort -u`; do + [ -z "$login_ip" ] && continue + add_ip_white ${login_ip} + local login_time=`cat ${dir}ssh_login|grep -w ${login_ip}|awk '{print $1}'|grep -v "^$"|sort -u|head -n1` + local login_mode=`cat ${dir}ssh_login|grep -w ${login_ip}|awk '{print $2}'|grep -v "^$"|sort -u|head -n1` + echo "$ip_white_list"|grep -w -q "$login_ip" && echo "`date "+%Y-%m-%d"` ${login_time} 【info】设备 ${login_ip} 通过 SSH ${login_mode} 登陆了路由器 " >> ${logfile} && continue + [ ! -z "$login_mode" ] && local content_mode="${str_linefeed}${str_tab}登录方式: ${str_space}${str_space}${str_space}${str_space}${login_mode}" + if [ ! -z "$ssh_logged" ] && [ "$ssh_logged" -eq "1" ]; then + if [ -z "$title" ]; then + title="${login_ip} 通过 SSH 登陆了路由器" + content="${content}${str_splitline}${str_title_start} 登陆信息${str_title_end}${str_linefeed}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + elif ( echo "$title"|grep -q "登陆了路由器" ); then + title="${login_ip} ${title}" + content="${content}${str_splitline}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start} 登陆信息${str_title_end}${str_linefeed}${str_tab}时间:${str_space}${str_space}${str_space}${str_space}${str_space}${login_time}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}${content_mode}" + fi + fi + sed -i "/^${login_ip}$/d" ${dir}ssh_failed + echo "`date "+%Y-%m-%d"` ${login_time} ${disturb_text}设备 ${login_ip} 通过 SSH ${login_mode} 登陆了路由器 " >> ${logfile} + done + echo "" > ${dir}ssh_login + unset login_ip login_time login_mode + # Web 非法登录 + for login_ip in `cat ${dir}web_failed|awk '{print $1}'|grep -v "^$"|sort -u`; do + [ -z "$login_ip" ] && continue + echo "$ip_white_list"|grep -w -q "$login_ip" && continue + local login_sum=`cat ${dir}web_failed|grep -w "${login_ip}"|wc -l` + if [ "$login_sum" -ge "$login_max_num" ] ;then + if [ ! -z "$web_login_failed" ] && [ "$web_login_failed" -eq "1" ]; then + if [ -z "$title" ]; then + title="${login_ip} 通过 Web 频繁尝试登陆" + content="${content}${str_splitline}${str_title_start} 登陆信息${str_title_end}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + elif ( echo "$title"|grep -q "频繁尝试登陆" ); then + title="${login_ip} ${title}" + content="${content}${str_splitline}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start} 登陆信息${str_title_end}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + fi + fi + sed -i "/^${login_ip}$/d" ${dir}web_failed + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】设备 ${login_ip} 通过 Web 频繁尝试登陆" >> ${logfile} + add_ip_black $login_ip + fi + done + unset login_ip login_sum + # SSH 非法登录 + for login_ip in `cat ${dir}ssh_failed|awk '{print $1}'|grep -v "^$"|sort -u`; do + [ -z "$login_ip" ] && continue + echo "$ip_white_list"|grep -w -q "$login_ip" && continue + local login_sum=`cat ${dir}ssh_failed|grep -w "${login_ip}"|wc -l` + if [ "$login_sum" -ge "$login_max_num" ] ;then + if [ ! -z "$ssh_login_failed" ] && [ "$ssh_login_failed" -eq "1" ]; then + if [ -z "$title" ]; then + title="${login_ip} 通过 SSH 频繁尝试登陆" + content="${content}${str_splitline}${str_title_start} 登陆信息${str_title_end}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + elif ( echo "$title"|grep -q "频繁尝试登陆" ); then + title="${login_ip} ${title}" + content="${content}${str_splitline}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + else + title="设备状态变化" + content="${content}${str_splitline}${str_title_start} 登陆信息${str_title_end}${str_linefeed}${str_tab}设备 IP: ${str_space}${str_space}${str_space}${str_space}${login_ip}" + fi + fi + sed -i "/^${login_ip}$/d" ${dir}ssh_failed + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】设备 ${login_ip} 通过 SSH 频繁尝试登陆" >> ${logfile} + add_ip_black $login_ip + fi + done + unset login_ip login_sum +} + +# 添加白名单,懒得写删除项和信息显示了,感觉没啥必要 +function add_ip_white(){ + [ ! "$1" ] && return + [ -z "$port_knocking" ] || [ "$port_knocking" -ne "1" ] && return + + # 开放端口 + if ( echo ${1}|grep -q -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" ); then + ipset list ip_whitelist >/dev/null 2>&1 || ipset create ip_whitelist hash:ip timeout ${ip_white_timeout} >/dev/null 2>&1 + # 开放端口 + iptables -C INPUT -m set --match-set ip_whitelist src -p tcp -m multiport --dport ${ip_port_white} -j ACCEPT >/dev/null 2>&1 || iptables -I INPUT -m set --match-set ip_whitelist src -p tcp -m multiport --dport ${ip_port_white} -j ACCEPT >/dev/null 2>&1 + # 端口转发 + for port_forward in `echo "$port_forward_list"`; do + iptables -t nat -C PREROUTING -m set --match-set ip_whitelist src -p tcp --dport `echo ${port_forward}|awk '{print $2}'` -j DNAT --to-destination "`echo ${port_forward}|awk '{print $3}'`:`echo ${port_forward}|awk '{print $4}'`" >/dev/null 2>&1 || iptables -t nat -I PREROUTING -m set --match-set ip_whitelist src -p tcp --dport `echo ${port_forward}|awk '{print $2}'` -j DNAT --to-destination "`echo ${port_forward}|awk '{print $3}'`:`echo ${port_forward}|awk '{print $4}'`" >/dev/null 2>&1 + iptables -t nat -C POSTROUTING -m set --match-set ip_whitelist src -p tcp -d `echo ${port_forward}|awk '{print $3}'` --dport `echo ${port_forward}|awk '{print $4}'` -j SNAT --to-source `echo ${port_forward}|awk '{print $1}'` >/dev/null 2>&1 || iptables -t nat -I POSTROUTING -m set --match-set ip_whitelist src -p tcp -d `echo ${port_forward}|awk '{print $3}'` --dport `echo ${port_forward}|awk '{print $4}'` -j SNAT --to-source `echo ${port_forward}|awk '{print $1}'` >/dev/null 2>&1 + done + + unset port_forward + ipset -exist add ip_whitelist ${1} timeout ${ip_white_timeout} + + elif ( echo ${1}|grep -q -oE "([\da-fA-F0-9]{1,4}(:{1,2})){1,15}[\da-fA-F0-9]{1,4}" ); then + ipset list ip_whitelistv6 >/dev/null 2>&1 || ipset create ip_whitelistv6 hash:ip timeout ${ip_white_timeout} family inet6 >/dev/null 2>&1 + # 开放端口 + ip6tables -C INPUT -m set --match-set ip_whitelistv6 src -p tcp -m multiport --dport ${ip_port_white} -j ACCEPT >/dev/null 2>&1 || ip6tables -I INPUT -m set --match-set ip_whitelistv6 src -p tcp -m multiport --dport ${ip_port_white} -j ACCEPT >/dev/null 2>&1 + # 端口转发 + for port_forward in `echo "$port_forward_list"`; do + ip6tables -t nat -C PREROUTING -m set --match-set ip_whitelist src -p tcp --dport `echo ${port_forward}|awk '{print $2}'` -j DNAT --to-destination "`echo ${port_forward}|awk '{print $3}'`:`echo ${port_forward}|awk '{print $4}'`" >/dev/null 2>&1 || ip6tables -t nat -I PREROUTING -m set --match-set ip_whitelist src -p tcp --dport `echo ${port_forward}|awk '{print $2}'` -j DNAT --to-destination "`echo ${port_forward}|awk '{print $3}'`:`echo ${port_forward}|awk '{print $4}'`" >/dev/null 2>&1 + ip6tables -t nat -C POSTROUTING -m set --match-set ip_whitelist src -p tcp -d `echo ${port_forward}|awk '{print $3}'` --dport `echo ${port_forward}|awk '{print $4}'` -j SNAT --to-source `echo ${port_forward}|awk '{print $1}'` >/dev/null 2>&1 || ip6tables -t nat -I POSTROUTING -m set --match-set ip_whitelist src -p tcp -d `echo ${port_forward}|awk '{print $3}'` --dport `echo ${port_forward}|awk '{print $4}'` -j SNAT --to-source `echo ${port_forward}|awk '{print $1}'` >/dev/null 2>&1 + done + + unset port_forward + ipset -exist add ip_whitelistv6 ${1} timeout ${ip_white_timeout} + fi +} + +# 添加黑名单 +function add_ip_black(){ + [ ! "$1" ] && return + ( ipset -q test ip_blacklist ${1} ) && continue + ( ipset -q test ip_blacklistv6 ${1} ) && continue + + [ "$1" ] && echo "$1 timeout ${ip_black_timeout}" >> ${ip_blacklist_path} + # 检查并添加 + if ( echo ${1}|grep -q -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" ); then + ipset list ip_blacklist >/dev/null 2>&1 || ipset create ip_blacklist hash:ip timeout ${ip_black_timeout} >/dev/null 2>&1 + iptables -C INPUT -m set --match-set ip_blacklist src -j DROP >/dev/null 2>&1 || iptables -I INPUT -m set --match-set ip_blacklist src -j DROP >/dev/null 2>&1 + ipset add ip_blacklist ${1} timeout ${ip_black_timeout} + elif ( echo ${1}|grep -q -oE "([\da-fA-F0-9]{1,4}(:{1,2})){1,15}[\da-fA-F0-9]{1,4}" ); then + ipset list ip_blacklistv6 >/dev/null 2>&1 || ipset create ip_blacklistv6 hash:ip timeout ${ip_black_timeout} family inet6 >/dev/null 2>&1 + ip6tables -C INPUT -m set --match-set ip_blacklistv6 src -j DROP >/dev/null 2>&1 || ip6tables -I INPUT -m set --match-set ip_blacklistv6 src -j DROP >/dev/null 2>&1 + ipset add ip_blacklistv6 ${1} timeout ${ip_black_timeout} + fi +} + +# 移出黑名单 +function del_ip_black(){ + [ ! "$1" ] && return + + sed -i "/^${1}/d" ${ip_blacklist_path} + if ( echo ${1}|grep -q -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" ); then + ipset list ip_blacklist >/dev/null 2>&1 && ipset -! del ip_blacklist ${1} + elif ( echo ${1}|grep -oE "([\da-fA-F0-9]{1,4}(:{1,2})){1,15}[\da-fA-F0-9]{1,4}" ); then + ipset list ip_blacklistv6 >/dev/null 2>&1 && ipset -! del ip_blacklistv6 ${1} + fi +} + +# 设置防火墙列表 +function set_ip_black(){ + # 检查换行,避免出错 + [ `tail -n1 "${ip_blacklist_path}" | wc -l` -eq "0" ] && echo -e >> ${ip_blacklist_path} + # 如果黑名单列表为空,移除集合并退出 + if [ ! -z "$web_login_black" ] && [ "$web_login_black" -eq "0" ] || [ -z "$web_login_black" ] || [ ! -f ${ip_blacklist_path} ] || [ -z "`cat ${ip_blacklist_path}`" ]; then + iptables -D INPUT -m set --match-set ip_blacklist src -j DROP >/dev/null 2>&1 + ipset destroy ip_blacklist >/dev/null 2>&1 + ip6tables -D INPUT -m set --match-set ip_blacklistv6 src -j DROP >/dev/null 2>&1 + ipset destroy ip_blacklistv6 >/dev/null 2>&1 + return + fi + # 从 ip_blacklist 文件逐行添加黑名单,add_ip_black() 处验证是否重复 + for ip_black in `cat ${ip_blacklist_path}|awk '{print $1}'`; do + add_ip_black ${ip_black} + done + # 当 ip_blacklist 文件清除 IP 时,移除防火墙规则 + for fw_ip_blacklist in `ipset list ip_blacklist 2>/dev/null|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"`; do + [ -z "$fw_ip_blacklist" ] && continue + local fw_info_blacklist=`ipset list ip_blacklist 2>/dev/null|grep -w -i ${fw_ip_blacklist}` + cat ${ip_blacklist_path}|grep -q -w -i ${fw_ip_blacklist} && sed -i "/^${fw_ip_blacklist}/d" ${ip_blacklist_path} && echo ${fw_info_blacklist} >> ${ip_blacklist_path} || del_ip_black ${fw_ip_blacklist} + done + for fw_ip_blacklistv6 in `ipset list ip_blacklistv6 2>/dev/null|grep -Eo "([\da-fA-F0-9]{1,4}(:{1,2})){1,15}[\da-fA-F0-9]{1,4}"`; do + [ -z "$fw_ip_blacklistv6" ] && continue + local fw_info_blacklistv6=`ipset list ip_blacklistv6 2>/dev/null|grep -w -i ${fw_ip_blacklistv6}` + cat ${ip_blacklist_path}|grep -q -w -i ${fw_ip_blacklistv6} && sed -i "/^${fw_ip_blacklistv6}/d" ${ip_blacklist_path} && echo ${fw_info_blacklistv6} >> ${ip_blacklist_path} || del_ip_black ${fw_ip_blacklistv6} + done +} + +# 发送定时数据 +function send(){ + echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】创建定时任务" >> ${logfile} + serverchan_disturb;local send_disturb=$? + get_config "send_title" "router_status" "router_temp" "router_wan" "client_list" + + [ -z "$send_title" ] && local send_title="路由状态:" + [ ! -z "$1" ] && local send_title="发送测试:" && local send_content="${str_splitline}${str_title_start}内容1${str_title_end}${str_linefeed}${str_tab}设备1${str_linefeed}${str_tab}设备2${str_splitline}${str_title_start}内容2${str_title_end}${str_linefeed}${str_tab}设备3${str_linefeed}${str_tab}设备4" + [ -z "$1" ] && [ ! -z "$client_list" ] && [ "$client_list" -eq "1" ] && > ${dir}send_enable.lock && serverchan_first & + + if [ -z "$1" ] && [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ]; then + local systemload=`cat /proc/loadavg|awk '{print $1" "$2" "$3}'` + local cpuload=`getcpu` + local ramload=`free -m|sed -n '2p'|awk '{printf "%.2f%%\n",($3/$2)*100}'` + local Qwai=`curl -o /dev/null --connect-timeout 5 -s -w %{http_code} www.google.com` + if [[ $Qwai -eq 200 || $Qwai -eq 301 || $Qwai -eq 302 ]]; then + local Qwai_status="已连通!" + else + local Qwai_status="已断开!" + fi + local systemstatustime=`cat /proc/uptime|awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("运行时间:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'`;unset run_days run_hour run_minute run_second + local send_content="${send_content}${str_splitline}${str_title_start} 系统运行状态${str_title_end}" + local send_content="${send_content}${str_linefeed}${str_tab}平均负载:${systemload}" + local send_content="${send_content}${str_linefeed}${str_tab}CPU占用:${cpuload}" + local send_content="${send_content}${str_linefeed}${str_tab}内存占用:${ramload}" + local send_content="${send_content}${str_linefeed}${str_tab}全球互联:${Qwai_status}" + local send_content="${send_content}${str_linefeed}${str_tab}${systemstatustime}" + fi + + if [ -z "$1" ] && [ ! -z "$router_temp" ] && [ "$router_temp" -eq "1" ]; then + local cputemp=`soc_temp` + [ ! -z "$cputemp" ] && local send_content="${send_content}${str_splitline}${str_title_start} 设备温度${str_title_end}${str_linefeed}${str_tab}CPU:${cputemp}℃" + [ -z "$cputemp" ] && local send_content="${send_content}${str_splitline}${str_title_start} 设备温度${str_title_end}${str_linefeed}${str_tab}无法获取设备温度" + fi + + if [ -z "$1" ] && [ ! -z "$router_wan" ] && [ "$router_wan" -eq "1" ]; then + local send_wanIP=`getip wanipv4`;local send_hostIP=`getip hostipv4` + local send_content="${send_content}${str_splitline}${str_title_start} WAN 口信息${str_title_end}${str_linefeed}${str_tab}接口 IPv4:${send_wanIP}" + local send_content="${send_content}${str_linefeed}${str_tab}外网 IPv4:${send_hostIP}" + if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ]; then + local send_wanIPv6=`getip wanipv6`;local send_hostIPv6=`getip hostipv6` + local send_content="${send_content}${str_linefeed}${str_tab}接口 IPv6:${send_wanIPv6}" + local send_content="${send_content}${str_linefeed}${str_tab}外网 IPv6:${send_hostIPv6}" + fi + ( ! echo "$send_wanIP"|grep -q -w ${send_hostIP} ) && local send_content="${send_content}${str_linefeed}${str_tab}外网 IP 与接口 IP 不一致,你的 IP 可能不是公网 IP" + local interfaceuptime=`getinterfaceuptime` + [ ! -z "$interfaceuptime" ] && local wanstatustime=`getinterfaceuptime|awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("在线时间:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'` && unset run_days run_hour run_minute run_second + local send_content="${send_content}${str_linefeed}${str_tab}${wanstatustime}" + fi + + if [ -z "$1" ] && [ ! -z "$client_list" ] && [ "$client_list" -eq "1" ]; then + wait + local IPLIST=`cat ${dir}ipAddress 2>/dev/null|awk '{print $1}'` + [ -f ${dir}ipAddress ] && local logrow=$(grep -c "" ${dir}ipAddress) || local logrow="0" + [ "$logrow" -eq "0" ] && local send_content="${send_content}${str_splitline}${str_title_start} 当前无在线设备${str_title_end}" || local send_content="${send_content}${str_splitline}${str_title_start} 现有在线设备 ${logrow} 台${str_title_end}" + for ip in $IPLIST; do + local time_up=`cat ${dir}ipAddress|grep -w ${ip}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` + local time1=`date +%s` + local time1=$(time_for_humans `expr ${time1} - ${time_up}`) + local ip_mac=`getmac ${ip}` + local ip_name=`getname ${ip} ${ip_mac}` + local ip_total=`usage get ${ip_mac}`;[ ! -z "$ip_total" ] && local ip_total="总计流量:${ip_total} " + local ip_name=`cut_str $ip_name 18` + local send_content="${send_content}${str_linefeed}${str_tab}【${ip_name}】 ${ip}${str_linefeed}${str_tab}${ip_total}在线 ${time1}" + unset ip_total time_down time_up time1 ip_mac ip_name + done + fi + [ ! -z "$device_name" ] && local send_title="【$device_name】${send_title}" + [ -z "$send_content" ] && local send_content="${str_splitline}${str_title_start} 我遇到了一个难题${str_title_end}${str_linefeed}${str_tab}定时发送选项错误,你没有选择需要发送的项目,该怎 么办呢${str_splitline}" + [ "$send_disturb" -eq "0" ] && diy_send "${send_title}" "${send_content}" "${jsonpath}" "$1" >/dev/null 2>&1 + [ $? -eq 1 ] && [ "$send_disturb" -eq "0" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】定时推送失败,请检查网络或设置信息" >> ${logfile} || echo "`date "+%Y-%m-%d %H:%M:%S"` ${disturb_text}定时推送任务完成" >> ${logfile} + deltemp +} + +# 初始化 +read_config +deltemp +serverchan_cron + +# 限制并发进程 +[ -z "$thread_num" ] || [ "$thread_num" -eq "0" ] && thread_num=5 +[ "$1" ] && [ $1 == "t1" ] && thread_num=1 +[ -e ${dir}fd1 ] || mkfifo ${dir}fd1 +exec 5<>${dir}fd1 +rm -f ${dir}fd1 >/dev/null 2>&1 +for i in `seq 1 $thread_num`; do + echo >&5 +done +unset i + +# 启动参数 +if [ "$1" ] ;then + [ $1 == "send" ] && send + [ $1 == "soc" ] && echo `soc_temp` > ${dir}soc_tmp + [ $1 == "test" ] && send test + [ $1 == "t1" ] || exit +fi + +# 载入在线设备 +serverchan_init;[ $? -eq 1 ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】读取设置出错,请检查设置项 " >> ${logfile} && exit +echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】载入在线设备" >> ${logfile} +> ${dir}send_enable.lock && serverchan_first && deltemp +echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】初始化完成" >> ${logfile} + +# 循环 +while [ "$serverchan_enable" -eq "1" ]; do + deltemp + usage update + serverchan_disturb;disturb=$? + + [ -f ${dir}ipAddress ] && ipAddress_logrow=$(grep -c "" ${dir}ipAddress) || ipAddress_logrow="0"; + if [ $ipAddress_logrow -ne "0" ]; then + online_list=`cat ${dir}ipAddress|awk '{print $2}'|grep -v "^$"|sort -u` + for online_mac in $online_list; do + [ ! -z "$online_mac" ] && mac_online_status="`echo "$mark_mac_list"|grep -i $online_mac|grep -v "^$"|sort -u|head -n1`${mac_online_status}" + done + fi + + # 网络状态与 IP 变动 + if [ "$serverchan_ipv4" -ne "0" ] || [ "$serverchan_ipv6" -ne "0" ]; then + rand_geturl + ip_changes + fi + + # 设备列表 + if [ ! -f "${dir}send_enable.lock" ]; then + [ ! -z "$title" ] && echo "$title" > ${dir}title + [ ! -z "$content" ] && echo "$content" > ${dir}content + serverchan_first + [ -f "${dir}title" ] && title=`cat ${dir}title` && rm -f ${dir}title >/dev/null 2>&1 + [ -f "${dir}content" ] && content=`cat ${dir}content` && rm -f ${dir}content >/dev/null 2>&1 + fi + + # 离线二次验证区推送 + [ ! -f "${dir}send_enable.lock" ] && down_send + + # 当前设备列表 + [ ! -z "$content" ] && [ ! -f "${dir}send_enable.lock" ] && current_device + + # 无人值守任务 + [ ! -f "${dir}send_enable.lock" ] && unattended + + # CPU 检测 + [ ! -f "${dir}send_enable.lock" ] && cpu_load + + # 异常流量检测 + [ ! -f "${dir}send_enable.lock" ] && get_client_usage + + # 登陆提醒通知 + [ ! -f "${dir}send_enable.lock" ] && login_send + + # 推送 + if [ ! -f "${dir}send_enable.lock" ] && [ ! -z "$title" ] && [ ! -z "$content" ]; then + [ ! -z "$device_name" ] && title="【$device_name】$title" + ( echo "$lite_enable"|grep -q "content" ) && content="$title" + [ "$disturb" -eq "0" ] && diy_send "${title}" "${content}" "${jsonpath}" >/dev/null 2>&1 + fi + + # 等待定时任务推送完成 + while [ -f "${dir}send_enable.lock" ]; do + sleep $sleeptime + done + + sleep $sleeptime +done diff --git a/luci-app-wifidog b/luci-app-wifidog deleted file mode 160000 index 3a2fdff5..00000000 --- a/luci-app-wifidog +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3a2fdff5584ef8ecb143f0ad254f2972ec5f2f2d diff --git a/luci-app-wifidog/LICENSE b/luci-app-wifidog/LICENSE new file mode 100644 index 00000000..d6a93266 --- /dev/null +++ b/luci-app-wifidog/LICENSE @@ -0,0 +1,340 @@ +GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + diff --git a/luci-app-wifidog/Makefile b/luci-app-wifidog/Makefile new file mode 100644 index 00000000..4e9ab2fd --- /dev/null +++ b/luci-app-wifidog/Makefile @@ -0,0 +1,20 @@ +#PO = wifidog +#by walkingsky + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI wifidog config +LUCI_DEPENDS:=+wifidog +LUCI_PKGARCH:=all +PKG_NAME:=luci-app-wifidog +PKG_VERSION:=2.0 +PKG_RELEASE:=2 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature +# +# +# +# + diff --git a/luci-app-wifidog/README.md b/luci-app-wifidog/README.md new file mode 100644 index 00000000..9b170313 --- /dev/null +++ b/luci-app-wifidog/README.md @@ -0,0 +1,40 @@ +luci-wifidog +=========== + +wifidog的luci管理界面,基于lede的可编译package + + +--- +## 安装方法 + +克隆本项目到本地 +将目录名称由 luci-wifidog 改名成 luci-app-wifidog +复制 luci-app-wifidog 目录到本地lede的目录树中,目录结构如下:lede/package/feeds/luci/luci-app-wifidog + +注意:里面的脚本要注意文件格式及可执行属性,到了linux系统里要用chmod及dos2unix命令作适当调整 +/etc/init.d/wifidog +/etc/uci-defaults/luci-wifidog + + +## 编译 + +编译是sdk环境中要有wifidog选项: +1. 执行make menuconfig,在LuCI -》3. Applications-》luci-app-wifidog 找到该包,勾选上。 +2. 编译整个sdk + +--- +## 使用方法 for wifidog v1.3.0 + +首先需要安装wifidog +```bash +opkg update +opkg install wifidog +``` + + +拷贝各文件到相应文件夹中替换原文件, __注意:__ +/etc/uci-defaults  +/etc/init.d/wifidog 替换源文件, 并使用 chmod +x wifidog 增加可执行权限. + +在LUCI中就可以看见出现wifidog配置菜单了,填写相应参数,保存+应用; +LUCI -> System -> Startup  找到Wiifidog 启用之,重启路由器即可自动执行脚本运行wifidog,并生效配置。 diff --git a/luci-app-wifidog/luasrc/controller/wifidog.lua b/luci-app-wifidog/luasrc/controller/wifidog.lua new file mode 100644 index 00000000..7fe8a113 --- /dev/null +++ b/luci-app-wifidog/luasrc/controller/wifidog.lua @@ -0,0 +1,16 @@ +--[[ + walkingsky + tangxn_1@163.com +]]-- + +module("luci.controller.wifidog", package.seeall) + + +function index() + local fs = require "nixio.fs" + --if fs.access("/usr/bin/wifidog") then + entry({"admin", "services","wifidog"}, cbi("wifidog/wifidog_cfg"), "wifidog配置") + --end + +end + diff --git a/luci-app-wifidog/luasrc/model/cbi/wifidog/wifidog_cfg.lua b/luci-app-wifidog/luasrc/model/cbi/wifidog/wifidog_cfg.lua new file mode 100644 index 00000000..c72390e3 --- /dev/null +++ b/luci-app-wifidog/luasrc/model/cbi/wifidog/wifidog_cfg.lua @@ -0,0 +1,116 @@ +--[[ + walkingsky + tangxn_1@163.com +]]-- + +local sys = require "luci.sys" +local fs = require "nixio.fs" +local uci = require "luci.model.uci".cursor() + +m = Map("wifidog", "wifidog执行参数配置","") + +--if fs.access("/usr/bin/wifidog") then + + s = m:section(TypedSection, "wifidog", "wifidog配置") + s.anonymous = true + s.addremove = false + + + s:tab("general", "通用配置") + s:tab("servers", "认证服务器配置") + s:tab("advanced", "高级配置") + + + --通用配置 + wifi_enable = s:taboption("general",Flag, "wifidog_enable", translate("是否启用wifidog"),"打开或关闭wifidog") + + local t = io.popen("ifconfig | grep HWaddr | awk -F\" \" '{print $5}' | awk '$1~//{print;exit}' | sed 's/://g'") + local temp = t:read("*all") + gatewayID = s:taboption("general",Value,"gateway_id","设备id(GatewayID)","默认为路由器MAC地址") + gatewayID.default=temp + + gateway_interface = s:taboption("general",Value,"gateway_interface","内网接口","设置内网接口,默认'br-lan'") + externalinterface = s:taboption("general",Value,"externalinterface","外网接口","WAN口接口,默认eth0.2") + externalinterface.default = "eth0.2" + + + + --服务器配置项 + + server_hostname = s:taboption("servers",Value,"server_hostname","认证服务器:主机名","域名或ip") + server_httpport = s:taboption("servers",Value,"server_httpport","认证服务器:web服务端口","默认80端口") + server_path = s:taboption("servers",Value,"server_path","认证服务器:url路径","最后要加/,例如:'/','/wifidog/';默认'/wifidog/'") + server_sslAvailable = s:taboption("servers",Flag,"server_sslAvailable","启用SSL","默认不打开") + server_sslport = s:taboption("servers",Value,"server_sslport","SSL端口","默认'443'") + server_LoginScriptPathFragment = s:taboption("servers",Value,"server_LoginScriptPathFragment","服务器login接口脚本url路径段","默认'login/?'") + server_PortalScriptPathFragment = s:taboption("servers",Value,"server_PortalScriptPathFragment","服务器portal接口脚本url路径段","默认'portal/?'") + server_PingScriptPathFragment = s:taboption("servers",Value,"server_PingScriptPathFragment","服务器ping接口脚本url路径段","默认'ping/?'") + server_AuthScriptPathFragment = s:taboption("servers",Value,"server_AuthScriptPathFragment","服务器auth接口脚本url路径段","默认'auth/?'") + server_MsgScriptPathFragment = s:taboption("servers",Value,"server_MsgScriptPathFragment","服务器消息接口脚本url路径段","默认'gw_message.php?'") + + --gateway_hostname.default = "www.test.com" + server_httpport.default = "80" + server_path.default = "/wifidog/" + server_sslAvailable.default = server_sslAvailable.disabled + server_sslport.default = "443" + server_LoginScriptPathFragment.default = "login/?" + server_PortalScriptPathFragment.default = "portal/?" + server_PingScriptPathFragment.default = "ping/?" + server_AuthScriptPathFragment.default = "auth/?" + server_MsgScriptPathFragment.default = "gw_message.php?" + + --高级配置 + + --deamo_enable = s:taboption("advanced",Flag, "deamo_enable", "是否启用监护功能","检测wifidog意外退出后,重启wifidog") + --deamo_enable:depends("wifidog_enable","1") + gateway_port = s:taboption("advanced",Value, "gateway_port", "wifidog监听端口","默认'2060'") + gateway_port.default = "2060" + + check_interval = s:taboption("advanced",Value, "check_interval", "和服务器通讯间隔,单位秒","默认'60'") + check_interval.default = "60" + + client_timeout = s:taboption("advanced",Value, "client_timeout", "客户端掉线超时时间倍数,(通讯间隔的倍数)","默认'5',即5倍的服务器通讯时间间隔后,仍然检测不到客户端,则自动下线该客户端") + client_timeout.default = "5" + + s = m:section(TypedSection, "trustedmaclist", "MAC白名单列表","") + s.anonymous = true + s.addremove = true + s.template = "cbi/tblsection" + + mac = s:option(Value, "mac", "mac地址") + mac.rmempty = false + mac.datatype = "list(macaddr)" + + --sys.net.arptable(function(entry) + luci.ip.neighbors(function(entry) + mac:value( + entry["HW address"], + entry["HW address"] .. " (" .. entry["IP address"] .. ")" + ) + end) + + s = m:section(TypedSection, "allowrule", "默认允许访问的服务","") + s.anonymous = true + s.addremove = true + s.template = "cbi/tblsection" + + udp_tcp = s:option(ListValue, "protocol","协议") + udp_tcp:value('tcp') + udp_tcp:value('udp') + --udp_tcp:value('icmp') + + ip = s:option(Value, "ip", "IP地址") + ip.datatype = "ip4addr" + ip.rmempty = false + + port = s:option(Value,"port","端口号") + port.rmempty = false + port.datatype = "range(1,65535)" + +--else +-- m.pageaction = false +--end + + +return m + diff --git a/luci-app-wifidog/root/etc/config/wifidog b/luci-app-wifidog/root/etc/config/wifidog new file mode 100644 index 00000000..9b4c5422 --- /dev/null +++ b/luci-app-wifidog/root/etc/config/wifidog @@ -0,0 +1,27 @@ +config wifidog 'wifidog' + option wifidog_enable '1' + + + option gateway_interface 'br-lan' + option externalinterface 'eth0.2' + + + option server_hostname 'www.test.com' + option server_httpport '80' + option server_path '/wifidog/' + + option server_sslAvailable '0' + option server_sslport '443' + option server_LoginScriptPathFragment 'login/?' + option server_PortalScriptPathFragment 'portal/?' + option server_PingScriptPathFragment 'ping/?' + option server_AuthScriptPathFragment 'auth/?' + option server_MsgScriptPathFragment 'gw_message.php?' + + option gateway_port '2060' + option check_interval '60' + option client_timeout '5' + +config trustedmaclist + +config allowrule diff --git a/luci-app-wifidog/root/etc/init.d/wifidog b/luci-app-wifidog/root/etc/init.d/wifidog new file mode 100644 index 00000000..372e1235 --- /dev/null +++ b/luci-app-wifidog/root/etc/init.d/wifidog @@ -0,0 +1,152 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2006 OpenWrt.org +#modify by walkingsky + +START=65 +USE_PROCD=1 +EXTRA_COMMANDS="status" +EXTRA_HELP=" status Print the status of the service" + +local mac_args="TrustedMACList " +local allowrule="" + +add_mac(){ + config_load wifidog + local cfg="$1" + config_get mac "$cfg" mac + if [ "$mac_args" = "TrustedMACList " ]; then + mac_args="$mac_args $mac" + else + mac_args="$mac_args,$mac" + fi +} + + +add_allowrule(){ + config_load wifidog + local cfg="$1" + config_get protocol "$cfg" protocol + config_get ip "$cfg" ip + config_get port "$cfg" port + + allowrule="$allowrule + FirewallRule allow $protocol port $port to $ip " +} + + +#wifidog ?? +create_config(){ + + config_load wifidog + + + gateway_id=`ifconfig | grep HWaddr | awk -F" " '{print $5}' | awk '$1~//{print;exit}' | sed 's/://g'` + config_get gateway_id "wifidog" "gateway_id" $gateway_id + config_get externalinterface "wifidog" "externalinterface" "eth0.2" + config_get gateway_interface "wifidog" "gateway_interface" "br-lan" + config_get server_hostname "wifidog" "server_hostname" "www.test.com" + config_get server_httpport "wifidog" "server_httpport" "80" + config_get server_path "wifidog" "server_path" "/wifidog/" + + config_get server_sslAvailable "wifidog" "server_sslAvailable" "0" + config_get server_sslport "wifidog" "server_sslport" "443" + config_get server_LoginScriptPathFragment "wifidog" "server_LoginScriptPathFragment" "login/?" + config_get server_PortalScriptPathFragment "wifidog" "server_PortalScriptPathFragment" "portal/?" + config_get server_PingScriptPathFragment "wifidog" "server_PingScriptPathFragment" "ping/?" + config_get server_AuthScriptPathFragment "wifidog" "server_AuthScriptPathFragment" "auth/?" + config_get server_MsgScriptPathFragment "wifidog" "server_MsgScriptPathFragment" "gw_message.php?" + config_get gateway_port "wifidog" "gateway_port" "2060" + config_get check_interval "wifidog" "check_interval" "60" + config_get client_timeout "wifidog" "client_timeout" "5" + + + if [ $server_sslAvailable -eq 0 ]; then + server_sslAvailable="no" + else + server_sslAvailable="yes" + fi + + config_foreach add_mac trustedmaclist + config_foreach add_allowrule allowrule + + if [ "$mac_args" = "TrustedMACList " ]; then + $mac_args="" + fi + + echo " +GatewayID $gateway_id +GatewayInterface $gateway_interface +externalinterface $externalinterface + +GatewayPort $gateway_port + +AuthServer { + Hostname $server_hostname + SSLAvailable $server_sslAvailable + SSLPort $server_sslport + HTTPPort $server_httpport + Path $server_path + LoginScriptPathFragment $server_LoginScriptPathFragment + PortalScriptPathFragment $server_PortalScriptPathFragment + MsgScriptPathFragment $server_MsgScriptPathFragment + PingScriptPathFragment $server_PingScriptPathFragment + AuthScriptPathFragment $server_AuthScriptPathFragment +} + +CheckInterval $check_interval +ClientTimeout $client_timeout + +$mac_args + +FirewallRuleSet validating-users { + FirewallRule allow to 0.0.0.0/0 +} + +FirewallRuleSet known-users { + FirewallRule allow to 0.0.0.0/0 +} + +FirewallRuleSet global { + $allowrule +} + +FirewallRuleSet unknown-users { + FirewallRule allow udp port 53 + FirewallRule allow tcp port 53 + FirewallRule allow udp port 67 + FirewallRule allow tcp port 67 +} + +FirewallRuleSet locked-users { + FirewallRule block to 0.0.0.0/0 +} +" > /etc/wifidog.conf + + + +} + +start_service() { + config_load wifidog + + config_get wifidog_enable "wifidog" "wifidog_enable" "0" + if [ $wifidog_enable -eq 0 ]; then + stop + exit + fi + + create_config + + sleep 1 + procd_open_instance + # -s: log to syslog + # -f: run in foreground + procd_set_param command /usr/bin/wifidog -s -f + procd_set_param respawn # respawn automatically if something died + procd_set_param file /etc/wifidog.conf + procd_close_instance +} + +status() { + /usr/bin/wdctl status +} diff --git a/luci-app-wifidog/root/etc/uci-defaults/luci-wifidog b/luci-app-wifidog/root/etc/uci-defaults/luci-wifidog new file mode 100644 index 00000000..1ae0190f --- /dev/null +++ b/luci-app-wifidog/root/etc/uci-defaults/luci-wifidog @@ -0,0 +1,13 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@wifidog[-1] + add ucitrack wifidog + set ucitrack.@wifidog[-1].init=wifidog + #delete ucitrack.@firewall[0].affects + add_list ucitrack.@firewall[0].affects=wifidog + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 \ No newline at end of file diff --git a/luci-app-wifidog/root/usr/sbin/wifidog_check.sh b/luci-app-wifidog/root/usr/sbin/wifidog_check.sh new file mode 100644 index 00000000..fbfe94ba --- /dev/null +++ b/luci-app-wifidog/root/usr/sbin/wifidog_check.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +#walkingsky +#tangxn_1@163.com + +local run=`ps | grep "wifidog -c /tmp/wifidog.conf" | wc -l` + +if [ $run -lt 2 ]; then + wifidog -c /tmp/wifidog.conf +fi \ No newline at end of file diff --git a/luci-app-wifidog/root/usr/share/rpcd/acl.d/luci-app-wifidog.json b/luci-app-wifidog/root/usr/share/rpcd/acl.d/luci-app-wifidog.json new file mode 100644 index 00000000..a4eefdeb --- /dev/null +++ b/luci-app-wifidog/root/usr/share/rpcd/acl.d/luci-app-wifidog.json @@ -0,0 +1,11 @@ +{ + "luci-app-wifidog": { + "description": "Grant UCI access for luci-app-wifidog", + "read": { + "uci": [ "wifidog" ] + }, + "write": { + "uci": [ "wifidog" ] + } + } +} diff --git a/luci-app-wolplus/Makefile b/luci-app-wolplus/Makefile new file mode 100644 index 00000000..aeecba00 --- /dev/null +++ b/luci-app-wolplus/Makefile @@ -0,0 +1,18 @@ +# 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 Wakeup-On-Lan-plus +LUCI_DEPENDS:=+etherwake +LUCI_PKGARCH:=all +PKG_VERSION:=1.0.2 +PKG_RELEASE:=1 + +PKG_MAINTAINER:=siwind + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-wolplus/luasrc/controller/wolplus.lua b/luci-app-wolplus/luasrc/controller/wolplus.lua new file mode 100644 index 00000000..f5eb1a2f --- /dev/null +++ b/luci-app-wolplus/luasrc/controller/wolplus.lua @@ -0,0 +1,33 @@ +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 new file mode 100644 index 00000000..b7b4c789 --- /dev/null +++ b/luci-app-wolplus/luasrc/model/cbi/wolplus.lua @@ -0,0 +1,35 @@ +local i = require "luci.sys" +local t, e +t = Map("wolplus", translate("WOL Plus"), translate("Wake up your LAN device")) +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 new file mode 100644 index 00000000..91cd71b1 --- /dev/null +++ b/luci-app-wolplus/luasrc/view/wolplus/awake.htm @@ -0,0 +1,3 @@ +<%+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 new file mode 100644 index 00000000..2991f946 --- /dev/null +++ b/luci-app-wolplus/luasrc/view/wolplus/index.htm @@ -0,0 +1,22 @@ +<% include("cbi/map") %> + + diff --git a/luci-app-wolplus/po/zh-cn/wolplus.po b/luci-app-wolplus/po/zh-cn/wolplus.po new file mode 100644 index 00000000..0c1d987b --- /dev/null +++ b/luci-app-wolplus/po/zh-cn/wolplus.po @@ -0,0 +1,26 @@ +msgid "wolplus" +msgstr "网络唤醒Plus" + +msgid "WOL Plus" +msgstr "网络唤醒Plus-增强版" + +msgid "Wake up your LAN device" +msgstr "网络唤醒您的局域网设备" + +msgid "macclient" +msgstr "客户端MAC设备列表" + +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/wolplus.po b/luci-app-wolplus/po/zh_Hans/wolplus.po new file mode 100644 index 00000000..608d97e7 --- /dev/null +++ b/luci-app-wolplus/po/zh_Hans/wolplus.po @@ -0,0 +1,26 @@ +msgid "wolplus" +msgstr "网络唤醒Plus" + +msgid "WOL Plus" +msgstr "网络唤醒Plus-增强版" + +msgid "Wake up your LAN device" +msgstr "网络唤醒您的局域网设备" + +msgid "macclient" +msgstr "客户端MAC设备列表" + +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/root/etc/config/wolplus b/luci-app-wolplus/root/etc/config/wolplus new file mode 100644 index 00000000..e69de29b diff --git a/luci-app-wolplus/root/etc/uci-defaults/luci-app-WOL-plus b/luci-app-wolplus/root/etc/uci-defaults/luci-app-WOL-plus new file mode 100644 index 00000000..61c4b1e5 --- /dev/null +++ b/luci-app-wolplus/root/etc/uci-defaults/luci-app-WOL-plus @@ -0,0 +1,11 @@ +#!/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-services-wolplus.json b/luci-app-wolplus/root/usr/share/rpcd/acl.d/luci-app-services-wolplus.json new file mode 100644 index 00000000..08cbfba5 --- /dev/null +++ b/luci-app-wolplus/root/usr/share/rpcd/acl.d/luci-app-services-wolplus.json @@ -0,0 +1,11 @@ +{ + "luci-app-services-wolplus": { + "description": "Grant UCI access for luci-app-services-wolplus", + "read": { + "uci": [ "wolplus" ] + }, + "write": { + "uci": [ "wolplus" ] + } + } +} diff --git a/luci-theme-argon b/luci-theme-argon deleted file mode 160000 index cbad1c9f..00000000 --- a/luci-theme-argon +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cbad1c9f998401d7cc4664690c3f23e80d2c1ac2 diff --git a/luci-theme-argon/.github/workflows/manual_release.yml b/luci-theme-argon/.github/workflows/manual_release.yml new file mode 100644 index 00000000..514ba17e --- /dev/null +++ b/luci-theme-argon/.github/workflows/manual_release.yml @@ -0,0 +1,140 @@ +# +# Copyright (c) 2022-2023 SMALLPROGRAM +# Description: Auto compile +# + +# +# Fork and compile the latest version yourself using Github Actions +# 1.Into the repository of your own fork +# 2.Into the repository [Settings] +# 3.[Code and automation - Actions] ↓ [General] → [Workflow permissions] ↓ Check the [Read and write permissions] and [Save] +# 4.Let's take [Actions] +# + +name: "Auto compile with OpenWrt SDK" +on: + repository_dispatch: + workflow_dispatch: + inputs: + ssh: + description: 'SSH connection to Actions' + required: false + default: 'false' + push: + branches: + - '18.06' + paths: + - 'luci-theme-argon/Makefile' +env: + TZ: Asia/Shanghai + +jobs: + job_check: + if: github.repository == ${{ github.repository }} + name: Check Version + runs-on: ubuntu-latest + outputs: + argon_version: ${{ steps.check_version.outputs.latest_version }} + has_update: ${{ steps.check_version.outputs.has_update }} + steps: + - name: Checkout + uses: actions/checkout@main + with: + fetch-depth: 0 + ref: '18.06' + + - name: Check version + id: check_version + env: + url_release: https://api.github.com/repos/${{ github.repository }}/releases/latest + run: | + latest_version=$(grep -oP 'PKG_VERSION:=\K.*' Makefile | sed 's/^/v/') + latest_release=$(wget -qO- -t1 -T2 ${{env.url_release}} | awk -F '"' '/tag_name/{print $4}') + has_update=$([ "${latest_version}" != "${latest_release}" ] && echo true || echo false) + echo "latest_version=${latest_version}" >> $GITHUB_OUTPUT + echo "has_update=${has_update}" >> $GITHUB_OUTPUT + echo "latest_version: ${latest_version}" + echo "latest_release: ${latest_release}" + echo "has_update: ${has_update}" + + - name: Generate new tag & release + if: steps.check_version.outputs.has_update == 'true' + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + name: For Lean's LEDE 18.06 LuCI + tag_name: ${{steps.check_version.outputs.latest_version}} + + job_build_argon: + name: Build Argon (18.06) + needs: job_check + if: needs.job_check.outputs.has_update == 'true' + runs-on: ubuntu-latest + steps: + - name: Install packages + run: | + echo "Install packages" + sudo -E apt-get -qq update + sudo -E apt-get -qq install build-essential clang flex bison g++ gawk gcc-multilib g++-multilib gettext git libncurses5-dev libssl-dev python3-distutils rsync unzip zlib1g-dev file wget + sudo -E apt-get -qq autoremove --purge + sudo -E apt-get -qq clean + + - name: Cache openwrt SDK + id: cache-sdk + uses: actions/cache@v3 + with: + path: sdk + key: openwrt-sdk-21.02-x86-64 + + - name: Initialization environment + if: steps.cache-sdk.outputs.cache-hit != 'true' + env: + url_sdk: https://archive.openwrt.org/releases/21.02.5/targets/x86/64/openwrt-sdk-21.02.5-x86-64_gcc-8.4.0_musl.Linux-x86_64.tar.xz + run: | + wget ${{ env.url_sdk }} + file_name=$(echo ${{env.url_sdk}} | awk -F/ '{print $NF}') + mkdir sdk && tar -xJf $file_name -C ./sdk --strip-components=1 + cd sdk + echo "src-git base https://github.com/openwrt/openwrt.git;openwrt-21.02" > feeds.conf + echo "src-git-full packages https://github.com/openwrt/packages.git;openwrt-21.02" >> feeds.conf + echo "src-git-full luci https://git.openwrt.org/project/luci.git;openwrt-18.06" >> feeds.conf + echo "src-git-full routing https://git.openwrt.org/feed/routing.git;openwrt-21.02" >> feeds.conf + git clone -b 18.06 https://github.com/${{ github.repository }}.git package/downloads/luci-theme-argon + ./scripts/feeds update -a + echo "CONFIG_PACKAGE_luci-theme-argon=m" > .config + ./scripts/feeds install -d n luci-theme-argon + make download -j8 + + - name: Configure Argon (18.06) + run: | + cd sdk + ./scripts/feeds install luci-theme-argon + echo "CONFIG_ALL_NONSHARED=n" > .config + echo "CONFIG_ALL_KMODS=n" >> .config + echo "CONFIG_ALL=n" >> .config + echo "CONFIG_AUTOREMOVE=n" >> .config + echo "CONFIG_LUCI_LANG_zh_Hans=y" >> .config + echo "CONFIG_PACKAGE_luci-theme-argon=m" >> .config + make defconfig + + - name: Compile Argon (18.06) + id: compile + run: | + cd sdk + echo "make package/luci-theme-argon/{clean,compile} -j$(nproc)" + make package/luci-theme-argon/{clean,compile} -j$(nproc) + mv bin/packages/x86_64/base/ ../ + rm .config .config.old + cd .. + echo "status=success" >> $GITHUB_OUTPUT + echo "FIRMWARE=$PWD" >> $GITHUB_ENV + + - name: Upload Argon (18.06) ipks to release + uses: softprops/action-gh-release@v1 + if: steps.compile.outputs.status == 'success' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{needs.job_check.outputs.argon_version}} + files: ${{ env.FIRMWARE }}/base/luci-theme*.ipk diff --git a/luci-theme-argon/.gitignore b/luci-theme-argon/.gitignore new file mode 100644 index 00000000..e1e0fe55 --- /dev/null +++ b/luci-theme-argon/.gitignore @@ -0,0 +1,3 @@ + +README_ZH.md +README.md diff --git a/luci-theme-argon/Makefile b/luci-theme-argon/Makefile new file mode 100644 index 00000000..6bb5b580 --- /dev/null +++ b/luci-theme-argon/Makefile @@ -0,0 +1,27 @@ +# +# Copyright (C) 2008-2019 Jerrykuku +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Argon Theme +LUCI_DEPENDS:=+curl +jsonfilter +PKG_VERSION:=1.8.3 +PKG_RELEASE:=20230710 + +include $(TOPDIR)/feeds/luci/luci.mk + + +define Package/luci-theme-argon/postinst +#!/bin/sh +sed -i ":a;$!N;s/tmpl.render.*sysauth_template.*return/local scope = { duser = default_user, fuser = user }\nlocal ok, res = luci.util.copcall\(luci.template.render_string, [[<% include\(\"themes\/\" .. theme .. \"\/sysauth\"\) %>]], scope\)\nif ok then\nreturn res\nend\nreturn luci.template.render\(\"sysauth\", scope\)/;ba" /usr/lib/lua/luci/dispatcher.lua +sed -i ":a;$!N;s/t.render.*sysauth_template.*return/local scope = { duser = h, fuser = a }\nlocal ok, res = luci.util.copcall\(luci.template.render_string, [[<% include\(\"themes\/\" .. theme .. \"\/sysauth\"\) %>]], scope\)\nif ok then\nreturn res\nend\nreturn luci.template.render\(\"sysauth\", scope\)/;ba" /usr/lib/lua/luci/dispatcher.lua +[ -f /usr/lib/lua/luci/view/themes/argon/out_header_login.htm ] && mv -f /usr/lib/lua/luci/view/themes/argon/out_header_login.htm /usr/lib/lua/luci/view/header_login.htm +rm -Rf /var/luci-modulecache +rm -Rf /var/luci-indexcache +exit 0 +endef + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-theme-argon/Screenshots/screenshot_pc.jpg b/luci-theme-argon/Screenshots/screenshot_pc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c355449a3aa732fd06f2b69fd6f6bd1f0342647 GIT binary patch literal 673706 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 <9F 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

    3fNN(I!%o6!(io%Ea>{!`= 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 z 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%0A9b24siOI!3$VDy&gqgCsc!e{XLM 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

    CT{pxmNUcw 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

    BW9zrHP>w3I!v}o((L?t| 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�XmH0BX8{7Fo+5_+B0y51fCh=1gyC_ zeXDGwYgHUUY2B>`nY(|p5Lr|Z&k_gB0`RKZrt{$GR&#&7HlmXJ?(=0}j3Id2pjK2ft}>dMx~ z>W}yai=Pg_+G}HdKJktlogUT;b`9NQHB(S=c{-V^8R5$P9T&rtl`H&B``6^XQ~+9o z*$Aq6f3+s)1p}wf)Z5fwY}Oae&vPGjtWy_F^v=FNf9a^;9`)KG63`7#io^EVU%0AU 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π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¨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

    Tr`~umt5;lf?z^s5VIro`H-P%l~ge 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 ZAOB9FaQ^)_;C1{vo%?^F!*c$G{}-XHNrC_X literal 0 HcmV?d00001 diff --git a/luci-theme-argon/Screenshots/screenshot_phone.jpg b/luci-theme-argon/Screenshots/screenshot_phone.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8237a0368813d8d7b9c9db585e088db8c999ed06 GIT binary patch literal 467306 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�+7nJaJ7mB9sLzVyJJZ=+*$74h7n0@`hdg#0= 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

    lOFHKxW{3#(Fx9m%qBfZq)kvVO1c3-Pc^W;%aRL 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ą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

    52_`cE(zZMEpNgo`EY*4G)I09>a1 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 ?@Ps4J#L1b@yTXJK07_F;-CIu>*o89f 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 + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/jerrykuku/luci-theme-argon/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * luci-theme-material: + * https://github.com/LuttyYang/luci-theme-material/ + * + * Argon Theme + * https://demos.creative-tim.com/argon-dashboard/index.html + * + * Login background + * https://unsplash.com/ + * + * Licensed to the public under the Apache License 2.0 + */ +/* + * Font generate by Icomoon + */ +/* + * Common Styles + */ +@import url("fonts.css?v=3"); +@import url("pure-min.css?v=1"); +:root { + /** general **/ + --primary: #5e72e4; + --dark-primary: #483d8b; + --background-color: #f4f5f7; + --font-color: #525f7f; + /** login form **/ + --login-form-background-color: #ffffff; + --darker: black; + --default: #525461; + --warning: #fb6340; + --footer-color: #aaa; + --menubar-background: #fff; + --menubar-scrollbar-thumb: #eee; + --menubar-text-color: #4c4c4c; + --blue: #5e72e4; + --indigo: #5603ad; + --purple: #8965e0; + --pink: #f3a4b5; + --red: #f5365c; + --orange: #fb6340; + --yellow: #ffd600; + --green: #2dce89; + --teal: #11cdef; + --cyan: #2bffc6; + --white: #fff; + --gray: #8898aa; + --gray-dark: #32325d; + --light: #ced4da; + --lighter: #e9ecef; + --secondary: #f7fafc; + --success: #2dce89; + --info: #11cdef; + --danger: #f5365c; + --light: #adb5bd; + --dark: #212529; + --neutral: #fff; + --login-form-bg-color: rgba(244, 245, 247, 0.8); + --blur-radius: 10px; + --blur-opacity: 0.5; + --blur-radius-dark: 10px; + --blur-opacity-dark: 0.5; + --font-family-sans-serif: "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + --font-family-normal: Open Sans, PingFangSC-Regular, Microsoft Yahei, WenQuanYi Micro Hei, "Helvetica Neue", Helvetica, Hiragino Sans GB, sans-serif; +} +[data-theme="dark"] { + --primary: #483d8b; + --dark-primary: #483d8b; + --background-color: #1e1e1e; + --font-color: #cccccc; + --darker: black; + --default: #525461; + --warning: #fb6340; + --footer-color: #aaa; + --menubar-background: #fff; + --menubar-scrollbar-thumb: #f6f9fc; + --menubar-text-color: #4c4c4c; + --blue: #5e72e4; + --indigo: #5603ad; + --purple: #8965e0; + --pink: #f3a4b5; + --red: #f5365c; + --orange: #fb6340; + --yellow: #ffd600; + --green: #2dce89; + --teal: #11cdef; + --cyan: #2bffc6; + --white: #fff; + --gray: #8898aa; + --gray-dark: #32325d; + --light: #ced4da; + --lighter: #e9ecef; + --secondary: #f7fafc; + --success: #2dce89; + --info: #11cdef; + --danger: #f5365c; + --light: #adb5bd; + --dark: #212529; + --neutral: #fff; + --login-form-bg-color: rgba(244, 245, 247, 0.8); + --blur-radius: 10px; + --blur-opacity: 0.5; + --blur-radius-dark: 10px; + --blur-opacity-dark: 0.5; + --font-family-sans-serif: "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + --font-family-normal: Open Sans, PingFangSC-Regular, Microsoft Yahei, WenQuanYi Micro Hei, "Helvetica Neue", Helvetica, Hiragino Sans GB, sans-serif; +} +html, +body { + margin: 0px; + padding: 0px; + height: 100%; + font-size: 16px; + font-family: "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"; + font-family: var(--font-family-sans-serif); +} +html { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + font-size: 0.875rem; + background-color: #f4f5f7; + background-color: var(--background-color); + color: #525f7f; + color: var(--font-color); +} +* { + margin: 0; + padding: 0; + box-sizing: border-box; + -webkit-tap-highlight-color: transparent; +} +::selection { + background-color: #5e72e4; + background-color: var(--primary); + color: #ffffff; + color: var(--white); +} +::-webkit-scrollbar { + width: 10px; + height: 10px; +} +::-webkit-scrollbar, +::-webkit-scrollbar-corner { + background: transparent; +} +::-webkit-scrollbar-thumb { + background: #9e9e9e; +} +::-webkit-scrollbar-thumb:hover { + background: #757575; +} +::-webkit-scrollbar-thumb:active { + background: #424242; +} +a:link, +a:visited, +a:active { + color: var(--primary); + text-decoration: none; +} +a:-webkit-any-link:not(li a, .main-left a, .brand, .pull-right a, .alert-message a, .login-container footer a, .cbi-button) { + color: -webkit-link; + cursor: pointer; + color: var(--primary); + text-shadow: 1px 1px 2px #ccc; +} +a:hover { + text-decoration: underline; +} +li { + list-style-type: none; +} +@-webkit-keyframes sparkle { + from { + background-position: 0 0; + } + to { + background-position: 0 -64px; + } +} +@-moz-keyframes sparkle { + from { + background-position: 0 0; + } + to { + background-position: 0 -64px; + } +} +@-o-keyframes sparkle { + from { + background-position: 0 0; + } + to { + background-position: 0 -64px; + } +} +@keyframes sparkle { + from { + background-position: 0 0; + } + to { + background-position: 0 -64px; + } +} +/*********************** +* +* Login Page +* +***************************/ +.login-container { + margin: auto; + height: 500px!important; + min-height: 500px!important; + left: 0; + right: 0; + bottom: 0; + margin-left: auto!important; + border-radius: 10px; +} +.login-form { + background-color: rgba(255, 255, 255, 0)!important; + border-radius: 10px; +} +.login-form .brand { + margin: 20px auto 20px 108px!important; +} +.input-group { + margin-bottom: 1rem!important; +} +.input-group input { + margin-bottom: 0!important; +} +.ftc { + bottom: 0!important; +} +.login-page { + height: 100%; +} +.login-page .video { + position: absolute; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background-color: #000; + background-color: var(--darker); + overflow: hidden; +} +.login-page .video video { + width: 100%; + height: 100%; + object-fit: cover; +} +.login-page .volume-control { + position: fixed; + right: 1rem; + top: 1rem; + width: 1.5rem; + height: 1.5rem; + z-index: 5000; + cursor: pointer; + background-size: contain; + background-image: url(../img/volume_high.svg); +} +.login-page .volume-control.mute { + background-image: url(../img/volume_off.svg); +} +.login-page .main-bg { + position: fixed; + width: 100%; + height: 100%; + left: 0; + top: 0; + background-image: url(../img/blank.png); + background-repeat: no-repeat; + background-position: center; + background-size: cover; + transition: all 0.5s; +} +.login-page .login-container { + height: 100%; + margin-left: 4.5rem; + position: absolute; + top: 0px; + display: flex; + flex-direction: column; + -webkit-box-pack: center; + justify-content: center; + align-items: flex-start; + min-height: 100%; + z-index: 2; + width: 420px; + box-shadow: rgba(0, 0, 0, 0.75) 0px 0px 35px -5px; + margin-left: 5%; + background: transparent; +} +.login-page .login-container .login-form { + display: flex; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: absolute; + top: 0px; + width: 100%; + min-height: 100%; + max-width: 420px; + background-color: #fff; + background-color: var(--white); + overflow:hidden; +} +.login-page .login-container .login-form .brand { + display: flex; + -webkit-box-align: center; + align-items: center; + margin: 50px auto 15px auto; + color: #525461; + color: var(--default); +} +.login-page .login-container .login-form .brand .icon { + width: 50px; + height: auto; +} +.login-page .login-container .login-form .brand-text { + font-size: 1.8rem; + font-weight: 700; + letter-spacing: 1px; + margin-bottom: auto; + font-family: "TypoGraphica"; + width: 420px; + padding: 0 0.5rem 0.1rem 0.5rem; + text-align: center; + word-break: break-word; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} +.login-page .login-container .login-form .brand:hover { + text-decoration: none; +} +.login-page .login-container .login-form .form-login { + width: 420px; + padding: 20px 50px; + box-sizing: border-box; +} +.login-page .login-container .login-form .form-login .errorbox { + text-align: center; + color: #fb6340; + color: var(--warning); +} +.login-page .login-container .login-form .form-login .input-group { + margin-bottom: 1.25rem; + position: relative; +} +.login-page .login-container .login-form .form-login .input-group::before { + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #525461; + color: var(--default); + font-size: 1.5rem; + position: absolute; + z-index: 100; + left: 10px; + top: 10px; +} +.login-page .login-container .login-form .form-login .input-group .border { + position: absolute; + width: 100%; + height: 1px; + bottom: 0; + border-bottom: 1px #5e72e4 solid; + border-bottom: 1px var(--primary) solid; + transform: scaleX(0); + transition: transform 0.3s; +} +.login-page .login-container .login-form .form-login .input-group input { + font-size: 1rem; + line-height: 1.5em; + display: block; + width: 100%; + padding: 0.5rem 0.75rem 0.5rem 3rem; + margin: 0.825rem 0; + box-sizing: border-box; + transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); + color: #525461; + color: var(--default); + border: 0; + border-radius: 0; + border-bottom: 1px solid #fff; + border-bottom: 1px solid var(--white); + background-color: transparent; + background-clip: padding-box; + box-shadow: 0 3px 2px rgba(233, 236, 239, 0.05); + outline: none; +} +.login-page .login-container .login-form .form-login .input-group input:focus + .border { + transform: scaleX(1); +} +.login-page .login-container .login-form .form-login .input-group .cbi-input-password { + margin-bottom: 2rem; + position: relative; +} +.login-page .login-container .login-form .form-login .user-icon::before { + content: "\e971"; +} +.login-page .login-container .login-form .form-login .pass-icon::before { + content: "\e910"; +} +.login-page .login-container .login-form .cbi-button-apply { + width: 100% !important; + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 50px 0px; + font-weight: 600; + font-size: 15px; + color: #fff; + color: var(--white); + text-align: center; + width: 100%; + cursor: pointer; + min-height: 50px; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + border-radius: 6px; + outline: none; + border-width: initial; + border-style: none; + border-color: initial; + border-image: initial; + padding: 10px 0px; + margin: 30px 0px 100px; + transition: all 0.3s !important; + letter-spacing: 0.8rem; +} +.login-page .login-container .login-form .cbi-button-apply:hover, +.login-page .login-container .login-form .cbi-button-apply :focus { + opacity: 0.9; +} +.login-page .login-container footer { + box-sizing: border-box; + width: 100%; + text-align: center; + line-height: 1.6rem; + display: flex; + justify-content: space-evenly; + margin-top: auto; + padding: 0px 0px 30px; + z-index: 10; + color: #525461; + color: var(--default); + position: absolute; + bottom: 0; +} +.login-page .login-container footer, +.login-page .login-container footer a { + color: var(--default); +} +.login-page .login-container footer .ftc { + position: absolute; + bottom: 30px; + width: 100%; +} +.login-page .login-container footer .luci-link { + display: block; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +@supports (-webkit-backdrop-filter: none) or (backdrop-filter: none) { + .login-page .login-container .login-form { + -webkit-backdrop-filter: blur(var(--blur-radius)); + backdrop-filter: blur(var(--blur-radius)); + background-color: rgba(244, 245, 247, var(--blur-opacity)); + } +} +/*********************** +* +* Header +* +***************************/ +header { + width: 100%; + padding: 0 0 0 0; + position: relative; +} +header .container { + margin-top: rem; + padding: 0.5rem 1rem 0 1rem; +} +header .container .pull-right > * { + position: relative; + top: 0.45rem; + cursor: pointer; +} +header::after { + content: ""; + position: absolute; + height: 2rem; + width: 100%; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; +} +header.bg-primary { + background-color: #5e72e4 !important; + background-color: var(--primary) !important; +} +header .fill { + padding: 0.8rem 0; + border-bottom: 0px solid rgba(255, 255, 255, 0.08) !important; +} +header .fill .container { + height: 2rem; + padding: 0 1.25rem; +} +header .fill .container .brand { + font-size: 1.5rem; + color: #fff; + color: var(--white); + font-family: "TypoGraphica"; + text-decoration: none; + padding-left: 1rem; + cursor: default; + vertical-align: text-bottom; + display: none; +} +/*********************** +* +* Footer +* +***************************/ +footer { + text-align: right; + padding: 1rem; + font-size: 0.8rem; +} +footer a { + text-decoration: none; +} +/*********************** +* +* Main +* +***************************/ +@keyframes anim-rotate { + 0% { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.main { + top: 0rem; + bottom: 0rem; + position: relative; + height: 100%; + width: 100%; + height: calc(100% - 4rem); +} +.main .main-left { + float: left; + width: 15%; + width: calc(0% + 15rem); + height: 100%; + background-color: #fff !important; + background-color: var(--menubar-background) !important; + box-shadow: rgba(0, 0, 0, 0.75) 0px 0px 15px -5px; + overflow-x: auto; + position: fixed; + z-index: 100; + transition: width 0.2s ease-in-out; + overflow-y: scroll; +} +.main .main-left::-webkit-scrollbar { + width: 5px; + height: 1px; +} +.main .main-left::-webkit-scrollbar-thumb { + background-color: #f6f9fc; + background-color: var(--menubar-scrollbar-thumb); +} +.main .main-left::-webkit-scrollbar-track { + background-color: transparent; +} +.main .main-left .sidenav-header { + padding: 1.5rem; + text-align: center; +} +.main .main-left .sidenav-header .brand { + font-size: 1.8rem; + color: #5e72e4; + color: var(--primary); + font-family: "TypoGraphica", sans-serif; + text-decoration: none; + padding-left: 0; + cursor: default; + vertical-align: text-bottom; + white-space: nowrap; +} +.main .main-left .nav { + margin-top: 0.5rem; +} +.main .main-left .nav li { + padding: 0rem; + cursor: pointer; +} +.main .main-left .nav li a { + color: #525f7f; + color: var(--default); + display: block; +} +.main .main-left .nav li:nth-last-child(1) { + font-size: 1.2rem; +} +.main .main-left .nav li:nth-last-child(1) .menu:after { + content: ""; +} +.main .main-left .nav li.slide { + padding: 0; +} +.main .main-left .nav li.slide ul { + display: none; +} +.main .main-left .nav li.slide ul li a { + position: relative; + margin: 0.1rem 1rem 0.1rem 3rem; + padding: 0.5rem 0rem 0.5rem 0; + text-decoration: none; + white-space: nowrap; + color: #4c4c4c; + color: var(--menubar-text-color); + transition: all 0.2s; + font-size: 0.875rem; +} +.main .main-left .nav li.slide ul li a::after { + content: ""; + position: absolute; + width: 00%; + height: 2px; + left: 0; + bottom: 0; + background-color: #5e72e4; + background-color: var(--primary); + transition: all 0.2s; +} +.main .main-left .nav li.slide ul li a:hover::after { + color: #000; + color: var(--darker); + width: 100%; +} +.main .main-left .nav li.slide .menu { + display: block; + margin: 0.1rem 0.5rem 0.1rem 0.5rem; + padding: 0.675rem 0 0.675rem 2.5rem; + border-radius: 0.375rem; + text-decoration: none; + cursor: default; + font-size: 1rem; + transition: all 0.2s; + position: relative; +} +.main .main-left .nav li.slide .menu::before { + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + position: absolute; + left: 0.8rem; + content: "\e915"; + color: #5e72e4; + color: var(--primary); +} +.main .main-left .nav li.slide .menu::after { + position: absolute; + right: 0.5rem; + top: 0.8rem; + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -moz-osx-font-smoothing: grayscale; + content: '\e90f'; + transition: all 0.15s ease; + color: #ced4da; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + transition: all 0.3s; +} +.main .main-left .nav li.slide .menu:hover, +.main .main-left .nav li.slide .menu.active { + cursor: pointer; + color: #fff; + background: #5e72e4; + background: var(--primary); + box-shadow: 0 0 1px #ccc; +} +.main .main-left .nav li.slide .menu:hover a, +.main .main-left .nav li.slide .menu.active a { + color: #000; +} +.main .main-left .nav li.slide .menu:hover a::after, +.main .main-left .nav li.slide .menu.active a::after { + color: #000; + width: 100%; +} +.main .main-left .nav li.slide .menu:hover::before, +.main .main-left .nav li.slide .menu.active::before { + color: #fff !important; +} +.main .main-left .nav li.slide .menu:hover::after, +.main .main-left .nav li.slide .menu.active::after { + color: #fff; +} +.main .main-left .nav li.slide .menu.active::after { + transform: rotate(90deg); +} +.main .main-left .nav li.slide .menu[data-title=Status]:before { + content: "\e906"; + color: #5e72e4; + color: var(--primary); +} +.main .main-left .nav li.slide .menu[data-title=System]:before { + content: "\e90a"; + color: #fb6340; +} +.main .main-left .nav li.slide .menu[data-title=Services]:before { + content: "\e909"; + color: #11cdef; +} +.main .main-left .nav li.slide .menu[data-title=NAS]:before { + content: "\e90c"; + color: #f3a4b5; +} +.main .main-left .nav li.slide .menu[data-title=VPN]:before { + content: "\e90b"; + color: #aaad03; +} +.main .main-left .nav li.slide .menu[data-title=Network]:before { + content: "\e908"; + color: #8965e0; +} +.main .main-left .nav li.slide .menu[data-title=Bandwidth_Monitor]:before { + content: "\e90d"; + color: #2dce89; +} +.main .main-left .nav li.slide .menu[data-title=Docker]:before { + content: "\e911"; + color: #6699ff; +} +.main .main-left .nav li.slide .menu[data-title=Statistics]:before { + content: "\e913"; + color: #5603ad; +} +.main .main-left .nav li.slide .menu[data-title=Control]:before { + content: "\e912"; + color: #5e72e4; + color: var(--primary); +} +.main .main-left .nav li.slide .menu[data-title=Asterisk]:before { + content: "\e914"; + color: #fb6340; +} +.main .main-left .nav li.slide .menu[data-title=Logout]:before { + content: "\e907"; + color: #adb5bd; +} +.main .main-left .nav li.slide .slide-menu li a { + position: relative; + margin: 0.1rem 1rem 0.1rem 3rem; + padding: 0.5rem 0rem 0.5rem 0; + text-decoration: none; + white-space: nowrap; + color: rgba(0, 0, 0, 0.6); + transition: all 0.2s; + font-size: 0.875rem; +} +.main .main-left .nav li.slide .slide-menu li a::after { + content: ""; + position: absolute; + width: 00%; + height: 2px; + left: 0; + bottom: 0; + background-color: #5e72e4; + background-color: var(--primary); + transition: all 0.2s; + box-shadow: 0 0 1px #ccc; +} +.main .main-left .nav li.slide .slide-menu li a:hover::after { + color: #000; + width: 100%; +} +.main .main-left .nav li.slide .slide-menu .active a { + color: #000; +} +.main .main-left .nav li.slide .slide-menu .active a::after { + color: #000; + width: 100%; +} +.main .main-left .nav li.slide:last-child > .menu::after { + content: ""; +} +.main .main-right { + width: 85%; + width: calc(100% - 15rem); + float: right; + height: auto; + transition: width 0.3s ease-in-out; +} +.main .main-right #maincontent { + position: relative; + z-index: 50; +} +.main .main-right #maincontent .container { + margin: 0 1.25rem 1rem 1.25rem; +} +.main .main-right #maincontent .container p { + color: #32325d; + line-height: 1.5em; +} +.main .main-right #maincontent .container > div:nth-child(1).alert-message.warning > a { + font: inherit; + overflow: visible; + text-transform: none; + display: inline-block; + margin-bottom: 0; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + min-width: 6rem; + padding: 0.5rem 1rem; + font-size: 0.9rem; + line-height: 1.42857143; + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; + margin-top: 2rem; + text-decoration: inherit; +} +.main .loading { + position: fixed; + width: 100%; + height: 100%; + z-index: 2000; + display: flex; + align-items: center; + justify-content: center; + background-color: #f8f9fe; + top: 0; +} +.main .loading span { + display: block; + text-align: center; + margin-top: 2rem; + color: #5e72e4; + color: var(--primary); + font-size: 2rem; +} +.main .loading span .loading-img { + animation: anim-rotate 2s infinite linear; + margin-right: 0.4rem; + display: inline-block; +} +.main .loading span .loading-img::before { + content: "\e603"; +} +/* button style */ +.cbi-button { + -webkit-appearance: none; + text-transform: uppercase; + height: auto; + color: rgba(0, 0, 0, 0.87); + background-color: #F0F0F0; + transition: all 0.2s ease-in-out; + display: inline-block; + padding: 0.75rem 0.8rem; + border: none; + border-radius: 0.2rem; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + vertical-align: middle; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 0.875rem; + width: auto !important; + line-height: 1em; +} +.cbi-button:hover, +.cbi-button:focus, +.cbi-button:active { + outline: 0; + text-decoration: none; +} +.cbi-button:hover, +.cbi-button:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} +.cbi-button:active { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.19), 0 5px 5px rgba(0, 0, 0, 0.23); +} +.cbi-button:disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.6; + box-shadow: none; +} +.cbi-button-check { + margin-top: 0.25rem !important; +} +form.inline + form.inline, +.cbi-button + .cbi-button { + margin-left: 0rem; +} +.cbi-button-reset, +.cbi-input-remove { + color: #fff !important; + background-color: #f0ad4e !important; + border-color: #eea236 !important; +} +.cbi-input-find, +.cbi-input-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-find, +.cbi-input-reload, +.cbi-button-reload { + color: #fff !important; + background-color: #337ab7 !important; + border-color: #2e6da4 !important; +} +.cbi-value-field .cbi-input-apply, +.cbi-button-apply, +.cbi-button-edit { + color: #fff !important; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + border-color: #5e72e4 !important; + border-color: var(--primary) !important; +} +.node-services-vssr .ssr-button { + margin-left: 0.3rem; +} +.cbi-section-remove > .cbi-button, +.cbi-button-remove { + color: #fff !important; + background-color: #fb6340 !important; + border-color: #fb6340 !important; +} +.cbi-value-field .cbi-button-add, +.cbi-value-field .cbi-button-remove, +.cbi-value-field .cbi-button-neutral { + min-width: 2.5rem !important; +} +/* Replace LuCI's default file and folder type icons */ +img[src="/luci-static/resources/cbi/reload.gif"] { + content: url("/luci-static/argon/img/reload.webp"); +} +img[src="/luci-static/resources/cbi/file.gif"] { + content: url("/luci-static/argon/img/file.webp"); +} +img[src="/luci-static/resources/cbi/add.gif"] { + content: url("/luci-static/argon/img/add.webp"); +} +img[src="/luci-static/resources/cbi/remove.gif"] { + content: url("/luci-static/argon/img/remove.webp"); +} +img[src="/luci-static/resources/cbi/edit.gif"] { + content: url("/luci-static/argon/img/edit.webp"); +} +img[src="/luci-static/resources/cbi/fieldadd.gif"] { + content: url("/luci-static/argon/img/fieldadd.webp"); +} +img[src="/luci-static/resources/cbi/link.gif"] { + content: url("/luci-static/argon/img/link.webp"); +} +img[src="/luci-static/resources/cbi/find.gif"] { + content: url("/luci-static/argon/img/find.webp"); +} +img[src="/luci-static/resources/cbi/folder.gif"] { + content: url("/luci-static/argon/img/folder.webp"); +} +/* input */ +.cbi-value input[type="password"], +.cbi-value input[type="text"] { + min-width: 15rem; +} +/* select */ +.cbi-value-field .cbi-dropdown { + min-width: 15rem; +} +select { + min-width: 20rem; + appearance: none; + -webkit-appearance: none; + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTY1MzQ4MDM3OTIyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI1ODMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4qIHsgdGV4dC1zaGFkb3c6IHRyYW5zcGFyZW50IDBweCAwcHggMHB4LCByZ2JhKDAsIDAsIDAsIDAuNSkgMHB4IDBweCAwcHggIWltcG9ydGFudDsgfQo8L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNMjAuNDggMjQ1Ljc2aDk4My4wNEw1MTIgNzc4LjI0eiIgcC1pZD0iMjU4NCIgZmlsbD0iIzcwNzA3MCI+PC9wYXRoPjwvc3ZnPg==') !important; + background-position: 96%; + background-size: 8px; + background-repeat: no-repeat; +} +.th[data-type="button"], +.td[data-type="button"], +.th[data-type="fvalue"], +.td[data-type="fvalue"] { + flex: 1 1 2em; + text-align: center; +} +/*textarea*/ +textarea { + border: 1px solid #dee2e6 !important; + outline: none; + min-height: 14rem !important; + padding: 0.8rem !important; + background-color: #fff; + font-family: var(--font-family-monospace) !important; + font-size: inherit; + color: black; + border-radius: 0.375rem !important; + vertical-align: middle; +} +.cbi-value .cbi-value-field textarea { + margin: 0.25rem; +} +/* change */ +.uci-change-list { + font-family: monospace; +} +.uci-change-list ins, +.uci-change-legend-label ins { + text-decoration: none; + border: 1px solid #00FF00; + background-color: #CCFFCC; + display: block; + padding: 2px; +} +.uci-change-list del, +.uci-change-legend-label del { + text-decoration: none; + border: 1px solid #FF0000; + background-color: #FFCCCC; + display: block; + font-style: normal; + padding: 2px; +} +.uci-change-list var, +.uci-change-legend-label var { + text-decoration: none; + border: 1px solid #CCCCCC; + background-color: #EEEEEE; + display: block; + font-style: normal; + padding: 2px; +} +.uci-change-list var ins, +.uci-change-list var del { + border: none; + white-space: pre; + font-style: normal; + padding: 0px; +} +.uci-change-list ins strong { + display: inline; +} +.uci-change-legend { + padding: 5px; +} +.uci-change-legend-label { + display: flex; + align-items: center; + width: auto; + float: left; + margin-right: 2rem; +} +.uci-change-legend-label > ins, +.uci-change-legend-label > del, +.uci-change-legend-label > var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; +} +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + line-height: 0; + border: none; +} +.uci-change-list var, +.uci-change-list del, +.uci-change-list ins { + padding: 0.5rem; +} +/* other fix */ +input[type="checkbox"] { + appearance: none !important; + -webkit-appearance: none !important; + border: 1px solid #dee2e6; + width: 17px !important; + height: 17px !important; + padding: 0; + cursor: pointer; + transition: all 0.2s; + margin: 0.5rem 0.25rem 0.7rem 0.25rem; + vertical-align: middle; +} +input[type="checkbox"]:checked { + background-image: url('data:image/svg+xml,%3csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3e%3cpath fill=\'%23fff\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3e%3c/svg%3e') !important; + background-color: #5e72e4; + background-color: var(--primary); + background-size: 70%; + background-repeat: no-repeat; + background-position: center; +} +ul li .cbi-input-checkbox { + margin: 0.5rem 0.25rem 0.7rem 0.25rem !important; + vertical-align: middle !important; +} +.cbi-input-radio { + appearance: none !important; + -webkit-appearance: none !important; + border: 1px solid #dee2e6; + width: 16px !important; + height: 16px !important; + padding: 0; + border-radius: 50%; + cursor: pointer; + transition: all 0.2s; + margin: 0.25rem 0; +} +.cbi-input-radio:checked { + background-image: url('data:image/svg+xml,%3csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3e%3ccircle r=\'3\' fill=\'%23fff\'/%3e%3c/svg%3e') !important; + background-color: #5e72e4; + background-color: var(--primary); + background-size: 70%; + background-repeat: no-repeat; + background-position: center; +} +.toggle { + position: relative; + display: block; + width: 40px; + height: 20px; + cursor: pointer; + -webkit-tap-highlight-color: transparent; + transform: translate3d(0, 0, 0); + margin: 1em 0; +} +.toggle:before { + content: ""; + position: relative; + top: 3px; + left: 3px; + width: 34px; + height: 14px; + display: block; + background: #9A9999; + border-radius: 8px; + transition: background 0.2s ease; +} +.toggle span { + position: absolute; + top: 0; + left: 0; + width: 20px; + height: 20px; + display: block; + background: white; + border-radius: 10px; + box-shadow: 0 3px 8px rgba(154, 153, 153, 0.5); + transition: all 0.2s ease; +} +.toggle span:before { + content: ""; + position: absolute; + display: block; + margin: -18px; + width: 56px; + height: 56px; + background: rgba(79, 46, 220, 0.5); + border-radius: 50%; + transform: scale(0); + opacity: 1; + pointer-events: none; +} +.cbi-input-checkbox:checked + .toggle:before { + background: #947ADA; +} +.cbi-input-checkbox:checked + .toggle span { + background: #4F2EDC; + transform: translateX(20px); + transition: all 0.2s cubic-bezier(0.8, 0.4, 0.3, 1.25), background 0.15s ease; + box-shadow: 0 3px 8px rgba(79, 46, 220, 0.2); +} +.cbi-input-checkbox:checked + .toggle span:before { + transform: scale(1); + opacity: 0; + transition: all 0.4s ease; +} +.cbi-value-field .cbi-input-checkbox, +.cbi-value-field .cbi-input-radio { + margin-top: 0.5rem; + height: 1rem; +} +.td .cbi-input-checkbox, +.td .cbi-input-radio { + margin-top: 0; +} +.cbi-value-field > input + .cbi-value-description { + padding: 0; +} +.cbi-value-field > ul > li { + display: flex; +} +.cbi-value-field > ul > li > label { + margin-top: 0rem; +} +.cbi-value-field > ul > li .ifacebadge { + background-color: #eee; + margin-left: 0.4rem; + margin-top: -0.5rem; +} +.cbi-section-table-row > .cbi-value-field .cbi-dropdown { + min-width: 7rem; +} +.cbi-section-create { + margin: 0; + padding-left: 0.5rem; + align-items: center; +} +.cbi-section-create > * { + margin: 0.25rem; +} +.cbi-section-remove { + padding: 0.5rem; +} +div.cbi-value var, +td.cbi-value-field var, +.td.cbi-value-field var { + font-style: italic; + color: var(--primary); + text-shadow: 1px 1px 2px #ccc; +} +small { + font-size: 90%; + white-space: normal; + line-height: 1.42857143; +} +.cbi-button-up, +.cbi-button-down { + display: inline-block; + min-width: 0; + padding: 0.2rem 0.6rem; + font-size: 1.2rem; + color: #5e72e4 !important; + color: var(--primary) !important; +} +.cbi-optionals { + padding: 1rem 1rem 0 1rem; + border-top: 1px solid #CCC; +} +.cbi-dropdown-container { + position: relative; +} +.cbi-tooltip-container { + cursor: help; +} +.cbi-tooltip { + position: absolute; + z-index: 1000; + left: -1000px; + opacity: 0; + transition: opacity 0.25s ease-out; + pointer-events: none; + box-shadow: 0 0 2px #444; +} +.cbi-tooltip-container:hover .cbi-tooltip { + left: auto; + opacity: 1; + transition: opacity 0.25s ease-in; +} +.cbi-map-descr + fieldset { + margin-top: 1rem; +} +.cbi-section > legend { + display: none !important; +} +/* Define the error text border breathe display animation */ +@keyframes error-border-breathe { + 0%{ + border-color: #fb6340; + } + 50%{ + border-color: transparent; + } + 100%{ + border-color: #fb6340; + } +} +/* Center display error text box */ +.cbi-section-error > ul{ + text-align: center; +} +/* Add border for error text box, and border breathe display animation to make it more noticeable */ +.cbi-section-error > ul > li { + font-weight: 600; + max-width: 60%; + color: #fb6340; + line-height: 1rem; + display: inline-block; + border: 2px solid #fb6340; + border-radius: 0.3rem; + animation: error-border-breathe 1.5s ease-in-out infinite; + padding-left: 4px; + padding-right: 4px; + padding-top: 2px; + padding-bottom: 2px; +} +.cbi-input-invalid, +.cbi-value-error input { + color: #fb6340; + border: 1px dashed #fb6340; +} +fieldset > fieldset { + margin: 0; + padding: 0; + border: none; + box-shadow: none; +} +.zonebadge .cbi-tooltip { + padding: 0.25rem; + background: inherit; + margin: -1.5rem 0 0 -0.5rem; +} +.zonebadge-empty { + background: repeating-linear-gradient(45deg, rgba(204, 204, 204, 0.5), rgba(204, 204, 204, 0.5) 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px); + color: #404040; +} +.zone-forwards { + display: flex; + min-width: 10rem; +} +.zone-forwards > * { + flex: 1 1 45%; +} +.zone-forwards > span { + flex-basis: 10%; + text-align: center; + padding: 0 0.25rem; +} +.zone-forwards .zone-src, +.zone-forwards .zone-dest { + display: flex; + flex-direction: column; +} +#diag-rc-output > pre { + background-color: #fff; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 1.5rem; + white-space: pre-wrap; + word-wrap: break-word; + font-size: 1.4rem; + color: #404040; +} +input[name="ping"], +input[name="traceroute"], +input[name="nslookup"] { + width: 80%; +} +/* fix progress bar */ +#swaptotal > div, +#swapfree > div, +#memfree > div, +#membuff > div, +#conns > div, +#memtotal > div { + width: 100% !important; + height: 1.6rem !important; + line-height: 1.6rem; + border-radius: 0.25rem; + overflow: hidden; +} +#swaptotal > div > div, +#swapfree > div > div, +#memfree > div > div, +#membuff > div > div, +#conns > div > div, +#memtotal > div > div { + height: 100% !important; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + background-image: url(../img/trafficbar.png); + background-position: left top; + animation: sparkle 1000ms linear infinite; +} +#swaptotal > div > div > div > small, +#swapfree > div > div > div > small, +#memfree > div > div > div > small, +#membuff > div > div > div > small, +#conns > div > div > div > small, +#memtotal > div > div > div > small { + text-shadow: 1px 1px 2px #ccc; +} +/* fix multiple table */ +table table, +.table .table { + border: none; +} +.cbi-value-field table, +.cbi-value-field .table { + border: none; +} +td > table > tbody > tr > td, +.td > .table > .tbody > .tr > .td { + border: none; +} +.cbi-value-field > table > tbody > tr > td, +.cbi-value-field > .table > .tbody > .tr > .td { + border: none; +} +/* button style */ +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit, +.cbi-button-edit.important, +.cbi-button-apply.important, +.cbi-button-reload.important, +.cbi-button-action.important { + color: #fff; + background-color: #337ab7; +} +.cbi-page-actions .cbi-button-save, +.cbi-button-add.important, +.cbi-button-save.important, +.cbi-button-positive.important { + color: #fff; + background-color: #5bc0de; +} +.cbi-button-remove.important, +.cbi-button-reset.important, +.cbi-button-negative.important { + color: #fff; + background-color: #d9534f; +} +.cbi-button-find, +.cbi-button-link, +.cbi-button-neutral { + color: #fff !important; + border: 1px solid #f0ad4e !important; + background-color: #f0ad4e !important; +} +.cbi-button-edit, +.cbi-button-apply, +.cbi-button-reload, +.cbi-button-action { + color: #2e6da4; + border: 1px solid #2e6da4; + background-color: transparent; +} +.cbi-page-actions .cbi-button-apply + .cbi-button-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-positive { + color: #46b8da; + border: 1px solid #46b8da; + background-color: transparent; +} +.cbi-section-remove > .cbi-button, +.cbi-button-remove, +.cbi-button-reset, +.cbi-button-negative { + color: #fff !important; + border: 1px solid #d43f3a !important; + background-color: #fb6340 !important; +} +.cbi-page-actions .cbi-button-link:first-child { + float: left; +} +.a-to-btn { + text-decoration: none; +} +/* file selector button */ +::file-selector-button { + color: #fff; + border-radius: .25rem; + border: 1px solid #2e6da4; + padding: .4rem .5rem; + background-color: #337ab7; + box-sizing: border-box; + cursor: pointer; + transition: all 0.2s ease-in-out; +} +::file-selector-button:hover, +::file-selector-button:focus, +::file-selector-button:active { + outline: 0; + text-decoration: none; +} +::file-selector-button:hover, +::file-selector-button:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} +::file-selector-button:active { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.19), 0 5px 5px rgba(0, 0, 0, 0.23); +} +/* table */ +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + width: auto !important; + background-color: #e9ecef; + background-color: var(--lighter); +} +.td.cbi-section-actions { + text-align: right; + vertical-align: middle; +} +.td.cbi-section-actions > * { + display: flex; +} +.td.cbi-section-actions > * > *, +.td.cbi-section-actions > * > form > * { + flex: 1 1 4em; + margin: 0 1px; +} +.td.cbi-section-actions > * > form { + display: inline-flex; + margin: 0; +} +/* desc */ +/* luci */ +.hidden { + display: none; +} +.left, +.left::before { + text-align: left !important; +} +.right, +.right::before { + text-align: right !important; +} +.center, +.center::before { + text-align: center !important; +} +.top { + align-self: flex-start !important; + vertical-align: top !important; +} +.bottom { + align-self: flex-end !important; + vertical-align: bottom !important; +} +.inline { + display: inline; +} +.cbi-page-actions { + border-top: 0px solid #eee; + padding-top: 0rem; + text-align: right; +} +#xhr_poll_status { + cursor: pointer; + display: inline-block; +} +#xhr_poll_status > .label.success { + background-color: #fff !important; + color: #32325d !important; +} +.label { + padding: 0.3rem 0.8rem; + font-size: 0.8rem; + font-weight: bold; + color: #ffffff !important; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + text-shadow: none; + text-decoration: none; +} +.notice { + background-color: #5BC0DE; +} +.showSide { + display: none; + color: #fff; + font-size: 1.4rem; +} +.darkMask { + width: 100%; + height: 100%; + position: fixed; + background-color: rgba(0, 0, 0, 0.56); + z-index: 99; + left: 0; + top: 0; + display: none; +} +#cbi-firewall-redirect table *, +#cbi-network-switch_vlan table *, +#cbi-firewall-zone table * { + font-size: small; +} +#cbi-firewall-redirect table input[type="text"], +#cbi-network-switch_vlan table input[type="text"], +#cbi-firewall-zone table input[type="text"] { + width: 5rem; +} +#cbi-firewall-redirect table select, +#cbi-network-switch_vlan table select, +#cbi-firewall-zone table select { + min-width: 3.5rem; +} +#cbi-network-switch_vlan .th, +#cbi-network-switch_vlan .td { + flex-basis: 12%; +} +/* Fix background color of table-titles */ +.cbi-section-node > .cbi-section-table > tbody > .cbi-section-table-titles th { + background-color: var(--lighter); + border: none; +} +/* Fix background color of table-descr */ +.cbi-section-node > .cbi-section-table > tbody > .cbi-section-table-descr th { + border: none; +} +/* Fix background color not change when the H tag is in the table rowstyle-1 */ +.cbi-section-node > .cbi-section-table > tbody > .cbi-rowstyle-1 th { + background-color: #fff; + border-top: 1px solid #ddd; + border-bottom: none; +} +/* Fix background color not change when the H tag is in the table rowstyle-2 */ +.cbi-section-node > .cbi-section-table > tbody > .cbi-rowstyle-2 th { + background-color: #f9f9f9; + border-top: 1px solid #ddd; + border-bottom: none; +} +/* Change the color of the H label in the table to make it more visible */ +th h1, td h1, +th h2, td h2, +th h3, td h3, +th h4, td h4, +th h5, td h5, +th h6, td h6 { + background: var(--lighter); +} +/* language fix */ +body.lang_pl.node-main-login .cbi-value-title { + width: 12rem; +} +/* applyreboot fix */ +#applyreboot-container { + margin: 2rem; +} +#applyreboot-section { + margin: 2rem; + line-height: 300%; +} +.table { + display: table; + position: relative; + color: #525f7f; + border-collapse: collapse; +} +.tr { + display: table-row; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} +.thead { + display: table-header-group; +} +.tbody { + display: table-row-group; +} +.tfoot { + display: table-footer-group; +} +.td, +.th { + vertical-align: middle; + text-align: center; + display: table-cell; + padding: 1rem; + white-space: nowrap; +} +.th { + font-weight: bold; +} +.tr.placeholder { + height: 4em; +} +.tr.placeholder > .td { + position: absolute; + left: 0; + right: 0; + bottom: 0; + text-align: center; + background: inherit; +} +.table[width="33%"], +.th[width="33%"], +.td[width="33%"] { + width: 33%; + padding-left: 1.5rem; + padding-right: 1.5rem; +} +.table[width="100%"], +.th[width="100%"], +.td[width="100%"] { + width: 100%; +} +.table-titles .th { + padding: 0.75rem 1rem; + color: #8898aa; + background-color: #f6f9fc; +} +.col-1 { + flex: 1 1 30px !important; + -webkit-flex: 1 1 30px !important; +} +.col-2 { + flex: 2 2 60px !important; + -webkit-flex: 2 2 60px !important; +} +.col-3 { + flex: 3 3 90px !important; + -webkit-flex: 3 3 90px !important; +} +.col-4 { + flex: 4 4 120px !important; + -webkit-flex: 4 4 120px !important; +} +.col-5 { + flex: 5 5 150px !important; + -webkit-flex: 5 5 150px !important; +} +.col-6 { + flex: 6 6 180px !important; + -webkit-flex: 6 6 180px !important; +} +.col-7 { + flex: 7 7 210px !important; + -webkit-flex: 7 7 210px !important; +} +.col-8 { + flex: 8 8 240px !important; + -webkit-flex: 8 8 240px !important; +} +.col-9 { + flex: 9 9 270px !important; + -webkit-flex: 9 9 270px !important; +} +.col-10 { + flex: 10 10 300px !important; + -webkit-flex: 10 10 300px !important; + white-space: inherit; +} +.cbi-rowstyle-2 .cbi-button-up, +.cbi-rowstyle-2 .cbi-button-down { + background-color: var(--lighter); +} +.cbi-button-up, +.cbi-button-down, +.cbi-value-helpicon, +.showSide, +.main > .loading > span { + font-family: 'argon' !important; + font-style: normal !important; + font-weight: normal !important; + font-variant: normal !important; + text-transform: none !important; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.cbi-button-up { + transform: rotate(180deg); +} +select { + padding: 0.36rem 0.8rem; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; +} +select, +input { + font-size: 0.875rem; + transition: all 0.15s ease-in-out; + line-height: 1.5; + padding: 0.625rem 0.75rem; + color: #8898aa; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + background-color: #fff; + background-clip: padding-box; + box-shadow: 0 3px 2px rgba(233, 236, 239, 0.05); + outline: none; + transition: box-shadow 0.15s ease; + margin: 0.25rem; +} +select:not([multiple="multiple"]):hover, +input:hover, +input:focus { + border-color: #5e72e4; + border-color: var(--primary); + outline: 0; + background-color: #fff; + box-shadow: 0 3px 9px rgba(50, 50, 9, 0), 3px 4px 8px rgba(94, 114, 228, 0.1); +} +select[multiple="multiple"] { + height: auto; +} +code { + color: #0099CC; +} +abbr { + color: #005470; + text-decoration: underline; + cursor: help; +} +hr { + margin: 1rem 0; + border-color: #EEE; + opacity: 0.1; +} +.kpi { + font-size: 0.875rem; +} +fieldset[id^="cbi-apply-"] { + position: fixed; + z-index: 200; + width: 20rem; + margin-left: -10rem; + margin-top: -5rem; + height: 10rem; + left: 50%; + top: 50%; + padding: 1rem; + box-sizing: border-box; + font-size: 1.2rem; + text-align: center; + box-shadow: rgba(0, 0, 0, 0.75) 0px 0px 15px -5px; + transition: all 0.3s; +} +[id^="cbi-apply-"] > .panel-title { + border-bottom: none; +} +[id^="cbi-apply-"] > [id^="cbi-apply-"] { + position: initial; + width: auto; + height: auto; + font-size: 0.875rem; + margin-left: 0rem; + margin-top: 0.8rem; + display: block; +} +.cbi-section > h3:first-child, +.panel-title { + font-size: 1.125rem; + width: 100%; + display: block; + margin: 0; + padding: 0.8755rem 1.5rem; + border-bottom: 1px solid #ddd; + letter-spacing: 0.1rem; + color: #32325d; + font-weight: normal; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +table, +.table { + width: 100%; +} +table > tbody > tr > td, +table > tbody > tr > th, +table > tfoot > tr > td, +table > tfoot > tr > th, +table > thead > tr > td, +table > thead > tr > th, +.table > .tbody > .tr > .td, +.table > .tbody > .tr > .th, +.table > .tfoot > .tr > .td, +.table > .tfoot > .tr > .th, +.table > .thead > .tr > .td, +.table > .thead > .tr > .th { + padding: 0.5rem; + border-top: 1px solid #ddd; +} +.cbi-section-table-cell { + white-space: nowrap; + align-self: flex-end; + flex: 1 1 auto; +} +.cbi-section-table { + font-size: 0.875rem; + border: none; + margin: 0 !important; +} +.status-bar { + font-size: 0.875rem; +} +.cbi-section-table-row:last-child { + margin-bottom: 0; +} +.cbi-section-table-row > .cbi-value-field .cbi-dropdown, +.cbi-section-table-row > .cbi-value-field .cbi-input-select, +.cbi-section-table-row > .cbi-value-field .cbi-input-text, +.cbi-section-table-row > .cbi-value-field .cbi-input-password { + width: 100%; +} +.cbi-section-table-row > .cbi-value-field .cbi-input-text, +.cbi-section-table-row > .cbi-value-field .cbi-input-password { + min-width: 100px; +} +#lease6_status_table > tbody > .cbi-section-table-row.cbi-rowstyle-1 div, +#lease6_status_table > tbody > .cbi-section-table-row.cbi-rowstyle-2 div { + min-width: 100%; +} +.cbi-section-table-row > .cbi-value-field [data-dynlist] > input, +.cbi-section-table-row > .cbi-value-field input.cbi-input-password { + width: calc(100% - 1.5rem); +} +div > table > tbody > tr:nth-of-type(2n), +div > .table > .tbody > .tr:nth-of-type(2n) { + background-color: #f9f9f9; +} +div > table > tbody > tr:nth-of-type(2n), +div > .table > .tbody > .tr:nth-of-type(2n) { + background-color: #f9f9f9; +} +.danger { + background-color: #f5365c !important; + background-color: var(--danger) !important; + color: #fff !important; +} +/* Define the warning background-color breathe display animation */ +@keyframes warning-background-color-breathe { + 0%{ + color: #fff; + background-color: #fb6340; + } + 50%{ + color: #32325d; + background-color: #fff; + } + 100%{ + color: #fff; + background-color: #fb6340; + } +} +.warning, +.warning * { + background-color: #fb6340; + background-color: var(--warning); + color: #fff; + animation: warning-background-color-breathe 1.5s ease-in-out infinite !important; +} +.notice { + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + color: #fff !important; +} +.success { + background-color: #2dce89 !important; + background-color: var(--success) !important; + color: #fff !important; +} +.errorbox, +.alert-message { + margin: 0 0 0 0; + padding: 1rem 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1.5em; + font-family: inherit; + min-width: inherit; + overflow: auto; + border-radius: 0.3rem; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12); +} +.errorbox { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.alert-message.warning { + margin-bottom: 1rem; +} +.error { + color: red; +} +h1 { + font-size: 2rem; + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} +h2 { + margin: 0 0 1rem 0; + font-size: 1.25rem; + letter-spacing: 0.1rem; + padding: 1rem 1.5rem; + color: #32325d; + border-radius: 0.375rem; + background: #fff; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); +} +#cbi-dropbear h2, +#cbi-dropbear .cbi-map-descr, +#cbi-dropbear .cbi-map-descr abbr, +#cbi-rc h2, +#cbi-rc .cbi-map-descr, +#cbi-distfeedconf h2, +#cbi-distfeedconf .cbi-map-descr, +#cbi-customfeedconf h2, +#cbi-customfeedconf .cbi-map-descr, +#cbi-download h2, +#cbi-filelist h2 { + color: #32325d !important; +} +h3 { + font-size: 1.15rem; + width: 100%; + display: block; + margin: 1rem 0; + color: #32325d; + font-weight: bold; + letter-spacing: 0.1rem; + padding: 1rem 1.5rem; + border-radius: 0.375rem; + background: var(--lighter); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); +} +fieldset { + margin: 1.25rem 0 0 0; + padding: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + border: 1px solid rgba(0, 0, 0, 0.05); + border-radius: 0.375rem; + background-color: #fff; + box-shadow: 0 0 2rem 0 rgba(136, 152, 170, 0.15); + -webkit-overflow-scrolling: touch; +} +fieldset > legend { + display: none !important; +} +fieldset > fieldset { + margin: 0; + padding: 0; + border: none; + box-shadow: none; +} +fieldset.cbi-section p { + padding: 1em; +} +.panel-title { + width: 100%; + display: block; + margin-bottom: 0; + padding: 0.8755rem 1.5rem; + background-color: #fff; + border-bottom: 1px solid #ddd; + margin-bottom: 0rem; + letter-spacing: 0.1rem; + color: #32325d; + font-weight: 600; + position: sticky; + left: 0; +} +table { + border-spacing: 0; + border-collapse: collapse; + width: 100%; +} +table > tbody > tr > td, +table > tfoot > tr > td, +table > thead > tr > td { + font-size: 0.875rem; + color: #525f7f; + line-height: 1.4em; + vertical-align: middle !important; + padding: 0.8rem 1.5rem; + border-top: 1px solid #ddd; +} +table > tbody > tr > th, +table > tfoot > tr > th, +table > thead > tr > th { + padding-right: 1.5rem; + padding-left: 1.5rem; + color: #8898aa; + background-color: #f6f9fc; + font-size: 0.65rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + letter-spacing: 1px; + border-bottom: 1px solid #e9ecef; +} +table > tbody > tr:first-child > td, +table > tfoot > tr:first-child > td, +table > thead > tr:first-child > td { + border-top: 0px; +} +.cbi-section-table-cell { + text-align: center; +} +.cbi-section-table-row { + text-align: center; +} +fieldset > table > tbody > tr:nth-of-type(2n) { + background-color: #f9f9f9; +} +/* fix multiple table */ +table table { + border: none; +} +.cbi-value-field table { + border: none; +} +td > table > tbody > tr > td { + border: none; +} +.cbi-value-field > table > tbody > tr > td { + border: none; +} +/* table */ +.tabs { + margin: 0 0 1rem 0; + padding: 0 1rem; + background-color: #FFFFFF; + border-radius: 0.375rem; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + white-space: nowrap; + overflow-x: auto; +} +.tabs::-webkit-scrollbar, +.cbi-section::-webkit-scrollbar, +.cbi-section > *::-webkit-scrollbar, +textarea::-webkit-scrollbar, +div::-webkit-scrollbar { + width: 5px; + height: 5px; +} +.tabs::-webkit-scrollbar-thumb { + background-color: #9e9e9e; +} +.tabs::-webkit-scrollbar-thumb:hover { + background: #757575; +} +.tabs::-webkit-scrollbar-thumb:active { + background: #424242; +} +.tabs::-webkit-scrollbar-track { + background-color: transparent; +} +.tabs li[class~="active"], +.tabs li:hover { + cursor: pointer; + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); + color: #5e72e4; + color: var(--primary); + background-color: var(--light-subtabs-background); + margin-bottom: 0; + border-radius: 0; +} +.tabs li[class~="active"] a, +.tabs li:hover a { + color: #5e72e4; + color: var(--primary); +} +.tabs li { + font-size: 0.875rem; + display: inline-block; + padding: 0.875rem 0rem; + border-bottom: 0.18751rem solid rgba(0, 0, 0, 0); +} +.tabs li a { + text-decoration: none; + color: #404040; + padding: 0.5rem 0.8rem; +} +.tabs li:hover { + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); +} +.cbi-tabmenu { + color: white; + padding: 0.5rem 0.5rem 0 0.5rem; + white-space: nowrap; + overflow-x: auto; + border-bottom: 1px solid #ddd !important; +} +.cbi-tabmenu::-webkit-scrollbar { + width: 1px; + height: 5px; +} +.cbi-tabmenu::-webkit-scrollbar-thumb { + background-color: #9e9e9e; +} +.cbi-tabmenu::-webkit-scrollbar-thumb:hover { + background: #757575; +} +.cbi-tabmenu::-webkit-scrollbar-thumb:active { + background: #424242; +} +.cbi-tabmenu::-webkit-scrollbar-track { + background-color: transparent; +} +.cbi-tabmenu li { + background: #e3e3e3; + display: inline-block; + font-size: 0.875rem; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + padding: 0.5rem 0rem; + border-bottom: 0.18751rem solid rgba(0, 0, 0, 0); +} +.cbi-tabmenu li a { + text-decoration: none; + color: #404040; + padding: 0.5rem 0.8rem; +} +.cbi-tabmenu li:hover { + cursor: pointer; + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); + color: #5e72e4; + color: var(--primary); + background-color: var(--light-subtabs-background); + margin-bottom: 0; +} +.cbi-tabmenu li:hover a { + color: #525f7f; +} +.cbi-tabmenu li[class~="cbi-tab"] { + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); + color: var(--primary); + background-color: var(--light-subtabs-background); + margin-bottom: 0; +} +.cbi-tabmenu li[class~="cbi-tab"] a { + color: #5e72e4; + color: var(--primary); +} +.cbi-tab-descr { + margin: 1rem 1.5rem; + color: #32325d; + font-size: small; + line-height: 1.5em; +} +.cbi-dropdown { + display: inline-flex; + cursor: pointer; + position: relative; + padding: 0; + height: auto; +} +.cbi-dropdown:focus { + outline: 2px solid #4b6e9b; +} +.cbi-dropdown > ul { + margin: 0 !important; + padding: 0; + list-style: none; + overflow-x: hidden; + overflow-y: auto; + display: flex; + width: 100%; +} +.cbi-dropdown > ul.preview { + display: none; +} +.cbi-dropdown > .open { + border: 0px outset #eee; + flex-basis: 15px; + background: #fff; +} +.cbi-dropdown > .open, +.cbi-dropdown > .more { + flex-grow: 0; + flex-shrink: 0; + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + line-height: 2em; + padding: 0 0.25em; +} +.cbi-dropdown > .more, +.cbi-dropdown > ul > li[placeholder] { + color: #777; + font-weight: bold; + text-shadow: 1px 1px 0px #fff; + display: none; +} +.cbi-dropdown > ul > li { + display: none; + padding: 0.25em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex-shrink: 1; + flex-grow: 1; + align-items: center; + align-self: center; + min-height: 20px; +} +.cbi-dropdown > ul > li .hide-open { + display: initial; +} +.cbi-dropdown > ul > li .hide-close { + display: none; +} +.cbi-dropdown > ul > li[display]:not([display="0"]) { + border-left: 1px solid #ccc; +} +.cbi-dropdown[empty] > ul { + max-width: 1px; +} +.cbi-dropdown > ul > li > form { + display: none; + margin: 0; + padding: 0; + pointer-events: none; +} +.cbi-dropdown > ul > li img { + vertical-align: middle; + margin-right: 0.25em; +} +.cbi-dropdown > ul > li > form > input[type="checkbox"] { + margin: 0; + height: auto; +} +.cbi-dropdown > ul > li input[type="text"] { + height: 20px; +} +.cbi-dropdown[open] { + position: relative; + border-color: #5e72e4; + border-color: var(--primary); +} +.cbi-dropdown[open] > ul.dropdown { + display: block; + background: #fff; + border-color: #5e72e4; + border-color: var(--primary); + position: absolute; + z-index: 1000; + max-width: none; + min-width: 100%; + width: auto; + box-shadow: 0 1px 3px rgba(50, 50, 93, 0.15), 0 1px 0 rgba(0, 0, 0, 0.05); +} +.cbi-dropdown > ul > li[display], +.cbi-dropdown[open] > ul.preview, +.cbi-dropdown[open] > ul.dropdown > li, +.cbi-dropdown[multiple] > ul > li > label, +.cbi-dropdown[multiple][open] > ul.dropdown > li, +.cbi-dropdown[multiple][more] > .more, +.cbi-dropdown[multiple][empty] > .more { + flex-grow: 1; + display: flex; + align-items: center; +} +.cbi-dropdown[empty] > ul > li, +.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder], +.cbi-dropdown[multiple][open] > ul.dropdown > li > form { + display: block; +} +.cbi-dropdown[open] > ul.dropdown > li .hide-open { + display: none; +} +.cbi-dropdown[open] > ul.dropdown > li .hide-close { + display: initial; +} +.cbi-dropdown[open] > ul.dropdown > li { + border-bottom: 1px solid #ccc; +} +.cbi-dropdown[open] > ul.dropdown > li[selected] { + background: #b0d0f0; +} +.cbi-dropdown[open] > ul.dropdown > li.focus { + background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%); +} +.cbi-dropdown[open] > ul.dropdown > li:last-child { + margin-bottom: 0; + border-bottom: none; +} +.cbi-dropdown[disabled] { + pointer-events: none; + opacity: 0.6; +} +.cbi-dropdown .zonebadge { + width: 100%; +} +.cbi-dropdown[open] .zonebadge { + width: 100%; +} +.cbi-dropdown { + font-size: 0.875rem; + transition: all 0.15s ease-in-out; + line-height: 1.5; + height: calc(2.75rem + 2px); + padding: 0m; + color: #8898aa; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + background-color: #fff; + background-clip: padding-box; + box-shadow: 0 3px 2px rgba(233, 236, 239, 0.05); + margin: 0.25rem; +} +.cbi-value-field .cbi-dropdown { + min-width: 20rem; +} +.cbi-value-field .cbi-dropdown .zonebadge > .ifacebadge { + padding: 0rem 1rem; + margin: 0rem 0.3rem; + border: 1px solid #6C6C6C; +} +select[multiple="multiple"] { + height: auto; +} +.cbi-dropdown > ul { + margin: 0 !important; + padding: 0; + list-style: none; + overflow-x: hidden; + overflow-y: hidden; + display: flex; + width: 100%; +} +.cbi-section > legend { + display: none !important; +} +.cbi-section-remove:nth-of-type(2n), +.cbi-section-node:nth-of-type(2n) { + background-color: #f9f9f9; +} +.cbi-section-node-tabbed { + padding: 0; + margin-top: 0; +} +.cbi-section-node { + background: #fff; + border: 0; + border-radius: 0.375rem; + margin-bottom: 0px; + box-shadow: 0 0 0rem 0 rgba(136, 152, 170, 0.15); + overflow-x: auto; + overflow-y: hidden; + padding: 0rem 0; +} +#cbi-network-lan.cbi-section-node { + overflow-x: visible; + overflow-y: visible; +} +.cbi-section-node .cbi-value { + padding: 0.5rem 1rem 0.5rem 1rem !important; +} +.cbi-tabcontainer > .cbi-value:nth-of-type(2n), +.cbi-tabcontainer > .cbi-value:nth-of-type(2n)>textarea { + background-color: #f9f9f9; +} +.cbi-value-field, +.cbi-value-description { + display: table-cell; + line-height: 1.6; + font-size: 0.875rem; +} +/* Fix text position of the luci-app-filebrowser running state */ +#cbi-filebrowser > .cbi-section > .cbi-section > .cbi-value > .cbi-value-field, +/* Fix text position of the luci-apps running state of the [Control] type */ +form > .cbi-map > .cbi-section > .cbi-section-node > .cbi-value > .cbi-value-field font { + word-wrap: break-word; + font-size: 0.875rem; + line-height: 1.6; + padding: 0.7rem; + padding-left: 0; + text-align: right; + display: table-cell; +} +.cbi-value-helpicon > img { + display: none; +} +.cbi-value-helpicon:before { + content: "\f059"; +} +.cbi-value-description { + color: #8d8d8d; + opacity: 0.8; + font-size: small; + padding: 0.5rem; +} +.cbi-value-title { + word-wrap: break-word; + font-size: 0.875rem; + line-height: 1.6; + color: #525f7f; + padding: 0.7rem; + padding-left: 0; + width: 23rem; + text-align: right; + display: table-cell; +} +.cbi-value { + padding: 0.3rem 1rem; + display: inline-block; + width: 100%; +} +.cbi-section-table-descr > .cbi-section-table-cell, +.cbi-section-table-titles > .cbi-section-table-cell { + border: none; +} +.cbi-rowstyle-1 { + background-color: #fff; +} +.cbi-rowstyle-2 { + background-color: #fefefe; +} +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + width: auto !important; +} +/* desc */ +.cbi-section-descr { + padding: 1rem 1.5rem; + font-size: 0.7rem; + font-weight: 600; + line-height: 1.5em; + color: #525f7f; +} +.cbi-map-descr { + margin: 0rem 1.5rem 1rem 1.5rem; + color: #32325d; + font-size: small; + line-height: 1.5em; +} +/* input */ +.cbi-value input[type="password"], +.cbi-value input[type="text"] { + min-width: 20rem; +} +input[type="checkbox"] { + height: auto; +} +/* select */ +.cbi-value-field .ifacebadge { + display: inline-flex; + border-bottom: 0px solid #CCCCCC; + padding: 0.5rem 1rem; + box-shadow: none; +} +td > .ifacebadge { + background-color: #F0F0F0; + font-size: 0.9rem; +} +.ifacebadge > img { + float: right; + margin: 0 0.3rem; +} +#syslog { + width: 100%; + min-height: 15rem; + padding: 1rem; + line-height: 1.4em; + color: #1e1e1e; + border-radius: 0; + background-color: #fff; + border: none; + outline: none; +} +.ifacebadge { + display: inline-flex; + border-bottom: 0px solid #CCCCCC; + padding: 0.5rem 1rem; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + background: #fff; +} +td > .ifacebadge, +.td > .ifacebadge { + background-color: #e9ecef; + font-size: 0.9rem; + border-radius: 0.2rem; +} +.ifacebadge > em, +.ifacebadge > img { + display: inline-block; + margin: 0 0.3rem; + align-self: center; +} +.ifacebadge span { + line-height: 1.6em; +} +.network-status-table { + display: flex; + flex-wrap: wrap; +} +.network-status-table .ifacebox { + margin: 1rem; + flex-grow: 1; +} +.network-status-table .ifacebox-body { + display: flex; + flex-direction: column; + height: 100%; +} +.network-status-table .ifacebox-body > span { + flex: 10 10 auto; + height: 100%; + line-height: 1.7em; + padding-left: 2rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +.network-status-table .ifacebox-body > div { + display: flex; + flex-wrap: wrap; +} +.network-status-table .ifacebox-body .ifacebadge { + flex: 1 1 auto; + margin: 0; + padding: 0.5em; + min-width: 220px; + background-color: #fff; + align-items: center; +} +.ifacebox { + border: 1px solid #ccc; + border-radius: 0.375rem; + background-color: #f9f9f9; + display: inline-flex; + flex-direction: column; + line-height: 1.2em; + min-width: 100px; + overflow: hidden; +} +.ifacebox-head { + padding: 1rem; + background: #eee; +} +.ifacebox-head.active { + background: #5e72e4; + background: var(--primary); + color: #fff; +} +.ifacebox-body { + padding: 0.5em; +} +.cbi-image-button { + margin-left: 0.5rem; +} +#iwsvg, +#iwsvg2, +#bwsvg { + border: none !important; + border-radius: 0.375rem; + box-shadow: 0 0 2rem 0 rgba(136, 152, 170, 0.15); + overflow: hidden; +} +.cbi-image-button { + margin-left: 0.5rem; +} +.zonebadge { + padding: 0.2rem 0.5rem; + display: inline-block; + cursor: pointer; +} +.zonebadge > .ifacebadge { + padding: 0.2rem 1rem; + margin: 0.3rem; + border: 1px solid #6C6C6C; +} +.zonebadge > input[type="text"] { + padding: 0.16rem 1rem; + min-width: 10rem; + margin-top: 0.3rem; +} +.cbi-value-field .cbi-input-checkbox { + margin: 0.5rem 0.25rem 0.7rem 0.25rem; + vertical-align: middle; + height: 1rem; + line-height: 1.6; +} +.cbi-input-checkbox { + margin: 0.5rem 0.25rem 0.7rem 0.25rem; + vertical-align: middle; +} +.cbi-value-field .cbi-input-radio { + margin: 0rem 0.25rem; +} +.cbi-input-radio { + margin: 0rem 0.25rem; +} +.cbi-value-field > input + .cbi-value-description { + padding: 0; +} +.cbi-value-field > ul > li { + display: flex; + align-items: center; + font-size: 0.875rem; +} +.cbi-value-field > ul > li .ifacebadge { + font-size: 0.875rem; + background-color: #eee; + display: flex; + align-items: center; + margin-left: 0rem; + margin-top: 0rem; +} +.cbi-section-table-row > .cbi-value-field .cbi-input-select { + min-width: 7rem; +} +.cbi-section-create > .cbi-button-add { + margin: 0.75rem 0.75rem 0.75rem 0.25rem; +} +.cbi-section-remove { + padding: 0.5rem; +} +.cbi-optionals { + padding: 1rem 1rem 0 1rem; + border-top: 1px solid #CCC; +} +input[name="ping"], +input[name="traceroute"], +input[name="nslookup"] { + width: 80%; +} +.label { + padding: 0.3rem 0.8rem; + font-size: 0.8rem; + font-weight: bold; + color: #fff !important; + text-transform: uppercase; + white-space: nowrap; + background-color: #32325d; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + text-shadow: none; + text-decoration: none; +} +/* fix status overview */ +.node-status-overview > .main fieldset:nth-child(4) td:nth-child(2) { + white-space: normal; +} +.node-status-overview > .main #wan4_i, +.node-status-overview > .main #wan6_i { + min-width: 80px !important; +} +/* fix status processes */ +.node-status-processes > .main table tr td:nth-child(3) { + white-space: normal; +} +/* fix system reboot */ +.node-system-reboot > .main > .main-right p, +.node-system-reboot > .main > .main-right h3 { + padding-left: 2rem; + color: #fff; +} +/* fix Services Network Shares*/ +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-title { + margin-bottom: 1rem; + width: auto; +} +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-field { + display: list-item; +} +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-description { + padding-top: 1rem; +} +/* fix System Software*/ +.node-system-packages > .main table tr td:nth-child(1) { + width: auto !important; +} +.node-system-packages > .main table tr td:nth-last-child(1) { + white-space: normal; + font-size: small; + color: #404040; +} +.node-system-packages > .main .cbi-tabmenu > li > a, +.tabs > li > a { + padding: 0.5rem 0.8rem; +} +.node-system-packages > .main .cbi-value > pre { + background-color: #eee; + padding: 0.5rem; + overflow: auto; +} +.node-system-packages > .main .cbi-page-actions { + padding: 1rem 0; +} +.node-system-packages > .main .cbi-section-node:first-child .cbi-value-last { + line-height: 1.8em; +} +.node-system-packages > .main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] { + border: 1px solid #999999 !important; + width: 100% !important; + background-color: #fff !important; + height: 1.4rem !important; + border-radius: 0.25rem; + margin: 0.5rem 0; + overflow: hidden; +} +.node-system-packages > .main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] div { + border-right: 0 !important; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + height: 100% !important; + background-image: url(../img/trafficbar.png); + background-position: left top; + animation: sparkle 1000ms linear infinite; +} +.node-system-leds .cbi-section em { + display: block; +} +.cbi-tabmenu + .cbi-section { + margin-top: 0; +} +.cbi-section { + background: #fff; + border: 0; + border-radius: 0.375rem; + box-shadow: 0 0 2rem 0 rgba(136, 152, 170, 0.15); + overflow-x: auto; + overflow-y: hidden; +} +.cbi-section em { + font-size: 0.7rem; + font-weight: 600; + color: var(--primary); + text-shadow: 1px 1px 2px #ccc; + text-align: center; +} +.cbi-section h4 { + font-size: 0.7rem; + font-weight: 600; + color: #525f7f; +} +#content_syslog { + border-radius: 0.375rem; + box-shadow: 0 0 2rem 0 rgba(136, 152, 170, 0.15); + overflow: hidden; +} +.node-system-packages .cbi-section-node .cbi-value { + padding: 0.5rem 1rem; + font-size: 0.875rem; +} +.node-system-packages br { + display: none; +} +/* fix network firewall*/ +.node-network-firewall > .main .cbi-section-table-row > .cbi-value-field .cbi-input-select { + min-width: 4rem; +} +.node-network-firewall .cbi-section-table { + width: 100% !important; +} +.node-status-iptables fieldset, +.node-system-packages fieldset, +.node-system-flashops fieldset { + margin-top: 0; +} +.node-system-flashops fieldset > ul { + padding: 1rem; +} +.node-system-flashops fieldset + .cbi-page-actions { + margin-top: 1rem; +} +.node-status-iptables .cbi-tabmenu, +.node-system-packages .cbi-tabmenu, +.node-system-flashops .cbi-tabmenu { + border: none; +} +.node-system-flashops form.inline + form.inline { + margin-left: 0; +} +.Changes .cbi-section { + font-size: 0.875rem; + padding: 1rem; +} +.node-network-diagnostics { + font-size: 0.875rem; +} +.node-network-diagnostics #diag-rc-output { + display: block; + padding: 1rem; +} +.node-network-diagnostics #diag-rc-output pre { + font-size: 0.875rem; +} +.node-network-diagnostics .cbi-section div { + padding: 0 1.5rem; +} +.node-network-diagnostics input { + margin: 0.25rem !important; +} +.node-network-wireless .cbi-button-add { + margin-left: 0; +} +/* fix nlbw/display*/ +#detail-bubble.in { + z-index: 500; +} +.node-nlbw-display .cbi-section ul { + padding: 0.875rem 1.5rem; +} +.node-nlbw-backup form { + margin-left: 1.5rem; +} +.node-nas-usb_printer em { + display: block; +} +/* luci-app-passwall */ +#cbi-passwall #add_link_div, +#cbi-passwall #set_node_div { + background: #fffffff0; +} +#cbi-passwall .cbi-section-table tbody ._now_use { + background: #5e72e473 !important; +} +/* luci-app-commands */ +.commandbox h3 { + overflow: hidden; + text-overflow: ellipsis; +} +.commandbox code { + word-break: break-word; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} +div.commandbox { + height: 16em; +} +/* luci-app-ssr-plus */ +#cbi-shadowsocksr .cbi-map-descr h3 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +/* luci-app-mwan3 */ +.node-status-mwan .cbi-tabmenu { + padding: 3rem 0.5rem 0 0.5rem; +} +/* luci-app-openclash */ +.node-services-openclash .cbi-tabmenu { + font-size: 0; +} +.node-services-openclash .cbi-tabmenu > li { + margin-right: 4px; +} +.node-services-openclash .cbi-tabmenu > li:last-child { + margin-right: 0; +} +/* luci-app-ddnsto */ +.node-services-ddnsto .cbi-section-node .cbi-value div { + display: table-cell; + line-height: 1.6; + font-size: 0.875rem; +} + +/* luci-app-dockerman */ +#cbi-dockerd > .cbi-section > br, +#cbi-docker > .cbi-section > br { + display: none; +} + +/* luci-app-diskman */ +#cbi-diskman > .cbi-section > br { + display: none; +} + +/* luci-app-istorex (Quick Start) */ +#app #main #page .app-container_body .btn-f, +#app #main #page .app-container_body .btn-r { + -webkit-user-select: none; /* Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+/Edge */ + user-select: none; /* Standard */ + width: 30px; +} + +/* luci-app-ttyd */ +.TTYD.node-system-terminal .main { + height: 100%!important; +} +.TTYD.node-system-terminal .main .main-right, +.TTYD.node-system-terminal .main .main-right #maincontent, +.TTYD.node-system-terminal .main .main-right #maincontent .container .cbi-map { + height: 100%!important; + display: flex!important; + flex-direction: column!important; +} +.TTYD.node-system-terminal .main .main-right #maincontent, +.TTYD.node-system-terminal .main .main-right #maincontent .container, +.TTYD.node-system-terminal .main .main-right #maincontent .container .cbi-map #terminal { + flex: 1!important; +} + +@media screen and (max-width: 1600px) { + .main .main-left { + width: calc(0% + 13rem); + } + .main .main-right { + width: calc(100% - 13rem); + } + .cbi-button:not(.cbi-button-up, .cbi-button-down) { + /*padding: 0.3rem 1.5rem;*/ + font-size: 0.8rem; + } + header > .container > .pull-right > * { + top: 0.35rem; + } + .label { + padding: 0.2rem 0.6rem; + } + .cbi-value-title { + width: 15rem; + padding-right: 0.6rem; + } + fieldset { + padding: 0; + } + .node-status-iptables > .main fieldset li > a { + padding: 0.3rem 0.6rem; + } +} +@media screen and (max-width: 1280px) { + header > .container { + margin-top: 0.25rem; + } + .main .main-left { + width: calc(0% + 13rem); + } + .main .main-right { + width: calc(100% - 13rem); + } + .cbi-tabmenu > li > a, + .tabs > li > a { + padding: 0.2rem 0.5rem; + } + .panel-title { + font-size: 1.1rem; + padding-bottom: 1rem; + } + table { + font-size: 0.7rem !important; + width: 100% !important; + } + .main > .main-left > .nav > li, + .main > .main-left > .nav > li a, + .main > .main-left > .nav > .slide > .menu { + font-size: 0.9rem; + } + .main > .main-left > .nav > .slide > .slide-menu > li > a { + font-size: 0.7rem; + } +} +@media screen and (max-width: 992px) { + .main .main-left { + width: 0; + position: fixed; + z-index: 100; + } + .main .main-right { + width: 100%; + } + .showSide { + padding: 0.1rem; + position: relative; + display: inline-block; + } + .showSide:hover { + text-decoration: none; + } + .showSide:before { + content: "\e20e"; + font-size: 1.7rem; + } + header > .fill > .container > .brand { + display: inline-block; + } + .node-network-diagnostics > .main .cbi-map fieldset > div * { + width: 100% !important; + } + .node-network-diagnostics > .main .cbi-map fieldset > div input[type="text"] { + margin: 3rem 0 0 0 !important; + } + .node-network-diagnostics > .main .cbi-map fieldset > div:nth-child(4) input[type="text"] { + margin: 0 !important; + } + .node-network-diagnostics > .main .cbi-map fieldset > div select, + .node-network-diagnostics > .main .cbi-map fieldset > div input[type="button"] { + margin: 1rem 0 0 0 !important; + } + .node-network-diagnostics > .main .cbi-map fieldset > div { + width: 100% !important; + } + #diag-rc-output > pre { + font-size: 1rem; + } +} +@media screen and (max-width: 500px) { + .login-page .login-container { + margin-left: 0rem !important; + width: 500px; + } + .login-page .login-container .login-form { + max-width: 500px; + } +} +@media screen and (max-width: 480px) { + body { + font-size: 0.8rem; + } + .pull-right { + float: right; + margin-top: 0rem !important; + } + .login-page .login-container { + margin-left: 0rem !important; + width: 100%; + } + .login-page .login-container .login-form .form-login .input-group::before { + color: #525461; + } + .login-page .login-container .login-form .form-login .input-group input { + color: #525461; + border-bottom: white 1px solid; + border-bottom: var(--white) 1px solid; + border-radius: 0; + } + fieldset { + padding: 0; + margin: 1rem 0 0 0; + } + .toggle { + margin: 0; + } + h2 { + font-size: 1.125rem; + } + .panel-title { + font-size: 1rem; + padding-bottom: 1rem; + } + #maincontent > .container { + margin: 0 1rem 1.5rem 1rem; + } + .main > .main-left > .nav > .slide > .menu { + font-size: 1rem; + } + .main > .main-left > .nav > .slide > .slide-menu > li > a { + font-size: 0.9rem; + } + .main > .main-left > .nav > .slide > .menu:after { + top: 0.9rem; + } + #ethinfo td { + padding: 0.75rem 0.2rem !important; + } + .cbi-value-title { + width: 100%; + min-width: 0rem !important; + display: block; + margin-top: 0.5rem; + margin-bottom: 0.5rem; + text-align: left; + padding: 0 0.25rem; + } + .cbi-value input[type="password"], + .cbi-value input[type="text"] { + min-width: 15rem; + } + select, + input { + width: 100% !important; + min-width: auto; + margin: 0.25rem 0; + } + input { + box-sizing: border-box; + } + .cbi-value > .cbi-value-field > div > input { + width: calc(100% - 1.5rem) !important; + } + .cbi-value > .cbi-value-field { + display: inline-block; + width: 100%; + position: relative; + } + .cbi-page-actions > div > input { + display: none; + } + ::-webkit-scrollbar { + width: 0px !important; + height: 0px !important; + } + .tabs > li > a { + font-size: 0.9rem; + } + select, + input { + font-size: 0.9rem; + } + .mobile-hide { + display: none !important; + } + .node-status-realtime table > tbody > tr > td, + .node-status-realtime table > tfoot > tr > td, + .node-status-realtime table > thead > tr > td { + font-size: 0.8125rem; + color: #525f7f; + line-height: 1.4em; + vertical-align: middle !important; + padding: 0.8rem 0rem; + border-top: 1px solid #ddd; + width: auto; + text-align: center; + } + .node-system-packages > .main .cbi-value.cbi-value-last > div { + width: 100% !important; + } + .node-system-packages .cbi-section-node .cbi-value { + padding: 0.3rem 1rem; + } + .node-system-packages > .main .cbi-value .cbi-value-field input { + width: 100%; + } + .node-system-leds .cbi-section em { + display: block; + } + .node-status-iptables > .main div > .cbi-map > form { + position: static !important; + margin: 0 0 2rem 0; + padding: 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + border-radius: 0.375rem; + background-color: #FFF; + box-shadow: 0 0 2rem 0 rgba(136, 152, 170, 0.15); + -webkit-overflow-scrolling: touch; + } + .node-status-iptables > .main div > .cbi-map > form input[type="submit"] { + width: 100% !important; + margin: 0; + } + .node-status-iptables > .main div > .cbi-map > form input[type="submit"] + input[type="submit"] { + margin-top: 1rem; + } + .cbi-value input[type="text"]:has(+ img) { + width: 10rem !important; + } + .cbi-button-add { + margin-left: 0.5rem; + } + .node-network-network .cbi-section-table tr, + .node-network-network .cbi-section-table td { + display: block; + } + .node-network-network .cbi-section-table td { + width: 100% !important; + text-align: center !important; + padding: 0.8rem 1.5rem !important; + } + .node-network-network .cbi-section-table .cbi-section-table-titles { + display: flex; + } + .node-network-network .cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + flex: 1 !important; + } + .node-services-vssr .status-info { + font-size: 0.75rem; + } + .node-services-vssr .icon-con { + margin-top: 0.4rem; + } + .node-services-vssr .icon-con img { + width: 2.3rem !important; + height: auto; + } +} diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/dark.css b/luci-theme-argon/htdocs/luci-static/argon/css/dark.css new file mode 100644 index 00000000..085c7f63 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/css/dark.css @@ -0,0 +1,836 @@ +body { + background: #1e1e1e; + color: #cccccc; +} + +.login-page .login-container .login-form { + background-color: #1e1e1e; +} + +.login-page .login-container .login-form .brand { + color: #adb5bd; +} + +.login-page .login-container .login-form .form-login .input-group::before { + color: #adb5bd; +} + +.login-page .login-container .login-form .form-login .input-group .border { + border-bottom: 1px var(--dark-primary) solid; +} + +.login-page .login-container .login-form .form-login .input-group input { + background-color: transparent !important; + color: #adb5bd; + border-bottom: #adb5bd 1px solid !important; + border-radius: 0; + border-top: none !important; + border-left: none !important; + border-right: none !important; + box-shadow: none; +} + +.login-page .login-container .login-form .form-login .input-group input:focus { + border-top: none !important; + border-left: none !important; + border-right: none !important; +} + +.login-page .login-container .login-form .form-login .cbi-button-apply { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; +} + +.login-page .login-container .login-form .form-login .cbi-button-apply:hover, +.login-page .login-container .login-form .form-login .cbi-button-apply:focus { + opacity: .9; +} + +.login-page .login-container footer, +.login-page .login-container footer a { + color: #adb5bd; +} + +header::after { + background-color: #1e1e1e !important; +} + +.main .main-left { + background-color: #333333 !important; + box-shadow: 0 0 .5rem 0 rgba(0,0,0,0.15); +} + +.main .main-left .sidenav-header .brand { + color: #ccc; +} + +.main .main-left .nav .slide .slide-menu .active a { + color: #fff !important; +} + +.main .main-left .nav .slide .slide-menu li a { + color: #cccccc; +} + +.main .main-left .nav .slide .slide-menu li a::after { + background-color: var(--dark-primary) !important; + box-shadow: 0 0 1px #000 !important; +} + +.main .main-left .nav .slide .slide-menu li a:hover { + background: none !important; +} + +.main .main-left .nav .slide .menu:hover, +.main .main-left .nav .slide .menu.active { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + color: #fff !important; + box-shadow: 0 0 1px #000 !important; +} + +.main .main-left .nav .slide .menu[data-title=Status]:before { + color: var(--dark-primary) !important; +} + +.main .main-left .nav .slide .menu[data-title=Control]:before { + color: var(--dark-primary) !important; +} + +.main .main-left .nav li a { + color: #cccccc !important; +} + +.main .main-left .nav li a:hover { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + color: #fff !important; +} + +.main .main-left::-webkit-scrollbar-thumb { + background-color: #252526 !important; +} + +.main .main-right { + background-color: #1e1e1e; +} + +h2 { + color: #ccc; + background: #333333; +} + +h3 { + color: #ccc; + border-bottom: 0; + background: #333333; +} + +a:link, +a:visited, +a:active { + color: var(--dark_webkit-any-link); +} + +a:-webkit-any-link:not(li a, .main-left a, .brand, .pull-right a, .alert-message a, .login-container footer a, .cbi-button) { + color: var(--dark_webkit-any-link) !important; + text-shadow: 1px 1px 2px #000 !important; +} + +input:-webkit-autofill { + background-color: #3c3c3c !important; +} + +input[type="checkbox"]:checked { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; +} + +.cbi-input-radio:checked { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; +} + +.cbi-value-field .cbi-input-apply, +.cbi-button-apply, +.cbi-button-edit { + color: #fff !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; +} + +.cbi-section em { + color: var(--dark_webkit-any-link); + text-shadow: 1px 1px 2px #000; +} + +header.bg-primary { + background-color: #1e1e1e !important; +} + +.cbi-map-descr { + color: #ccc; +} + +.cbi-section { + background: none; + box-shadow: 0 0 .5rem 0 rgba(0,0,0,0.35); +} + +.panel-title { + color: #ccc; + background-color: #333333; + border-bottom: 0px; +} + +table>tbody>tr>td, +table>tfoot>tr>td, +table>thead>tr>td { + color: #ccc; +} + +fieldset>table>tbody>tr:nth-of-type(2n) { + background-color: #252526; +} + +table>tbody>tr>td, +table>tfoot>tr>td, +table>thead>tr>td { + border-top: 1px solid #252526; +} + +#swaptotal>div>div, +#swapfree>div>div, +#memfree>div>div, +#membuff>div>div, +#conns>div>div, +#memtotal>div>div { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; +} + +#swaptotal>div>div>div>small, +#swapfree>div>div>div>small, +#memfree>div>div>div>small, +#membuff>div>div>div>small, +#conns>div>div>div>small, +#memtotal>div>div>div>small { + color: #ccc !important; + text-shadow: 1px 1px 2px #000 !important; +} + +.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last { + line-height: 1.8em; +} + +.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] { + border: 1px solid #999999 !important; + background-color: transparent !important; +} + +.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] div { + background-color: #32325d !important; + background-color: var(--dark-primary) !important; +} + +table>tbody>tr>th, +table>tfoot>tr>th, +table>thead>tr>th { + background-color: #252526; + border-top: none; + border-bottom: black 1px solid !important; +} + +.cbi-rowstyle-2 { + background-color: #2c2c2c !important; +} + +.cbi-rowstyle-1 { + background-color: #252526; +} + +.cbi-section>h3:first-child, +.panel-title { + color: #ccc; + border-bottom: 0; +} + +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + background-color: #1e1e1f; +} + +.cbi-button { + color: #ccc; + background-color: #2c2c2c; +} + +.cbi-rowstyle-2 .cbi-button-up, +.cbi-rowstyle-2 .cbi-button-down { + background-color: #252526 !important; +} + +.cbi-section-node { + background: none; + border-radius: 0 0 .375rem .375rem; + padding: 0rem; +} + +abbr { + color: #8898aa; +} + +div>table>tbody>tr:nth-of-type(2n), +div>.table>.tbody>.tr:nth-of-type(2n) { + background-color: #252526; +} + +/* file selector button */ +::file-selector-button { + border: 1px solid darkseagreen !important; + background-color: darkseagreen !important; +} + +/* Fix background color of table-titles */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-section-table-titles th { + background-color: #1e1e1e; + border: none !important; +} + +/* Fix background color of table-descr */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-section-table-descr th { + background-color: #333333; + border: none !important; +} + +/* Fix background color not change when the H tag is in the table rowstyle-1 */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-rowstyle-1 th { + background-color: #252526; + border-top: 1px solid #252526; + border-bottom: none !important; +} + +/* Fix background color not change when the H tag is in the table rowstyle-2 */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-rowstyle-2 th { + background-color: #2c2c2c; + border-top: 1px solid #252526; + border-bottom: none !important; +} + +/* Change the color of the H label in the table to make it more visible */ +th h1, td h1, +th h2, td h2, +th h3, td h3, +th h4, td h4, +th h5, td h5, +th h6, td h6 { + background: var(--gray-dark); +} + +/* Improved the background color of each itemes in "UNSAVED CHANGES" (dark mode only) */ +.uci-change-list del, +.uci-change-legend-label del { + background-color: #fb74008c; +} +.uci-change-list var, +.uci-change-legend-label var { + background-color: #333333; +} +.uci-change-list ins, +.uci-change-legend-label ins { + background-color: #00ff0a45 !important; +} + +#content_syslog { + box-shadow: 0 0 .5rem 0 rgba(0,0,0,0.35); +} + +#syslog { + color: #ccc; + background-color: #1e1e1e; +} + +#iwsvg, +#iwsvg2, +#bwsvg { + overflow: hidden; + box-shadow: 0 0 .5rem 0 rgba(0,0,0,0.35); + background-color: #1e1e1e !important; +} + +.tabs { + background-color: #252526; +} + +.tabs>li:hover, +.tabs>li[class~="active"], +.cbi-tabmenu>li:hover, +.cbi-tabmenu>li[class~="cbi-tab"] { + border-bottom: .18751rem solid var(--dark-primary); + background-color: #3c3c3c; +} + +.tabs>li>a, +.cbi-tabmenu>li>a { + color: #ccc !important; +} + +.cbi-tabmenu>li>a:hover, +.cbi-tabmenu>li:hover>a, +.cbi-tabmenu>.cbi-tab>a, +.tabs>li>a:hover, +.tabs>li:hover>a, +.tabs>li[class~="active"]>a { + color: #fff !important; +} + +.cbi-tabmenu>li { + background: #2d2d2d; +} + +.cbi-tabmenu { + border-bottom: 0 solid #ddd !important; +} + +.cbi-tab-descr { + color: #ccc; +} + +.cbi-tabcontainer>.cbi-value:nth-of-type(2n), +.cbi-tabcontainer>.cbi-value:nth-of-type(2n)>textarea { + background-color: #252526; +} + +.cbi-value-title { + color: #ccc; +} + +select, +input { + color: #ccc; + background-color: transparent; + border: 1px solid #3c3c3c !important; + box-shadow: 0 3px 2px rgba(0,0,0,0.05); +} + +select:not([multiple="multiple"]):hover, +input:hover, +input:focus { + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; + background-color: transparent; + outline: 0; + box-shadow: none; +} + +select { + background-color: #1e1e1e !important; +} + +#cbi-dropbear h2, +#cbi-dropbear .cbi-map-descr, +#cbi-dropbear .cbi-map-descr abbr, +#cbi-rc h2, +#cbi-rc .cbi-map-descr, +#cbi-distfeedconf h2, +#cbi-distfeedconf .cbi-map-descr, +#cbi-customfeedconf h2, +#cbi-customfeedconf .cbi-map-descr, +#cbi-download h2, +#cbi-filelist h2 { + color: #ccc !important; +} + +.cbi-value-field>ul>li .ifacebadge { + background-color: #3c3c3c; +} + +.cbi-section-descr { + color: #ccc; +} + +/*textarea for dark mode*/ +textarea { + border: 1px solid #3c3c3c !important; + background-color: #1e1e1e; + color: #ccc; +} + +.cbi-section-remove:nth-of-type(2n), +.cbi-section-node:nth-of-type(2n) { + background-color: #1e1e1e; +} + +.node-system-packages>.main table tr td:nth-last-child(1) { + color: #ccc; +} + +.node-system-packages>.main .cbi-value>pre { + background-color: #333; +} + +.cbi-section-node .cbi-value { + padding: 1rem 1rem .3rem 1rem; +} + +.ifacebox { + background-color: #1e1e1e; + border: 1px solid #1e1e1e; +} + +.ifacebox-head { + color: #666; +} + +.ifacebox-body { + background-color: #333; +} + +.zonebadge strong { + color: #333; +} + +.zonebadge>.ifacebadge { + background-color: #3c3c3c; +} + +/* Fix firewall zone: "unspecified -or- create: " background color (dark mode only) */ +div[onclick$="._fwzone_new').checked=true"] { + border: 1px solid #3c3c3c; + background-color: transparent !important; +} + +/* Improve the background color of "Any zone" and "Device" when ADD/EDIT Rules in Firewall > Traffic Rules (dark mode only) */ +label[for$=".src_any"], +label[for$=".dest_empty"], +label[for$=".dest_any"] { + background-color: #2888db !important; +} + +/* Fix/add background color of wireless signal strength badge for dark mode */ +td>.ifacebadge, +.td>.ifacebadge { + background-color: #3c3c3c; +} + +/* Improved loading process gif color (dark mode only) */ +img[src="/luci-static/resources/icons/loading.gif"] { + filter: invert(1); +} + +div.cbi-value var, +td.cbi-value-field var, +.td.cbi-value-field var { + color: #483d8b; + color: var(--dark_webkit-any-link); + text-shadow: 1px 1px 2px #000; +} + +#diag-rc-output>pre { + color: #ccc; + background-color: #1e1e1e; +} + +.node-services-vssr .block { + background-color: #1e1e1e !important; + box-shadow: 0 0 .5rem 0 rgba(0,0,0,0.35) !important; +} + +.node-services-vssr .block h4 { + color: #ccc !important; +} + +.node-services-vssr .status-bar { + color: #ccc; + background: #333333f0; + box-shadow: #00000094 10px 10px 30px 5px; +} + +.node-services-vssr .cbi-section-table-row { + color: #ccc; + background-color: #3c3c3c !important; + box-shadow: 0 0 5px 0 rgba(0,0,0,0.35); +} + +.node-services-vssr .cbi-section-table-row.fast { + background: #483d8b !important; + background: var(--dark-primary) !important; + color: #fff; +} + +.node-services-vssr .ssr-button { + color: #ccc; +} + +.node-services-vssr .incon:nth-child(2) { + border-right: #1e1e1e 1px solid; +} + +.main .main-right #maincontent .container p { + color: #ccc; +} + +#xhr_poll_status>.label.success { + color: #ccc !important; + background-color: darkolivegreen !important; +} + +/* Define the warning background-color breathe display animation (dark mode) */ +@keyframes warning-background-color-breathe-dark { + 0%{ + color: #fff; + background-color: darkorange; + } + 50%{ + color: #ccc; + background-color: #333333; + } + 100%{ + color: #fff; + background-color: darkorange; + } +} +.warning, +.warning * { + animation: warning-background-color-breathe-dark 1.5s ease-in-out infinite !important; +} + +.notice { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; +} + +/* Improved the aleart-message background color during device restart (dark mode only) */ +.errorbox, +.alert-message { + background-color: #333333; +} + +.cbi-input-find, +.cbi-input-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-find, +.cbi-input-reload, +.cbi-button-reload { + background-color: darkseagreen !important; + border-color: darkseagreen !important; +} + +.cbi-button-reset, +.cbi-input-remove { + color: #fff !important; + background-color: darkorange !important; + border-color: darkorange !important; +} + +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit, +.cbi-button-edit.important, +.cbi-button-apply.important, +.cbi-button-reload.important, +.cbi-button-action.important { + border: 1px #483d8b solid !important; + border: 1px var(--dark-primary) solid !important; +} + +fieldset[id^="cbi-apply-"] { + background-color: #333333; +} + +#detail-bubble>div { + border: 1px solid #ccc; + border-radius: 2px; + padding: 5px; + background: #252525; +} + +/* Define the error text border breathe display animation (dark mode) */ +@keyframes error-border-breathe-dark { + 0%{ + border-color: darkorange; + } + 50%{ + border-color: transparent; + } + 100%{ + border-color: darkorange; + } +} + +/* Add border for error text box, and border breathe display animation to make it more noticeable (dark mode) */ +.cbi-section-error>ul>li { + color: darkorange; + border: 2px solid darkorange ; + animation: error-border-breathe-dark 1.5s ease-in-out infinite; +} + +.cbi-input-invalid, +.cbi-value-error input { + color: darkorange; + border: 1px dashed darkorange !important; +} + +.node-services-vssr .block h4 span { + color: #ccc !important; +} + +/* luci-app-passwall */ +#cbi-passwall #add_link_div, +#cbi-passwall #set_node_div { + background: #333333f0 !important; + box-shadow: #00000094 10px 10px 30px 5px !important; +} + +/* luci-app-bypass */ +#cbi-bypass .status-bar { + color: #ccc; + background: #333333f0; + box-shadow: #00000094 10px 10px 30px 5px; +} + +/* luci-app-clash */ +#cbi-clash .cbi-section .pure-u-1-4 .pure-g, +#cbi-clash .cbi-section .siz .pure-g { + background-color: #1e1e1e !important; + box-shadow: 0 0 .5rem 0 rgba(0,0,0,0.35) !important; +} + +/* luci-app-openclash */ +#cbi-openclash #eye-icon, +#cbi-openclash img[title="刷新"] { + filter: invert(100%); +} +#cbi-openclash #cbi-openclash-config fieldset[control-id="ControlID-46"], +#cbi-openclash .CodeMirror-merge-copybuttons-right, +.CodeMirror-scroll { + background-color: #333333 !important; +} +#cbi-openclash .cbi-section .cbi-tabmenu li { + border-right: 1px solid #3c3c3c !important; +} +#cbi-openclash .CodeMirror-merge { + border: 1px solid transparent !important; +} +#cbi-openclash-config-clog .cbi-section { + border: 1px solid #3c3c3c !important; +} +#cbi-openclash .CodeMirror-gutters { + border-right: 1px solid #3c3c3c !important; + background-color: #1e1e1e !important; +} + +/* luci-app-dockerman */ +#cbi-dockerd .img-con img { + filter: invert(0.4); +} + +/* luci-app-istorex (interface config[NetworkPort]) */ +#cbi-nfs-mount .app-container_status-label_bg { + background: #333333; +} +#cbi-nfs-mount td svg { + filter: invert(0.3); +} +#actioner .actioner-dns { + background-color: #333333; +} +#actioner .actioner-dns_header, +#actioner .actioner-container_header { + border-bottom: 1px solid #cbcbcb !important; +} +#actioner .actioner-dns_footer { + border-top: 1px solid #cbcbcb !important; +} + +/* luci-app-istorex (Network Guide) */ +#app #main #page .title, +#app #main #page .desc { + color: #cccccc; + background-color: #333333; +} +#app #main #page .network-message li:not(span):not(a) { + color: #8d8d8d; +} +#app #main #page code { + background-color: #333333; +} + +/* luci-app-istorex (Quick Start) */ +#app #main #page .network-container_flow-container, +#app #main #page .app-container_status-container, +#app #main #page .nas-container .nas-container_card .app-container, +#app #main #page .app-container { + background-color: #333333; +} +#app #main #page .flow-data span, +#app #main #page .app-container_status-label_block span, +#app #main #page .app-container .item-label span:not(#app #main #page .app-container .progress-value span) { + color: #cccccc; +} +#app #main #page .app-container_status-info span, +#app #main #page .app-container_status-info span, +#app #main #page .app-container_title span { + color: #dddddd; +} +.app-container_body .app-container_status-label_bg { + background-color: #282828 !important; +} +#app #main #page .item-label_value .progress { + background-color: rgb(118, 118, 118); +} +#app #main #page .app-container_nas-menu button[class=""] { + background-color: #8b8b8b; +} +#app #main #page .app-container_nas-menu button[class="on"] { + background-color: #555555; +} +#app #main #page .app-container_title .DeviceBlock ul { + background-color: #cccccc; +} +#actioner div.action, +#actioner div.actioner-container { + background-color: #3c3c3c; +} +#actioner div.action .title { + color: #cccccc; +} +#actioner div.action .desc { + color: #cbcbcb; +} +#actioner div.action div.roots span, +#actioner div.action div.move span:not(span.tip), +#actioner div.action div.left span, +#actioner div.action div.input_row span, +#actioner div.label-item label span { + color: #cbcbcb; +} +#actioner div.action span.tooltip-trigger svg path { + fill: #cbcbcb; +} +#actioner div.actioner-dns_body div.label-item_value select { + height: 43px; +} +#actioner div.actioner-container_footer div.close { + color: #ffffff; +} +#app #main div.app-container div.app-container_title span a svg path, +#app #main #page span.disk_infoicon svg g { + fill: #8b8b8b; +} + +@supports (-webkit-backdrop-filter: none) or (backdrop-filter: none) { + .login-page .login-container .login-form { + -webkit-backdrop-filter: blur(var(--blur-radius-dark)); + backdrop-filter: blur(var(--blur-radius-dark)); + background-color: rgba(0, 0, 0, var(--blur-opacity-dark)); + } +} + +@media screen and (max-width:480px) { + .node-status-iptables>.main div>.cbi-map>form { + background-color: #1e1e1e; + box-shadow: 0 0 .5rem 0 rgba(0,0,0,0.35); + } +} \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/fonts.css b/luci-theme-argon/htdocs/luci-static/argon/css/fonts.css new file mode 100644 index 00000000..cc4e1a80 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/css/fonts.css @@ -0,0 +1,186 @@ +/** + * Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material and Argon Template + * + * luci-theme-argon + * Copyright 2020 Jerryk + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/jerrykuku/luci-theme-argon/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * luci-theme-material: + * https://github.com/LuttyYang/luci-theme-material/ + * + * Argon Theme + * https://demos.creative-tim.com/argon-dashboard/index.html + * + * Login background + * https://unsplash.com/ + * + * Licensed to the public under the Apache License 2.0 + */ + + + @font-face { + font-family: 'Google Sans'; + src: url('data:application/font-woff2;charset=utf-8;base64,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') format('woff2'), + url('data:application/font-woff;charset=utf-8;base64,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') format('woff'); + font-weight: normal; + font-style: normal; +} + +/* Logo Font */ +@font-face { + font-family: 'TypoGraphica'; + src: url('../fonts/TypoGraphica.eot?#iefix') format('embedded-opentype'), url('../fonts/TypoGraphica.woff') format('woff'), url('../fonts/TypoGraphica.ttf') format('truetype'), url('../fonts/TypoGraphica.svg#TypoGraphica') format('svg'); + font-weight: normal; + font-style: normal; +} + +/* ICON Font */ + +@font-face { + font-family: 'argon'; + src: url('../fonts/argon.eot?u6kthm'); + src: url('../fonts/argon.eot?u6kthm#iefix') format('embedded-opentype'), + url('../fonts/argon.ttf?u6kthm') format('truetype'), + url('../fonts/argon.woff?u6kthm') format('woff'), + url('../fonts/argon.svg?u6kthm#argon') format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; +} + +[class^="icon-"], +[class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-expand_more:before { + content: "\e20b"; +} + +.icon-menu:before { + content: "\e20e"; +} + +.icon-favorite:before { + content: "\e291"; +} + +.icon-spinner:before { + content: "\e603"; +} + +.icon-delete:before { + content: "\e900"; +} + +.icon-edit:before { + content: "\e901"; +} + +.icon-use:before { + content: "\e902"; +} + +.icon-loading:before { + content: "\e903"; +} + +.icon-switch:before { + content: "\e904"; +} + +.icon-error:before { + content: "\e905"; +} + +.icon-dashboard:before { + content: "\e906"; +} + +.icon-logout:before { + content: "\e907"; +} + +.icon-Network:before { + content: "\e908"; +} + +.icon-services:before { + content: "\e909"; +} + +.icon-system:before { + content: "\e90a"; +} + +.icon-vpn:before { + content: "\e90b"; +} + +.icon-storage:before { + content: "\e90c"; +} + +.icon-statistics:before { + content: "\e90d"; +} + +.icon-hello-world:before { + content: "\e90e"; +} + +.icon-angle-right:before { + content: "\e90f"; +} + +.icon-password:before { + content: "\e910"; +} + +.icon-user:before { + content: "\e971"; +} + +.icon-question:before { + content: "\f059"; +} + +.icon-docker:before { + content: "\e911"; +} + +.icon-control:before { + content: "\e912"; +} + +.icon-statistics1:before { + content: "\e913"; +} + +.icon-asterisk:before { + content: "\e914"; +} + +.icon-app:before { + content: "\e915"; +} \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/pure-min.css b/luci-theme-argon/htdocs/luci-static/argon/css/pure-min.css new file mode 100644 index 00000000..e898cf2c --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/css/pure-min.css @@ -0,0 +1,11 @@ +/*! +Pure v2.0.3 +Copyright 2013 Yahoo! +Licensed under the BSD License. +https://github.com/pure-css/pure/blob/master/LICENSE.md +*/ +/*! +normalize.css v | MIT License | git.io/normalize +Copyright (c) Nicolas Gallagher and Jonathan Neal +*/ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select{font-family:inherit;font-size:100%;line-height:1.15;margin:5px}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html{font-family:sans-serif}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto}.pure-g{letter-spacing:-.31em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-line-pack:start;align-content:flex-start}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){table .pure-g{display:block}}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class*=pure-u]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%}.pure-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-group{letter-spacing:-.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.pure-button-group{word-spacing:-.43em}.pure-button-group .pure-button{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:rgba(0,0,0,.8);border:none transparent;background-color:#e6e6e6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:focus,.pure-button:hover{background-image:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;border-color:#000}.pure-button-disabled,.pure-button-disabled:active,.pure-button-disabled:focus,.pure-button-disabled:hover,.pure-button[disabled]{border:none;background-image:none;opacity:.4;cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none;pointer-events:none}.pure-button-hidden{display:none}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-button-group .pure-button{margin:0;border-radius:0;border-right:1px solid rgba(0,0,0,.2)}.pure-button-group .pure-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.pure-button-group .pure-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right:none}.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input[type=color]:focus,.pure-form input[type=date]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=email]:focus,.pure-form input[type=month]:focus,.pure-form input[type=number]:focus,.pure-form input[type=password]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=text]:focus,.pure-form input[type=time]:focus,.pure-form input[type=url]:focus,.pure-form input[type=week]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129fea}.pure-form input:not([type]):focus{outline:0;border-color:#129fea}.pure-form input[type=checkbox]:focus,.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus{outline:thin solid #129fea;outline:1px auto #129fea}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=color][disabled],.pure-form input[type=date][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=email][disabled],.pure-form input[type=month][disabled],.pure-form input[type=number][disabled],.pure-form input[type=password][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=text][disabled],.pure-form input[type=time][disabled],.pure-form input[type=url][disabled],.pure-form input[type=week][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input:not([type])[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form select:focus:invalid,.pure-form textarea:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=checkbox]:focus:invalid:focus,.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=color],.pure-form-stacked input[type=date],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=email],.pure-form-stacked input[type=file],.pure-form-stacked input[type=month],.pure-form-stacked input[type=number],.pure-form-stacked input[type=password],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=text],.pure-form-stacked input[type=time],.pure-form-stacked input[type=url],.pure-form-stacked input[type=week],.pure-form-stacked label,.pure-form-stacked select,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-stacked input:not([type]){display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned select,.pure-form-aligned textarea,.pure-form-message-inline{display:inline-block;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form .pure-input-rounded,.pure-form input.pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-3-4{width:75%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=color],.pure-group input[type=date],.pure-group input[type=datetime-local],.pure-group input[type=datetime],.pure-group input[type=email],.pure-group input[type=month],.pure-group input[type=number],.pure-group input[type=password],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=text],.pure-group input[type=time],.pure-group input[type=url],.pure-group input[type=week]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0 0}.pure-form-message,.pure-form-message-inline{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu{-webkit-box-sizing:border-box;box-sizing:border-box}.pure-menu-fixed{position:fixed;left:0;top:0;z-index:3}.pure-menu-item,.pure-menu-list{position:relative}.pure-menu-list{list-style:none;margin:0;padding:0}.pure-menu-item{padding:0;margin:0;height:100%}.pure-menu-heading,.pure-menu-link{display:block;text-decoration:none;white-space:nowrap}.pure-menu-horizontal{width:100%;white-space:nowrap}.pure-menu-horizontal .pure-menu-list{display:inline-block}.pure-menu-horizontal .pure-menu-heading,.pure-menu-horizontal .pure-menu-item,.pure-menu-horizontal .pure-menu-separator{display:inline-block;vertical-align:middle}.pure-menu-item .pure-menu-item{display:block}.pure-menu-children{display:none;position:absolute;left:100%;top:0;margin:0;padding:0;z-index:3}.pure-menu-horizontal .pure-menu-children{left:0;top:auto;width:inherit}.pure-menu-active>.pure-menu-children,.pure-menu-allow-hover:hover>.pure-menu-children{display:block;position:absolute}.pure-menu-has-children>.pure-menu-link:after{padding-left:.5em;content:"\25B8";font-size:small}.pure-menu-horizontal .pure-menu-has-children>.pure-menu-link:after{content:"\25BE"}.pure-menu-scrollable{overflow-y:scroll;overflow-x:hidden}.pure-menu-scrollable .pure-menu-list{display:block}.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list{display:inline-block}.pure-menu-horizontal.pure-menu-scrollable{white-space:nowrap;overflow-y:hidden;overflow-x:auto;padding:.5em 0}.pure-menu-horizontal .pure-menu-children .pure-menu-separator,.pure-menu-separator{background-color:#ccc;height:1px;margin:.3em 0}.pure-menu-horizontal .pure-menu-separator{width:1px;height:1.3em;margin:0 .3em}.pure-menu-horizontal .pure-menu-children .pure-menu-separator{display:block;width:auto}.pure-menu-heading{text-transform:uppercase;color:#565d64}.pure-menu-link{color:#777}.pure-menu-children{background-color:#fff}.pure-menu-disabled,.pure-menu-heading,.pure-menu-link{padding:.5em 1em}.pure-menu-disabled{opacity:.5}.pure-menu-disabled .pure-menu-link:hover{background-color:transparent}.pure-menu-active>.pure-menu-link,.pure-menu-link:focus,.pure-menu-link:hover{background-color:#eee}.pure-menu-selected>.pure-menu-link,.pure-menu-selected>.pure-menu-link:visited{color:#000}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0} \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/favicon.ico b/luci-theme-argon/htdocs/luci-static/argon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..79c8f860a65033885c496c6c15998e2cf885df74 GIT binary patch literal 9662 zcmeI2TXPge6vrp!gAYDh<+D}MDj)e6`4q|>xg{Y9ggfDqKmsKo8v|0|qKL>%3Y8Th z`_Q zSaR(`HMzD?SZZCPnzJUPO{%t@tyx%lL$jLRut-=2X{M8{Mb)KsVZWPfV#S31Y8a9qby4Q*NzxAP5@SU0_^^odqkG9vPf=#~ z=E;r^&_9P6h_y>A=UIyLICSBABFiGVF$a%zehkLoxAJsxt$FE3O7|?KD#y6I{y9_$ zLt^V{%07KOp(DR%#iIe^bTe7Wg!8(wCzR>kPz{6nd^z8L)?Xe&e8+ldh&wdMj1+#C z^NrGWNblSzPjjTqmHD`*QU;+P40-+j4Dl^1$cm0T>MqVmpFCL5U-~TR;UmSTI`*wZ zj4~gttAqjiXEOr@GGIPo+`r?fvou5h=>lQi>dIi=xLkU=<2d`*T}pShmdlXWKU?Vc zW6;7!9d)^77&oqX&RfmfzqnoE$TQBID7RlypDpA2&-%R?BAEYLDd&6Vs2CaA@%^52 z@61=9yItbQ^b^5rY4!4X9`qLPm9dG}kk&H`&ZkIapjDeFv zKl>0qeQRF-Eb?P8M@Jmxmu93ucSI?M2Z)Ul;}|5?8~Lv-63N7D#fyCN&%5@y zH~ir2_;bfK7V_eFmW%t=?8rmMdBqvVg@GV{S{)VlpY^*lWUgH-F4D1|K6l18_fBFS z=e22vcH5pM9djSQ&AdJg{k|~)b+mmZGvxI<8T8+-`&B{OcVCKmpPciheELZ3>qEA_ zRmU9EZ!>TG92D1p{u#_bUJRLEuliL%>A};sd277SdybRb)otrr_2D0U%QkOb75aT* zGwM^Je+GFmXcztK(C^$V=$HOO=JGj*F8%V5BQ|3O%ts8A6A)h#`oRGG?hMIq4m-5i zGE9TUJKO9Gh-0LV?IRs+$Cg4L7Ug(MQG6-BWx36Fu$7rV$Y9(Ih>@vJm&{-W@?wbW z>~<^KmX|(1P?7(@9Qu{>wldrfwEho*;(X9Qof(9FR|d?BtW?si_=!A>0r5|J%VtO& z?w`2UV~^`hqVEZaRjN;f{^{h$ps}AAwBb2Q9Niblpus;N(+nz&^x;7<2QT%3O5O+c z$>QnE0R7$!FUojUr6A+(EsB5AOA*9*r9U0zc<;fT@E?Acr}?L7&lJXRFF&q`0s5yg z0|hZ?0b`9rP&P|h_-ff$gb4eUZ2FZU+c;h7#}&QP>WI)kje;1SAugVUfBtW87I+ig z?Y42+ryYcTFhGAW!}#tk72nH>c=28&_inR|amDi`mv&G`+NLrCmCF!2yeF{Vu1K>y z8PB|ixK@Sh59(vq-!@g~FP9;TchNEoS@YymL#Gtxc2%rD2>oE7N*P{kUrVM-469NY zE+ZaVZ}T6D$7ye0RK)oT`m13WMa(O4>PS`ZHTMN6TpPhU+a%T>)JLuFF#}1fv>kZf z`V8wIF|>c?<~6d?nr9R6Z#vFNe9=!4#7X7&Am`pytUn0-U?}LXsvU~`2gJh0H!r7X z|5l0}=%e^&eH7cXmBtafdyaLIN@A5|yblHa|0sixKkXMItD+s$M=kG$S-Uj(98J0% z{u_qy!#)fxmSS-$FopJ#4Io82DQU+cyw-hFWL` z{?@^!U4F{}27Z?Knc{bv`z6`G%5hqx`8l7QdrKck`l2!>AY(H!MkZsGGG@$iZ@K=! zYbe5U>xp7bQLgQB%4_WWodAF9VEcaNK8t@Jw^ L`+T2M-1ol$(!Z#6 literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.eot b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.eot new file mode 100644 index 0000000000000000000000000000000000000000..efce636a84d6da92d5e40498fc945e93a90e4307 GIT binary patch literal 33846 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 M>%j(UEQQ4X1Pp)(oB#j- literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.svg b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.svg new file mode 100644 index 00000000..c555b759 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.svg @@ -0,0 +1,1191 @@ + + + + +Created by FontForge 20090622 at Tue Jul 23 03:29:07 2019 + By deploy user +TypoGraphica ©Sharkshock Productions 2015. All Rights Reserved + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.ttf b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e11f89a0f749b95a9001e33de3100be7a0bb858e GIT binary patch literal 33632 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 literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.woff b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.woff new file mode 100644 index 0000000000000000000000000000000000000000..fef38ca003e3d02372d80287057424843e6bd4f0 GIT binary patch literal 17816 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 P{|_V(EFb^?vO@>^k62-U literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.eot b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.eot new file mode 100644 index 0000000000000000000000000000000000000000..e28f6db55e898dd8a1d9ead5318f7528ec9286c4 GIT binary patch literal 8888 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 JAO6eX{{!P-6bb+U literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.svg b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.svg new file mode 100644 index 00000000..1e12b5f6 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.svg @@ -0,0 +1,38 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.ttf b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3d062dcf264462eae98dbe9565560187362e7f5c GIT binary patch literal 8732 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 DNS*~X literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.woff b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.woff new file mode 100644 index 0000000000000000000000000000000000000000..ef1e9c2c434f786a409d2e3ac47a5035872e98e7 GIT binary patch literal 8808 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 b$ejqMF;>UORRG?q5=PhE&nt)jo%sI(Ce#aG literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/android-icon-192x192.png b/luci-theme-argon/htdocs/luci-static/argon/icon/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..7bfe4e5fd41adaaca4360fe28ff088f4ea4c660d GIT binary patch literal 8300 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 literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-144x144.png b/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..8d523df8b3def104ea6bc7e6fa1e41803aea18cb GIT binary patch literal 6568 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 literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-72x72.png b/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..07753022e45a769c7a35fd2fb59b25577e4d9734 GIT binary patch literal 4003 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 literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/browserconfig.xml b/luci-theme-argon/htdocs/luci-static/argon/icon/browserconfig.xml new file mode 100644 index 00000000..c5541482 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/icon/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png b/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..88bf329787747293b939c263e9d4b53e64b18238 GIT binary patch literal 2069 zcmcIleN5D57%v7tVB&~32P$f<#7t(dz4kskPX>20Bvx-2ep%GffUA9IFfVum40Hg(fD=hr}V(JbiPl*GM-<7O6h{Ig4XecS%t z-}8HZ&(o)Mxj9*Ju~T9Z1c`HHJM-W`u_Y!q>6RS8 zCuCR2AipZd!&Q}XHXcizkIoA*kRSk577YdbL4^s~u|Zx2uC?0)h7Lm1QahHW1w;$n zxu`>w0cz8eI7gBsYM?E8o;9)-V490kBt;Ph13_7E(#FsxhNRK(4}BdPMMZ_ag4T<231P6=Yy?RW6oo?su2cq9HiQS2S;GuYpm4Gvse%|pHAc2r zEK}_m)H;+zK#I@?m9SCJG9tuEgh5YgNeu(t?q@>-fe2brGsg`Imi)lhyiAc$xK;_ah9ey++s5taI2Lw;ILh- zHj*N(lot%MEtCcL?y&yHSv6HWWHeGHBg^qd+-o*)xY=Oja9gp#h|?s+b0*Sg1srsX z=NPXj2UyrALVzs+gcK~n(0|l8M87DzMIL%iYuyalVHVkf0!vpJen0ZT%J9lBpo2}v zu$$`VNo=G2*oBxXCy4!Q-d2Jt4htAaQ?Y&5VOZLPwtOZxwQr$GSU!3}7=w8AvnPg+q4{@goYnyK!n>?+&Z-rxW?OVE- zEn5y>Tvc$gzwXRk^@OUQ)^YCZ-aFGzo}7JdO`=u#{@1?O>i5p*PT5~xw2MXc$fec3_M<&C-R!NRy1R(e58ogA z>cvS9?{{Kn_Xf7#N~uzgN7cmCHaNzt_2iwo+1h-#&G$;lh54TxShgNXwl-|;_kY## z^TSDRj~lgeprByxxT4iH@8}90`_Ejy)|A`R_W6#ZjaN^7288oenJvvrdj9NdS$Hrr zvAsHBy8Wa4l(9&%uJv-VZsziR(etWrXSG+QzxmSxowTYgedVX$wu~l@-mU8Bz10Z* zSa)i1-FwEHod>$(_Sg&iF1&a?NByEzWDdN3FO_VJ&CHw7(6nv)_21$THO5XnvIeK? Vx9%dQ?bJTpu8bUKTYAy@zX6*N(Zv7& literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-32x32.png b/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..d524df3eaee3fc2b0e70a5abd14fa2c4f134deab GIT binary patch literal 2604 zcmcImc~ld39#17ekfSOHE3IxER$GP1OfEn9_X?P?1XFk_O-76?7TUCGxPa=zMtFq$+WaRL%eIA3 zCDMt?NEu4%c?d?Tah^p_F=!SmV6KHiP#sQl)wqT*$brW-#{n*Z$$`^dxRwad zGU9PrQ7SY`he|PE?i_A_MaB^5aT?)T^l1i@%pwPdcxBAm`WOPZLl9ag2Li1Qxrxdc zZZK)Yxl$esqA(0|`9eP)hKLY9TVi_#tj%)zq&xobUVilny z-k3W%prvU_20>=CnP(RANTUYgOQli>7C-_4$RI#drh!H*puyxd%AmkasF9#(f;4cg zjEI`dpydFgbvOt;HAZVNjU5DAD0rLZp|mZYkE@gZG|y@EtDtm(7b4>vAGq727ahM4~2^Kqdd6;z8Q zVo)j&2|+1_i9oTGkK=q)jrhUXC|k6VV7?tB?YFE}RT#r40}6M?R7bTT8oS`dWRnqzmvVU(>ZK!*5VB58;U;+Gm)vZ z88PC48Ya{Kv$>!@5^qA5yjl9&75@JyeI%`@7BOgWW^_V;H5kY`Vup(X{dc{F-u-4A zjl!83XI+ksSLSAHK;s66+Q^LGl9g~3i^b+dC<0Z94UMJB$mDpp=1(7-E1zZK2s}VzXid z(E|?$o!ZVVSKwI6yAqCmcHFbx6<*<$y(yki?3UJX#ctm0vfQPw#oc%J&y;Ww9oX~N z&I$gXI9@q2LxD*AJ3jx%>gMQ#_GQn4*KhxLshDEdB{>IpejL!NUEQ^7LSF^!b5OKa zOSq)(nS1ut*1weH9{}Dzab()ExHXNR>30@~x_y)1wTml`cPDE-H0qXC$1wKylWJ>y zPSj=Vax`8^Ky6RtM11FLD4A9A?q2o_`J$j5+U}k-#roA6v&XiRPGM~Cl!hDGVej-_ z+L(SvH+YzSc}5uU>$sTe)9R)3))lJHcU_LRzjEkOMRnWx+v5`Z4t3_dT$A53ub;R% z0H0fy73jZwpt0+b}u_Rq426SWy@v% zv;D%pwO`kj8X7j&ec`ZH(e9P}9i8&HR%26&y6pePx1o|pW)~#>-SyB#+bhcxVsbtx zoQ4*CW!JF@E}!}yZ(z6iKrFR5dV0Ce=j@{LpKX5mv|{nZLf50E3zHMpLPY)jzKeaC z?Zi=!Re_d&u5{j1J@=rO;zZ2AL1)czQy!JFGJq6Z=m?lIr$lu5!lCoEH`34KFMaA= z{%}eg$8UDQBkG37h0U)PL5;U}S5EcGIsVY^ha2~(?H#8bJKW%-q1n$v3X3#d9y-oR zyWX4`8_|#U+Hc)*K$_mUXrjyFZ`o}dw)FXi4DNIBPs+)Q&dSTHNxGFh^_e8SbJtV% z?KREFvX&ZNvZA0L>X$oR{4r<~ z182+6Ki$!K1U1V}_-}YWcA;Za-|JRk&4f-iq2S!wy~)M~pr=W99AORELemA2wM%FC QTmR=GLZTFVgBGv)H+k{kfB*mh literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-96x96.png b/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..6c8e88740bf56d2ff5faa7f15ba2d3b0bd072f63 GIT binary patch literal 4805 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 literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/manifest.json b/luci-theme-argon/htdocs/luci-static/argon/icon/manifest.json new file mode 100644 index 00000000..2817bc81 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/icon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "Openwrt", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/ms-icon-144x144.png b/luci-theme-argon/htdocs/luci-static/argon/icon/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..8d523df8b3def104ea6bc7e6fa1e41803aea18cb GIT binary patch literal 6568 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 Olp4+`z`)7~<^lj7UM1E5 literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/argon.svg b/luci-theme-argon/htdocs/luci-static/argon/img/argon.svg new file mode 100644 index 00000000..0c8aea07 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/img/argon.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/bg1.jpg b/luci-theme-argon/htdocs/luci-static/argon/img/bg1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26a52a5351f3c68d326dcacbf98fe3cf9ac485a3 GIT binary patch literal 159265 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 z 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

    Y2#d_pOEdAHz8x0cU)30N4^@W{p|L> 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

    ",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/jerrykuku/luci-theme-argon/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * luci-theme-material: + * https://github.com/LuttyYang/luci-theme-material/ + * + * Argon Theme + * https://demos.creative-tim.com/argon-dashboard/index.html + * + * Login background + * https://unsplash.com/ + * + * Licensed to the public under the Apache License 2.0 + */ + + var lastNode = undefined; + var mainNodeName = undefined; + + var nodeUrl = ""; + (function (node) { + if (node[0] == "admin") { + luciLocation = [node[1], node[2]]; + } else { + luciLocation = node; + } + + for (var i in luciLocation) { + nodeUrl += luciLocation[i]; + if (i != luciLocation.length - 1) { + nodeUrl += "/"; + } + } + })(luciLocation); + + /** + * get the current node by Burl (primary) + * @returns {boolean} success? + */ + function getCurrentNodeByUrl() { + var ret = false; + const urlReg = new RegExp(nodeUrl + "$") + if (!$('body').hasClass('logged-in')) { + luciLocation = ["Main", "Login"]; + return true; + } + $(".main > .main-left > .nav > .slide > .active").next(".slide-menu").stop(true).slideUp("fast"); + $(".main > .main-left > .nav > .slide > .menu").removeClass("active"); + $(".main > .main-left > .nav > .slide > .menu").each(function () { + var ulNode = $(this); + + ulNode.next().find("a").each(function () { + var that = $(this); + var href = that.attr("href"); + + if (urlReg.test(href)) { + ulNode.click(); + ulNode.next(".slide-menu").stop(true, true); + lastNode = that.parent(); + lastNode.addClass("active"); + ret = true; + return true; + } + }); + }); + return ret; + } + + /** + * menu click + */ + $(".main > .main-left > .nav > .slide > .menu").click(function () { + var ul = $(this).next(".slide-menu"); + var menu = $(this); + if (!menu.hasClass("exit")) { + $(".main > .main-left > .nav > .slide > .active").next(".slide-menu").stop(true).slideUp("fast"); + $(".main > .main-left > .nav > .slide > .menu").removeClass("active"); + if (!ul.is(":visible")) { + menu.addClass("active"); + ul.addClass("active"); + ul.stop(true).slideDown("fast"); + } else { + ul.stop(true).slideUp("fast", function () { + menu.removeClass("active"); + ul.removeClass("active"); + }); + } + + return false; + } + + }); + + /** + * hook menu click and add the hash + */ + $(".main > .main-left > .nav > .slide > .slide-menu > li > a").click(function () { + if (lastNode != undefined) + lastNode.removeClass("active"); + $(this).parent().addClass("active"); + $(".main > .loading").fadeIn("fast"); + return true; + }); + + /** + * fix menu click + */ + $(".main > .main-left > .nav > .slide > .slide-menu > li").click(function () { + if (lastNode != undefined) + lastNode.removeClass("active"); + $(this).addClass("active"); + $(".main > .loading").fadeIn("fast"); + window.location = $($(this).find("a")[0]).attr("href"); + return false; + }); + + /** + * fix submenu click + */ + $("#maincontent > .container > .tabs > li").click(function () { + $(".main > .loading").fadeIn("fast"); + window.location = $($(this).find("a")[0]).attr("href"); + return false; + }); + + /** + * get current node and open it + */ + if (getCurrentNodeByUrl()) { + mainNodeName = "node-" + luciLocation[0] + "-" + luciLocation[1]; + mainNodeName = mainNodeName.replace(/[ \t\n\r\/]+/g, "_").toLowerCase(); + $("body").addClass(mainNodeName); + } + + if (mainNodeName != undefined) { + console.log(mainNodeName); + switch (mainNodeName) { + case "node-status-system_log": + case "node-status-kernel_log": + $("#syslog").focus(function () { + $("#syslog").blur(); + $(".main-right").focus(); + $(".main-right").blur(); + }); + break; + case "node-status-firewall": + var button = $(".node-status-firewall > .main fieldset li > a"); + button.addClass("cbi-button cbi-button-reset a-to-btn"); + break; + case "node-system-reboot": + var button = $(".node-system-reboot > .main > .main-right p > a"); + button.addClass("cbi-button cbi-input-reset a-to-btn"); + break; + } + } diff --git a/luci-theme-argon/htdocs/luci-static/argon/js/sidebar-argon.js b/luci-theme-argon/htdocs/luci-static/argon/js/sidebar-argon.js new file mode 100644 index 00000000..fdf5a99c --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/js/sidebar-argon.js @@ -0,0 +1,64 @@ +/** + * Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material and Argon Template + * + * luci-theme-argon + * Copyright 2023 Jerrykuku + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/jerrykuku/luci-theme-argon/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * luci-theme-material: + * https://github.com/LuttyYang/luci-theme-material/ + * + * Argon Theme + * https://demos.creative-tim.com/argon-dashboard/index.html + * + * Login background + * https://unsplash.com/ + * + * Licensed to the public under the Apache License 2.0 + */ + + /** + * Sidebar expand + */ + var showSide = false; + $(".showSide").click(function () { + if (showSide) { + $(".darkMask").stop(true).fadeOut("fast"); + $(".main-left").width(0); + $(".main-right").css("overflow-y", "auto"); + showSide = false; + } else { + $(".darkMask").stop(true).fadeIn("fast"); + $(".main-left").width("15rem"); + $(".main-right").css("overflow-y", "hidden"); + showSide = true; + } + }); + + $(".darkMask").click(function () { + if (showSide) { + showSide = false; + $(".darkMask").stop(true).fadeOut("fast"); + $(".main-left").width(0); + $(".main-right").css("overflow-y", "auto"); + } + }); + + $(window).resize(function () { + if ($(window).width() > 921) { + $(".main-left").css("width", ""); + $(".darkMask").stop(true); + $(".darkMask").css("display", "none"); + showSide = false; + } + }); diff --git a/luci-theme-argon/htdocs/luci-static/argon/js/styles-argon.js b/luci-theme-argon/htdocs/luci-static/argon/js/styles-argon.js new file mode 100644 index 00000000..2e40a94c --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/js/styles-argon.js @@ -0,0 +1,103 @@ +/** + * Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material and Argon Template + * + * luci-theme-argon + * Copyright 2023 Jerrykuku + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/jerrykuku/luci-theme-argon/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * luci-theme-material: + * https://github.com/LuttyYang/luci-theme-material/ + * + * Argon Theme + * https://demos.creative-tim.com/argon-dashboard/index.html + * + * Login background + * https://unsplash.com/ + * + * Licensed to the public under the Apache License 2.0 + */ + +/* + * Font generate by Icomoon + */ +(function ($) { + $(".main > .loading").fadeOut(); + + /** + * trim text, Remove spaces, wrap + * @param text + * @returns {string} + */ + function trimText(text) { + return text.replace(/[ \t\n\r]+/g, " "); + } + +// define what element should be observed by the observer +// and what types of mutations trigger the callback + const observer = new MutationObserver(() => { + console.log("callback that runs when observer is triggered"); + }); + if ($("#cbi-dhcp-lan-ignore").length > 0) { + observer.observe(document.getElementById("cbi-dhcp-lan-ignore"), { + subtree: true, + attributes: true + }); + } + + $(".cbi-button-up").val(""); + $(".cbi-button-down").val(""); + + /** + * hook other "A Label" and add hash to it. + */ + $("#maincontent > .container").find("a").each(function () { + var that = $(this); + var onclick = that.attr("onclick"); + if (onclick == undefined || onclick == "") { + that.click(function () { + var href = that.attr("href"); + if (href.indexOf("#") == -1) { + $(".main > .loading").fadeIn("fast"); + return true; + } + }); + } + }); + + /** + * fix legend position + */ + $("legend").each(function () { + var that = $(this); + that.after("" + that.text() + ""); + }); + + $(".cbi-section-table-titles, .cbi-section-table-descr, .cbi-section-descr").each(function () { + var that = $(this); + if (that.text().trim() == "") { + that.css("padding", "0px"); + } + }); + + $(".node-main-login > .main .cbi-value.cbi-value-last .cbi-input-text").focus(function () { + //$(".node-main-login > .main > .main-right > .login-bg").addClass("blur"); + }); + $(".node-main-login > .main .cbi-value.cbi-value-last .cbi-input-text").blur(function () { + //$(".node-main-login > .main > .main-right > .login-bg").removeClass("blur"); + }); + + $(".main-right").focus(); + $(".main-right").blur(); + $("input").attr("size", "0"); + +})(jQuery); diff --git a/luci-theme-argon/htdocs/luci-static/argon/less/cascade.less b/luci-theme-argon/htdocs/luci-static/argon/less/cascade.less new file mode 100644 index 00000000..2de44e54 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/less/cascade.less @@ -0,0 +1,4133 @@ +/** + * Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material and Argon Template + * + * luci-theme-argon + * Copyright 2020 Jerryk + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/jerrykuku/luci-theme-argon/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * luci-theme-material: + * https://github.com/LuttyYang/luci-theme-material/ + * + * Argon Theme + * https://demos.creative-tim.com/argon-dashboard/index.html + * + * Login background + * https://unsplash.com/ + * + * Licensed to the public under the Apache License 2.0 + */ + +/* + * Font generate by Icomoon + */ + +/* + * Common Styles + */ + +@import url("fonts.css?v=3"); +@import url("pure-min.css?v=1"); + +:root { + /** general **/ + --primary: #5e72e4; + --dark-primary: #483d8b; + --background-color: #f4f5f7; + --font-color: #525f7f; + /** login form **/ + --login-form-background-color: #ffffff; + --login-form-bg-color: rgba(244, 245, 247, 0.8); + --blur-radius: 10px; + --blur-opacity: 0.5; + + --white: #fff; + --darker: black; + --default: #525461; + + --warning: #fb6340; + --footer-color: #aaa; + --menubar-background: #fff; + --menubar-scrollbar-thumb: #eee; + --menubar-text-color: #4c4c4c; + --blue: #5e72e4; + --indigo: #5603ad; + --purple: #8965e0; + --pink: #f3a4b5; + --red: #f5365c; + --orange: #fb6340; + --yellow: #ffd600; + --green: #2dce89; + --teal: #11cdef; + --cyan: #2bffc6; + --white: #fff; + --gray: #8898aa; + --gray-dark: #32325d; + --light: #ced4da; + --lighter: #e9ecef; + --secondary: #f7fafc; + --success: #2dce89; + --info: #11cdef; + --danger: #f5365c; + --light: #adb5bd; + --dark: #212529; + --neutral: #fff; + --login-form-bg-color: rgba(244, 245, 247, 0.8); + + --blur-radius: 10px; + --blur-opacity: 0.5; + --blur-radius-dark: 10px; + --blur-opacity-dark: 0.5; + --font-family-sans-serif: "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + --font-family-normal: Open Sans, PingFangSC-Regular, Microsoft Yahei, WenQuanYi Micro Hei, "Helvetica Neue", Helvetica, Hiragino Sans GB, sans-serif; +} + +[data-theme="dark"] { + --primary: #483d8b; + --dark-primary: #483d8b; + --background-color: #1e1e1e; + --font-color: #cccccc; + --white: #fff; + --darker: black; + --default: #525461; + + --warning: #fb6340; + --footer-color: #aaa; + --menubar-background: #fff; + --menubar-scrollbar-thumb: #f6f9fc; + --menubar-text-color: #4c4c4c; + --blue: #5e72e4; + --indigo: #5603ad; + --purple: #8965e0; + --pink: #f3a4b5; + --red: #f5365c; + --orange: #fb6340; + --yellow: #ffd600; + --green: #2dce89; + --teal: #11cdef; + --cyan: #2bffc6; + --white: #fff; + --gray: #8898aa; + --gray-dark: #32325d; + --light: #ced4da; + --lighter: #e9ecef; + --secondary: #f7fafc; + --success: #2dce89; + --info: #11cdef; + --danger: #f5365c; + --light: #adb5bd; + --dark: #212529; + --neutral: #fff; + --login-form-bg-color: rgba(244, 245, 247, 0.8); + + --blur-radius: 10px; + --blur-opacity: 0.5; + --blur-radius-dark: 10px; + --blur-opacity-dark: 0.5; + --font-family-sans-serif: "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + --font-family-normal: Open Sans, PingFangSC-Regular, Microsoft Yahei, WenQuanYi Micro Hei, "Helvetica Neue", Helvetica, Hiragino Sans GB, sans-serif; +} + +html, +body { + margin: 0px; + padding: 0px; + height: 100%; + font-size: 16px; + font-family: "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"; + font-family: var(--font-family-sans-serif); +} + +html { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + font-size: 0.875rem; + background-color: #f4f5f7; + background-color: var(--background-color); + color: #525f7f; + color: var(--font-color); + +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; + -webkit-tap-highlight-color: transparent; + +} + +::selection { + background-color: #5e72e4; + background-color: var(--primary); + color: #ffffff; + color: var(--white); +} + +::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +::-webkit-scrollbar, +::-webkit-scrollbar-corner { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: #9e9e9e; +} + +::-webkit-scrollbar-thumb:hover { + background: #757575; +} + +::-webkit-scrollbar-thumb:active { + background: #424242; +} + +a:link, +a:visited, +a:active { + color: var(--primary); + text-decoration: none; +} + +a:-webkit-any-link:not(li a, .main-left a, .brand, .pull-right a, .alert-message a, .login-container footer a, .cbi-button) { + color: -webkit-link; + cursor: pointer; + color: var(--primary); + text-shadow: 1px 1px 2px #ccc; +} + +a:hover { + text-decoration: underline; +} + +li { + list-style-type: none; +} + +@-webkit-keyframes sparkle { + from { + background-position: 0 0; + } + + to { + background-position: 0 -64px; + } +} + +@-moz-keyframes sparkle { + from { + background-position: 0 0; + } + + to { + background-position: 0 -64px; + } +} + +@-o-keyframes sparkle { + from { + background-position: 0 0; + } + + to { + background-position: 0 -64px; + } +} + +@keyframes sparkle { + from { + background-position: 0 0; + } + + to { + background-position: 0 -64px; + } +} + +/*********************** +* +* Login Page +* +***************************/ + +.login-page { + height: 100%; + + .video { + position: absolute; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background-color: #000; + background-color: var(--darker); + overflow: hidden; + + video { + width: 100%; + height: 100%; + object-fit: cover; + } + } + + .volume-control { + position: fixed; + right: 1rem; + top: 1rem; + width: 1.5rem; + height: 1.5rem; + z-index: 5000; + cursor: pointer; + background-size: contain; + background-image: url(../img/volume_high.svg); + + &.mute { + background-image: url(../img/volume_off.svg); + } + } + + .main-bg { + position: fixed; + width: 100%; + height: 100%; + left: 0; + top: 0; + background-image: url(../img/blank.png); + background-repeat: no-repeat; + background-position: center; + background-size: cover; + transition: all 0.5s; + } + + .login-container { + height: 100%; + margin-left: 4.5rem; + position: absolute; + top: 0px; + display: flex; + flex-direction: column; + -webkit-box-pack: center; + justify-content: center; + align-items: flex-start; + min-height: 100%; + z-index: 2; + width: 420px; + box-shadow: rgba(0, 0, 0, 0.75) 0px 0px 35px -5px; + margin-left: 5%; + background: transparent; + + .login-form { + display: flex; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: absolute; + top: 0px; + width: 100%; + min-height: 100%; + max-width: 420px; + background-color: #fff; + background-color: var(--white); + overflow:hidden; + + .brand { + display: flex; + -webkit-box-align: center; + align-items: center; + margin: 50px auto 15px auto; + color: #525461; + color: var(--default); + + .icon { + width: 50px; + height: auto; + } + + &:hover { + text-decoration: none; + } + } + + .brand-text { + font-size: 1.8rem; + font-weight: 700; + letter-spacing: 1px; + margin-bottom: 85px; + font-family: "TypoGraphica"; + width: 420px; + padding: 0 0.5rem 0.1rem 0.5rem; + text-align: center; + word-break: break-word; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + + .form-login { + width: 420px; + padding: 20px 50px; + box-sizing: border-box; + + .errorbox { + text-align: center; + color: #fb6340; + color: var(--warning); + } + + .input-group { + margin-bottom: 1.25rem; + position: relative; + + &::before { + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #525461; + color: var(--default); + font-size: 1.5rem; + position: absolute; + z-index: 100; + left: 10px; + top: 10px; + } + + .border { + position: absolute; + width: 100%; + height: 1px; + bottom: 0; + border-bottom: 1px #5e72e4 solid; + border-bottom: 1px var(--primary) solid; + transform: scaleX(0); + transition: transform 0.3s; + } + + input { + font-size: 1rem; + line-height: 1.5em; + display: block; + width: 100%; + padding: .5rem .75rem 0.5rem 3rem; + margin: 0.825rem 0; + box-sizing: border-box; + transition: all .3s cubic-bezier(.68, -.55, .265, 1.55); + color: #525461; + color: var(--default); + border: 0; + border-radius: 0; + border-bottom: 1px solid #fff; + border-bottom: 1px solid var(--white); + background-color: transparent; + background-clip: padding-box; + box-shadow: 0 3px 2px rgba(233, 236, 239, .05); + outline: none; + + &:focus+.border { + transform: scaleX(1); + } + } + + .cbi-input-password { + margin-bottom: 2rem; + position: relative; + } + } + + .user-icon::before { + content: "\e971"; + } + + .pass-icon::before { + content: "\e910"; + + } + } + + .cbi-button-apply { + width: 100% !important; + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 50px 0px; + font-weight: 600; + font-size: 15px; + color: #fff; + color: var(--white); + text-align: center; + width: 100%; + cursor: pointer; + min-height: 50px; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + border-radius: 6px; + outline: none; + border-width: initial; + border-style: none; + border-color: initial; + border-image: initial; + padding: 10px 0px; + margin: 30px 0px 100px; + transition: all 0.3s !important; + letter-spacing: 0.8rem; + + &:hover, + :focus { + opacity: 0.9; + } + } + } + + footer { + box-sizing: border-box; + width: 100%; + text-align: center; + line-height: 1.6rem; + display: flex; + justify-content: space-evenly; + margin-top: auto; + padding: 0px 0px 30px; + z-index: 10; + color: #525461; + color: var(--default); + position: absolute; + bottom: 0; + + .ftc { + position: absolute; + bottom: 30px; + width: 100%; + } + + .luci-link { + display: block; + } + } + + footer { + color: var(--default); + + a { + color: var(--default); + } + } + } +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +@supports (-webkit-backdrop-filter: none) or (backdrop-filter: none) { + .login-page .login-container .login-form { + -webkit-backdrop-filter: blur(var(--blur-radius)); + backdrop-filter: blur(var(--blur-radius)); + background-color: rgba(244, 245, 247, var(--blur-opacity)); + + } +} + + + +/*********************** +* +* Header +* +***************************/ + + +header { + width: 100%; + padding: 0 0 0 0; + position: relative; + + .container { + margin-top: rem; + padding: 0.5rem 1rem 0 1rem; + + .pull-right>* { + position: relative; + top: 0.45rem; + cursor: pointer; + } + } + + &::after { + content: ""; + position: absolute; + height: 2rem; + width: 100%; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + } + + &.bg-primary { + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + } + + .fill { + padding: 0.8rem 0; + border-bottom: 0px solid rgba(255, 255, 255, .08) !important; + + .container { + height: 2rem; + padding: 0 1.25rem; + + .brand { + font-size: 1.5rem; + color: #fff; + color: var(--white); + font-family: "TypoGraphica"; + text-decoration: none; + padding-left: 1rem; + cursor: default; + vertical-align: text-bottom; + display: none; + } + } + } +} + + + + + +/*********************** +* +* Footer +* +***************************/ + +footer { + + text-align: right; + padding: 1rem; + font-size: 0.8rem; + + a { + text-decoration: none; + } +} + + + +/*********************** +* +* Main +* +***************************/ + +@keyframes anim-rotate { + 0% { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +.main { + top: 0rem; + bottom: 0rem; + position: relative; + height: 100%; + width: 100%; + height: calc(100% - 4rem); + + .main-left { + float: left; + width: 15%; + width: calc(0% + 15rem); + height: 100%; + background-color: #fff !important; + background-color: var(--menubar-background) !important; + box-shadow: rgba(0, 0, 0, 0.75) 0px 0px 15px -5px; + overflow-x: auto; + position: fixed; + z-index: 100; + transition: width 0.2s ease-in-out; + overflow-y: scroll; + + &::-webkit-scrollbar { + width: 5px; + height: 1px; + } + + &::-webkit-scrollbar-thumb { + background-color: #f6f9fc; + background-color: var(--menubar-scrollbar-thumb); + + } + + &::-webkit-scrollbar-track { + background-color: transparent; + } + + .sidenav-header { + padding: 1.5rem; + text-align: center; + + .brand { + font-size: 1.8rem; + color: #5e72e4; + color: var(--primary); + font-family: "TypoGraphica", sans-serif; + text-decoration: none; + padding-left: 0; + cursor: default; + vertical-align: text-bottom; + white-space: nowrap; + } + } + + .nav { + margin-top: 0.5rem; + + li { + padding: 0rem; + cursor: pointer; + + a { + color: #525f7f; + color: var(--default); + display: block; + } + + &:nth-last-child(1) { + font-size: 1.2rem; + + .menu:after { + content: ""; + } + } + + &.slide { + padding: 0; + + ul { + display: none; + + li { + a { + position: relative; + + margin: 0.1rem 1rem 0.1rem 3rem; + padding: 0.5rem 0rem 0.5rem 0; + text-decoration: none; + white-space: nowrap; + color: #4c4c4c; + color: var(--menubar-text-color); + transition: all 0.2s; + font-size: 0.875rem; + + &::after { + content: ""; + position: absolute; + width: 00%; + height: 2px; + left: 0; + bottom: 0; + background-color: #5e72e4; + background-color: var(--primary); + transition: all 0.2s; + } + + &:hover { + &::after { + color: #000; + color: var(--darker); + width: 100%; + } + } + } + } + } + + .menu { + display: block; + margin: 0.1rem .5rem 0.1rem .5rem; + padding: .675rem 0 .675rem 2.5rem; + border-radius: .375rem; + text-decoration: none; + cursor: default; + font-size: 1rem; + transition: all 0.2s; + position: relative; + + &::before { + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + position: absolute; + left: 0.8rem; + content: "\e915"; + color: #5e72e4; + color: var(--primary); + } + + &::after { + position: absolute; + right: 0.5rem; + top: 0.8rem; + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: '\e90f'; + transition: all .15s ease; + color: #ced4da; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + transition: all 0.3s; + } + + &:hover, + &.active { + cursor: pointer; + color: #fff; + background: #5e72e4; + background: var(--primary); + box-shadow: 0 0 1px #ccc; + + a { + color: #000; + + &::after { + color: #000; + width: 100%; + } + } + + &::before { + color: #fff !important; + } + + &::after { + color: #fff; + + } + } + + &.active { + &::after { + + transform: rotate(90deg); + } + } + + } + + .menu[data-title=Status]:before { + content: "\e906"; + color: #5e72e4; + color: var(--primary); + } + + .menu[data-title=System]:before { + content: "\e90a"; + color: #fb6340; + } + + .menu[data-title=Services]:before { + content: "\e909"; + color: #11cdef; + } + + .menu[data-title=NAS]:before { + content: "\e90c"; + color: #f3a4b5; + } + + .menu[data-title=VPN]:before { + content: "\e90b"; + color: #aaad03; + } + + .menu[data-title=Network]:before { + content: "\e908"; + color: #8965e0; + } + + .menu[data-title=Bandwidth_Monitor]:before { + content: "\e90d"; + color: #2dce89; + } + + .menu[data-title=Docker]:before { + content: "\e911"; + color: #6699ff; + } + + .menu[data-title=Statistics]:before { + content: "\e913"; + color: #5603ad; + } + + .menu[data-title=Control]:before { + content: "\e912"; + color: #5e72e4; + color: var(--primary); + } + + .menu[data-title=Asterisk]:before { + content: "\e914"; + color: #fb6340; + } + + .menu[data-title=Logout]:before { + content: "\e907"; + color: #adb5bd; + } + + .slide-menu { + li { + a { + position: relative; + + margin: 0.1rem 1rem 0.1rem 3rem; + padding: 0.5rem 0rem 0.5rem 0; + text-decoration: none; + white-space: nowrap; + color: rgba(0, 0, 0, .6); + transition: all 0.2s; + font-size: 0.875rem; + + &::after { + content: ""; + position: absolute; + width: 00%; + height: 2px; + left: 0; + bottom: 0; + background-color: #5e72e4; + background-color: var(--primary); + transition: all 0.2s; + box-shadow: 0 0 1px #ccc; + } + + &:hover::after { + color: #000; + width: 100%; + } + } + } + + .active { + a { + color: #000; + + &::after { + color: #000; + width: 100%; + } + } + } + } + + &:last-child>.menu::after { + content: ""; + } + } + } + } + } + + .main-right { + width: 85%; + width: calc(100% - 15rem); + float: right; + height: auto; + transition: width 0.3s ease-in-out; + + #maincontent { + + position: relative; + z-index: 50; + + .container { + margin: 0 1.25rem 1rem 1.25rem; + + p { + color: #32325d; + line-height: 1.5em; + } + } + + .container>div:nth-child(1).alert-message.warning>a { + font: inherit; + overflow: visible; + text-transform: none; + display: inline-block; + margin-bottom: 0; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + min-width: 6rem; + padding: 0.5rem 1rem; + font-size: 0.9rem; + line-height: 1.42857143; + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; + margin-top: 2rem; + text-decoration: inherit; + } + } + } + + .loading { + position: fixed; + width: 100%; + height: 100%; + z-index: 2000; + display: flex; + align-items: center; + justify-content: center; + background-color: #f8f9fe; + top: 0; + + span { + display: block; + text-align: center; + margin-top: 2rem; + color: #5e72e4; + color: var(--primary); + font-size: 2rem; + + .loading-img { + animation: anim-rotate 2s infinite linear; + margin-right: 0.4rem; + display: inline-block; + + &::before { + content: "\e603"; + } + } + + } + } +} + + +/* button style */ + +.cbi-button { + -webkit-appearance: none; + text-transform: uppercase; + height: auto; + font-size: 0.875rem; + color: rgba(0, 0, 0, 0.87); + background-color: #F0F0F0; + transition: all 0.2s ease-in-out; + display: inline-block; + padding: 0.75rem 0.8rem; + border: none; + border-radius: 0.2rem; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + vertical-align: middle; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: .875rem; + width: auto !important; + line-height: 1em; +} + +.cbi-button:hover, +.cbi-button:focus, +.cbi-button:active { + outline: 0; + text-decoration: none; +} + +.cbi-button:hover, +.cbi-button:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +.cbi-button:active { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.19), 0 5px 5px rgba(0, 0, 0, 0.23); +} + +.cbi-button:disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.60; + box-shadow: none; +} + +.cbi-button-check { + margin-top: 0.25rem !important; +} + +form.inline+form.inline, +.cbi-button+.cbi-button { + margin-left: 0rem; +} + +.cbi-button-reset, +.cbi-input-remove { + + color: #fff !important; + background-color: #f0ad4e !important; + border-color: #eea236 !important; +} + +.cbi-input-find, +.cbi-input-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-find, +.cbi-input-reload, +.cbi-button-reload { + + color: #fff !important; + background-color: #337ab7 !important; + border-color: #2e6da4 !important; +} + +.cbi-value-field .cbi-input-apply, +.cbi-button-apply, +.cbi-button-edit { + + color: #fff !important; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + border-color: #5e72e4 !important; + border-color: var(--primary) !important; +} + +.node-services-vssr .ssr-button { + margin-left: 0.3rem; + +} + +.cbi-section-remove>.cbi-button, +.cbi-button-remove { + color: #fff !important; + background-color: #fb6340 !important; + border-color: #fb6340 !important; +} + +.cbi-value-field .cbi-button-add, +.cbi-value-field .cbi-button-remove, +.cbi-value-field .cbi-button-neutral { + + min-width: 2.5rem !important; +} + +/* Replace LuCI's default file and folder type icons */ +img[src="/luci-static/resources/cbi/reload.gif"] { + content: url("/luci-static/argon/img/reload.webp"); +} +img[src="/luci-static/resources/cbi/file.gif"] { + content: url("/luci-static/argon/img/file.webp"); +} +img[src="/luci-static/resources/cbi/add.gif"] { + content: url("/luci-static/argon/img/add.webp"); +} +img[src="/luci-static/resources/cbi/remove.gif"] { + content: url("/luci-static/argon/img/remove.webp"); +} +img[src="/luci-static/resources/cbi/edit.gif"] { + content: url("/luci-static/argon/img/edit.webp"); +} +img[src="/luci-static/resources/cbi/fieldadd.gif"] { + content: url("/luci-static/argon/img/fieldadd.webp"); +} +img[src="/luci-static/resources/cbi/link.gif"] { + content: url("/luci-static/argon/img/link.webp"); +} +img[src="/luci-static/resources/cbi/find.gif"] { + content: url("/luci-static/argon/img/find.webp"); +} +img[src="/luci-static/resources/cbi/folder.gif"] { + content: url("/luci-static/argon/img/folder.webp"); +} + +/* input */ +.cbi-value input[type="password"], +.cbi-value input[type="text"] { + min-width: 15rem; +} + +/* select */ +.cbi-value-field .cbi-dropdown { + min-width: 15rem; +} + +select { + min-width: 20rem; + appearance: none; + -webkit-appearance: none; + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTY1MzQ4MDM3OTIyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI1ODMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4qIHsgdGV4dC1zaGFkb3c6IHRyYW5zcGFyZW50IDBweCAwcHggMHB4LCByZ2JhKDAsIDAsIDAsIDAuNSkgMHB4IDBweCAwcHggIWltcG9ydGFudDsgfQo8L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNMjAuNDggMjQ1Ljc2aDk4My4wNEw1MTIgNzc4LjI0eiIgcC1pZD0iMjU4NCIgZmlsbD0iIzcwNzA3MCI+PC9wYXRoPjwvc3ZnPg==') !important; + background-position: 96%; + background-size: 8px; + background-repeat: no-repeat; + +} + +.th[data-type="button"], +.td[data-type="button"], +.th[data-type="fvalue"], +.td[data-type="fvalue"] { + flex: 1 1 2em; + text-align: center; +} + +/*textarea*/ +textarea { + border: 1px solid #dee2e6 !important; + outline: none; + min-height: 14rem !important; + padding: 0.8rem !important; + background-color: #fff; + font-family: var(--font-family-monospace) !important; + font-size: inherit; + color: black; + border-radius: 0.375rem !important; + vertical-align: middle; +} + +.cbi-value .cbi-value-field textarea { + margin: 0.25rem; +} + +/* change */ +.uci-change-list { + font-family: monospace; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + text-decoration: none; + border: 1px solid #00FF00; + background-color: #CCFFCC; + display: block; + padding: 2px; +} + +.uci-change-list del, +.uci-change-legend-label del { + text-decoration: none; + border: 1px solid #FF0000; + background-color: #FFCCCC; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var, +.uci-change-legend-label var { + text-decoration: none; + border: 1px solid #CCCCCC; + background-color: #EEEEEE; + display: block; + font-style: normal; + padding: 2px; + +} + +.uci-change-list var ins, +.uci-change-list var del { + border: none; + white-space: pre; + font-style: normal; + padding: 0px; +} + +.uci-change-list ins strong { + display: inline; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + display: flex; + align-items: center; + width: auto; + float: left; + margin-right: 2rem; +} + +.uci-change-legend-label>ins, +.uci-change-legend-label>del, +.uci-change-legend-label>var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + line-height: 0; + border: none; +} + +.uci-change-list var, +.uci-change-list del, +.uci-change-list ins { + padding: 0.5rem; +} + +/* other fix */ +input[type="checkbox"] { + appearance: none !important; + -webkit-appearance: none !important; + border: 1px solid #dee2e6; + + width: 17px !important; + height: 17px !important; + padding: 0; + cursor: pointer; + transition: all 0.2s; + + margin: 0.5rem 0.25rem 0.7rem 0.25rem; + vertical-align: middle; +} + +input[type="checkbox"]:checked { + background-image: url('data:image/svg+xml,%3csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3e%3cpath fill=\'%23fff\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3e%3c/svg%3e') !important; + background-color: #5e72e4; + background-color: var(--primary); + background-size: 70%; + background-repeat: no-repeat; + background-position: center; +} + +ul li .cbi-input-checkbox { + margin: 0.5rem 0.25rem 0.7rem 0.25rem !important; + vertical-align: middle !important; +} + +.cbi-input-radio { + appearance: none !important; + -webkit-appearance: none !important; + border: 1px solid #dee2e6; + + width: 16px !important; + height: 16px !important; + padding: 0; + border-radius: 50%; + cursor: pointer; + transition: all 0.2s; + margin: 0.25rem 0; +} + +.cbi-input-radio:checked { + background-image: url('data:image/svg+xml,%3csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3e%3ccircle r=\'3\' fill=\'%23fff\'/%3e%3c/svg%3e') !important; + background-color: #5e72e4; + background-color: var(--primary); + background-size: 70%; + background-repeat: no-repeat; + background-position: center; +} + + +.toggle { + position: relative; + display: block; + width: 40px; + height: 20px; + cursor: pointer; + -webkit-tap-highlight-color: transparent; + transform: translate3d(0, 0, 0); + margin: 1em 0; +} + +.toggle:before { + content: ""; + position: relative; + top: 3px; + left: 3px; + width: 34px; + height: 14px; + display: block; + background: #9A9999; + border-radius: 8px; + transition: background 0.2s ease; +} + +.toggle span { + position: absolute; + top: 0; + left: 0; + width: 20px; + height: 20px; + display: block; + background: white; + border-radius: 10px; + box-shadow: 0 3px 8px rgba(154, 153, 153, 0.5); + transition: all 0.2s ease; +} + +.toggle span:before { + content: ""; + position: absolute; + display: block; + margin: -18px; + width: 56px; + height: 56px; + background: rgba(79, 46, 220, 0.5); + border-radius: 50%; + transform: scale(0); + opacity: 1; + pointer-events: none; +} + +.cbi-input-checkbox:checked+.toggle:before { + background: #947ADA; +} + +.cbi-input-checkbox:checked+.toggle span { + background: #4F2EDC; + transform: translateX(20px); + transition: all 0.2s cubic-bezier(0.8, 0.4, 0.3, 1.25), background 0.15s ease; + box-shadow: 0 3px 8px rgba(79, 46, 220, 0.2); +} + +.cbi-input-checkbox:checked+.toggle span:before { + transform: scale(1); + opacity: 0; + transition: all 0.4s ease; +} + + +.cbi-value-field .cbi-input-checkbox, +.cbi-value-field .cbi-input-radio { + margin-top: 0.5rem; + height: 1rem; +} + +.td .cbi-input-checkbox, +.td .cbi-input-radio { + margin-top: 0; +} + +.cbi-value-field>input+.cbi-value-description { + padding: 0; +} + +.cbi-value-field>ul>li { + display: flex; +} + +.cbi-value-field>ul>li>label { + margin-top: 0rem; +} + +.cbi-value-field>ul>li .ifacebadge { + background-color: #eee; + margin-left: 0.4rem; + margin-top: -0.5rem; +} + +.cbi-section-table-row>.cbi-value-field .cbi-dropdown { + min-width: 7rem; +} + +.cbi-section-create { + margin: 0; + padding-left: 0.5rem; + align-items: center; + +} + +.cbi-section-create>* { + margin: 0.25rem; +} + +.cbi-section-remove { + padding: 0.5rem; +} + +div.cbi-value var, +td.cbi-value-field var, +.td.cbi-value-field var { + font-style: italic; + color: var(--primary); + text-shadow: 1px 1px 2px #ccc; +} + +small { + font-size: 90%; + white-space: normal; + line-height: 1.42857143; +} + +.cbi-button-up, +.cbi-button-down { + display: inline-block; + min-width: 0; + padding: 0.2rem 0.6rem; + font-size: 1.2rem; + color: #5e72e4 !important; + color: var(--primary) !important; +} + +.cbi-optionals { + padding: 1rem 1rem 0 1rem; + border-top: 1px solid #CCC; +} + +.cbi-dropdown-container { + position: relative; +} + +.cbi-tooltip-container { + cursor: help; +} + +.cbi-tooltip { + position: absolute; + z-index: 1000; + left: -1000px; + opacity: 0; + transition: opacity .25s ease-out; + pointer-events: none; + box-shadow: 0 0 2px #444; +} + +.cbi-tooltip-container:hover .cbi-tooltip { + left: auto; + opacity: 1; + transition: opacity .25s ease-in; +} + +.cbi-map-descr+fieldset { + margin-top: 1rem; +} + +.cbi-section>legend { + display: none !important; +} + +/* Define the error text border breathe display animation */ +@keyframes error-border-breathe { + 0%{ + border-color: #fb6340; + } + 50%{ + border-color: transparent; + } + 100%{ + border-color: #fb6340; + } +} + +/* Center display error text box */ +.cbi-section-error > ul{ + text-align: center; +} + +/* Add border for error text box, and border breathe display animation to make it more noticeable */ +.cbi-section-error > ul > li { + font-weight: 600; + max-width: 60%; + color: #fb6340; + line-height: 1rem; + display: inline-block; + border: 2px solid #fb6340; + border-radius: 0.3rem; + animation: error-border-breathe 1.5s ease-in-out infinite; + padding-left: 4px; + padding-right: 4px; + padding-top: 2px; + padding-bottom: 2px; +} + +.cbi-input-invalid, +.cbi-value-error input { + color: #fb6340; + border: 1px dashed #fb6340; +} + + +fieldset>fieldset { + margin: 0; + padding: 0; + border: none; + box-shadow: none; +} + + +.zonebadge .cbi-tooltip { + padding: .25rem; + background: inherit; + margin: -1.5rem 0 0 -.5rem; +} + +.zonebadge-empty { + background: repeating-linear-gradient(45deg, rgba(204, 204, 204, 0.5), rgba(204, 204, 204, 0.5) 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px); + color: #404040; +} + +.zone-forwards { + display: flex; + min-width: 10rem; +} + +.zone-forwards>* { + flex: 1 1 45%; +} + +.zone-forwards>span { + flex-basis: 10%; + text-align: center; + padding: 0 .25rem; +} + +.zone-forwards .zone-src, +.zone-forwards .zone-dest { + display: flex; + flex-direction: column; +} + +#diag-rc-output>pre { + background-color: #fff; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 1.5rem; + white-space: pre-wrap; + word-wrap: break-word; + font-size: 1.4rem; + color: #404040; +} + +input[name="ping"], +input[name="traceroute"], +input[name="nslookup"] { + width: 80%; +} + + +/* fix progress bar */ +#swaptotal>div, +#swapfree>div, +#memfree>div, +#membuff>div, +#conns>div, +#memtotal>div { + width: 100% !important; + height: 1.6rem !important; + line-height: 1.6rem; + border-radius: .25rem; + overflow: hidden; +} + +#swaptotal>div>div, +#swapfree>div>div, +#memfree>div>div, +#membuff>div>div, +#conns>div>div, +#memtotal>div>div { + height: 100% !important; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + background-image: url(../img/trafficbar.png); + background-position: left top; + animation: sparkle 1000ms linear infinite; +} + +#swaptotal>div>div>div>small, +#swapfree>div>div>div>small, +#memfree>div>div>div>small, +#membuff>div>div>div>small, +#conns>div>div>div>small, +#memtotal>div>div>div>small { + text-shadow: 1px 1px 2px #ccc; +} + +/* fix multiple table */ + +table table, +.table .table { + border: none; +} + +.cbi-value-field table, +.cbi-value-field .table { + border: none; +} + +td>table>tbody>tr>td, +.td>.table>.tbody>.tr>.td { + border: none; +} + +.cbi-value-field>table>tbody>tr>td, +.cbi-value-field>.table>.tbody>.tr>.td { + border: none; +} + +/* button style */ + + + +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit, +.cbi-button-edit.important, +.cbi-button-apply.important, +.cbi-button-reload.important, +.cbi-button-action.important { + color: #fff; + background-color: #337ab7; +} + +.cbi-page-actions .cbi-button-save, +.cbi-button-add.important, +.cbi-button-save.important, +.cbi-button-positive.important { + color: #fff; + background-color: #5bc0de; +} + +.cbi-button-remove.important, +.cbi-button-reset.important, +.cbi-button-negative.important { + color: #fff; + background-color: #d9534f; +} + + + +.cbi-button-find, +.cbi-button-link, +.cbi-button-neutral { + color: #fff !important; + border: 1px solid #f0ad4e !important; + background-color: #f0ad4e !important; +} + +.cbi-button-edit, +.cbi-button-apply, +.cbi-button-reload, +.cbi-button-action { + color: #2e6da4; + border: 1px solid #2e6da4; + background-color: transparent; +} + +.cbi-page-actions .cbi-button-apply+.cbi-button-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-positive { + color: #46b8da; + border: 1px solid #46b8da; + background-color: transparent; +} + +.cbi-section-remove>.cbi-button, +.cbi-button-remove, +.cbi-button-reset, +.cbi-button-negative { + color: #fff !important; + border: 1px solid #d43f3a !important; + background-color: #fb6340 !important; +} + +.cbi-page-actions .cbi-button-link:first-child { + float: left; +} + +.a-to-btn { + text-decoration: none; +} + +/* file selector button */ +::file-selector-button { + color: #fff; + border-radius: .25rem; + border: 1px solid #2e6da4; + padding: .4rem .5rem; + background-color: #337ab7; + box-sizing: border-box; + cursor: pointer; + transition: all 0.2s ease-in-out; +} +::file-selector-button:hover, +::file-selector-button:focus, +::file-selector-button:active { + outline: 0; + text-decoration: none; +} +::file-selector-button:hover, +::file-selector-button:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} +::file-selector-button:active { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.19), 0 5px 5px rgba(0, 0, 0, 0.23); +} + +/* table */ + + +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + width: auto !important; + background-color: #e9ecef; + background-color: var(--lighter); +} + +.td.cbi-section-actions { + text-align: right; + vertical-align: middle; +} + +.td.cbi-section-actions>* { + display: flex; +} + +.td.cbi-section-actions>*>*, +.td.cbi-section-actions>*>form>* { + flex: 1 1 4em; + margin: 0 1px; +} + +.td.cbi-section-actions>*>form { + display: inline-flex; + margin: 0; +} + +/* desc */ + + + + + + +/* luci */ + +.hidden { + display: none +} + +.left, +.left::before { + text-align: left !important; +} + +.right, +.right::before { + text-align: right !important; +} + +.center, +.center::before { + text-align: center !important; +} + +.top { + align-self: flex-start !important; + vertical-align: top !important; +} + +.bottom { + align-self: flex-end !important; + vertical-align: bottom !important; +} + +.inline { + display: inline; +} + +.cbi-page-actions { + border-top: 0px solid #eee; + padding-top: 0rem; + text-align: right; +} + + + + + +#xhr_poll_status { + cursor: pointer; + display: inline-block; + +} + +#xhr_poll_status>.label.success { + background-color: #fff !important; + color: #32325d !important; +} + +.label { + padding: 0.3rem 0.8rem; + font-size: 0.8rem; + font-weight: bold; + color: #ffffff !important; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + text-shadow: none; + text-decoration: none; +} + +.notice { + background-color: #5BC0DE; +} + +.showSide { + display: none; + color: #fff; + font-size: 1.4rem; +} + +.darkMask { + width: 100%; + height: 100%; + position: fixed; + background-color: rgba(0, 0, 0, 0.56); + z-index: 99; + left: 0; + top: 0; + display: none; +} + + +#cbi-firewall-redirect table *, +#cbi-network-switch_vlan table *, +#cbi-firewall-zone table * { + font-size: small; +} + +#cbi-firewall-redirect table input[type="text"], +#cbi-network-switch_vlan table input[type="text"], +#cbi-firewall-zone table input[type="text"] { + width: 5rem; +} + +#cbi-firewall-redirect table select, +#cbi-network-switch_vlan table select, +#cbi-firewall-zone table select { + min-width: 3.5rem; +} + +#cbi-network-switch_vlan .th, +#cbi-network-switch_vlan .td { + flex-basis: 12%; +} + +/* Fix background color of table-titles */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-section-table-titles th { + background-color: var(--lighter); + border: none; +} + +/* Fix background color of table-descr */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-section-table-descr th { + border: none; +} + +/* Fix background color not change when the H tag is in the table rowstyle-1 */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-rowstyle-1 th { + background-color: #fff; + border-top: 1px solid #ddd; + border-bottom: none; +} + +/* Fix background color not change when the H tag is in the table rowstyle-2 */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-rowstyle-2 th { + background-color: #f9f9f9; + border-top: 1px solid #ddd; + border-bottom: none; +} + +/* Change the color of the H label in the table to make it more visible */ +th h1, td h1, +th h2, td h2, +th h3, td h3, +th h4, td h4, +th h5, td h5, +th h6, td h6 { + background: var(--lighter); +} + +/* language fix */ +body.lang_pl.node-main-login .cbi-value-title { + width: 12rem; +} + +/* applyreboot fix */ + +#applyreboot-container { + margin: 2rem; +} + +#applyreboot-section { + margin: 2rem; + line-height: 300%; +} + + + +.table { + display: table; + position: relative; + color: #525f7f; + border-collapse: collapse; +} + +.tr { + display: table-row; + border-bottom: 1px solid rgba(0, 0, 0, .05); +} + +.thead { + display: table-header-group; +} + +.tbody { + display: table-row-group; +} + +.tfoot { + display: table-footer-group; +} + +.td, +.th { + vertical-align: middle; + text-align: center; + display: table-cell; + padding: 1rem; + white-space: nowrap; +} + + + +.th { + font-weight: bold; +} + +.tr.placeholder { + height: 4em; +} + +.tr.placeholder>.td { + position: absolute; + left: 0; + right: 0; + bottom: 0; + text-align: center; + background: inherit; +} + +.table[width="33%"], +.th[width="33%"], +.td[width="33%"] { + width: 33%; + padding-left: 1.5rem; + padding-right: 1.5rem +} + +.table[width="100%"], +.th[width="100%"], +.td[width="100%"] { + width: 100%; +} + +.table-titles .th { + padding: 0.75rem 1rem; + color: #8898aa; + background-color: #f6f9fc; +} + +.col-1 { + flex: 1 1 30px !important; + -webkit-flex: 1 1 30px !important; +} + +.col-2 { + flex: 2 2 60px !important; + -webkit-flex: 2 2 60px !important; +} + +.col-3 { + flex: 3 3 90px !important; + -webkit-flex: 3 3 90px !important; +} + +.col-4 { + flex: 4 4 120px !important; + -webkit-flex: 4 4 120px !important; +} + +.col-5 { + flex: 5 5 150px !important; + -webkit-flex: 5 5 150px !important; +} + +.col-6 { + flex: 6 6 180px !important; + -webkit-flex: 6 6 180px !important; +} + +.col-7 { + flex: 7 7 210px !important; + -webkit-flex: 7 7 210px !important; +} + +.col-8 { + flex: 8 8 240px !important; + -webkit-flex: 8 8 240px !important; +} + +.col-9 { + flex: 9 9 270px !important; + -webkit-flex: 9 9 270px !important; +} + +.col-10 { + flex: 10 10 300px !important; + -webkit-flex: 10 10 300px !important; + white-space: inherit; +} + + + +.cbi-rowstyle-2 .cbi-button-up, +.cbi-rowstyle-2 .cbi-button-down { + background-color: var(--lighter); + +} + +.cbi-button-up, +.cbi-button-down, +.cbi-value-helpicon, +.showSide, +.main>.loading>span { + font-family: 'argon' !important; + font-style: normal !important; + font-weight: normal !important; + font-variant: normal !important; + text-transform: none !important; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.cbi-button-up { + transform: rotate(180deg); +} + + +select { + padding: 0.36rem 0.8rem; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; +} + +select, +input { + font-size: .875rem; + transition: all .15s ease-in-out; + line-height: 1.5; + + padding: .625rem .75rem; + color: #8898aa; + border: 1px solid #dee2e6; + border-radius: .25rem; + background-color: #fff; + background-clip: padding-box; + box-shadow: 0 3px 2px rgba(233, 236, 239, .05); + outline: none; + transition: box-shadow .15s ease; + margin: 0.25rem; +} + +select:not([multiple="multiple"]):hover, +input:hover, +input:focus { + border-color: #5e72e4; + border-color: var(--primary); + outline: 0; + background-color: #fff; + box-shadow: 0 3px 9px rgba(50, 50, 9, 0), 3px 4px 8px rgba(94, 114, 228, .1); +} + + + +select[multiple="multiple"] { + height: auto; +} + +code { + color: #0099CC; +} + +abbr { + color: #005470; + text-decoration: underline; + cursor: help; +} + + +hr { + margin: 1rem 0; + border-color: #EEE; + opacity: 0.1; +} + + + + + +.kpi { + font-size: 0.875rem; +} + + +fieldset[id^="cbi-apply-"] { + position: fixed; + z-index: 200; + width: 20rem; + margin-left: -10rem; + margin-top: -5rem; + height: 10rem; + left: 50%; + top: 50%; + padding: 1rem; + box-sizing: border-box; + font-size: 1.2rem; + text-align: center; + box-shadow: rgba(0, 0, 0, 0.75) 0px 0px 15px -5px; + transition: all 0.3s; +} + +[id^="cbi-apply-"]>.panel-title { + border-bottom: none; + +} + +[id^="cbi-apply-"]>[id^="cbi-apply-"] { + position: initial; + width: auto; + height: auto; + font-size: 0.875rem; + margin-left: 0rem; + margin-top: .8rem; + display: block; +} + +.cbi-section>h3:first-child, +.panel-title { + font-size: 1.125rem; + width: 100%; + display: block; + margin: 0; + padding: 0.8755rem 1.5rem; + border-bottom: 1px solid #ddd; + letter-spacing: 0.1rem; + color: #32325d; + font-weight: normal; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +table { + border-spacing: 0; + border-collapse: collapse; +} + +table, +.table { + width: 100%; +} + +table>tbody>tr>td, +table>tbody>tr>th, +table>tfoot>tr>td, +table>tfoot>tr>th, +table>thead>tr>td, +table>thead>tr>th, +.table>.tbody>.tr>.td, +.table>.tbody>.tr>.th, +.table>.tfoot>.tr>.td, +.table>.tfoot>.tr>.th, +.table>.thead>.tr>.td, +.table>.thead>.tr>.th { + padding: .5rem; + border-top: 1px solid #ddd; + +} + +.cbi-section-table-cell { + white-space: nowrap; + align-self: flex-end; + flex: 1 1 auto; +} + +.cbi-section-table { + font-size: 0.875rem; + border: none; + margin: 0 !important; +} + +.status-bar { + font-size: 0.875rem; +} + +.cbi-section-table-row:last-child { + margin-bottom: 0; +} + +.cbi-section-table-row>.cbi-value-field .cbi-dropdown, +.cbi-section-table-row>.cbi-value-field .cbi-input-select, +.cbi-section-table-row>.cbi-value-field .cbi-input-text, +.cbi-section-table-row>.cbi-value-field .cbi-input-password{ + width:100% +} + +.cbi-section-table-row>.cbi-value-field .cbi-input-text, +.cbi-section-table-row>.cbi-value-field .cbi-input-password{ + min-width:100px +} + +#lease6_status_table > tbody > .cbi-section-table-row.cbi-rowstyle-1 div, +#lease6_status_table > tbody > .cbi-section-table-row.cbi-rowstyle-2 div{ + min-width:100%; +} + +.cbi-section-table-row>.cbi-value-field [data-dynlist]>input, +.cbi-section-table-row>.cbi-value-field input.cbi-input-password { + width: calc(100% - 1.5rem); +} + +div>table>tbody>tr:nth-of-type(2n), +div>.table>.tbody>.tr:nth-of-type(2n) { + background-color: #f9f9f9; +} + +div>table>tbody>tr:nth-of-type(2n), +div>.table>.tbody>.tr:nth-of-type(2n) { + background-color: #f9f9f9; +} + +.danger { + background-color: #f5365c !important; + background-color: var(--danger) !important; + color: #fff !important; +} + +/* Define the warning background-color breathe display animation */ +@keyframes warning-background-color-breathe { + 0%{ + color: #fff; + background-color: #fb6340; + } + 50%{ + color: #32325d; + background-color: #fff; + } + 100%{ + color: #fff; + background-color: #fb6340; + } +} +.warning, +.warning * { + background-color: #fb6340; + background-color: var(--warning); + color: #fff; + animation: warning-background-color-breathe 1.5s ease-in-out infinite !important; +} + +.notice { + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + color: #fff !important; +} + +.success { + background-color: #2dce89 !important; + background-color: var(--success) !important; + color: #fff !important; +} + +.errorbox, +.alert-message { + margin: 0 0 0 0; + padding: 1rem 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1.5em; + font-family: inherit; + min-width: inherit; + overflow: auto; + border-radius: 0.3rem; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +.errorbox { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.alert-message.warning{ + margin-bottom: 1rem; +} +.error { + color: red; +} + + + +h1 { + font-size: 2rem; + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + + + +h2 { + margin: 0 0 1rem 0; + font-size: 1.25rem; + letter-spacing: 0.1rem; + padding: 1rem 1.5rem; + color: #32325d; + border-radius: .375rem; + background: #fff; + box-shadow: 0 4px 8px rgba(0, 0, 0, .03); +} + + +#cbi-dropbear h2, +#cbi-dropbear .cbi-map-descr, +#cbi-dropbear .cbi-map-descr abbr, +#cbi-rc h2, +#cbi-rc .cbi-map-descr, +#cbi-distfeedconf h2, +#cbi-distfeedconf .cbi-map-descr, +#cbi-customfeedconf h2, +#cbi-customfeedconf .cbi-map-descr, +#cbi-download h2, +#cbi-filelist h2 { + color: #32325d !important; +} + + +h3 { + font-size: 1.15rem; + width: 100%; + display: block; + margin: 1rem 0; + letter-spacing: 0.1rem; + color: #32325d; + font-weight: bold; + letter-spacing: 0.1rem; + padding: 1rem 1.5rem; + border-radius: 0.375rem; + background: var(--lighter); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); +} + + + +fieldset { + margin: 1.25rem 0 0 0; + padding: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + + border: 1px solid rgba(0, 0, 0, .05); + border-radius: .375rem; + background-color: #fff; + box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15); + + -webkit-overflow-scrolling: touch; +} + + + +fieldset>legend { + display: none !important; +} + +fieldset>fieldset { + margin: 0; + padding: 0; + border: none; + box-shadow: none; +} + +fieldset.cbi-section p { + padding: 1em; +} + +.panel-title { + width: 100%; + display: block; + margin-bottom: 0; + padding: 0.8755rem 1.5rem; + background-color: #fff; + border-bottom: 1px solid #ddd; + margin-bottom: 0rem; + letter-spacing: 0.1rem; + color: #32325d; + font-weight: 600; + position: sticky; + left: 0; +} + +table { + border-spacing: 0; + border-collapse: collapse; + width: 100%; +} + +table>tbody>tr>td, +table>tfoot>tr>td, +table>thead>tr>td { + font-size: .875rem; + color: #525f7f; + line-height: 1.4em; + vertical-align: middle !important; + padding: 0.8rem 1.5rem; + border-top: 1px solid #ddd; + +} + +table>tbody>tr>th, +table>tfoot>tr>th, +table>thead>tr>th { + + padding-right: 1.5rem; + padding-left: 1.5rem; + color: #8898aa; + background-color: #f6f9fc; + font-size: .65rem; + padding-top: .75rem; + padding-bottom: .75rem; + letter-spacing: 1px; + border-bottom: 1px solid #e9ecef; +} + +table>tbody>tr:first-child>td, +table>tfoot>tr:first-child>td, +table>thead>tr:first-child>td { + border-top: 0px; +} + +.cbi-section-table-cell { + text-align: center; +} + +.cbi-section-table-row { + text-align: center; +} + +fieldset>table>tbody>tr:nth-of-type(2n) { + background-color: #f9f9f9; +} + + + + + +/* fix multiple table */ + +table table { + border: none; +} + +.cbi-value-field table { + border: none; +} + +td>table>tbody>tr>td { + border: none; +} + +.cbi-value-field>table>tbody>tr>td { + border: none; +} + + + + + + +/* table */ + +.tabs { + margin: 0 0 1rem 0; + padding: 0 1rem; + background-color: #FFFFFF; + border-radius: 0.375rem; + box-shadow: 0 4px 8px rgba(0, 0, 0, .03); + white-space: nowrap; + overflow-x: auto; + + &::-webkit-scrollbar { + width: 5px; + height: 5px; + } + + &::-webkit-scrollbar-thumb { + background-color: #9e9e9e; + } + + &::-webkit-scrollbar-thumb:hover { + background-color: #757575; + } + + &::-webkit-scrollbar-thumb:active { + background-color: #424242; + } + + &::-webkit-scrollbar-track { + background-color: transparent; + } + + li[class~="active"], + li:hover { + cursor: pointer; + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); + color: #5e72e4; + color: var(--primary); + background-color: var(--light-subtabs-background); + margin-bottom: 0; + border-radius: 0; + + a { + color: #5e72e4; + color: var(--primary); + } + } + + li { + font-size: 0.875rem; + display: inline-block; + padding: 0.875rem 0rem; + border-bottom: 0.18751rem solid rgba(0, 0, 0, 0); + + a { + text-decoration: none; + color: #404040; + padding: 0.5rem 0.8rem; + } + + &:hover { + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); + } + } +} + +.cbi-section::-webkit-scrollbar, +.cbi-section > *::-webkit-scrollbar, +textarea::-webkit-scrollbar, +div::-webkit-scrollbar { + width: 5px; + height: 5px; +} + +.cbi-tabmenu { + color: white; + padding: 0.5rem 0.5rem 0 0.5rem; + white-space: nowrap; + overflow-x: auto; + border-bottom: 1px solid #ddd !important; + + &::-webkit-scrollbar { + width: 1px; + height: 5px; + } + + &::-webkit-scrollbar-thumb { + background-color: #9e9e9e; + } + + &::-webkit-scrollbar-thumb:hover { + background-color: #757575; + } + + &::-webkit-scrollbar-thumb:active { + background-color: t#424242; + } + + &::-webkit-scrollbar-track { + background-color: transparent; + } + + li { + background: #e3e3e3; + display: inline-block; + font-size: 0.875rem; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + padding: 0.5rem 0rem; + border-bottom: 0.18751rem solid rgba(0, 0, 0, 0); + + a { + text-decoration: none; + color: #404040; + padding: 0.5rem 0.8rem; + } + + &:hover { + cursor: pointer; + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); + color: #5e72e4; + color: var(--primary); + background-color: var(--light-subtabs-background); + margin-bottom: 0; + + a { + color: #525f7f; + } + } + } + + li[class~="cbi-tab"] { + border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); + color: var(--primary); + background-color: var(--light-subtabs-background); + margin-bottom: 0; + + a { + color: #5e72e4; + color: var(--primary); + } + } +} + +.cbi-tab-descr { + margin: 1rem 1.5rem; + color: #32325d; + font-size: small; + line-height: 1.5em; +} + +.cbi-dropdown { + display: inline-flex; + cursor: pointer; + position: relative; + padding: 0; + height: auto; +} + +.cbi-dropdown:focus { + outline: 2px solid #4b6e9b; +} + +.cbi-dropdown>ul { + margin: 0 !important; + padding: 0; + list-style: none; + overflow-x: hidden; + overflow-y: auto; + display: flex; + width: 100%; +} + +.cbi-dropdown>ul.preview { + display: none; +} + +.cbi-dropdown>.open { + border: 0px outset #eee; + flex-basis: 15px; + background: #fff; +} + +.cbi-dropdown>.open, +.cbi-dropdown>.more { + flex-grow: 0; + flex-shrink: 0; + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + line-height: 2em; + padding: 0 .25em; +} + +.cbi-dropdown>.more, +.cbi-dropdown>ul>li[placeholder] { + color: #777; + font-weight: bold; + text-shadow: 1px 1px 0px #fff; + display: none; +} + +.cbi-dropdown>ul>li { + display: none; + padding: .25em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex-shrink: 1; + flex-grow: 1; + align-items: center; + align-self: center; + min-height: 20px; +} + +.cbi-dropdown>ul>li .hide-open { + display: initial; +} + +.cbi-dropdown>ul>li .hide-close { + display: none; +} + +.cbi-dropdown>ul>li[display]:not([display="0"]) { + border-left: 1px solid #ccc; +} + +.cbi-dropdown[empty]>ul { + max-width: 1px; +} + +.cbi-dropdown>ul>li>form { + display: none; + margin: 0; + padding: 0; + pointer-events: none; +} + +.cbi-dropdown>ul>li img { + vertical-align: middle; + margin-right: .25em; +} + +.cbi-dropdown>ul>li>form>input[type="checkbox"] { + margin: 0; + height: auto; +} + +.cbi-dropdown>ul>li input[type="text"] { + height: 20px; +} + +.cbi-dropdown[open] { + position: relative; + border-color: #5e72e4; + border-color: var(--primary); +} + +.cbi-dropdown[open]>ul.dropdown { + display: block; + background: #fff; + border-color: #5e72e4; + border-color: var(--primary); + position: absolute; + z-index: 1000; + max-width: none; + min-width: 100%; + width: auto; + box-shadow: 0 1px 3px rgba(50, 50, 93, .15), 0 1px 0 rgba(0, 0, 0, .05); +} + +.cbi-dropdown>ul>li[display], +.cbi-dropdown[open]>ul.preview, +.cbi-dropdown[open]>ul.dropdown>li, +.cbi-dropdown[multiple]>ul>li>label, +.cbi-dropdown[multiple][open]>ul.dropdown>li, +.cbi-dropdown[multiple][more]>.more, +.cbi-dropdown[multiple][empty]>.more { + flex-grow: 1; + display: flex; + align-items: center; +} + +.cbi-dropdown[empty]>ul>li, +.cbi-dropdown[optional][open]>ul.dropdown>li[placeholder], +.cbi-dropdown[multiple][open]>ul.dropdown>li>form { + display: block; +} + +.cbi-dropdown[open]>ul.dropdown>li .hide-open { + display: none; +} + +.cbi-dropdown[open]>ul.dropdown>li .hide-close { + display: initial; +} + +.cbi-dropdown[open]>ul.dropdown>li { + border-bottom: 1px solid #ccc; +} + +.cbi-dropdown[open]>ul.dropdown>li[selected] { + background: #b0d0f0; +} + +.cbi-dropdown[open]>ul.dropdown>li.focus { + background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%); +} + +.cbi-dropdown[open]>ul.dropdown>li:last-child { + margin-bottom: 0; + border-bottom: none; +} + +.cbi-dropdown[disabled] { + pointer-events: none; + opacity: .6; +} + +.cbi-dropdown .zonebadge { + width: 100%; +} + +.cbi-dropdown[open] .zonebadge { + width: 100%; +} + +.cbi-dropdown { + font-size: .875rem; + transition: all .15s ease-in-out; + line-height: 1.5; + height: calc(2.75rem + 2px); + padding: 0m; + color: #8898aa; + border: 1px solid #dee2e6; + border-radius: .25rem; + background-color: #fff; + background-clip: padding-box; + box-shadow: 0 3px 2px rgba(233, 236, 239, .05); + margin: 0.25rem; +} + +.cbi-value-field .cbi-dropdown { + min-width: 20rem; +} + +.cbi-value-field .cbi-dropdown .zonebadge>.ifacebadge { + padding: 0rem 1rem; + margin: 0rem 0.3rem; + border: 1px solid #6C6C6C; +} + + + +select[multiple="multiple"] { + height: auto; +} + +.cbi-dropdown>ul { + margin: 0 !important; + padding: 0; + list-style: none; + overflow-x: hidden; + overflow-y: hidden; + display: flex; + width: 100%; +} + + + +.cbi-section>legend { + display: none !important; +} + + + + + +.cbi-section-remove:nth-of-type(2n), +.cbi-section-node:nth-of-type(2n) { + background-color: #f9f9f9; +} + +.cbi-section-node-tabbed { + padding: 0; + margin-top: 0; + +} + +.cbi-section-node { + background: #fff; + border: 0; + border-radius: .375rem; + margin-bottom: 0px; + box-shadow: 0 0 0rem 0 rgba(136, 152, 170, .15); + overflow-x: auto; + overflow-y: hidden; + padding: 0rem 0; +} + +#cbi-network-lan.cbi-section-node { + overflow-x: visible; + overflow-y: visible; +} + + + +.cbi-section-node .cbi-value { + padding: 0.5rem 1rem 0.5rem 1rem !important; +} + + +.cbi-tabcontainer>.cbi-value:nth-of-type(2n), +.cbi-tabcontainer>.cbi-value:nth-of-type(2n)>textarea { + background-color: #f9f9f9; +} + +.cbi-value-field, +.cbi-value-description { + display: table-cell; + line-height: 1.6; + font-size: 0.875rem; +} + +/* Fix text position of the luci-app-filebrowser running state */ +#cbi-filebrowser>.cbi-section>.cbi-section>.cbi-value>.cbi-value-field, +/* Fix text position of the luci-apps running state of the [Control] type */ +form>.cbi-map>.cbi-section>.cbi-section-node>.cbi-value>.cbi-value-field font { + word-wrap: break-word; + font-size: 0.875rem; + line-height: 1.6; + padding: 0.7rem; + padding-left: 0; + text-align: right; + display: table-cell; +} + + +.cbi-value-helpicon>img { + display: none; +} + +.cbi-value-helpicon:before { + content: "\f059"; +} + +.cbi-value-description { + color: #8d8d8d; + opacity: 0.8; + font-size: small; + padding: 0.5rem; +} + +.cbi-value-title { + word-wrap: break-word; + font-size: 0.875rem; + line-height: 1.6; + color: #525f7f; + padding: .7rem; + padding-left: 0; + width: 23rem; + text-align: right; + display: table-cell; +} + +.cbi-value { + padding: 0.3rem 1rem; + display: inline-block; + width: 100%; +} + +.cbi-section-table-descr>.cbi-section-table-cell, +.cbi-section-table-titles>.cbi-section-table-cell { + border: none; +} + +.cbi-rowstyle-1 { + background-color: #fff; +} + +.cbi-rowstyle-2 { + background-color: #fefefe; +} + + + +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + width: auto !important; +} + +/* desc */ +.cbi-section-descr { + padding: 1rem 1.5rem; + font-size: 0.7rem; + font-weight: 600; + line-height: 1.5em; + color: #525f7f; +} + +.cbi-map-descr { + margin: 0rem 1.5rem 1rem 1.5rem; + color: #32325d; + font-size: small; + line-height: 1.5em; +} + + + + +/* input */ +.cbi-value input[type="password"], +.cbi-value input[type="text"] { + min-width: 20rem; +} + +input[type="checkbox"] { + height: auto; +} + +/* select */ + + +.cbi-value-field .ifacebadge { + display: inline-flex; + border-bottom: 0px solid #CCCCCC; + padding: 0.5rem 1rem; + + box-shadow: none; +} + +td>.ifacebadge { + background-color: #F0F0F0; + font-size: 0.9rem; +} + +.ifacebadge>img { + float: right; + margin: 0 0.3rem; +} + +#syslog { + width: 100%; + min-height: 15rem; + padding: 1rem; + line-height: 1.4em; + color: #1e1e1e; + border-radius: 0; + background-color: #fff; + border: none; + outline: none; +} + + +.ifacebadge { + display: inline-flex; + border-bottom: 0px solid #CCCCCC; + padding: 0.5rem 1rem; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + background: #fff; +} + +td>.ifacebadge, +.td>.ifacebadge { + background-color: #e9ecef; + font-size: 0.9rem; + border-radius: 0.2rem; +} + +.ifacebadge>em, +.ifacebadge>img { + display: inline-block; + margin: 0 0.3rem; + align-self: center; +} + + + +.ifacebadge span { + line-height: 1.6em; +} + +.network-status-table { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox { + margin: 1rem; + flex-grow: 1; +} + +.network-status-table .ifacebox-body { + display: flex; + flex-direction: column; + height: 100%; +} + +.network-status-table .ifacebox-body>span { + flex: 10 10 auto; + height: 100%; + line-height: 1.7em; + padding-left: 2rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.network-status-table .ifacebox-body>div { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox-body .ifacebadge { + flex: 1 1 auto; + margin: 0; + padding: .5em; + min-width: 220px; + background-color: #fff; + align-items: center; +} + +.ifacebox { + + border: 1px solid #ccc; + border-radius: 0.375rem; + background-color: #f9f9f9; + display: inline-flex; + flex-direction: column; + line-height: 1.2em; + min-width: 100px; + overflow: hidden; +} + +.ifacebox-head { + padding: 1rem; + background: #eee; +} + +.ifacebox-head.active { + background: #5e72e4; + background: var(--primary); + color: #fff; +} + +.ifacebox-body { + padding: 0.5em; +} + +.cbi-image-button { + margin-left: 0.5rem; +} + +#iwsvg, +#iwsvg2, +#bwsvg { + border: none !important; + border-radius: 0.375rem; + box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15); + overflow: hidden; +} + + + +.cbi-image-button { + margin-left: 0.5rem; +} + +.zonebadge { + padding: 0.2rem 0.5rem; + display: inline-block; + cursor: pointer; +} + +.zonebadge>.ifacebadge { + padding: 0.2rem 1rem; + margin: 0.3rem; + border: 1px solid #6C6C6C; +} + +.zonebadge>input[type="text"] { + padding: 0.16rem 1rem; + min-width: 10rem; + margin-top: 0.3rem; +} + +.cbi-value-field .cbi-input-checkbox { + margin: 0.5rem 0.25rem 0.7rem 0.25rem; + vertical-align: middle; + height: 1rem; + line-height: 1.6; +} + +.cbi-input-checkbox { + margin: 0.5rem 0.25rem 0.7rem 0.25rem; + vertical-align: middle; +} + +.cbi-value-field .cbi-input-radio { + margin: 0rem 0.25rem; +} + +.cbi-input-radio { + margin: 0rem 0.25rem; +} + +.cbi-value-field>input+.cbi-value-description { + padding: 0; +} + +.cbi-value-field>ul>li { + display: flex; + align-items: center; + font-size: 0.875rem; +} + + + +.cbi-value-field>ul>li .ifacebadge { + font-size: 0.875rem; + background-color: #eee; + display: flex; + align-items: center; + margin-left: 0rem; + margin-top: 0rem; +} + +.cbi-section-table-row>.cbi-value-field .cbi-input-select { + min-width: 7rem; +} + +.cbi-section-create>.cbi-button-add { + margin: 0.75rem 0.75rem 0.75rem 0.25rem; +} + +.cbi-section-remove { + padding: 0.5rem; +} + + +.cbi-optionals { + padding: 1rem 1rem 0 1rem; + border-top: 1px solid #CCC; +} + + +input[name="ping"], +input[name="traceroute"], +input[name="nslookup"] { + width: 80%; +} + + + +.label { + padding: 0.3rem 0.8rem; + font-size: 0.8rem; + font-weight: bold; + color: #fff !important; + text-transform: uppercase; + white-space: nowrap; + background-color: #32325d; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + text-shadow: none; + text-decoration: none; +} + + + + + + + +/* fix status overview */ + +.node-status-overview>.main fieldset:nth-child(4) td:nth-child(2) { + white-space: normal; +} + +.node-status-overview>.main #wan4_i, +.node-status-overview>.main #wan6_i { + min-width: 80px !important; +} + +/* fix status processes */ + +.node-status-processes>.main table tr td:nth-child(3) { + white-space: normal; +} + + +/* fix system reboot */ + +.node-system-reboot>.main>.main-right p, +.node-system-reboot>.main>.main-right h3 { + padding-left: 2rem; + color: #fff; +} + +/* fix Services Network Shares*/ +.node-services-samba>.main .cbi-tabcontainer:nth-child(3) .cbi-value-title { + margin-bottom: 1rem; + width: auto; +} + +.node-services-samba>.main .cbi-tabcontainer:nth-child(3) .cbi-value-field { + display: list-item; +} + +.node-services-samba>.main .cbi-tabcontainer:nth-child(3) .cbi-value-description { + padding-top: 1rem; +} + +/* fix System Software*/ +.node-system-packages>.main table tr td:nth-child(1) { + width: auto !important; +} + +.node-system-packages>.main table tr td:nth-last-child(1) { + white-space: normal; + font-size: small; + color: #404040; +} + +.node-system-packages>.main .cbi-tabmenu>li>a, +.tabs>li>a { + padding: 0.5rem 0.8rem; +} + +.node-system-packages>.main .cbi-value>pre { + background-color: #eee; + padding: 0.5rem; + overflow: auto; +} + +.node-system-packages>.main .cbi-page-actions { + padding: 1rem 0; +} + +.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last { + line-height: 1.8em; + + div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] { + border: 1px solid #999999 !important; + width: 100% !important; + background-color: #fff !important; + height: 1.4rem !important; + border-radius: 0.25rem; + margin: 0.5rem 0; + overflow: hidden; + + div { + border-right: 0 !important; + background-color: #5e72e4 !important; + background-color: var(--primary) !important; + height: 100% !important; + background-image: url(../img/trafficbar.png); + background-position: left top; + animation: sparkle 1000ms linear infinite; + } + } + +} + +.node-system-leds .cbi-section em { + display: block; +} + +.cbi-tabmenu+.cbi-section { + margin-top: 0; +} + +.cbi-section { + background: #fff; + border: 0; + border-radius: .375rem; + box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15); + overflow-x: auto; + overflow-y: hidden; + + em { + font-size: 0.7rem; + font-weight: 600; + color: var(--primary); + text-shadow: 1px 1px 2px #ccc; + text-align: center; + } + + h4 { + font-size: 0.7rem; + font-weight: 600; + color: #525f7f; + } + + +} + + + + + +#content_syslog { + border-radius: .375rem; + box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15); + overflow: hidden; +} + +.node-system-packages .cbi-section-node .cbi-value { + padding: 0.5rem 1rem; + font-size: 0.875rem; +} + +.node-system-packages br { + display: none; +} + +/* fix network firewall*/ +.node-network-firewall>.main .cbi-section-table-row>.cbi-value-field .cbi-input-select { + min-width: 4rem; +} + +.node-network-firewall .cbi-section-table { + width: 100% !important; +} + +.node-status-iptables fieldset, +.node-system-packages fieldset, +.node-system-flashops fieldset { + margin-top: 0; +} + +.node-system-flashops fieldset > ul { + padding: 1rem; +} + +.node-system-flashops fieldset + .cbi-page-actions { + margin-top: 1rem; +} + +.node-status-iptables .cbi-tabmenu, +.node-system-packages .cbi-tabmenu, +.node-system-flashops .cbi-tabmenu { + border: none; +} + +.node-system-flashops form.inline+form.inline { + margin-left: 0; +} + +.Changes .cbi-section { + font-size: 0.875rem; + padding: 1rem; +} + +.node-network-diagnostics { + font-size: 0.875rem; + + #diag-rc-output { + display: block; + padding: 1rem; + + pre { + font-size: 0.875rem; + } + + } + + .cbi-section div { + padding: 0 1.5rem; + } + +} + + +.node-network-diagnostics input { + margin: 0.25rem !important; +} + +.node-network-wireless .cbi-button-add{ + margin-left: 0; +} + + + +/* fix nlbw/display*/ +#detail-bubble.in { + z-index: 500; +} + +.node-nlbw-display .cbi-section ul { + padding: 0.875rem 1.5rem; +} + +.node-nlbw-backup form { + margin-left: 1.5rem; +} + +.node-nas-usb_printer em { + display: block; +} + +/* luci-app-passwall */ +#cbi-passwall #add_link_div, +#cbi-passwall #set_node_div { + background: #fffffff0; +} +#cbi-passwall .cbi-section-table tbody ._now_use { + background: #5e72e473 !important; +} + +/* luci-app-commands */ +.commandbox h3 { + overflow: hidden; + text-overflow: ellipsis; +} +.commandbox code { + word-break: break-word; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} +div.commandbox { + height: 16em; +} + +/* luci-app-ssr-plus */ +#cbi-shadowsocksr .cbi-map-descr h3 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* luci-app-mwan3 */ +.node-status-mwan .cbi-tabmenu { + padding: 3rem 0.5rem 0 0.5rem; +} + +/* luci-app-openclash */ +.node-services-openclash .cbi-tabmenu { + font-size: 0; +} +.node-services-openclash .cbi-tabmenu > li { + margin-right: 4px; +} +.node-services-openclash .cbi-tabmenu > li:last-child { + margin-right: 0; +} + +/* luci-app-ddnsto */ +.node-services-ddnsto .cbi-section-node .cbi-value div { + display: table-cell; + line-height: 1.6; + font-size: 0.875rem; +} + +/* luci-app-dockerman */ +#cbi-dockerd > .cbi-section > br, +#cbi-docker > .cbi-section > br { + display: none; +} + +/* luci-app-diskman */ +#cbi-diskman > .cbi-section > br { + display: none; +} + +/* luci-app-istorex (Quick Start) */ +#app #main #page .app-container_body .btn-f, +#app #main #page .app-container_body .btn-r { + -webkit-user-select: none; /* Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+/Edge */ + user-select: none; /* Standard */ + width: 30px; +} + +/* luci-app-ttyd */ +.TTYD.node-system-terminal .main { + height: 100%!important; +} +.TTYD.node-system-terminal .main .main-right, +.TTYD.node-system-terminal .main .main-right #maincontent, +.TTYD.node-system-terminal .main .main-right #maincontent .container .cbi-map { + height: 100%!important; + display: flex!important; + flex-direction: column!important; +} +.TTYD.node-system-terminal .main .main-right #maincontent, +.TTYD.node-system-terminal .main .main-right #maincontent .container, +.TTYD.node-system-terminal .main .main-right #maincontent .container .cbi-map #terminal { + flex: 1!important; +} + +@media screen and (max-width: 1600px) { + + .main { + .main-left { + width: calc(0% + 13rem); + } + + .main-right { + width: calc(100% - 13rem); + } + } + + + .cbi-button:not(.cbi-button-up, .cbi-button-down) { + /*padding: 0.3rem 1.5rem;*/ + font-size: 0.8rem; + } + + header>.container>.pull-right>* { + top: 0.35rem; + } + + .label { + padding: 0.2rem 0.6rem; + } + + .cbi-value-title { + width: 15rem; + padding-right: 0.6rem; + } + + fieldset { + padding: 0; + } + + .node-status-iptables>.main fieldset li>a { + padding: 0.3rem 0.6rem; + } + + +} + + +@media screen and (max-width: 1280px) { + + header>.container { + margin-top: 0.25rem; + } + + .main { + .main-left { + width: calc(0% + 13rem); + } + + .main-right { + width: calc(100% - 13rem); + } + } + + + + .cbi-tabmenu>li>a, + .tabs>li>a { + padding: 0.2rem 0.5rem; + } + + .panel-title { + font-size: 1.1rem; + padding-bottom: 1rem; + } + + table { + font-size: 0.7rem !important; + width: 100% !important; + } + + .main>.main-left>.nav>li, + .main>.main-left>.nav>li a, + .main>.main-left>.nav>.slide>.menu { + font-size: 0.9rem; + } + + .main>.main-left>.nav>.slide>.slide-menu>li>a { + font-size: 0.7rem; + } +} + +@media screen and (max-width: 992px) { + .main { + .main-left { + width: 0; + position: fixed; + z-index: 100; + } + + .main-right { + width: 100%; + } + } + + .showSide { + padding: 0.1rem; + position: relative; + display: inline-block; + + &:hover { + text-decoration: none; + } + } + + .showSide:before { + content: "\e20e"; + font-size: 1.7rem; + } + + header>.fill>.container>.brand { + display: inline-block; + } + + .node-network-diagnostics>.main .cbi-map fieldset>div * { + width: 100% !important; + } + + .node-network-diagnostics>.main .cbi-map fieldset>div input[type="text"] { + margin: 3rem 0 0 0 !important; + } + + .node-network-diagnostics>.main .cbi-map fieldset>div:nth-child(4) input[type="text"] { + margin: 0 !important; + } + + .node-network-diagnostics>.main .cbi-map fieldset>div select, + .node-network-diagnostics>.main .cbi-map fieldset>div input[type="button"] { + margin: 1rem 0 0 0 !important; + } + + .node-network-diagnostics>.main .cbi-map fieldset>div { + width: 100% !important; + } + + #diag-rc-output>pre { + font-size: 1rem; + } + + +} + +@media screen and (max-width: 500px) { +.login-page { + .login-container { + margin-left: 0rem !important; + width: 500px; + + .login-form { + max-width: 500px; + } + } +} + +@media screen and (max-width: 480px) { + body { + font-size: 0.8rem; + } + + .pull-right { + float: right; + margin-top: 0rem !important; + } + + .login-page .login-container { + margin-left: 0rem !important; + width: 100%; + + .login-form { + + .form-login { + .input-group { + &::before { + color: #525461; + } + + input { + color: #525461; + border-bottom: white 1px solid; + border-bottom: var(--white) 1px solid; + border-radius: 0; + } + + } + } + } + + } + + + + fieldset { + padding: 0; + margin: 1rem 0 0 0; + } + + .toggle { + margin: 0; + } + + h2 { + font-size: 1.125rem; + } + + .panel-title { + font-size: 1rem; + padding-bottom: 1rem; + } + + #maincontent>.container { + margin: 0 1rem 1.5rem 1rem; + } + + .main>.main-left>.nav>.slide>.menu { + font-size: 1rem; + } + + .main>.main-left>.nav>.slide>.slide-menu>li>a { + font-size: 0.9rem; + } + + + .main>.main-left>.nav>.slide>.menu:after { + top: 0.9rem; + } + + + #ethinfo td { + padding: 0.75rem 0.2rem !important; + + } + + .cbi-value-title { + width: 100%; + min-width: 0rem !important; + display: block; + margin-top: 0.5rem; + margin-bottom: 0.5rem; + text-align: left; + padding: 0 0.25rem; + } + + .cbi-value input[type="password"], + .cbi-value input[type="text"] { + min-width: 15rem; + } + + select, + input { + width: 100% !important; + min-width: auto; + margin: 0.25rem 0; + } + + input { + box-sizing: border-box; + } + + .cbi-value>.cbi-value-field>div>input { + width: calc(100% - 1.5rem) !important; + } + + .cbi-value>.cbi-value-field { + display: inline-block; + width: 100%; + position: relative; + } + + .cbi-page-actions>div>input { + display: none; + } + + + ::-webkit-scrollbar { + width: 0px !important; + height: 0px !important; + } + + + .tabs>li>a { + font-size: 0.9rem; + } + + select, + input { + font-size: 0.9rem; + } + + .mobile-hide { + display: none !important; + } + + + + .node-status-realtime { + + table>tbody>tr>td, + table>tfoot>tr>td, + table>thead>tr>td { + font-size: .8125rem; + color: #525f7f; + line-height: 1.4em; + vertical-align: middle !important; + padding: 0.8rem 0rem; + border-top: 1px solid #ddd; + width: auto; + text-align: center; + } + } + + + .node-system-packages>.main .cbi-value.cbi-value-last>div { + width: 100% !important; + } + + .node-system-packages .cbi-section-node .cbi-value { + padding: 0.3rem 1rem; + } + + .node-system-packages>.main .cbi-value .cbi-value-field input { + width: 100%; + } + + .node-system-leds .cbi-section em { + display: block; + } + + .node-status-iptables>.main div>.cbi-map>form { + position: static !important; + margin: 0 0 2rem 0; + padding: 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + border-radius: 0.375rem; + background-color: #FFF; + box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15); + -webkit-overflow-scrolling: touch; + } + + .node-status-iptables>.main div>.cbi-map>form input[type="submit"] { + width: 100% !important; + margin: 0; + } + + .node-status-iptables>.main div>.cbi-map>form input[type="submit"]+input[type="submit"] { + margin-top: 1rem; + } + + .cbi-value input[type="text"]:has(+ img) { + width: 10rem !important; + } + + .cbi-button-add { + margin-left: 0.5rem; + } + + .node-network-network { + .cbi-section-table { + + tr, + td { + display: block; + } + + td { + width: 100% !important; + text-align: center !important; + padding: 0.8rem 1.5rem !important; + } + + .cbi-section-table-titles { + display: flex; + + .cbi-section-table-cell { + flex: 1 !important; + } + } + } + } + + .node-services-vssr { + .status-info { + font-size: 0.75rem; + } + + .icon-con { + margin-top: 0.4rem; + + img { + width: 2.3rem !important; + height: auto; + } + } + } +} diff --git a/luci-theme-argon/htdocs/luci-static/argon/less/dark.less b/luci-theme-argon/htdocs/luci-static/argon/less/dark.less new file mode 100644 index 00000000..997fe795 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/less/dark.less @@ -0,0 +1,908 @@ +/** + * Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material and Argon Template + * + * luci-theme-argon + * Copyright 2020 Jerryk + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/jerrykuku/luci-theme-argon/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * luci-theme-material: + * https://github.com/LuttyYang/luci-theme-material/ + * + * Argon Theme + * https://demos.creative-tim.com/argon-dashboard/index.html + * + * Login background + * https://unsplash.com/ + * + * Licensed to the public under the Apache License 2.0 + */ + +body { + background: #1e1e1e; + color: #cccccc; +} + +.login-page .login-container { + + .login-form { + background-color: #1e1e1e; + + .brand { + color: #adb5bd; + } + + .form-login { + .input-group { + &::before { + color: #adb5bd; + } + + .border { + border-bottom: 1px var(--dark-primary) solid; + } + + input { + background-color: transparent !important; + color: #adb5bd; + border-bottom: #adb5bd 1px solid !important; + border-radius: 0; + border-top: none !important; + border-left: none !important; + border-right: none !important; + box-shadow: none; + + &:focus { + border-top: none !important; + border-left: none !important; + border-right: none !important; + } + } + } + + .cbi-button-apply { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + &:hover, + &:focus { + opacity: 0.9; + } + } + } + + + } + + footer { + color: #adb5bd; + a { + color: #adb5bd; + } + } + +} + +header::after { + background-color: #1e1e1e !important; +} + + +.main { + .main-left { + + background-color: #333333 !important; + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .15); + + .sidenav-header .brand { + color: #ccc; + } + + .nav { + .slide { + .slide-menu { + + .active { + a { + color: #fff !important; + + &::after { + background-color: var(--dark-primary) !important; + } + } + } + + li { + a { + color: #cccccc; + + &:hover { + background: none !important; + } + + &::after { + background-color: var(--dark-primary) !important; + box-shadow: 0 0 1px #000 !important; + } + + } + } + } + + .menu { + &:hover, + &.active { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + color: #fff !important; + box-shadow: 0 0 1px #000 !important; + } + } + + .menu[data-title=Status]:before, + .menu[data-title=Control]:before { + color: var(--dark-primary) !important; + } + } + + li { + a { + color: #cccccc !important; + } + + a:hover { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + color: #fff !important; + + + } + } + } + + + &::-webkit-scrollbar-thumb { + background-color: #252526 !important; + } + + } + + .main-right { + background-color: #1e1e1e; + } +} + +h2 { + color: #ccc; + background: #333333; +} + +h3 { + color: #ccc; + border-bottom: 0; + background: #333333; +} + +a:link, +a:visited, +a:active { + color: var(--dark_webkit-any-link); +} + +a:-webkit-any-link:not(li a, .main-left a, .brand, .pull-right a, .alert-message a, .login-container footer a, .cbi-button) { + color: var(--dark_webkit-any-link) !important; + text-shadow: 1px 1px 2px #000 !important; +} + +input:-webkit-autofill { + background-color: #3c3c3c !important; +} + +input[type="checkbox"]:checked { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; +} + +.cbi-input-radio:checked { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; +} + +.cbi-value-field .cbi-input-apply, +.cbi-button-apply, +.cbi-button-edit { + color: #fff !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; +} + +.cbi-section em { + color: var(--dark_webkit-any-link); + text-shadow: 1px 1px 2px #000; +} + +header.bg-primary { + background-color: #1e1e1e !important; +} + + + +.cbi-map-descr { + color: #ccc; +} + +.cbi-section { + background: none; + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35) +} + +.panel-title { + color: #ccc; + background-color: #333333; + border-bottom: 0px; +} + +table>tbody>tr>td, +table>tfoot>tr>td, +table>thead>tr>td { + color: #ccc; +} + +fieldset>table>tbody>tr:nth-of-type(2n) { + background-color: #252526; +} + +table>tbody>tr>td, +table>tfoot>tr>td, +table>thead>tr>td { + border-top: 1px solid #252526; +} + +#swaptotal>div>div, +#swapfree>div>div, +#memfree>div>div, +#membuff>div>div, +#conns>div>div, +#memtotal>div>div { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; +} + +#swaptotal>div>div>div>small, +#swapfree>div>div>div>small, +#memfree>div>div>div>small, +#membuff>div>div>div>small, +#conns>div>div>div>small, +#memtotal>div>div>div>small { + color: #ccc !important; + text-shadow: 1px 1px 2px #000 !important; +} + +.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last { + line-height: 1.8em; + + div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] { + border: 1px solid #999999 !important; + background-color: transparent !important; + + div { + background-color: #32325d !important; + background-color: var(--dark-primary) !important; + } + } + +} + + +table>tbody>tr>th, +table>tfoot>tr>th, +table>thead>tr>th { + background-color: #252526; + border-top: none; + border-bottom: black 1px solid !important; +} + +.cbi-rowstyle-2 { + background-color: #2c2c2c !important; +} + +.cbi-rowstyle-1 { + background-color: #252526; +} + +.cbi-section>h3:first-child, +.panel-title { + color: #ccc; + border-bottom: 0; +} + +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + background-color: #1e1e1f; +} + +.cbi-button { + color: #ccc; + background-color: #2c2c2c; +} + +.cbi-rowstyle-2 .cbi-button-up, +.cbi-rowstyle-2 .cbi-button-down { + background-color: #252526 !important; +} + +.cbi-section-node { + background: none; + border-radius: 0 0 .375rem .375rem; + padding: 0rem; +} + +abbr { + color: #8898aa; +} + +div>table>tbody>tr:nth-of-type(2n), +div>.table>.tbody>.tr:nth-of-type(2n) { + background-color: #252526; +} + +/* file selector button */ +::file-selector-button { + border: 1px solid darkseagreen !important; + background-color: darkseagreen !important; +} + +/* Fix background color of table-titles */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-section-table-titles th { + background-color: #1e1e1e; + border: none !important; +} + +/* Fix background color of table-descr */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-section-table-descr th { + background-color: #333333; + border: none !important; +} + +/* Fix background color not change when the H tag is in the table rowstyle-1 */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-rowstyle-1 th { + background-color: #252526; + border-top: 1px solid #252526; + border-bottom: none !important; +} + +/* Fix background color not change when the H tag is in the table rowstyle-2 */ +.cbi-section-node>.cbi-section-table>tbody>.cbi-rowstyle-2 th { + background-color: #2c2c2c; + border-top: 1px solid #252526; + border-bottom: none !important; +} + +/* Change the color of the H label in the table to make it more visible */ +th h1, td h1, +th h2, td h2, +th h3, td h3, +th h4, td h4, +th h5, td h5, +th h6, td h6 { + background: var(--gray-dark); +} + +/* Improved the background color of each itemes in "UNSAVED CHANGES" (dark mode only) */ +.uci-change-list del, +.uci-change-legend-label del { + background-color: #fb74008c; +} +.uci-change-list var, +.uci-change-legend-label var { + background-color: #333333; +} +.uci-change-list ins, +.uci-change-legend-label ins { + background-color: #00ff0a45 !important; +} + +#content_syslog { + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35) +} + +#syslog { + color: #ccc; + background-color: #1e1e1e; +} + +#iwsvg, +#iwsvg2, +#bwsvg { + overflow: hidden; + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); + background-color: #1e1e1e !important; +} + +.tabs { + background-color: #252526; +} + +.tabs>li:hover, +.tabs>li[class~="active"], +.cbi-tabmenu>li:hover, +.cbi-tabmenu>li[class~="cbi-tab"] { + border-bottom: .18751rem solid var(--dark-primary); + background-color: #3c3c3c; +} + +.tabs>li>a, +.cbi-tabmenu>li>a { + color: #ccc !important; +} + +.cbi-tabmenu>li>a:hover, +.cbi-tabmenu>li:hover>a, +.cbi-tabmenu>.cbi-tab>a, +.tabs>li>a:hover, +.tabs>li:hover>a, +.tabs>li[class~="active"]>a { + color: #fff !important; +} + +.cbi-tabmenu>li { + background: #2d2d2d; +} + +.cbi-tabmenu { + border-bottom: 0px solid #ddd !important; +} + +.cbi-tab-descr { + color: #ccc; +} + +.cbi-tabcontainer>.cbi-value:nth-of-type(2n), +.cbi-tabcontainer>.cbi-value:nth-of-type(2n)>textarea { + background-color: #252526; +} + +.cbi-value-title { + color: #ccc; +} + +select, +input { + color: #ccc; + background-color: transparent; + border: 1px solid #3c3c3c !important; + box-shadow: 0 3px 2px rgba(0, 0, 0, .05); +} + +select:not([multiple="multiple"]):hover, +input:hover, +input:focus { + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; + background-color: transparent; + outline: 0; + box-shadow: none; +} + +select { + background-color: #1e1e1e !important; +} + +#cbi-dropbear h2, +#cbi-dropbear .cbi-map-descr, +#cbi-dropbear .cbi-map-descr abbr, +#cbi-rc h2, +#cbi-rc .cbi-map-descr, +#cbi-distfeedconf h2, +#cbi-distfeedconf .cbi-map-descr, +#cbi-customfeedconf h2, +#cbi-customfeedconf .cbi-map-descr, +#cbi-download h2, +#cbi-filelist h2 { + color: #ccc !important; +} + +.cbi-value-field>ul>li .ifacebadge { + background-color: #3c3c3c; +} + +.cbi-section-descr { + color: #ccc; +} + +/*textarea for dark mode*/ +textarea { + border: 1px solid #3c3c3c !important; + background-color: #1e1e1e; + color: #ccc; +} + +.cbi-section-remove:nth-of-type(2n), +.cbi-section-node:nth-of-type(2n) { + background-color: #1e1e1e; +} + +.node-system-packages>.main table tr td:nth-last-child(1) { + color: #ccc; +} +.node-system-packages > .main .cbi-value > pre { + background-color: #333; +} + +.cbi-section-node .cbi-value { + padding: 1rem 1rem 0.3rem 1rem; +} + +.ifacebox { + background-color: #1e1e1e; + border: 1px solid #1e1e1e; +} + +.ifacebox-head { + color: #666; +} + +.ifacebox-body { + background-color: #333; +} + +.zonebadge strong { + color: #333; +} + +.zonebadge>.ifacebadge { + background-color: #3c3c3c; +} + +/* Fix firewall zone: "unspecified -or- create: " background color (dark mode only) */ +div[onclick$="._fwzone_new').checked=true"] { + border: 1px solid #3c3c3c; + background-color: transparent !important; +} + +/* Improve the background color of "Any zone" and "Device" when ADD/EDIT Rules in Firewall > Traffic Rules (dark mode only) */ +label[for$=".src_any"], +label[for$=".dest_empty"], +label[for$=".dest_any"] { + background-color: #2888db !important; +} + +/* Fix/add background color of wireless signal strength badge for dark mode */ +td>.ifacebadge, +.td>.ifacebadge { + background-color: #3c3c3c; +} + +/* Improved loading process gif color (dark mode only) */ +img[src="/luci-static/resources/icons/loading.gif"] { + filter: invert(1); +} + +div.cbi-value var, +td.cbi-value-field var, +.td.cbi-value-field var { + color: #483d8b; + color: var(--dark_webkit-any-link); + text-shadow: 1px 1px 2px #000; +} + +#diag-rc-output>pre { + color: #ccc; + background-color: #1e1e1e; +} + +.node-services-vssr .block { + background-color: #1e1e1e !important; + box-shadow: 0 0 .5rem 0 rgba(0,0,0,0.35) !important; +} + +.node-services-vssr .block h4 { + color: #ccc !important; +} + +.node-services-vssr .status-bar { + color: #ccc; + background: #333333f0; + box-shadow: #00000094 10px 10px 30px 5px; +} + +.node-services-vssr .cbi-section-table-row { + color: #ccc; + background-color: #3c3c3c !important; + box-shadow: 0 0 5px 0 rgba(0, 0, 0, .35) +} + +.node-services-vssr .cbi-section-table-row.fast { + background: #483d8b !important; + background: var(--dark-primary) !important; + color: #fff; +} + +.node-services-vssr .ssr-button { + color: #ccc; + +} + +.node-services-vssr .incon:nth-child(2) { + border-right: #1e1e1e 1px solid; +} + +.main .main-right #maincontent .container p { + color: #ccc; +} + +#xhr_poll_status>.label.success { + color: #ccc !important; + + background-color: darkolivegreen !important; +} + +/* Define the warning background-color breathe display animation (dark mode) */ +@keyframes warning-background-color-breathe-dark { + 0%{ + color: #fff; + background-color: darkorange; + } + 50%{ + color: #ccc; + background-color: #333333; + } + 100%{ + color: #fff; + background-color: darkorange; + } +} +.warning, +.warning * { + animation: warning-background-color-breathe-dark 1.5s ease-in-out infinite !important; +} + +.notice { + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; +} + +/* Improved the aleart-message background color during device restart (dark mode only) */ +.errorbox, +.alert-message { + background-color: #333333; +} + +.cbi-input-find, +.cbi-input-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-find, +.cbi-input-reload, +.cbi-button-reload { + background-color: darkseagreen !important; + border-color: darkseagreen !important; +} + +.cbi-button-reset, +.cbi-input-remove { + color: #fff !important; + background-color: darkorange !important; + border-color: darkorange !important; +} + +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit, +.cbi-button-edit.important, +.cbi-button-apply.important, +.cbi-button-reload.important, +.cbi-button-action.important { + border: 1px #483d8b solid !important; + border: 1px var(--dark-primary) solid !important; +} + + + +fieldset[id^="cbi-apply-"] { + background-color: #333333; +} + +#detail-bubble>div { + border: 1px solid #ccc; + border-radius: 2px; + padding: 5px; + background: #252525; +} + +/* Define the error text border breathe display animation (dark mode) */ +@keyframes error-border-breathe-dark { + 0%{ + border-color: darkorange; + } + 50%{ + border-color: transparent; + } + 100%{ + border-color: darkorange; + } +} + +/* Add border for error text box, and border breathe display animation to make it more noticeable (dark mode) */ +.cbi-section-error>ul>li { + color: darkorange; + border: 2px solid darkorange ; + animation: error-border-breathe-dark 1.5s ease-in-out infinite; +} + +.cbi-input-invalid, +.cbi-value-error input { + color: darkorange; + border: 1px dashed darkorange !important; +} + +.node-services-vssr .block h4 span{ + color: #ccc !important; +} + +/* luci-app-passwall */ +#cbi-passwall #add_link_div, +#cbi-passwall #set_node_div { + background: #333333f0 !important; + box-shadow: #00000094 10px 10px 30px 5px !important; +} + +/* luci-app-bypass */ +#cbi-bypass .status-bar { + color: #ccc; + background: #333333f0; + box-shadow: #00000094 10px 10px 30px 5px; +} + +/* luci-app-clash */ +#cbi-clash .cbi-section .pure-u-1-4 .pure-g, +#cbi-clash .cbi-section .siz .pure-g { + background-color: #1e1e1e !important; + box-shadow: 0 0 .5rem 0 rgba(0,0,0,0.35) !important; +} + +/* luci-app-openclash */ +#cbi-openclash #eye-icon, +#cbi-openclash img[title="刷新"] { + filter: invert(100%); +} +#cbi-openclash #cbi-openclash-config fieldset[control-id="ControlID-46"], +#cbi-openclash .CodeMirror-merge-copybuttons-right, +.CodeMirror-scroll { + background-color: #333333 !important; +} +#cbi-openclash .cbi-section .cbi-tabmenu li { + border-right: 1px solid #3c3c3c !important; +} +#cbi-openclash .CodeMirror-merge { + border: 1px solid transparent !important; +} +#cbi-openclash-config-clog .cbi-section { + border: 1px solid #3c3c3c !important; +} +#cbi-openclash .CodeMirror-gutters { + border-right: 1px solid #3c3c3c !important; + background-color: #1e1e1e !important; +} + +/* luci-app-dockerman */ +#cbi-dockerd .img-con img { + filter: invert(0.4); +} + +/* luci-app-istorex (interface config[NetworkPort]) */ +#cbi-nfs-mount .app-container_status-label_bg { + background: #333333; +} +#cbi-nfs-mount td svg { + filter: invert(0.3); +} +#actioner .actioner-dns { + background-color: #333333; +} +#actioner .actioner-dns_header, +#actioner .actioner-container_header { + border-bottom: 1px solid #cbcbcb !important; +} +#actioner .actioner-dns_footer { + border-top: 1px solid #cbcbcb !important; +} + +/* luci-app-istorex (Network Guide) */ +#app #main #page .title, +#app #main #page .desc { + color: #cccccc; + background-color: #333333; +} +#app #main #page .network-message li:not(span):not(a) { + color: #8d8d8d; +} +#app #main #page code { + background-color: #333333; +} + +/* luci-app-istorex (Quick Start) */ +#app #main #page .network-container_flow-container, +#app #main #page .app-container_status-container, +#app #main #page .nas-container .nas-container_card .app-container, +#app #main #page .app-container { + background-color: #333333; +} +#app #main #page .flow-data span, +#app #main #page .app-container_status-label_block span, +#app #main #page .app-container .item-label span:not(#app #main #page .app-container .progress-value span) { + color: #cccccc; +} +#app #main #page .app-container_status-info span, +#app #main #page .app-container_status-info span, +#app #main #page .app-container_title span { + color: #dddddd; +} +.app-container_body .app-container_status-label_bg { + background-color: #282828 !important; +} +#app #main #page .item-label_value .progress { + background-color: rgb(118, 118, 118); +} +#app #main #page .app-container_nas-menu button[class=""] { + background-color: #8b8b8b; +} +#app #main #page .app-container_nas-menu button[class="on"] { + background-color: #555555; +} +#app #main #page .app-container_title .DeviceBlock ul { + background-color: #cccccc; +} +#actioner div.action, +#actioner div.actioner-container { + background-color: #3c3c3c; +} +#actioner div.action .title { + color: #cccccc; +} +#actioner div.action .desc { + color: #cbcbcb; +} +#actioner div.action div.roots span, +#actioner div.action div.move span:not(span.tip), +#actioner div.action div.left span, +#actioner div.action div.input_row span, +#actioner div.label-item label span { + color: #cbcbcb; +} +#actioner div.action span.tooltip-trigger svg path { + fill: #cbcbcb; +} +#actioner div.actioner-dns_body div.label-item_value select { + height: 43px; +} +#actioner div.actioner-container_footer div.close { + color: #ffffff; +} +#app #main div.app-container div.app-container_title span a svg path, +#app #main #page span.disk_infoicon svg g { + fill: #8b8b8b; +} + +@supports (-webkit-backdrop-filter: none) or (backdrop-filter: none) { + .login-page .login-container .login-form { + -webkit-backdrop-filter: blur(var(--blur-radius-dark)); + backdrop-filter: blur(var(--blur-radius-dark)); + background-color: rgba(0, 0, 0, var(--blur-opacity-dark)); + } +} + +@media screen and (max-width: 480px) { + .node-status-iptables>.main div>.cbi-map>form { + background-color: #1e1e1e; + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); + } +} \ No newline at end of file diff --git a/luci-theme-argon/luasrc/view/themes/argon/footer.htm b/luci-theme-argon/luasrc/view/themes/argon/footer.htm new file mode 100644 index 00000000..f56186db --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/footer.htm @@ -0,0 +1,79 @@ +<%# + Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material Argon Template + + luci-theme-argon + Copyright 2020 Jerrykuku + + Have a bug? Please create an issue here on GitHub! + https://github.com/jerrykuku/luci-theme-argon/issues + + luci-theme-bootstrap: + Copyright 2008 Steven Barth + Copyright 2008-2016 Jo-Philipp Wich + Copyright 2012 David Menting + + MUI: + https://github.com/muicss/mui + + luci-theme-material: + https://github.com/LuttyYang/luci-theme-material/ + + Argon Theme + https://demos.creative-tim.com/argon-dashboard/index.html + + Login background + https://unsplash.com/ + + Font generate by Icomoon + https://icomoon.io/ + + Licensed to the public under the Apache License 2.0 +-%> + +<% + local ver = require "luci.version" + local disp = require "luci.dispatcher" + local request = disp.context.path + local category = request[1] + local tree = disp.node() + local categories = disp.node_childs(tree) +%> +

    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�$dl3gH)Q&OCfV6T};Oqr8= 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 J%do#+{vV8|Vut_# literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/blank.png b/luci-theme-argon/htdocs/luci-static/argon/img/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..9f4100e6e2ea2fa08912439eb7425af3f048eedd GIT binary patch literal 938 zcmaJ=L66cv6t0pOLtGQRxu;1t8cn3rmX@UxDuEV+#1g`iEC&ykc7V#ZQ`^B74o1E0 z!9@RtCjJ4Vo;`W;;-Byjn5vqfmTeG-$ z^$PpHk-vXt%Pra((IYaUi5+3C;gT^1UEiMK0k+-cvv0V@afLhHa70JeBjgZYurrL1 z`XOU;T&;m#;qnwG=S{ zA5$Bo{z(v{ROi>ah{f44|Y zg;KdBRgfYgSq7VrXW1fmf(B-LlZ)+ienx4CAWV`(NXi0_9I4~G;sIW3tW=K z_tqTCLfs&ycHrQysq;)l@H`ilE0WPRn-#+l6-jC}G^uPDimIwwvsqP|M$R>fv+!|1 zbFO>AJ>1F7#=#F+W)nx=bL_Sw;)8YB$lL8j*{QeTy1TuoJGqdVf!XE$b=mn5o1iS* zjxO75haU%Q;v+WNFFxG9&Ys17*K7>apX1+WXZ3>g^7K_leE${|FI~RI{kU1U@$}2P Q$Jy)YwtD8r=9AZd04Jv&d;kCd literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/edit.webp b/luci-theme-argon/htdocs/luci-static/argon/img/edit.webp new file mode 100644 index 0000000000000000000000000000000000000000..264840a334af871f06a048d1688491e2b0019c4f GIT binary patch literal 632 zcmWIYbaN|UVqge&bqWXzu!!JdU|ns^8xzxZpNP`KqhX^2hxTAJ{a`sW01o$79o4tZwIn%I%f2 z=9Dhr<+nJto?C@75_L|Iy#t^Scy#PY3MMSD59X$;gxay>SrCrSqmq`8o53F zZ+`Re{vM@S&J9zF<~sN3*#+&gSN8mB*^yazx971|^r|I49@mtINS!j?(7bH`O~s_X2V@c&h4^`6;=(!15Z9+<+fks;KeAfc4Q7Q!OLyx_veA6w-P zJ^s92>sJ@+{rlTol2+v8pWLwORbA@&6&}XF_vF2o<7ikQ*%far^6>Wy``L?2n3$9_ z(vCWntv7VpnHIG*Ipe2ghH5;&M-}&{L_rqO30{m%i|lIy#9zlTy4>F8YhHbP+uJK$ zlW)Dt&XO+7`h5K>ui)SL3~zc=idH(QUEIzuGnZku*S~vJ40Gg?o&H68>+E5l;}{U^ zWqH%^$P2LsS6j{HQ=a`h_->g5}$j*fe; zpHDM&2$*S`C;l^VSIw2ROy0ir`P*W@glO&mu$$vdc5d0HwLx{F!P*Skn<}K=ubvvd zamKO8gmW%&u~+6DeZ+S4^nocId+K&P^*^byVci3JQ|SZW3Y4aMiU^7EYeN%x{4VPy+D)l8g*YFd8Jsq5+oU0g_DiAHZy|9u{XXn>QdSHJnj^ffbmX GfB*nb8wA|| literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/fieldadd.webp b/luci-theme-argon/htdocs/luci-static/argon/img/fieldadd.webp new file mode 100644 index 0000000000000000000000000000000000000000..a4619e247550e645827cfbaa04d352d057c36321 GIT binary patch literal 664 zcmWIYbaR`)#J~{l>J$(bU=hK^z`!5?#Qb0c6!DP(%IfnUU=~=;qBtofGO%bd+kdGE z#fRS|pJH3$F-gYL?$cg@Y4+``n`ORqavh(jV(Il&PHN7fdhrd7&tJ|g3ckHfIJbz^ zmTf`;H8v~?a-4M~qx@K1+AO_E=*dizRwS>|MYX6 zm+xf>_x-akEV;E-{QdDokKd&4`8faFs`nbA4r<-67UyYR{c|hJW6HFeo~`!<*XPc= zcD(4C?meBWx!WJKRKe0p--#@yTUPHwwsxP~SkPc_PVCvf4FDR3q!^ z%&l>2XYQF8bjGZ~X~q1x@#@{%KTUdfkt;xQTJYP`R#zv*F5?twm^E?X^KP9gqx*-i z#xZSQ7Pe@Lfq}|!I-tNQq1^JH;`fM7>YKVXWnaPstJehXxP5|9Uw oWMp81(I7b%4X_*!kYuv|0A_>rusDO+ya7q6;fw+dtc+kT01p@znE(I) literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/file.webp b/luci-theme-argon/htdocs/luci-static/argon/img/file.webp new file mode 100644 index 0000000000000000000000000000000000000000..6597e6ce78093ed36cd391001fd40f91a6a176b2 GIT binary patch literal 566 zcmWIYbaT^VVqge&bqWXzu!!JdU| zZoi04XYG$Otf+V4VQo^Hks18JMKP*_MS;<)B_QKS+lu8+uK)ixBfyu5ancKO6Ojc^ z9qi7^D}@TVX-!?V|Jl92yN@K=x2Nw*&0F_esdLF$aVF7K@>jky26gmI3V2xZ&0ax8 zM1hq<(d6r&t2yDdlK+JL;!oKBzZCb_?A!FaEj@k>GhxdKmI<8xqSN0nJdzN3UdXQ zX1Gk_OZ~-}v2%&>(u(hVVgB|DU%v6vRC+n%KTqDj)Cu7i3VyUr{up92@ysuu?H9uM z^Ph)J`~36Hxe4nSb!V%~aIrKu1{}%GcXT%0w}0Etjr%t25WTvcJyy+VrD5^+NAFV0 zN>YNV*{5?!F8Iatj<jrynprEu1`knco5#py>4g ql8g*YFd8Jsq5+oU0g_DiAHZy|9u{XXn>QdSHJnj^ffbk-fB*o(F6z4g literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/find.webp b/luci-theme-argon/htdocs/luci-static/argon/img/find.webp new file mode 100644 index 0000000000000000000000000000000000000000..0b8fae856d5953f4cfc34d25e46a6e3ee9a1bd2f GIT binary patch literal 674 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 HMlcru$)6)O literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/trafficbar.png b/luci-theme-argon/htdocs/luci-static/argon/img/trafficbar.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a99ce0c1a0f80e4d64d466e3008d92e062ad84 GIT binary patch literal 6556 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 \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/volume_off.svg b/luci-theme-argon/htdocs/luci-static/argon/img/volume_off.svg new file mode 100644 index 00000000..0598d584 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/img/volume_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/js/color_calc-argon.js b/luci-theme-argon/htdocs/luci-static/argon/js/color_calc-argon.js new file mode 100644 index 00000000..bf7d7948 --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/js/color_calc-argon.js @@ -0,0 +1,72 @@ +/* + * The background color of the [Light Mode] subtabs follow the custom primary color and reduce its transparency + * Author: SpeedPartner + */ + +/* + * Get hex for the [Light mode] Primary Color ,then reduce it to 25% transparency and convert it to RGBA value + */ + const hexColor_primary_light = getComputedStyle(document.documentElement).getPropertyValue('--primary').replace(/\s/, ""); + const hexToRgba_primary_light = (hex) => { + const r = parseInt(hex.substring(1, 3), 16); + const g = parseInt(hex.substring(3, 5), 16); + const b = parseInt(hex.substring(5, 7), 16); + const a = 0.15 + return [r, g, b].map(x => x.toFixed()).concat(a); + }; + const rgbaColor_primary_light = hexToRgba_primary_light(hexColor_primary_light); + console.log(rgbaColor_primary_light); + +/* + * Constitute a css color variable named light-subtabs-background + */ + document.documentElement.style.setProperty('--light-subtabs-background', `rgba(`+rgbaColor_primary_light+`)`); + + +/* + * Improved link font color that follows custom [Dark mode] Primary Color + * Author: SpeedPartner + */ + +/* + * Get hex for the [Dark mode] Primary Color ,then reduce it to 70% transparency and convert it to RGB value + */ + const hexColor_primary = getComputedStyle(document.documentElement).getPropertyValue('--dark-primary').replace(/\s/, ""); + const hexToRgb_primary = (hex) => { + const r = parseInt(hex.substring(1, 3), 16); + const g = parseInt(hex.substring(3, 5), 16); + const b = parseInt(hex.substring(5, 7), 16); + const a = 0.7 + return [r*a, g*a, b*a].map(x => x.toFixed(2)); + }; + const rgbColor_primary = hexToRgb_primary(hexColor_primary); + //console.log(rgbColor_primary); + +/* + * Constitute overlay color #cccccc, then reduce it to 30% transparency and convert it to RGB value + */ + const hexColor_overlay = "#cccccc"; + const hexToRgb_overlay = (hex) => { + const r = parseInt(hex.substring(1, 3), 16); + const g = parseInt(hex.substring(3, 5), 16); + const b = parseInt(hex.substring(5, 7), 16); + const a = 0.3 + return [r*a, g*a, b*a].map(x => x.toFixed(2)); + }; + const rgbColor_overlay = hexToRgb_overlay(hexColor_overlay); + //console.log(rgbColor_overlay); + +/* + * Overlay the RGB value of two colors + */ + const New_Color = [ + Math.round(Number(rgbColor_primary[0]) + Number(rgbColor_overlay[0])), + Math.round(Number(rgbColor_primary[1]) + Number(rgbColor_overlay[1])), + Math.round(Number(rgbColor_primary[2]) + Number(rgbColor_overlay[2])) + ]; + //console.log(New_Color); + +/* + * Constitute a css color variable named dark_webkit-any-link + */ + document.documentElement.style.setProperty('--dark_webkit-any-link', `rgb(`+New_Color+`)`); diff --git a/luci-theme-argon/htdocs/luci-static/argon/js/jquery.min.js b/luci-theme-argon/htdocs/luci-static/argon/js/jquery.min.js new file mode 100644 index 00000000..d467083b --- /dev/null +++ b/luci-theme-argon/htdocs/luci-static/argon/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="

  • + + + + + + + + diff --git a/luci-theme-argon/luasrc/view/themes/argon/header.htm b/luci-theme-argon/luasrc/view/themes/argon/header.htm new file mode 100644 index 00000000..3786aee8 --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/header.htm @@ -0,0 +1,331 @@ +<%# + Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI and Argon Template + + luci-theme-argon + Copyright 2020 Jerryk + + Have a bug? Please create an issue here on GitHub! + https://github.com/jerrykuku/luci-theme-argon/issues + + luci-theme-bootstrap: + Copyright 2008 Steven Barth + Copyright 2008-2016 Jo-Philipp Wich + Copyright 2012 David Menting + + MUI: + https://github.com/muicss/mui + + Argon Theme + https://demos.creative-tim.com/argon-dashboard/index.html + + Licensed to the public under the Apache License 2.0 +-%> + +<% + local sys = require "luci.sys" + local util = require "luci.util" + local http = require "luci.http" + local disp = require "luci.dispatcher" + local fs = require "nixio.fs" + local nutil = require "nixio.util" + local uci = require 'luci.model.uci'.cursor() + + local boardinfo = util.ubus("system", "board") + + local request = disp.context.path + local request2 = disp.context.request + + local category = request[1] + local cattree = category and disp.node(category) + + local leaf = request2[#request2] + + local tree = disp.node() + local node = disp.context.dispatched + + local categories = disp.node_childs(tree) + + local c = tree + local i, r + + -- tag all nodes leading to this page + for i, r in ipairs(request) do + if c.nodes and c.nodes[r] then + c = c.nodes[r] + c._menu_selected = true + end + end + + -- send as HTML5 + http.prepare_content("text/html") + + local function nodeurl(prefix, name, query) + local u = url(prefix, name) + if query then + u = u .. http.build_querystring(query) + end + return pcdata(u) + end + + local function render_tabmenu(prefix, node, level) + if not level then + level = 1 + end + + local childs = disp.node_childs(node) + if #childs > 0 then + if level > 2 then + write('
      ') + end + + local selected_node + local selected_name + local i, v + + for i, v in ipairs(childs) do + local nnode = node.nodes[v] + if nnode._menu_selected then + selected_node = nnode + selected_name = v + end + + if level > 2 then + write('
    • %s
    • ' %{ + v, (nnode._menu_selected or (node.leaf and v == leaf)) and 'active' or '', + nodeurl(prefix, v, nnode.query), + striptags(translate(nnode.title)) + }) + end + end + + if level > 2 then + write('
    ') + end + + if selected_node then + render_tabmenu(prefix .. "/" .. selected_name, selected_node, level + 1) + end + end + end + + local function render_submenu(prefix, node) + local childs = disp.node_childs(node) + if #childs > 0 then + write('
      ') + + for i, r in ipairs(childs) do + local nnode = node.nodes[r] + local title = pcdata(striptags(translate(nnode.title))) + + write('
    • %s
    • ' %{ + title, + nodeurl(prefix, r, nnode.query), + title + }) + end + + write('
    ') + end + end + + local function render_topmenu() + local childs = disp.node_childs(cattree) + if #childs > 0 then + write('') + end + end + + local function render_changes() + -- calculate the number of unsaved changes + if tree.nodes[category] and tree.nodes[category].ucidata then + local ucichanges = 0 + for i, j in pairs(require("luci.model.uci").cursor():changes()) do + for k, l in pairs(j) do + for m, n in pairs(l) do + ucichanges = ucichanges + 1; + end + end + end + + if ucichanges > 0 then + write('%s: %d' %{ + url(category, 'uci/changes'), + http.urlencode(http.formvalue('redir') or table.concat(disp.context.request, "/")), + translate('Unsaved Changes'), + ucichanges + }) + end + end + end + + math.randomseed(os.time()) + + -- Custom settings + local mode = 'normal' + local dark_css = fs.readfile('/www/luci-static/argon/css/dark.css') + local bar_color = '#5e72e4' + local primary, dark_primary, blur_radius, blur_radius_dark, blur_opacity + if fs.access('/etc/config/argon') then + primary = uci:get_first('argon', 'global', 'primary') + dark_primary = uci:get_first('argon', 'global', 'dark_primary') + blur_radius = uci:get_first('argon', 'global', 'blur') + blur_radius_dark = uci:get_first('argon', 'global', 'blur_dark') + blur_opacity = uci:get_first('argon', 'global', 'transparency') + blur_opacity_dark = uci:get_first('argon', 'global', 'transparency_dark') + mode = uci:get_first('argon', 'global', 'mode') + bar_color = mode == 'dark' and dark_primary or primary + end + + +-%> + + + + + + + <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> + - LuCI + + + + + + + + + + + + - LuCI"> + - LuCI"> + + + + + + + + + + + + + + + <% if node and node.css then %> + + <% end -%> + <% if css then %> + + <% end -%> + + + + + + + + +
    +
    + + <% render_topmenu() %> +
    +
    +
    +
    +
    + + <%=boardinfo.hostname or "?"%> +
    + <% render_changes() %> + +
    +
    +
    +
    +
    +
    +
    + <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> +
    +

    <%:No password set!%>

    +

    <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%> +

    + +
    + <%- end -%> + + + + <% if category then render_tabmenu(category, cattree) end %> + + + + + + diff --git a/luci-theme-argon/luasrc/view/themes/argon/header_login.htm b/luci-theme-argon/luasrc/view/themes/argon/header_login.htm new file mode 100644 index 00000000..43db26a4 --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/header_login.htm @@ -0,0 +1,136 @@ +<%# + Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI and Argon Template + + luci-theme-argon + Copyright 2020 Jerrykuku + + Have a bug? Please create an issue here on GitHub! + https://github.com/jerrykuku/luci-theme-argon/issues + + luci-theme-bootstrap: + Copyright 2008 Steven Barth + Copyright 2008-2016 Jo-Philipp Wich + Copyright 2012 David Menting + + MUI: + https://github.com/muicss/mui + + Argon Theme + https://demos.creative-tim.com/argon-dashboard/index.html + + Licensed to the public under the Apache License 2.0 +-%> + +<% + local sys = require "luci.sys" + local util = require "luci.util" + local http = require "luci.http" + local disp = require "luci.dispatcher" + + local fs = require "nixio.fs" + local nutil = require "nixio.util" + local uci = require 'luci.model.uci'.cursor() + local boardinfo = util.ubus("system", "board") + + local request = disp.context.path + local request2 = disp.context.request + + local category = request[1] + local cattree = category and disp.node(category) + + local leaf = request2[#request2] + + local tree = disp.node() + local node = disp.context.dispatched + + local categories = disp.node_childs(tree) + + local c = tree + local i, r + + math.randomseed(tonumber(tostring(os.time()):reverse():sub(1, 9))) + + -- Custom settings + local mode = 'normal' + local dark_css = fs.readfile('/www/luci-static/argon/css/dark.css') + local bar_color = '#5e72e4' + local primary, dark_primary, blur_radius, blur_radius_dark, blur_opacity + if fs.access('/etc/config/argon') then + primary = uci:get_first('argon', 'global', 'primary') + dark_primary = uci:get_first('argon', 'global', 'dark_primary') + blur_radius = uci:get_first('argon', 'global', 'blur') + blur_radius_dark = uci:get_first('argon', 'global', 'blur_dark') + blur_opacity = uci:get_first('argon', 'global', 'transparency') + blur_opacity_dark = uci:get_first('argon', 'global', 'transparency_dark') + mode = uci:get_first('argon', 'global', 'mode') + bar_color = mode == 'dark' and dark_primary or primary + end +-%> + + + + + + + <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI + + + + + + + + + + + + - LuCI"> + - LuCI"> + + + + + + + + + + + + + + + <% if node and node.css then %> + + <% end -%> + <% if css then %> + + <% end -%> + + + + + + + + \ No newline at end of file diff --git a/luci-theme-argon/luasrc/view/themes/argon/out_header_login.htm b/luci-theme-argon/luasrc/view/themes/argon/out_header_login.htm new file mode 100644 index 00000000..062d17fa --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/out_header_login.htm @@ -0,0 +1,12 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2019 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% + if not luci.dispatcher.context.template_header_sent then + include("themes/" .. theme .. "/header_login") + luci.dispatcher.context.template_header_sent = true + end +%> diff --git a/luci-theme-argon/luasrc/view/themes/argon/sysauth.htm b/luci-theme-argon/luasrc/view/themes/argon/sysauth.htm new file mode 100644 index 00000000..1cd8ef12 --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/sysauth.htm @@ -0,0 +1,186 @@ +<%# + Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI and Argon Template + + luci-theme-argon + Copyright 2021 Jerryk + + Have a bug? Please create an issue here on GitHub! + https://github.com/jerrykuku/luci-theme-argon/issues + + luci-theme-bootstrap: + Copyright 2008 Steven Barth + Copyright 2008-2016 Jo-Philipp Wich + Copyright 2012 David Menting + + MUI: + https://github.com/muicss/mui + + Argon Theme + https://demos.creative-tim.com/argon-dashboard/index.html + + Licensed to the public under the Apache License 2.0 +-%> + +<%+header_login%> +<% + local util = require "luci.util" + local fs = require "nixio.fs" + local nutil = require "nixio.util" + local json = require "luci.jsonc" + local sys = require "luci.sys" + local uci = require 'luci.model.uci'.cursor() + + -- Fetch Local Background Media + + local function glob(...) + local iter, code, msg = fs.glob(...) + if iter then + return nutil.consume(iter) + else + return nil, code, msg + end + end + + + local imageTypes = " jpg png gif webp " + local videoTypes = " mp4 webm " + local allTypes = imageTypes .. videoTypes + local function fetchMedia(path, themeDir) + local backgroundTable = {} + local backgroundCount = 0 + for i, f in ipairs(glob(path)) do + attr = fs.stat(f) + if attr then + local ext = fs.basename(f):match(".+%.(%w+)$") + if ext ~= nil then + ext = ext:lower() + end + if ext ~= nil and string.match(allTypes, " "..ext.." ") ~= nil then + local bg = {} + bg.type = ext + bg.url = themeDir .. fs.basename(f) + table.insert(backgroundTable, bg) + backgroundCount = backgroundCount + 1 + end + end + end + return backgroundTable, backgroundCount + end + local function selectBackground(themeDir) + local bgUrl = media .. "/img/bg1.jpg" + local backgroundType = "Image" + local mimeType = "" + + if fs.access("/etc/config/argon") then + local online_wallpaper = uci:get_first('argon', 'global', 'online_wallpaper') or (uci:get_first('argon', 'global', 'bing_background') == '1' and 'bing') + if (online_wallpaper and online_wallpaper ~= "none") then + local picurl = sys.exec("/usr/libexec/argon/online_wallpaper") + if (picurl and picurl ~= '') then + return picurl, "Image", "" + end + end + end + + local backgroundTable, backgroundCount = fetchMedia("/www" .. themeDir .. "*", themeDir) + if ( backgroundCount > 0 ) then + local currentBg = backgroundTable[math.random(1, backgroundCount)] + bgUrl = currentBg.url + if (string.match(videoTypes, " "..currentBg.type.." ") ~= nil) then + backgroundType = "Video" + mimeType = "video/" .. currentBg.type + end + end + + return bgUrl, backgroundType, mimeType + end + + local boardinfo = util.ubus("system", "board") + local themeDir = media .. "/background/" + local bgUrl, backgroundType, mimeType = selectBackground(themeDir) +%> + +