diff --git a/content/writing/hitchhikers-guide-to-a-safe-and-free-internet.md b/content/writing/hitchhikers-guide-to-a-safe-and-free-internet.md
@@ -0,0 +1,473 @@
+---
+title: "The Hitchhiker's Guide to a Safe and Free Internet"
+titleKo: "안전하고 자유로운 인터넷을 여행하는 히치하이커를 위한 안내서"
+date: 2026-07-20
+deck: ""
+type:
+tags: []
+draft:
+---
+> ℹ️ **About the example values**: **The server IP (`203.0.113.10`), the camouflage SNI domain (`www.example.jp`), the Reality public key, the shortId and the client UUID in this post are all documentation placeholders** (the IP comes from `203.0.113.0/24`, the range RFC 5737 reserves for documentation, and `example.jp` is a domain JPRS reserves for documentation). If you build this yourself, replace them with your own values. **Never publish your private keys (privateKey/secretKey).** **The certificate and SNI bytes in the PoC are illustrative values based on this example domain** (in practice, the genuine certificate of whichever camouflage domain you choose comes back unchanged). On the other hand, **the exit IP, the performance numbers and the traffic flows are real measurements taken from a live setup**, and the exit IP belongs to a Cloudflare WARP range shared by a huge number of users, so it identifies neither the server nor any individual.
+
+## 1. A journey toward using the internet freely
+
+The motivation is simple: **I want to use the internet safely, freely and anonymously.** So I built a proxy system with VLESS + Xray + Reality + WARP, and this post is based on three months of running it.
+
+Internet regulation in Korea gets tighter every year — blocking has already gone past the DNS level to **reading the destination name (SNI) in plaintext**, and its scope keeps widening. Nor is this only a Korean story. China's Great Firewall (GFW) and Russia's "sovereign internet" are much further down the same road. What plays out in every one of these places is an endless **battle between spear and shield** — someone gets around a restriction, a new restriction appears to stop that, and then a way around that one appears. There is a hint in that.
+
+First, you need to know how modern censorship works. Censorship today is not a simple blacklist along the lines of "block this domain." ISP middleboxes **judge traffic by its "shape"**:
+
+1. **Packet signatures** — they identify a protocol's unique fingerprint (WireGuard's handshake has a fixed structure, so it is caught in one shot).
+2. **Plaintext SNI** — they read the destination name of a TLS connection as-is.
+3. **Behavioral patterns** — they flag long-lived sessions to unknown IPs that don't look like browsing as anomalies.
+
+The signs are already here. Run a self-hosted VPN in Korea for a few days and **only the persistent TLS sessions get picked out** and dropped (EOF), while WireGuard and OpenVPN are often blocked right at the handshake. It isn't a bandwidth problem; it's that the traffic's "shape" differs from an ordinary user's.
+
+So the goal is clear.
+
+> **"When a censor looks at my traffic, it must not differ by a single bit from an ordinary person viewing a well-known site over HTTPS."**
+
+What creates this "indistinguishability" is **Reality**. And to erase **who is connecting from where** as well, the final exit is anonymized once more through **Cloudflare WARP**. All so that I can just use the internet, without being watched or controlled by anyone.
+
+> 📎 **Reference** — [*How I Hid My VPN*](https://youtu.be/v7Pal3AQyVM)
+
+---
+
+## 2. Overall architecture
+
+```mermaid
+flowchart LR
+ subgraph KR["🇰🇷 Korea · KT line (exposed to DPI)"]
+ C["Client<br/>sing-box · TUN<br/>uTLS = chrome"]
+ end
+ subgraph JP["🇯🇵 AWS Tokyo · ap-northeast-1"]
+ X["Xray server<br/>VLESS + Reality :443<br/>camouflage SNI = www.example.jp"]
+ end
+ subgraph WP["☁️ Cloudflare WARP"]
+ W["WARP edge · NRT<br/>AS13335<br/>exit IP 104.28.243.105"]
+ end
+ NET(("🌐 Internet<br/>ordinary destinations"))
+
+ C ==>|"① Reality TLS 1.3 handshake<br/>to DPI it looks like 'Chrome viewing example.jp'"| X
+ X ==>|"② WireGuard / WARP<br/>(default route)"| W ==> NET
+
+ classDef censored stroke:#e11d48,stroke-width:3px;
+ class C,X censored;
+```
+
+**Two key design choices:**
+
+1. **The censored leg (client ↔ Tokyo server)** is wrapped in Reality and disguised as *normal TLS 1.3 to a well-known Japanese site*.
+2. WireGuard (WARP) is used **only on the uncensored leg (Tokyo server ↔ Cloudflare)**. → This takes the benefit of "laundering the exit IP" without exposing WireGuard's fingerprint problem to the censoring network.
+
+> **Why put WARP at the end?** The IP the final destination sees becomes **Cloudflare (AS13335)** instead of **AWS (AS16509)**. AWS ranges are easily blocked as "data center = suspected bot/proxy," but WARP edge IPs are consumer ranges shared by huge numbers of real users, so their reputation is good. The point is that **not even my server's IP is exposed to the final destination.**
+
+---
+
+## 3. The weaknesses of a conventional WireGuard VPN
+
+WireGuard is fast, small in code and cryptographically excellent, but **as a censorship circumvention tool it has fatal weaknesses**.
+
+| Weakness | Description | What DPI does |
+|---|---|---|
+| **Fixed handshake fingerprint** | The Handshake Initiation is **exactly 148 bytes**, followed by a Responder message of **exactly 92 bytes**. The first 4 bytes of every packet carry the message type (`0x01` init, `0x02` response …) in the clear. There is no obfuscation at all. | A single rule, `148-byte → 92-byte UDP flow`, catches almost every WireGuard handshake |
+| **UDP-based** | Many censoring and corporate networks throttle 443/UDP outright, or drop unidentified UDP that isn't QUIC. | Blocks "high-volume, long-lived UDP" itself without even knowing the protocol |
+| **Vulnerable to active probing** | Anyone can throw a WG handshake at it, and the server either responds or stays silent → the response pattern identifies the server. | Fires probe packets at a suspicious IP:port → confirms a VPN server, then blacklists it |
+| **No camouflage or cover traffic** | There is no notion of SNI camouflage, certificate camouflage or mimicking normal traffic at all. Even moved to port 443, the payload isn't TLS, so it gives itself away immediately. | "Port 443 but not TLS" → flagged as an anomaly |
+| **Identified instantly once exposed** | The protocol's identity shows plainly in the traffic, so once an endpoint is singled out it stays blocked for good. | Listed in IP reputation databases |
+
+As of 2026, commercial DPI appliances from Sandvine, Allot and Huawei **ship with WireGuard detection rules built in**, and the latest middleboxes identify WireGuard without decrypting it, from as few as 100 packets, using ML classification based on timing and entropy. The real-world blocking record is grim — **vanilla WireGuard succeeds about 12% of the time in Russia, suffers 98% packet loss in Iran, and is caught within seconds by China's GFW**, and more than ten other countries, including Turkey, Belarus and Myanmar, block or throttle it at the DPI level.
+
+> This is why "obfuscated WireGuard" derivatives such as **AmneziaWG** have appeared. They pad vanilla WireGuard's fixed packet sizes with random junk and variable headers to scatter the signature, which is itself evidence that the industry has conceded *"WireGuard gets caught if you use it as-is."* The Reality setup in this post goes one step further: it looks not like **"something obfuscated" but like "plain, normal TLS itself."**
+
+**In short**: WireGuard connects by shouting *"I am WireGuard!"* The censor only needs ears to hear it. Reality, by contrast, says *"I'm just someone browsing example.jp,"* and **presents the real example.jp TLS certificate as proof** (demonstrated in sections 4 and 5 below).
+
+---
+
+## 4. Components
+
+### 4.1 VLESS
+
+VLESS is the successor to VMess, and it **strips out the built-in encryption and timestamp authentication.** Why? Because the outside will be wrapped in TLS 1.3 (Reality) anyway, so double encryption is a waste of CPU. The VLESS header is no more than a **thin 25–50-byte routing header** made up of roughly a version byte, a UUID, a command and the destination address (compared with 100+ bytes for OpenVPN). On top of that, the `xtls-rprx-vision` flow suppresses the telltale record-size pattern that TLS-in-TLS produces.
+
+> 📎 **Reference** — An article that dissects VLESS byte by byte as a "minimal TLS 1.3 wrapper" and lays out DPI's three main detection techniques (protocol fingerprinting, statistical analysis, active probing): [habr.com/en/articles/990144](https://habr.com/en/articles/990144/) (sections 1 and 3).
+
+### 4.2 Xray-core — the server engine
+
+What actually runs on the server is Xray.
+
+```console
+$ xray version
+Xray 26.3.27 (Xray, Penetrates Everything.) — go1.26.1 linux/amd64
+$ ps -o etime,cmd -C xray
+ ELAPSED CMD
+30-13:49:26 /usr/local/bin/xray run -config /usr/local/etc/xray/config.json # 30 days without interruption
+```
+
+It has been running for 30 days without interruption as `nobody`.
+
+### 4.3 Reality — the heart of this setup
+
+The fundamental problem with conventional TLS camouflage (TLS + a web server, e.g. Trojan) is that **"the certificate I present is not the real thing."** If a censor digs through the Certificate Transparency logs or verifies the certificate chain, the self-made domain gives itself away.
+
+**Reality's change of approach:**
+
+- My server **does not issue or present a certificate of its own.**
+- Instead, it **"borrows" a real, well-known site (here, `www.example.jp`).**
+- When a legitimate client (one holding the right x25519 key + shortId) connects → Xray operates in proxy mode.
+- **When anyone without the key (= a censor's active probe) connects → Xray forwards that handshake untouched to the real `www.example.jp:443`**, and the client receives example.jp's genuine certificate.
+
+Here is that "legitimate user ↔ censor probe" branch as a diagram:
+
+```mermaid
+sequenceDiagram
+ autonumber
+ participant P as Client / censor probe
+ participant R as Xray Reality server :443
+ participant N as Real www.example.jp
+ alt Holds the right key (legitimate user)
+ P->>R: ClientHello + embedded x25519 · shortId · UUID
+ R->>R: Key verified → proxy mode
+ R-->>P: Disguised TLS session established → proxy tunnel open
+ else No key (censor's active probe)
+ P->>R: ClientHello (no valid key)
+ R->>N: Forwards the handshake untouched to the real example.jp
+ N-->>P: Real example.jp certificate (Verification OK)
+ Note over P: Verdict "just an example.jp server" → detection fails
+ end
+```
+
+In other words, however hard the censor pokes at it, the only conclusion it can reach is **"this is just an example.jp server."**
+
+> 📎 **Reference (how Reality works)** — the official implementation [XTLS/REALITY](https://github.com/XTLS/REALITY), the documentation on SNI fallback camouflage [Project X — Fallbacks with SNI](https://xtls.github.io/en/document/level-1/fallbacks-with-sni.html), and a source-level analysis [How REALITY works (ObjShadow)](https://objshadow.pages.dev/en/posts/how-reality-works/). For a discussion of defending against active probing, see [Xray-core Discussion #2623](https://github.com/XTLS/Xray-core/discussions/2623).
+
+**Server inbound configuration:**
+
+```jsonc
+{
+ "tag": "vless-reality-in",
+ "listen": "0.0.0.0", "port": 443,
+ "protocol": "vless",
+ "settings": {
+ "clients": [{ "id": "<client-UUID>", "flow": "xtls-rprx-vision" }],
+ "decryption": "none"
+ },
+ "streamSettings": {
+ "network": "tcp",
+ "security": "reality",
+ "realitySettings": {
+ "dest": "www.example.jp:443", // camouflage target (handshakes really are forwarded here)
+ "serverNames": ["www.example.jp"], // allowed SNI
+ "privateKey": "<xray-x25519-private-key>", // never publish
+ "shortIds": ["", "0123456789abcdef"]
+ }
+ },
+ "sniffing": { "enabled": true, "destOverride": ["http","tls","quic"], "routeOnly": true }
+}
+```
+
+> **How to choose the camouflage target (dest)** — Not just any site will do. It looks natural only if ① it supports TLS 1.3 + X25519 and ② it sits in **the same cloud/ASN/region** as the server. For a server on AWS Tokyo, picking **a large Japanese site hosted on AWS (→ whose certificate issuer shows up as `Amazon`)** makes the camouflage far more natural (same cloud and ASN as the server). This post writes the camouflage domain as the documentation example `www.example.jp`. In practice, when KT's DPI flagged the proxy IP, matching the SNI to **a host in the same region and ASN as the server** was decisive for stability.
+
+### 4.4 WARP outbound — laundering the exit
+
+The server's default exit is not `direct` (which exposes the AWS IP) but **Cloudflare WARP (userspace WireGuard)**.
+
+```jsonc
+{
+ "tag": "warp-out",
+ "protocol": "wireguard",
+ "settings": {
+ "secretKey": "<WARP-private-key>",
+ "address": ["172.16.0.2/32", "2606:4700:110:84e7:...../128"],
+ "peers": [{
+ "publicKey": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=",
+ "endpoint": "engage.cloudflareclient.com:2408",
+ "allowedIPs": ["0.0.0.0/0", "::/0"],
+ "keepAlive": 25
+ }],
+ "mtu": 1280
+ }
+}
+```
+
+The important point here: **this WireGuard is a userspace implementation inside Xray**, so it does not show up as a kernel interface (`wg show`), and it **flows only on the AWS ↔ Cloudflare leg (the uncensored overseas leg)**. That is, it takes only the benefit of "exit IP = Cloudflare" while never exposing WireGuard's fingerprint problem to Korea's censoring network.
+
+### 4.5 Routing — hardening
+
+```jsonc
+"routing": {
+ "rules": [
+ { "ip": ["geoip:private"], "outboundTag": "block" }, // block SSRF / internal network scans
+ { "protocol": ["bittorrent"], "outboundTag": "block" }, // prevent abuse (protects IP reputation)
+ { "ip": ["203.0.113.10/32"], "port": "22", "outboundTag": "loopback-ssh" }, // for administration
+ { "ip": ["203.0.113.10/32"], "port": "8080", "outboundTag": "loopback-speedtest" },
+ { "network": "tcp,udp", "outboundTag": "warp-out" } // everything else → WARP
+ ]
+}
+```
+
+- **`geoip:private` → block**: shuts out SSRF-style scanning of internal networks through the proxy at the source.
+- **bittorrent → block**: keeps torrent-driven abuse reports from killing the reputation of the WARP/AWS IPs.
+- **loopback-ssh**: instead of opening a separate port, the server's own port 22 is reached from inside the proxy tunnel (so admin traffic stays disguised too).
+
+### 4.6 Client — sing-box (TUN + FakeIP)
+
+The client runs sing-box in TUN mode, transparently swallowing **all of the system's traffic**.
+
+```jsonc
+{
+ "outbounds": [{
+ "type": "vless",
+ "server": "203.0.113.10", "server_port": 443,
+ "uuid": "<client-UUID>",
+ "flow": "xtls-rprx-vision",
+ "tls": {
+ "enabled": true,
+ "server_name": "www.example.jp",
+ "reality": { "enabled": true,
+ "public_key": "<server-Reality-public-key>",
+ "short_id": "0123456789abcdef" },
+ "utls": { "enabled": true, "fingerprint": "chrome" } // ← disguise as Chrome
+ }
+ }],
+ "dns": { "servers": [
+ { "tag": "proxy-dns", "type": "https", "server": "1.1.1.1", "detour": "proxy" }, // DoH on the far side of the proxy
+ { "tag": "fakeip", "type": "fakeip", "inet4_range": "198.18.0.0/15" } // prevents DNS leaks
+ ]}
+}
+```
+
+Two things matter most here.
+
+- **`utls: chrome`** — generates a TLS ClientHello identical to a real Chrome browser's fingerprint (proven with packets later on). uTLS is the [refraction-networking/utls](https://github.com/refraction-networking/utls) library, which imitates a specific browser's fingerprint in place of the telltale fingerprint of Go's standard TLS.
+- **FakeIP + DoH-over-proxy** — domains are never resolved locally. A fake `198.18.x` IP is returned immediately and the real resolution happens on the far side of the proxy, so **DNS leakage is zero**.
+
+---
+
+## 5. PoC — proof at the packet level
+
+**Real commands and real responses.** Each test checks whether the setup holds up against one of the censor's three approaches: ① tracing the exit IP, ② active probing, ③ passive packet observation.
+
+### PoC-1. Confirming the exit IP is laundered
+
+```console
+$ curl -s https://api.ipify.org
+104.28.243.105
+
+$ curl -s https://www.cloudflare.com/cdn-cgi/trace | grep -E '^(ip|warp|colo|loc)='
+ip=2a09:bac5:4305:dc::16:175
+colo=NRT
+loc=JP
+warp=on
+
+$ curl -s "http://ip-api.com/line/?fields=query,country,city,isp,as"
+104.28.243.105
+Japan
+Tokyo
+Cloudflare, Inc.
+AS13335 Cloudflare, Inc.
+```
+
+**Interpretation:**
+
+| Viewpoint | Actual value | What the destination sees |
+|---|---|---|
+| My real location | Korea, KT | ❌ Not visible |
+| Proxy server | `203.0.113.10` (AWS, **AS16509**, Tokyo) | ❌ Not visible |
+| **Exit the destination sees** | — | ✅ `104.28.243.105` (**Cloudflare AS13335**, Tokyo) |
+
+`warp=on` confirms the traffic goes through WARP. It passed through three hops (Korea → proxy server → WARP), yet the final destination sees only **a Cloudflare consumer range**. **The proxy server's IP is never exposed.**
+
+### PoC-2. Resisting active probing — "poke it all you like, it's just example.jp"
+
+Suppose a censor connects directly to the suspicious IP `203.0.113.10:443`, using openssl with no credentials:
+
+```console
+$ echo | openssl s_client -connect 203.0.113.10:443 -servername www.example.jp 2>/dev/null \
+ | openssl x509 -noout -subject -issuer -dates
+subject=CN=www.example.jp
+issuer=C=US, O=Amazon, CN=Amazon RSA 2048 M01
+notBefore=Jan 19 00:00:00 2026 GMT
+notAfter=Jan 14 23:59:59 2027 GMT
+
+# For comparison: connecting directly to the real www.example.jp
+$ echo | openssl s_client -connect www.example.jp:443 -servername www.example.jp 2>/dev/null \
+ | openssl x509 -noout -subject -issuer
+subject=CN=www.example.jp
+issuer=C=US, O=Amazon, CN=Amazon RSA 2048 M01
+
+# TLS parameters
+$ echo | openssl s_client -connect 203.0.113.10:443 -servername www.example.jp 2>/dev/null \
+ | grep -E 'Protocol|Cipher|Verification'
+Verification: OK
+New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256
+Protocol: TLSv1.3
+```
+
+**Interpretation: identical in every respect.**
+
+- The certificate the proxy server returned: `CN=www.example.jp`, issued by `Amazon RSA 2048 M01`.
+- The certificate the real example.jp returns: **exactly the same.**
+- `Verification: OK` — a self-made certificate would have failed chain verification, but this one passes because it is **the real certificate of the real example.jp**.
+
+However much a censor actively probes this IP, the only conclusion it gets is **"this is an example.jp server."** Had it been a WireGuard server, a single probe would have given it away.
+
+### PoC-3. Passive observation — the bytes DPI actually reads on the wire
+
+This time, suppose the censor simply eavesdrops on packets in the middle of the line. I capture the traffic leaving the client's physical NIC (`eth0`) for the server with `tshark`, and meanwhile fire curl at several sites to trigger **new upstream connections (= new Reality handshakes)**.
+
+```console
+$ tshark -i eth0 -f "host 203.0.113.10 and tcp port 443" -w reality.pcap &
+$ for h in example.com www.wikipedia.org api.ipify.org neverssl.com; do
+ curl -s -o /dev/null "https://$h/?cachebust=$RANDOM"; done
+```
+
+**(3-a) The SNI and TLS version DPI sees:**
+
+```console
+$ tshark -r reality.pcap -Y "tls.handshake.type==1" \
+ -T fields -e frame.number -e ip.dst -e tcp.dstport \
+ -e tls.handshake.extensions_server_name -e tls.handshake.ja3_full
+```
+
+| frame | ip.dst | port | SNI | Extension order |
+|---|---|---|---|---|
+| 31 | 203.0.113.10 | 443 | **www.example.jp** | `0-45-17613-16-11-35-18-5-27-51-13-23-10-65037-65281-43` |
+| 73 | 203.0.113.10 | 443 | **www.example.jp** | `18-35-65281-16-11-17613-65037-5-13-43-51-45-10-23-0-27` |
+| 118 | 203.0.113.10 | 443 | **www.example.jp** | `16-23-0-51-13-10-18-5-11-27-17613-45-65037-43-35-65281` |
+| 186 | 203.0.113.10 | 443 | **www.example.jp** | `65037-23-43-27-16-51-45-18-5-13-35-10-0-65281-11-17613` |
+
+Two observations:
+
+1. **Every SNI is `www.example.jp`** — the only destination hint DPI can read in plaintext is "example.jp." I actually went to example.com, Wikipedia and ipify, but **none of that leaves a trace on the wire.**
+2. **The extension order is shuffled on every connection** — this is no accident; it is uTLS faithfully imitating **the real behavior of Chrome 110+ (randomized extension order)**. The leading cipher suites, `4865-4866-4867` (the three TLS 1.3 AEADs), match Chrome too. In other words, the JA3 fingerprint changes with every connection, so **"fixed-fingerprint matching" can never catch it.** The extension list even carries Chrome-specific extensions such as `65037` (GREASE ECH), `17613` (ALPS) and `27` (compress_certificate).
+
+**(3-b) The wire bytes — the SNI hostname sits there in plaintext:**
+
+```console
+# Hostname bytes of the SNI extension inside the ClientHello (frame 31)
+0e 77 77 77 2e 65 78 61 6d 70 6c 65 2e 6a 70 -> "www.example.jp" (0e = length 14)
+```
+
+After the length byte `0e` (14), `77 77 77 2e 65 78 61 6d 70 6c 65 2e 6a 70` = **"www.example.jp"** is carried as-is, in plaintext. **This is everything DPI reads off the line** — byte for byte, it is identical to an ordinary Chrome user opening example.jp.
+
+### PoC-4. Performance
+
+Even across three hops (Korea → Tokyo Reality → Cloudflare WARP), real-world performance is solid.
+
+```console
+$ for i in 1 2 3; do curl -s -o /dev/null \
+ -w "ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
+ https://www.cloudflare.com/cdn-cgi/trace; done
+ttfb=0.234s total=0.235s
+ttfb=0.258s total=0.259s
+ttfb=0.258s total=0.258s
+
+$ curl -s -o /dev/null -w "speed=%{speed_download} bytes/s\n" \
+ "https://speed.cloudflare.com/__down?bytes=10000000"
+speed=7615746 bytes/s # ≈ 61 Mbps (10MB in 1.31s)
+```
+
+- **TTFB ≈ 235–260 ms** (including the Korea↔Tokyo round trip and the WARP hop). No noticeable impact on browsing.
+- **Download ≈ 61 Mbps** (single stream, 3 hops). That's thanks to VLESS dropping double encryption and `xtls-rprx-vision` cutting overhead.
+
+---
+
+## 6. The whole journey (end to end)
+
+Here is what actually happens when you run `curl https://example.com`, as a sequence:
+
+```mermaid
+sequenceDiagram
+ autonumber
+ participant A as curl / app
+ participant S as sing-box (TUN)
+ participant X as Xray Tokyo :443
+ participant W as WARP / Cloudflare
+ participant D as example.com
+
+ A->>S: DNS lookup example.com
+ S-->>A: FakeIP 198.18.x.x (no real resolution → zero leakage)
+ A->>S: TCP → 198.18.x.x:443 (absorbed by TUN)
+ Note over S: Routing decision = proxy (everything proxied)
+ S->>X: Reality handshake<br/>SNI=www.example.jp · uTLS=chrome
+ Note over S,X: ⚠ The only scene DPI sees<br/>'a Chrome user viewing example.jp'
+ S->>X: VLESS header: real destination = example.com:443
+ X->>W: warp-out (WireGuard inside Xray)
+ W->>D: Connects from exit 104.28.243.105
+ D-->>W: Response
+ W-->>X: Response
+ X-->>S: Response
+ S-->>A: Response (curl done)
+```
+
+Step by step:
+
+1. **DNS** — sing-box intercepts `example.com` and immediately returns the **FakeIP `198.18.x.x`** (no real resolution → zero leakage).
+2. **TUN absorption** — `singbox-tun` swallows the packets headed for `198.18.x.x`.
+3. **Routing decision** — `final: proxy`; everything goes to the proxy.
+4. **Reality handshake** — sing-box connects to the server at `203.0.113.10:443`. **It uses uTLS to generate a ClientHello with Chrome's fingerprint**, with SNI=`www.example.jp`. The shortId and UUID ride along in the x25519 key exchange to prove to the server that this is "a legitimate client." ← **DPI sees this only as a connection to example.jp.**
+5. **VLESS routing** — inside the tunnel, the client tells the server "the real destination is example.com:443."
+6. **Server routing** — Xray picks `warp-out`.
+7. **WARP egress** — Xray's internal WireGuard hands the packets to the Cloudflare edge (NRT).
+8. **Final exit** — Cloudflare connects to example.com from `104.28.243.105`. **The origin sees only a Cloudflare IP.**
+9. **Return path** — the response travels back in reverse, 8→1, and reaches curl.
+
+What the censor sees: **a single scene, step 4**, and even that is "a Chrome user viewing example.jp."
+
+---
+
+## 7. Limitations and operational considerations
+
+The weaknesses of this setup, and what could be improved.
+
+- **Traffic correlation**: if a censor can see both ends of the line, timing and volume correlation still leave room for inference. Reality hides only the content and the destination; it does not stop metadata correlation.
+- **Camouflage domain risk**: if the site chosen as `dest` goes down or changes its TLS stack, the camouflage starts to look off. Staying in the same ASN/region as the server matters.
+- **IP reputation**: WARP exits are shared IPs, so some sites block WARP ranges or show them CAPTCHAs. That is why torrents are blocked, to manage IP reputation.
+- **More sophisticated active probes**: a censor could look statistically for "behavior a legitimate example.jp user would not show" (e.g., connecting and then never sending an HTTP request). Reality defends against this well, but the theoretical attack surface is there.
+- **Single point of failure**: one server in Tokyo. Multiple servers with automatic failover are future work.
+
+Even so, **from a censorship-circumvention standpoint it is overwhelmingly better than plain WireGuard/OpenVPN**. Where WireGuard "gives itself away in the first packet," the PoCs above demonstrate that this setup **cannot be told apart from normal traffic at any layer — packets, certificates or fingerprints.**
+
+---
+
+## 8. Conclusion
+
+> **The essence of censorship circumvention is not encryption but "indistinguishability."**
+
+WireGuard encrypts traffic perfectly, yet it gets caught because it cannot hide *the very fact that it is encrypted*. Reality survives the opposite way: by **turning my traffic into something the censor can never block (ordinary TLS 1.3 to a well-known site)**. Put WARP on top, and even the exit IP gets laundered.
+
+- **Exit IP** → Cloudflare (even my server's IP is hidden) ✅
+- **Active probing** → answered with the real example.jp certificate ✅
+- **Passive observation** → plaintext SNI is `www.example.jp`, with a Chrome uTLS fingerprint (shuffled per connection) ✅
+- **Performance** → TTFB 250 ms, 61 Mbps ✅
+
+The fight against DPI comes down to a game of *"how closely does my traffic resemble the normal traffic a censor can't bring itself to cut?"* — and this setup is designed to win that game.
+
+---
+
+## References
+
+**Concepts**
+- 🎬 [*How I Hid My VPN* (YouTube)](https://youtu.be/v7Pal3AQyVM) — an introduction to the idea from a "concealment, not encryption" angle
+- 📄 [VLESS dissected in depth (Habr #990144)](https://habr.com/en/articles/990144/) — analyzes VLESS as a minimal TLS wrapper; DPI's three main detection techniques
+
+**Reality / XTLS**
+- [XTLS/REALITY (official repository)](https://github.com/XTLS/REALITY)
+- [Project X — Fallbacks with SNI (official documentation)](https://xtls.github.io/en/document/level-1/fallbacks-with-sni.html)
+- [How REALITY works — a source-level analysis (ObjShadow)](https://objshadow.pages.dev/en/posts/how-reality-works/)
+- [Defending against active probing — Xray-core Discussion #2623](https://github.com/XTLS/Xray-core/discussions/2623)
+- [A deep dive into VLESS + Reality + XTLS Vision (Hakim Mhioul)](https://www.mhioul.com/blog/vless-reality-xtls-deep-dive)
+
+**Client / libraries / exit**
+- [sing-box official documentation](https://sing-box.sagernet.org)
+- [uTLS — refraction-networking/utls](https://github.com/refraction-networking/utls) (browser TLS fingerprint camouflage)
+- [Cloudflare WARP client documentation](https://developers.cloudflare.com/warp-client/)
+
+**WireGuard's detectability (the control group)**
+- [The Imitation Game — making WireGuard invisible to DPI (NT Kernel)](https://www.ntkernel.com/the-imitation-game-how-modern-solutions-make-wireguard-invisible-to-dpi/)
+- [VLESS vs WireGuard/Shadowsocks/Trojan — DPI and speed compared (Proxy Poland)](https://proxypoland.com/blog/vless-vs-wireguard-shadowsocks-trojan-comparison)
+- [AmneziaWG 2.0 — self-hosting an obfuscated WireGuard (DEV)](https://dev.to/bivlked/amneziawg-20-self-host-an-obfuscated-wireguard-vpn-that-bypasses-dpi-4692)
+- [How DPI detects and blocks VPNs (CrazyPrivacy)](https://www.crazyprivacy.com/2025/10/27/understanding-deep-packet-inspection-dpi-how-isps-detect-and-block-vpn-traffic/)
+
+---
diff --git a/src/lib/diagrams/20303f75fd196714.svg b/src/lib/diagrams/20303f75fd196714.svg
@@ -0,0 +1 @@
+<svg id="mmd-20303f75fd196714" width="1196" xmlns="http://www.w3.org/2000/svg" height="1118" viewBox="-50 -10 1196 1118" role="graphics-document document" aria-roledescription="sequence"><g><rect x="946" y="1032" fill="#eaeaea" stroke="#666" width="150" height="65" name="D" rx="3" ry="3" class="actor actor-bottom"></rect><text x="1021" y="1064.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="1021" dy="0">example.com</tspan></text></g><g><rect x="746" y="1032" fill="#eaeaea" stroke="#666" width="150" height="65" name="W" rx="3" ry="3" class="actor actor-bottom"></rect><text x="821" y="1064.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="821" dy="-8">WARP /</tspan></text><text x="821" y="1064.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="821" dy="8">Cloudflare</tspan></text></g><g><rect x="546" y="1032" fill="#eaeaea" stroke="#666" width="150" height="65" name="X" rx="3" ry="3" class="actor actor-bottom"></rect><text x="621" y="1064.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="621" dy="0">Xray Tokyo :443</tspan></text></g><g><rect x="200" y="1032" fill="#eaeaea" stroke="#666" width="150" height="65" name="S" rx="3" ry="3" class="actor actor-bottom"></rect><text x="275" y="1064.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="275" dy="0">sing-box (TUN)</tspan></text></g><g><rect x="0" y="1032" fill="#eaeaea" stroke="#666" width="150" height="65" name="A" rx="3" ry="3" class="actor actor-bottom"></rect><text x="75" y="1064.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="75" dy="0">curl / app</tspan></text></g><g><line id="actor7" x1="1021" y1="65" x2="1021" y2="1032" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="D" data-et="life-line" data-id="D"></line><g id="root-7" data-et="participant" data-type="participant" data-id="D"><rect x="946" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="D" rx="3" ry="3" class="actor actor-top"></rect><text x="1021" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="1021" dy="0">example.com</tspan></text></g></g><g><line id="actor6" x1="821" y1="65" x2="821" y2="1032" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="W" data-et="life-line" data-id="W"></line><g id="root-6" data-et="participant" data-type="participant" data-id="W"><rect x="746" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="W" rx="3" ry="3" class="actor actor-top"></rect><text x="821" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="821" dy="-8">WARP /</tspan></text><text x="821" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="821" dy="8">Cloudflare</tspan></text></g></g><g><line id="actor5" x1="621" y1="65" x2="621" y2="1032" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="X" data-et="life-line" data-id="X"></line><g id="root-5" data-et="participant" data-type="participant" data-id="X"><rect x="546" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="X" rx="3" ry="3" class="actor actor-top"></rect><text x="621" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="621" dy="0">Xray Tokyo :443</tspan></text></g></g><g><line id="actor4" x1="275" y1="65" x2="275" y2="1032" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="S" data-et="life-line" data-id="S"></line><g id="root-4" data-et="participant" data-type="participant" data-id="S"><rect x="200" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="S" rx="3" ry="3" class="actor actor-top"></rect><text x="275" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="275" dy="0">sing-box (TUN)</tspan></text></g></g><g><line id="actor3" x1="75" y1="65" x2="75" y2="1032" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="A" data-et="life-line" data-id="A"></line><g id="root-3" data-et="participant" data-type="participant" data-id="A"><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="A" rx="3" ry="3" class="actor actor-top"></rect><text x="75" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="75" dy="0">curl / app</tspan></text></g></g><style>#mmd-20303f75fd196714{font-family:'Lora','KoBody','KoFallback','LatinFallback',Georgia,'Times New Roman',serif;font-size:15px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mmd-20303f75fd196714 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mmd-20303f75fd196714 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mmd-20303f75fd196714 .error-icon{fill:#fffbf4;}#mmd-20303f75fd196714 .error-text{fill:#000000;stroke:#000000;}#mmd-20303f75fd196714 .edge-thickness-normal{stroke-width:1px;}#mmd-20303f75fd196714 .edge-thickness-thick{stroke-width:3.5px;}#mmd-20303f75fd196714 .edge-pattern-solid{stroke-dasharray:0;}#mmd-20303f75fd196714 .edge-thickness-invisible{stroke-width:0;fill:none;}#mmd-20303f75fd196714 .edge-pattern-dashed{stroke-dasharray:3;}#mmd-20303f75fd196714 .edge-pattern-dotted{stroke-dasharray:2;}#mmd-20303f75fd196714 .marker{fill:#605a4e;stroke:#605a4e;}#mmd-20303f75fd196714 .marker.cross{stroke:#605a4e;}#mmd-20303f75fd196714 svg{font-family:'Lora','KoBody','KoFallback','LatinFallback',Georgia,'Times New Roman',serif;font-size:15px;}#mmd-20303f75fd196714 p{margin:0;}#mmd-20303f75fd196714 .actor{stroke:#eed6aa;fill:#faedda;stroke-width:1;}#mmd-20303f75fd196714 rect.actor.outer-path[data-look="neo"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-20303f75fd196714 rect.note[data-look="neo"]{stroke:#a51c30;fill:#f7ebeb;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-20303f75fd196714 text.actor>tspan{fill:#000000;stroke:none;}#mmd-20303f75fd196714 .actor-line{stroke:#605a4e;}#mmd-20303f75fd196714 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mmd-20303f75fd196714 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#000000;}#mmd-20303f75fd196714 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#000000;}#mmd-20303f75fd196714 [id$="-arrowhead"] path{fill:#000000;stroke:#000000;}#mmd-20303f75fd196714 .sequenceNumber{fill:#fffbf4;}#mmd-20303f75fd196714 [id$="-sequencenumber"]{fill:#000000;}#mmd-20303f75fd196714 [id$="-crosshead"] path{fill:#000000;stroke:#000000;}#mmd-20303f75fd196714 .messageText{fill:#000000;stroke:none;}#mmd-20303f75fd196714 .labelBox{stroke:#eed6aa;fill:#faedda;filter:none;}#mmd-20303f75fd196714 .labelText,#mmd-20303f75fd196714 .labelText>tspan{fill:#000000;stroke:none;}#mmd-20303f75fd196714 .loopText,#mmd-20303f75fd196714 .loopText>tspan{fill:#000000;stroke:none;}#mmd-20303f75fd196714 .sectionTitle,#mmd-20303f75fd196714 .sectionTitle>tspan{fill:#000000;stroke:none;}#mmd-20303f75fd196714 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#eed6aa;fill:#eed6aa;}#mmd-20303f75fd196714 .note{stroke:#a51c30;fill:#f7ebeb;}#mmd-20303f75fd196714 .noteText,#mmd-20303f75fd196714 .noteText>tspan{fill:#000000;stroke:none;}#mmd-20303f75fd196714 .activation0{fill:#f5eee0;stroke:#eed6aa;}#mmd-20303f75fd196714 .activation1{fill:#f5eee0;stroke:#eed6aa;}#mmd-20303f75fd196714 .activation2{fill:#f5eee0;stroke:#eed6aa;}#mmd-20303f75fd196714 .actorPopupMenu{position:absolute;}#mmd-20303f75fd196714 .actorPopupMenuPanel{position:absolute;fill:#faedda;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mmd-20303f75fd196714 .actor-man circle,#mmd-20303f75fd196714 line{fill:#faedda;stroke-width:2px;}#mmd-20303f75fd196714 g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:#eed6aa;}#mmd-20303f75fd196714 .node .neo-node{stroke:#eed6aa;}#mmd-20303f75fd196714 [data-look="neo"].node rect,#mmd-20303f75fd196714 [data-look="neo"].cluster rect,#mmd-20303f75fd196714 [data-look="neo"].node polygon{stroke:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-20303f75fd196714 [data-look="neo"].swimlane.cluster rect{filter:none;}#mmd-20303f75fd196714 [data-look="neo"].node path{stroke:#eed6aa;stroke-width:1px;}#mmd-20303f75fd196714 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-20303f75fd196714 [data-look="neo"].node .neo-line path{stroke:#eed6aa;filter:none;}#mmd-20303f75fd196714 [data-look="neo"].node circle{stroke:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-20303f75fd196714 [data-look="neo"].node circle .state-start{fill:#000000;}#mmd-20303f75fd196714 [data-look="neo"].icon-shape .icon{fill:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-20303f75fd196714 [data-look="neo"].icon-shape .icon-neo path{stroke:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-20303f75fd196714 :root{--mermaid-font-family:'Lora','KoBody','KoFallback','LatinFallback',Georgia,'Times New Roman',serif;}#mmd-20303f75fd196714 .edgeLabel rect{opacity:1;}</style><g></g><defs><symbol id="mmd-20303f75fd196714-computer" width="24" height="24"><path transform="scale(.5)" d="M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"></path></symbol></defs><defs><symbol id="mmd-20303f75fd196714-database" fill-rule="evenodd" clip-rule="evenodd"><path transform="scale(.5)" d="M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"></path></symbol></defs><defs><symbol id="mmd-20303f75fd196714-clock" width="24" height="24"><path transform="scale(.5)" d="M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"></path></symbol></defs><defs><marker id="mmd-20303f75fd196714-arrowhead" refX="7.9" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M -1 0 L 10 5 L 0 10 z"></path></marker></defs><defs><marker id="mmd-20303f75fd196714-crosshead" markerWidth="15" markerHeight="8" orient="auto" refX="4" refY="4.5"><path fill="none" stroke="#000000" stroke-width="1pt" d="M 1,2 L 6,7 M 6,2 L 1,7" style="stroke-dasharray: 0, 0;"></path></marker></defs><defs><marker id="mmd-20303f75fd196714-filled-head" refX="15.5" refY="7" markerWidth="20" markerHeight="28" orient="auto"><path d="M 18,7 L9,13 L14,7 L9,1 Z"></path></marker></defs><defs><marker id="mmd-20303f75fd196714-sequencenumber" refX="15" refY="15" markerWidth="60" markerHeight="40" orient="auto"><circle cx="15" cy="15" r="6"></circle></marker></defs><defs><marker id="mmd-20303f75fd196714-solidTopArrowHead" refX="7.9" refY="7.25" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 8 L 0 8 z"></path></marker></defs><defs><marker id="mmd-20303f75fd196714-solidBottomArrowHead" refX="7.9" refY="0.75" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 0 L 0 8 z"></path></marker></defs><defs><marker id="mmd-20303f75fd196714-stickTopArrowHead" refX="7.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 7 7" stroke="black" stroke-width="1.5" fill="none"></path></marker></defs><defs><marker id="mmd-20303f75fd196714-stickBottomArrowHead" refX="7.5" refY="0" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 7 L 7 0" stroke="black" stroke-width="1.5" fill="none"></path></marker></defs><g data-et="note" data-id="i4"><rect x="200" y="297" fill="#EDF2AE" stroke="#666" width="150" height="104" class="note"></rect><text x="275" y="302" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;"><tspan x="275">Routing decision</tspan></text><text x="275" y="323" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;"><tspan x="275">= proxy</tspan></text><text x="275" y="344" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;"><tspan x="275">(everything</tspan></text><text x="275" y="365" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;"><tspan x="275">proxied)</tspan></text></g><g data-et="note" data-id="i6"><rect x="250" y="493" fill="#EDF2AE" stroke="#666" width="396" height="62" class="note"></rect><text x="448" y="498" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;"><tspan x="448">⚠ The only scene DPI sees</tspan></text><text x="448" y="519" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;"><tspan x="448">'a Chrome user viewing example.jp'</tspan></text></g><text x="174" y="80" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">DNS lookup example.com</text><line x1="82" y1="123" x2="271" y2="123" class="messageLine0" data-et="message" data-id="i1" data-from="A" data-to="S" stroke-width="2" stroke="none" marker-end="url(#mmd-20303f75fd196714-arrowhead)" style="fill: none;"></line><line x1="75" y1="123" x2="75" y2="123" stroke-width="0" marker-start="url(#mmd-20303f75fd196714-sequencenumber)"></line><text x="75" y="127" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">1</text><text x="177" y="138" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">FakeIP 198.18.x.x (no real</text><text x="177" y="159" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">resolution → zero leakage)</text><line x1="280" y1="205" x2="79" y2="205" class="messageLine1" data-et="message" data-id="i2" data-from="S" data-to="A" stroke-width="2" stroke="none" marker-end="url(#mmd-20303f75fd196714-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="275" y1="205" x2="275" y2="205" stroke-width="0" marker-start="url(#mmd-20303f75fd196714-sequencenumber)"></line><text x="275" y="209" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">2</text><text x="174" y="220" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">TCP → 198.18.x.x:443</text><text x="174" y="240" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">(absorbed by TUN)</text><line x1="82" y1="287" x2="271" y2="287" class="messageLine0" data-et="message" data-id="i3" data-from="A" data-to="S" stroke-width="2" stroke="none" marker-end="url(#mmd-20303f75fd196714-arrowhead)" style="fill: none;"></line><line x1="75" y1="287" x2="75" y2="287" stroke-width="0" marker-start="url(#mmd-20303f75fd196714-sequencenumber)"></line><text x="75" y="291" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">3</text><text x="447" y="416" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">Reality handshake</text><text x="447" y="437" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">SNI=www.example.jp · uTLS=chrome</text><line x1="282" y1="483" x2="617" y2="483" class="messageLine0" data-et="message" data-id="i5" data-from="S" data-to="X" stroke-width="2" stroke="none" marker-end="url(#mmd-20303f75fd196714-arrowhead)" style="fill: none;"></line><line x1="275" y1="483" x2="275" y2="483" stroke-width="0" marker-start="url(#mmd-20303f75fd196714-sequencenumber)"></line><text x="275" y="487" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">4</text><text x="447" y="570" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">VLESS header: real destination =</text><text x="447" y="590" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">example.com:443</text><line x1="282" y1="637" x2="617" y2="637" class="messageLine0" data-et="message" data-id="i7" data-from="S" data-to="X" stroke-width="2" stroke="none" marker-end="url(#mmd-20303f75fd196714-arrowhead)" style="fill: none;"></line><line x1="275" y1="637" x2="275" y2="637" stroke-width="0" marker-start="url(#mmd-20303f75fd196714-sequencenumber)"></line><text x="275" y="641" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">5</text><text x="720" y="652" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">warp-out (WireGuard inside</text><text x="720" y="673" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">Xray)</text><line x1="628" y1="710" x2="817" y2="710" class="messageLine0" data-et="message" data-id="i8" data-from="X" data-to="W" stroke-width="2" stroke="none" marker-end="url(#mmd-20303f75fd196714-arrowhead)" style="fill: none;"></line><line x1="621" y1="710" x2="621" y2="710" stroke-width="0" marker-start="url(#mmd-20303f75fd196714-sequencenumber)"></line><text x="621" y="714" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">6</text><text x="920" y="725" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">Connects from exit</text><text x="920" y="745" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">104.28.243.105</text><line x1="828" y1="780" x2="1017" y2="780" class="messageLine0" data-et="message" data-id="i9" data-from="W" data-to="D" stroke-width="2" stroke="none" marker-end="url(#mmd-20303f75fd196714-arrowhead)" style="fill: none;"></line><line x1="821" y1="780" x2="821" y2="780" stroke-width="0" marker-start="url(#mmd-20303f75fd196714-sequencenumber)"></line><text x="821" y="784" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">7</text><text x="923" y="795" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">Response</text><line x1="1026" y1="838" x2="825" y2="838" class="messageLine1" data-et="message" data-id="i10" data-from="D" data-to="W" stroke-width="2" stroke="none" marker-end="url(#mmd-20303f75fd196714-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="1021" y1="838" x2="1021" y2="838" stroke-width="0" marker-start="url(#mmd-20303f75fd196714-sequencenumber)"></line><text x="1021" y="842" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">8</text><text x="723" y="853" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">Response</text><line x1="826" y1="896" x2="625" y2="896" class="messageLine1" data-et="message" data-id="i11" data-from="W" data-to="X" stroke-width="2" stroke="none" marker-end="url(#mmd-20303f75fd196714-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="821" y1="896" x2="821" y2="896" stroke-width="0" marker-start="url(#mmd-20303f75fd196714-sequencenumber)"></line><text x="821" y="900" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">9</text><text x="450" y="911" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">Response</text><line x1="626" y1="954" x2="279" y2="954" class="messageLine1" data-et="message" data-id="i12" data-from="X" data-to="S" stroke-width="2" stroke="none" marker-end="url(#mmd-20303f75fd196714-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="621" y1="954" x2="621" y2="954" stroke-width="0" marker-start="url(#mmd-20303f75fd196714-sequencenumber)"></line><text x="621" y="958" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">10</text><text x="177" y="969" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">Response (curl done)</text><line x1="280" y1="1012" x2="79" y2="1012" class="messageLine1" data-et="message" data-id="i13" data-from="S" data-to="A" stroke-width="2" stroke="none" marker-end="url(#mmd-20303f75fd196714-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="275" y1="1012" x2="275" y2="1012" stroke-width="0" marker-start="url(#mmd-20303f75fd196714-sequencenumber)"></line><text x="275" y="1016" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">11</text></svg>
diff --git a/src/lib/diagrams/402ff2b7e82170f2.svg b/src/lib/diagrams/402ff2b7e82170f2.svg
@@ -0,0 +1 @@
+<svg id="mmd-402ff2b7e82170f2" width="660" xmlns="http://www.w3.org/2000/svg" height="898" viewBox="-60 -10 660 898" role="graphics-document document" aria-roledescription="sequence"><g><rect x="400" y="812" fill="#eaeaea" stroke="#666" width="150" height="65" name="N" rx="3" ry="3" class="actor actor-bottom"></rect><text x="475" y="844.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="475" dy="-8">Real</tspan></text><text x="475" y="844.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="475" dy="8">www.example.jp</tspan></text></g><g><rect x="200" y="812" fill="#eaeaea" stroke="#666" width="150" height="65" name="R" rx="3" ry="3" class="actor actor-bottom"></rect><text x="275" y="844.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="275" dy="-8">Xray Reality</tspan></text><text x="275" y="844.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="275" dy="8">server :443</tspan></text></g><g><rect x="0" y="812" fill="#eaeaea" stroke="#666" width="150" height="65" name="P" rx="3" ry="3" class="actor actor-bottom"></rect><text x="75" y="844.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="75" dy="-8">Client / censor</tspan></text><text x="75" y="844.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="75" dy="8">probe</tspan></text></g><g><line id="actor2" x1="475" y1="65" x2="475" y2="812" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="N" data-et="life-line" data-id="N"></line><g id="root-2" data-et="participant" data-type="participant" data-id="N"><rect x="400" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="N" rx="3" ry="3" class="actor actor-top"></rect><text x="475" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="475" dy="-8">Real</tspan></text><text x="475" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="475" dy="8">www.example.jp</tspan></text></g></g><g><line id="actor1" x1="275" y1="65" x2="275" y2="812" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="R" data-et="life-line" data-id="R"></line><g id="root-1" data-et="participant" data-type="participant" data-id="R"><rect x="200" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="R" rx="3" ry="3" class="actor actor-top"></rect><text x="275" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="275" dy="-8">Xray Reality</tspan></text><text x="275" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="275" dy="8">server :443</tspan></text></g></g><g><line id="actor0" x1="75" y1="65" x2="75" y2="812" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="P" data-et="life-line" data-id="P"></line><g id="root-0" data-et="participant" data-type="participant" data-id="P"><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="P" rx="3" ry="3" class="actor actor-top"></rect><text x="75" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="75" dy="-8">Client / censor</tspan></text><text x="75" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif;"><tspan x="75" dy="8">probe</tspan></text></g></g><style>#mmd-402ff2b7e82170f2{font-family:'Lora','KoBody','KoFallback','LatinFallback',Georgia,'Times New Roman',serif;font-size:15px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mmd-402ff2b7e82170f2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mmd-402ff2b7e82170f2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mmd-402ff2b7e82170f2 .error-icon{fill:#fffbf4;}#mmd-402ff2b7e82170f2 .error-text{fill:#000000;stroke:#000000;}#mmd-402ff2b7e82170f2 .edge-thickness-normal{stroke-width:1px;}#mmd-402ff2b7e82170f2 .edge-thickness-thick{stroke-width:3.5px;}#mmd-402ff2b7e82170f2 .edge-pattern-solid{stroke-dasharray:0;}#mmd-402ff2b7e82170f2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mmd-402ff2b7e82170f2 .edge-pattern-dashed{stroke-dasharray:3;}#mmd-402ff2b7e82170f2 .edge-pattern-dotted{stroke-dasharray:2;}#mmd-402ff2b7e82170f2 .marker{fill:#605a4e;stroke:#605a4e;}#mmd-402ff2b7e82170f2 .marker.cross{stroke:#605a4e;}#mmd-402ff2b7e82170f2 svg{font-family:'Lora','KoBody','KoFallback','LatinFallback',Georgia,'Times New Roman',serif;font-size:15px;}#mmd-402ff2b7e82170f2 p{margin:0;}#mmd-402ff2b7e82170f2 .actor{stroke:#eed6aa;fill:#faedda;stroke-width:1;}#mmd-402ff2b7e82170f2 rect.actor.outer-path[data-look="neo"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-402ff2b7e82170f2 rect.note[data-look="neo"]{stroke:#a51c30;fill:#f7ebeb;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-402ff2b7e82170f2 text.actor>tspan{fill:#000000;stroke:none;}#mmd-402ff2b7e82170f2 .actor-line{stroke:#605a4e;}#mmd-402ff2b7e82170f2 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mmd-402ff2b7e82170f2 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#000000;}#mmd-402ff2b7e82170f2 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#000000;}#mmd-402ff2b7e82170f2 [id$="-arrowhead"] path{fill:#000000;stroke:#000000;}#mmd-402ff2b7e82170f2 .sequenceNumber{fill:#fffbf4;}#mmd-402ff2b7e82170f2 [id$="-sequencenumber"]{fill:#000000;}#mmd-402ff2b7e82170f2 [id$="-crosshead"] path{fill:#000000;stroke:#000000;}#mmd-402ff2b7e82170f2 .messageText{fill:#000000;stroke:none;}#mmd-402ff2b7e82170f2 .labelBox{stroke:#eed6aa;fill:#faedda;filter:none;}#mmd-402ff2b7e82170f2 .labelText,#mmd-402ff2b7e82170f2 .labelText>tspan{fill:#000000;stroke:none;}#mmd-402ff2b7e82170f2 .loopText,#mmd-402ff2b7e82170f2 .loopText>tspan{fill:#000000;stroke:none;}#mmd-402ff2b7e82170f2 .sectionTitle,#mmd-402ff2b7e82170f2 .sectionTitle>tspan{fill:#000000;stroke:none;}#mmd-402ff2b7e82170f2 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#eed6aa;fill:#eed6aa;}#mmd-402ff2b7e82170f2 .note{stroke:#a51c30;fill:#f7ebeb;}#mmd-402ff2b7e82170f2 .noteText,#mmd-402ff2b7e82170f2 .noteText>tspan{fill:#000000;stroke:none;}#mmd-402ff2b7e82170f2 .activation0{fill:#f5eee0;stroke:#eed6aa;}#mmd-402ff2b7e82170f2 .activation1{fill:#f5eee0;stroke:#eed6aa;}#mmd-402ff2b7e82170f2 .activation2{fill:#f5eee0;stroke:#eed6aa;}#mmd-402ff2b7e82170f2 .actorPopupMenu{position:absolute;}#mmd-402ff2b7e82170f2 .actorPopupMenuPanel{position:absolute;fill:#faedda;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mmd-402ff2b7e82170f2 .actor-man circle,#mmd-402ff2b7e82170f2 line{fill:#faedda;stroke-width:2px;}#mmd-402ff2b7e82170f2 g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:#eed6aa;}#mmd-402ff2b7e82170f2 .node .neo-node{stroke:#eed6aa;}#mmd-402ff2b7e82170f2 [data-look="neo"].node rect,#mmd-402ff2b7e82170f2 [data-look="neo"].cluster rect,#mmd-402ff2b7e82170f2 [data-look="neo"].node polygon{stroke:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-402ff2b7e82170f2 [data-look="neo"].swimlane.cluster rect{filter:none;}#mmd-402ff2b7e82170f2 [data-look="neo"].node path{stroke:#eed6aa;stroke-width:1px;}#mmd-402ff2b7e82170f2 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-402ff2b7e82170f2 [data-look="neo"].node .neo-line path{stroke:#eed6aa;filter:none;}#mmd-402ff2b7e82170f2 [data-look="neo"].node circle{stroke:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-402ff2b7e82170f2 [data-look="neo"].node circle .state-start{fill:#000000;}#mmd-402ff2b7e82170f2 [data-look="neo"].icon-shape .icon{fill:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-402ff2b7e82170f2 [data-look="neo"].icon-shape .icon-neo path{stroke:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-402ff2b7e82170f2 :root{--mermaid-font-family:'Lora','KoBody','KoFallback','LatinFallback',Georgia,'Times New Roman',serif;}#mmd-402ff2b7e82170f2 .edgeLabel rect{opacity:1;}</style><g></g><defs><symbol id="mmd-402ff2b7e82170f2-computer" width="24" height="24"><path transform="scale(.5)" d="M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"></path></symbol></defs><defs><symbol id="mmd-402ff2b7e82170f2-database" fill-rule="evenodd" clip-rule="evenodd"><path transform="scale(.5)" d="M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"></path></symbol></defs><defs><symbol id="mmd-402ff2b7e82170f2-clock" width="24" height="24"><path transform="scale(.5)" d="M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"></path></symbol></defs><defs><marker id="mmd-402ff2b7e82170f2-arrowhead" refX="7.9" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M -1 0 L 10 5 L 0 10 z"></path></marker></defs><defs><marker id="mmd-402ff2b7e82170f2-crosshead" markerWidth="15" markerHeight="8" orient="auto" refX="4" refY="4.5"><path fill="none" stroke="#000000" stroke-width="1pt" d="M 1,2 L 6,7 M 6,2 L 1,7" style="stroke-dasharray: 0, 0;"></path></marker></defs><defs><marker id="mmd-402ff2b7e82170f2-filled-head" refX="15.5" refY="7" markerWidth="20" markerHeight="28" orient="auto"><path d="M 18,7 L9,13 L14,7 L9,1 Z"></path></marker></defs><defs><marker id="mmd-402ff2b7e82170f2-sequencenumber" refX="15" refY="15" markerWidth="60" markerHeight="40" orient="auto"><circle cx="15" cy="15" r="6"></circle></marker></defs><defs><marker id="mmd-402ff2b7e82170f2-solidTopArrowHead" refX="7.9" refY="7.25" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 8 L 0 8 z"></path></marker></defs><defs><marker id="mmd-402ff2b7e82170f2-solidBottomArrowHead" refX="7.9" refY="0.75" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 0 L 0 8 z"></path></marker></defs><defs><marker id="mmd-402ff2b7e82170f2-stickTopArrowHead" refX="7.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 7 7" stroke="black" stroke-width="1.5" fill="none"></path></marker></defs><defs><marker id="mmd-402ff2b7e82170f2-stickBottomArrowHead" refX="7.5" refY="0" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 7 L 7 0" stroke="black" stroke-width="1.5" fill="none"></path></marker></defs><g data-et="note" data-id="i9"><rect x="0" y="680" fill="#EDF2AE" stroke="#666" width="150" height="102" class="note"></rect><text x="75" y="685" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;"><tspan x="75">Verdict "just an</tspan></text><text x="75" y="706" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;"><tspan x="75">example.jp</tspan></text><text x="75" y="727" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;"><tspan x="75">server" →</tspan></text><text x="75" y="747" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;"><tspan x="75">detection fails</tspan></text></g><g data-et="control-structure" data-id="i10"><line x1="-10" y1="75" x2="486" y2="75" class="loopLine"></line><line x1="486" y1="75" x2="486" y2="792" class="loopLine"></line><line x1="-10" y1="792" x2="486" y2="792" class="loopLine"></line><line x1="-10" y1="75" x2="-10" y2="792" class="loopLine"></line><line x1="-10" y1="420" x2="486" y2="420" class="loopLine" style="stroke-dasharray: 3, 3;"></line><polygon points="-10,75 40,75 40,88 31.6,95 -10,95" class="labelBox"></polygon><text x="15" y="88" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="labelText" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">alt</text><text x="263" y="93" text-anchor="middle" class="loopText" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;"><tspan x="263">[Holds the right key (legitimate user)]</tspan></text><text x="238" y="438" text-anchor="middle" class="sectionTitle" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">[No key (censor's active probe)]</text></g><text x="174" y="129" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">ClientHello + embedded</text><text x="174" y="149" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">x25519 · shortId · UUID</text><line x1="82" y1="196" x2="271" y2="196" class="messageLine0" data-et="message" data-id="i2" data-from="P" data-to="R" stroke-width="2" stroke="none" marker-end="url(#mmd-402ff2b7e82170f2-arrowhead)" style="fill: none;"></line><line x1="75" y1="196" x2="75" y2="196" stroke-width="0" marker-start="url(#mmd-402ff2b7e82170f2-sequencenumber)"></line><text x="75" y="200" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">1</text><text x="276" y="211" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">Key verified →</text><text x="276" y="232" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">proxy mode</text><path d="M 276,269 C 336,259 336,299 276,289" class="messageLine0" data-et="message" data-id="i3" data-from="R" data-to="R" stroke-width="2" stroke="none" marker-end="url(#mmd-402ff2b7e82170f2-arrowhead)" x1="282" style="fill: none;"></path><line x1="275" y1="269" x2="275" y2="269" stroke-width="0" marker-start="url(#mmd-402ff2b7e82170f2-sequencenumber)"></line><text x="275" y="273" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">2</text><text x="177" y="314" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">Disguised TLS session</text><text x="177" y="335" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">established → proxy tunnel</text><text x="177" y="356" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">open</text><line x1="280" y1="405" x2="79" y2="405" class="messageLine1" data-et="message" data-id="i4" data-from="R" data-to="P" stroke-width="2" stroke="none" marker-end="url(#mmd-402ff2b7e82170f2-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="275" y1="405" x2="275" y2="405" stroke-width="0" marker-start="url(#mmd-402ff2b7e82170f2-sequencenumber)"></line><text x="275" y="409" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">3</text><text x="174" y="469" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">ClientHello (no valid key)</text><line x1="82" y1="512" x2="271" y2="512" class="messageLine0" data-et="message" data-id="i6" data-from="P" data-to="R" stroke-width="2" stroke="none" marker-end="url(#mmd-402ff2b7e82170f2-arrowhead)" style="fill: none;"></line><line x1="75" y1="512" x2="75" y2="512" stroke-width="0" marker-start="url(#mmd-402ff2b7e82170f2-sequencenumber)"></line><text x="75" y="516" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">4</text><text x="374" y="527" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">Forwards the handshake</text><text x="374" y="547" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">untouched to the real</text><text x="374" y="567" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">example.jp</text><line x1="282" y1="618" x2="471" y2="618" class="messageLine0" data-et="message" data-id="i7" data-from="R" data-to="N" stroke-width="2" stroke="none" marker-end="url(#mmd-402ff2b7e82170f2-arrowhead)" style="fill: none;"></line><line x1="275" y1="618" x2="275" y2="618" stroke-width="0" marker-start="url(#mmd-402ff2b7e82170f2-sequencenumber)"></line><text x="275" y="622" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">5</text><text x="277" y="633" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-family: Lora, KoBody, KoFallback, LatinFallback, Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 400;">Real example.jp certificate (Verification OK)</text><line x1="480" y1="670" x2="79" y2="670" class="messageLine1" data-et="message" data-id="i8" data-from="N" data-to="P" stroke-width="2" stroke="none" marker-end="url(#mmd-402ff2b7e82170f2-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line><line x1="475" y1="670" x2="475" y2="670" stroke-width="0" marker-start="url(#mmd-402ff2b7e82170f2-sequencenumber)"></line><text x="475" y="674" font-family="sans-serif" font-size="12px" text-anchor="middle" class="sequenceNumber">6</text></svg>
diff --git a/src/lib/diagrams/6606e6bbffd1e1b2.svg b/src/lib/diagrams/6606e6bbffd1e1b2.svg
@@ -0,0 +1 @@
+<svg id="mmd-6606e6bbffd1e1b2" width="1645.88671875" xmlns="http://www.w3.org/2000/svg" class="flowchart" height="187.34066772460938" viewBox="4 4 1645.88671875 187.34066772460938" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#mmd-6606e6bbffd1e1b2{font-family:'Lora','KoBody','KoFallback','LatinFallback',Georgia,'Times New Roman',serif;font-size:15px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mmd-6606e6bbffd1e1b2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mmd-6606e6bbffd1e1b2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mmd-6606e6bbffd1e1b2 .error-icon{fill:#fffbf4;}#mmd-6606e6bbffd1e1b2 .error-text{fill:#000000;stroke:#000000;}#mmd-6606e6bbffd1e1b2 .edge-thickness-normal{stroke-width:1px;}#mmd-6606e6bbffd1e1b2 .edge-thickness-thick{stroke-width:3.5px;}#mmd-6606e6bbffd1e1b2 .edge-pattern-solid{stroke-dasharray:0;}#mmd-6606e6bbffd1e1b2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mmd-6606e6bbffd1e1b2 .edge-pattern-dashed{stroke-dasharray:3;}#mmd-6606e6bbffd1e1b2 .edge-pattern-dotted{stroke-dasharray:2;}#mmd-6606e6bbffd1e1b2 .marker{fill:#605a4e;stroke:#605a4e;}#mmd-6606e6bbffd1e1b2 .marker.cross{stroke:#605a4e;}#mmd-6606e6bbffd1e1b2 svg{font-family:'Lora','KoBody','KoFallback','LatinFallback',Georgia,'Times New Roman',serif;font-size:15px;}#mmd-6606e6bbffd1e1b2 p{margin:0;}#mmd-6606e6bbffd1e1b2 .label{font-family:'Lora','KoBody','KoFallback','LatinFallback',Georgia,'Times New Roman',serif;color:#000000;}#mmd-6606e6bbffd1e1b2 .cluster-label text{fill:#000000;}#mmd-6606e6bbffd1e1b2 .cluster-label span{color:#000000;}#mmd-6606e6bbffd1e1b2 .cluster-label span p{background-color:transparent;}#mmd-6606e6bbffd1e1b2 .label text,#mmd-6606e6bbffd1e1b2 span{fill:#000000;color:#000000;}#mmd-6606e6bbffd1e1b2 .node rect,#mmd-6606e6bbffd1e1b2 .node circle,#mmd-6606e6bbffd1e1b2 .node ellipse,#mmd-6606e6bbffd1e1b2 .node polygon,#mmd-6606e6bbffd1e1b2 .node path{fill:#faedda;stroke:#eed6aa;stroke-width:1px;}#mmd-6606e6bbffd1e1b2 .rough-node .label text,#mmd-6606e6bbffd1e1b2 .node .label text,#mmd-6606e6bbffd1e1b2 .image-shape .label,#mmd-6606e6bbffd1e1b2 .icon-shape .label{text-anchor:middle;}#mmd-6606e6bbffd1e1b2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mmd-6606e6bbffd1e1b2 .rough-node .label,#mmd-6606e6bbffd1e1b2 .node .label,#mmd-6606e6bbffd1e1b2 .image-shape .label,#mmd-6606e6bbffd1e1b2 .icon-shape .label{text-align:center;}#mmd-6606e6bbffd1e1b2 .node.clickable{cursor:pointer;}#mmd-6606e6bbffd1e1b2 .root .anchor path{fill:#605a4e!important;stroke-width:0;stroke:#605a4e;}#mmd-6606e6bbffd1e1b2 .arrowheadPath{fill:#00040b;}#mmd-6606e6bbffd1e1b2 .edgePaths .path{stroke:#605a4e;stroke-width:1px;}#mmd-6606e6bbffd1e1b2 .flowchart-link{stroke:#605a4e;fill:none;}#mmd-6606e6bbffd1e1b2 .edgeLabel{background-color:#fffbf4;text-align:center;}#mmd-6606e6bbffd1e1b2 .edgeLabel p{background-color:#fffbf4;}#mmd-6606e6bbffd1e1b2 .edgeLabel rect{opacity:0.5;background-color:#fffbf4;fill:#fffbf4;}#mmd-6606e6bbffd1e1b2 .labelBkg{background-color:rgba(255, 251, 244, 0.5);}#mmd-6606e6bbffd1e1b2 .cluster rect{fill:#fffbf4;stroke:#b9b8ad;stroke-width:1px;}#mmd-6606e6bbffd1e1b2 .cluster text{fill:#000000;}#mmd-6606e6bbffd1e1b2 .cluster span{color:#000000;}#mmd-6606e6bbffd1e1b2 .node .collapsed-indicator{fill:#b9b8ad;stroke:none;opacity:0.6;}#mmd-6606e6bbffd1e1b2 .node .collapsed-separator{stroke:#b9b8ad;stroke-width:0.75px;}#mmd-6606e6bbffd1e1b2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'Lora','KoBody','KoFallback','LatinFallback',Georgia,'Times New Roman',serif;font-size:12px;background:#fffbf4;border:1px solid #b9b8ad;border-radius:2px;pointer-events:none;z-index:100;}#mmd-6606e6bbffd1e1b2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mmd-6606e6bbffd1e1b2 rect.text{fill:none;stroke-width:0;}#mmd-6606e6bbffd1e1b2 .icon-shape,#mmd-6606e6bbffd1e1b2 .image-shape{background-color:#fffbf4;text-align:center;}#mmd-6606e6bbffd1e1b2 .icon-shape p,#mmd-6606e6bbffd1e1b2 .image-shape p{background-color:#fffbf4;padding:2px;}#mmd-6606e6bbffd1e1b2 .icon-shape .label rect,#mmd-6606e6bbffd1e1b2 .image-shape .label rect{opacity:0.5;background-color:#fffbf4;fill:#fffbf4;}#mmd-6606e6bbffd1e1b2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mmd-6606e6bbffd1e1b2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mmd-6606e6bbffd1e1b2 .node .neo-node{stroke:#eed6aa;}#mmd-6606e6bbffd1e1b2 [data-look="neo"].node rect,#mmd-6606e6bbffd1e1b2 [data-look="neo"].cluster rect,#mmd-6606e6bbffd1e1b2 [data-look="neo"].node polygon{stroke:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-6606e6bbffd1e1b2 [data-look="neo"].swimlane.cluster rect{filter:none;}#mmd-6606e6bbffd1e1b2 [data-look="neo"].node path{stroke:#eed6aa;stroke-width:1px;}#mmd-6606e6bbffd1e1b2 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-6606e6bbffd1e1b2 [data-look="neo"].node .neo-line path{stroke:#eed6aa;filter:none;}#mmd-6606e6bbffd1e1b2 [data-look="neo"].node circle{stroke:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-6606e6bbffd1e1b2 [data-look="neo"].node circle .state-start{fill:#000000;}#mmd-6606e6bbffd1e1b2 [data-look="neo"].icon-shape .icon{fill:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-6606e6bbffd1e1b2 [data-look="neo"].icon-shape .icon-neo path{stroke:#eed6aa;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mmd-6606e6bbffd1e1b2 :root{--mermaid-font-family:'Lora','KoBody','KoFallback','LatinFallback',Georgia,'Times New Roman',serif;}#mmd-6606e6bbffd1e1b2 .censored rect{stroke:rgb(225, 29, 72)!important;stroke-width:3px!important;}#mmd-6606e6bbffd1e1b2 .censored polygon{stroke:rgb(225, 29, 72)!important;stroke-width:3px!important;}#mmd-6606e6bbffd1e1b2 .censored ellipse{stroke:rgb(225, 29, 72)!important;stroke-width:3px!important;}#mmd-6606e6bbffd1e1b2 .censored circle{stroke:rgb(225, 29, 72)!important;stroke-width:3px!important;}#mmd-6606e6bbffd1e1b2 .censored path{stroke:rgb(225, 29, 72)!important;stroke-width:3px!important;}#mmd-6606e6bbffd1e1b2 .edgeLabel rect{opacity:1;}</style><g><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></path></marker><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></polygon></marker><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle></marker><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle></marker><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></circle></marker><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></circle></marker><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path></marker><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path></marker><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"></path></marker><marker id="mmd-6606e6bbffd1e1b2_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"></path></marker><g class="root"><g class="clusters"><g class="cluster" id="mmd-6606e6bbffd1e1b2-WP" data-look="classic"><rect style="" x="1169.2992248535156" y="12" width="253.90625" height="152"></rect><g class="cluster-label" transform="translate(1224.3695373535156, 12)"><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">☁️</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Cloudflare</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> WARP</tspan></tspan></text></g></g></g><g class="cluster" id="mmd-6606e6bbffd1e1b2-JP" data-look="classic"><rect style="" x="561.0724792480469" y="12" width="347.97674560546875" height="152"></rect><g class="cluster-label" transform="translate(629.4834136962891, 12)"><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">🇯🇵</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> AWS</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Tokyo</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> ·</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> ap-northeast-1</tspan></tspan></text></g></g></g><g class="cluster" id="mmd-6606e6bbffd1e1b2-KR" data-look="classic"><rect style="" x="12" y="12" width="245.99435424804688" height="152"></rect><g class="cluster-label" transform="translate(16, 12)"><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">🇰🇷</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Korea</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> ·</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> KT</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> line</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (exposed</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> to</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> DPI)</tspan></tspan></text></g></g></g></g><g class="edges edgePaths"><path d="M216,99L269.9943542480469,99L551.0724792480469,99L581.0724792480469,99" id="mmd-6606e6bbffd1e1b2-L_C_X_0" class="edge-thickness-thick edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_X_0" data-points="W3sieCI6MjE2LCJ5Ijo5OX0seyJ4IjoyNjkuOTk0MzU0MjQ4MDQ2OSwieSI6OTl9LHsieCI6NTUxLjA3MjQ3OTI0ODA0NjksInkiOjk5fSx7IngiOjU4NS4wNzI0NzkyNDgwNDY5LCJ5Ijo5OX1d" data-look="classic" marker-end="url(#mmd-6606e6bbffd1e1b2_flowchart-v2-pointEnd)"></path><path d="M885.0492248535156,99L919.0492248535156,99L1159.2992248535156,99L1189.2992248535156,99" id="mmd-6606e6bbffd1e1b2-L_X_W_0" class="edge-thickness-thick edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_X_W_0" data-points="W3sieCI6ODg1LjA0OTIyNDg1MzUxNTYsInkiOjk5fSx7IngiOjkxOS4wNDkyMjQ4NTM1MTU2LCJ5Ijo5OX0seyJ4IjoxMTU5LjI5OTIyNDg1MzUxNTYsInkiOjk5fSx7IngiOjExOTMuMjk5MjI0ODUzNTE1NiwieSI6OTl9XQ==" data-look="classic" marker-end="url(#mmd-6606e6bbffd1e1b2_flowchart-v2-pointEnd)"></path><path d="M1399.2054748535156,99L1433.2054748535156,99L1469.2054748535156,99" id="mmd-6606e6bbffd1e1b2-L_W_NET_0" class="edge-thickness-thick edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_W_NET_0" data-points="W3sieCI6MTM5OS4yMDU0NzQ4NTM1MTU2LCJ5Ijo5OX0seyJ4IjoxNDMzLjIwNTQ3NDg1MzUxNTYsInkiOjk5fSx7IngiOjE0NzMuMjA1NDc0ODUzNTE1NiwieSI6OTl9XQ==" data-look="classic" marker-end="url(#mmd-6606e6bbffd1e1b2_flowchart-v2-pointEnd)"></path></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(410.5334167480469, 98.5)"><g class="label" data-id="L_C_X_0" transform="translate(0, -26)"><g><rect class="background" style="" x="-100.5390625" y="-2" width="201.078125" height="56"></rect><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">①</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Reality</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> TLS</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> 1.3</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> handshake</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">to</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> DPI</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> it</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> looks</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> like</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> 'Chrome</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">viewing</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> example.jp'</tspan></tspan></text></g></g></g><g class="edgeLabel" transform="translate(1039.1742248535156, 98.25)"><g class="label" data-id="L_X_W_0" transform="translate(0, -17.75)"><g><rect class="background" style="" x="-80.125" y="-2" width="160.25" height="39.5"></rect><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">②</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> WireGuard</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> /</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> WARP</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(default</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> route)</tspan></tspan></text></g></g></g></g><g class="nodes"><g class="node default censored" id="mmd-6606e6bbffd1e1b2-flowchart-C-0" data-look="classic" transform="translate(126, 99)"><rect class="basic label-container" style="stroke:#e11d48 !important;stroke-width:3px !important" x="-90" y="-41" width="180" height="82"></rect><g class="label" style="" transform="translate(0, -26)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Client</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">sing-box</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> ·</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> TUN</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">uTLS</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> =</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> chrome</tspan></tspan></text></g></g></g><g class="node default censored" id="mmd-6606e6bbffd1e1b2-flowchart-X-1" data-look="classic" transform="translate(735.0608520507812, 99)"><rect class="basic label-container" style="stroke:#e11d48 !important;stroke-width:3px !important" x="-149.9883804321289" y="-41" width="299.9767608642578" height="82"></rect><g class="label" style="" transform="translate(0, -26)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Xray</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> server</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">VLESS</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> +</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Reality</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> :443</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">camouflage</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> SNI</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> =</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> www.example.jp</tspan></tspan></text></g></g></g><g class="node default" id="mmd-6606e6bbffd1e1b2-flowchart-W-2" data-look="classic" transform="translate(1296.2523498535156, 99)"><rect class="basic label-container" style="" x="-102.953125" y="-41" width="205.90625" height="82"></rect><g class="label" style="" transform="translate(0, -26)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">WARP</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> edge</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> ·</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> NRT</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">AS13335</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">exit</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> IP</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> 104.28.243.105</tspan></tspan></text></g></g></g><g class="node default" id="mmd-6606e6bbffd1e1b2-flowchart-NET-3" data-look="classic" transform="translate(1557.546142578125, 99)"><circle class="basic label-container" style="" r="84.34066466404052" cx="0" cy="0"></circle><g class="label" style="" transform="translate(0, -17.75)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">🌐</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Internet</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">ordinary</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> destinations</tspan></tspan></text></g></g></g></g></g></g><defs><filter id="mmd-6606e6bbffd1e1b2-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"></feDropShadow></filter></defs><defs><filter id="mmd-6606e6bbffd1e1b2-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"></feDropShadow></filter></defs></svg>
|