gitextract_rgu_9fid/ ├── .github/ │ ├── CODE_OF_CONDUCT.md │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_cn.md │ │ ├── bug_en.md │ │ └── other_en.md │ ├── ISSUE_TEMPLATE.md │ ├── dependabot.yml │ └── workflows/ │ ├── codeql-analysis.yml │ ├── linter.yml │ ├── release.yml │ ├── sign.yml │ ├── stale.yml │ └── test.yml ├── .gitignore ├── LICENSE ├── README.md ├── SECURITY.md ├── annotations.go ├── app/ │ ├── app.go │ ├── browserforwarder/ │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ └── forwarder.go │ ├── commander/ │ │ ├── commander.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ ├── outbound.go │ │ ├── service.go │ │ └── webcommander/ │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ └── webcommander.go │ ├── dispatcher/ │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── default.go │ │ ├── dispatcher.go │ │ ├── errors.generated.go │ │ ├── fakednssniffer.go │ │ ├── sniffer.go │ │ ├── stats.go │ │ └── stats_test.go │ ├── dns/ │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── dns.go │ │ ├── dns_test.go │ │ ├── dnscommon.go │ │ ├── dnscommon_test.go │ │ ├── errors.generated.go │ │ ├── fakedns/ │ │ │ ├── errors.generated.go │ │ │ ├── fake.go │ │ │ ├── fakedns.go │ │ │ ├── fakedns.pb.go │ │ │ ├── fakedns.proto │ │ │ └── fakedns_test.go │ │ ├── fakedns.go │ │ ├── fakedns_test.go │ │ ├── hosts.go │ │ ├── hosts_test.go │ │ ├── nameserver.go │ │ ├── nameserver_doh.go │ │ ├── nameserver_doh_test.go │ │ ├── nameserver_fakedns.go │ │ ├── nameserver_local.go │ │ ├── nameserver_local_test.go │ │ ├── nameserver_quic.go │ │ ├── nameserver_quic_test.go │ │ ├── nameserver_tcp.go │ │ ├── nameserver_tcp_test.go │ │ └── nameserver_udp.go │ ├── instman/ │ │ ├── command/ │ │ │ ├── command.go │ │ │ ├── command.pb.go │ │ │ ├── command.proto │ │ │ └── command_grpc.pb.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ └── instman.go │ ├── log/ │ │ ├── command/ │ │ │ ├── command.go │ │ │ ├── command_test.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── config_grpc.pb.go │ │ │ └── errors.generated.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ ├── log.go │ │ ├── log_creator.go │ │ └── log_test.go │ ├── observatory/ │ │ ├── burst/ │ │ │ ├── burst.go │ │ │ ├── burstobserver.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── errors.generated.go │ │ │ ├── healthping.go │ │ │ ├── healthping_result.go │ │ │ ├── healthping_result_test.go │ │ │ └── ping.go │ │ ├── command/ │ │ │ ├── command.go │ │ │ ├── command.pb.go │ │ │ ├── command.proto │ │ │ ├── command_grpc.pb.go │ │ │ └── errors.generated.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ ├── explainErrors.go │ │ ├── multiobservatory/ │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ └── multi.go │ │ ├── observatory.go │ │ └── observer.go │ ├── persistentstorage/ │ │ ├── filesystemstorage/ │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ └── fs.go │ │ ├── protostorage/ │ │ │ └── protokv.go │ │ └── storage.go │ ├── policy/ │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ ├── manager.go │ │ ├── manager_test.go │ │ └── policy.go │ ├── proxyman/ │ │ ├── command/ │ │ │ ├── command.go │ │ │ ├── command.pb.go │ │ │ ├── command.proto │ │ │ ├── command_grpc.pb.go │ │ │ ├── doc.go │ │ │ └── errors.generated.go │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── inbound/ │ │ │ ├── always.go │ │ │ ├── dynamic.go │ │ │ ├── errors.generated.go │ │ │ ├── inbound.go │ │ │ └── worker.go │ │ └── outbound/ │ │ ├── errors.generated.go │ │ ├── handler.go │ │ ├── handler_test.go │ │ └── outbound.go │ ├── restfulapi/ │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ ├── restful_api.go │ │ ├── service.go │ │ └── service_test.go │ ├── reverse/ │ │ ├── bridge.go │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ ├── portal.go │ │ ├── portal_test.go │ │ └── reverse.go │ ├── router/ │ │ ├── balancing.go │ │ ├── balancing_override.go │ │ ├── command/ │ │ │ ├── command.go │ │ │ ├── command.pb.go │ │ │ ├── command.proto │ │ │ ├── command_grpc.pb.go │ │ │ ├── command_test.go │ │ │ ├── config.go │ │ │ └── errors.generated.go │ │ ├── condition.go │ │ ├── condition_geoip.go │ │ ├── condition_geoip_test.go │ │ ├── condition_test.go │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ ├── router.go │ │ ├── router_test.go │ │ ├── routercommon/ │ │ │ ├── common.pb.go │ │ │ └── common.proto │ │ ├── strategy_leastload.go │ │ ├── strategy_leastload_test.go │ │ ├── strategy_leastping.go │ │ ├── strategy_random.go │ │ ├── weight.go │ │ └── weight_test.go │ ├── stats/ │ │ ├── channel.go │ │ ├── channel_test.go │ │ ├── command/ │ │ │ ├── command.go │ │ │ ├── command.pb.go │ │ │ ├── command.proto │ │ │ ├── command_grpc.pb.go │ │ │ ├── command_test.go │ │ │ └── errors.generated.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── counter.go │ │ ├── counter_test.go │ │ ├── errors.generated.go │ │ ├── stats.go │ │ └── stats_test.go │ ├── subscription/ │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── containers/ │ │ │ ├── base64urlline/ │ │ │ │ ├── base64urlline.go │ │ │ │ ├── errors.generated.go │ │ │ │ └── parser.go │ │ │ ├── containers.go │ │ │ ├── dataurlsingle/ │ │ │ │ ├── dataurl.go │ │ │ │ └── errors.generated.go │ │ │ ├── errors.generated.go │ │ │ ├── jsonfieldarray/ │ │ │ │ ├── errors.generated.go │ │ │ │ ├── jsonfieldarray.go │ │ │ │ ├── jsonified/ │ │ │ │ │ ├── errors.generated.go │ │ │ │ │ ├── jsonified.go │ │ │ │ │ └── parser.go │ │ │ │ └── parser.go │ │ │ ├── tryall.go │ │ │ └── urlline/ │ │ │ ├── errors.generated.go │ │ │ ├── parser.go │ │ │ └── urlline.go │ │ ├── documentfetcher/ │ │ │ ├── dataurlfetcher/ │ │ │ │ ├── dataurl.go │ │ │ │ └── errors.generated.go │ │ │ ├── errors.generated.go │ │ │ ├── fetcher.go │ │ │ └── httpfetcher/ │ │ │ ├── errors.generated.go │ │ │ └── http.go │ │ ├── entries/ │ │ │ ├── entries.go │ │ │ ├── errors.generated.go │ │ │ ├── nonnative/ │ │ │ │ ├── converter.go │ │ │ │ ├── definitions/ │ │ │ │ │ ├── shadowsocks.jsont │ │ │ │ │ ├── shadowsocks2022.jsont │ │ │ │ │ └── vmess.jsont │ │ │ │ ├── errors.generated.go │ │ │ │ ├── matchdef.go │ │ │ │ ├── nonnative.go │ │ │ │ └── nonnativeifce/ │ │ │ │ └── nonnativeifce.go │ │ │ ├── outbound/ │ │ │ │ ├── errors.generated.go │ │ │ │ └── outbound.go │ │ │ └── register.go │ │ ├── errors.generated.go │ │ ├── specs/ │ │ │ ├── abstract_spec.pb.go │ │ │ ├── abstract_spec.proto │ │ │ ├── errors.generated.go │ │ │ ├── outbound_parser.go │ │ │ ├── skeleton.go │ │ │ └── specs.go │ │ ├── subscription.go │ │ ├── subscription_rpc.pb.go │ │ ├── subscription_rpc.proto │ │ └── subscriptionmanager/ │ │ ├── command/ │ │ │ ├── command.go │ │ │ ├── command.pb.go │ │ │ ├── command.proto │ │ │ ├── command_grpc.pb.go │ │ │ └── errors.generated.go │ │ ├── delta.go │ │ ├── errors.generated.go │ │ ├── known_metadata.go │ │ ├── manager.go │ │ ├── manager_rpc.go │ │ ├── serverspec_materialize.go │ │ ├── subdocapplier.go │ │ ├── subdocchecker.go │ │ ├── subdocupdater.go │ │ └── tracked_subscription.go │ └── tun/ │ ├── config.pb.go │ ├── config.proto │ ├── device/ │ │ ├── device.go │ │ ├── errors.generated.go │ │ ├── gvisor/ │ │ │ ├── errors.generated.go │ │ │ ├── gvisor.go │ │ │ ├── gvisor_linux.go │ │ │ └── gvisor_others.go │ │ └── linkWriterToWriter.go │ ├── errors.generated.go │ ├── handler.go │ ├── handler_tcp.go │ ├── handler_udp.go │ ├── net/ │ │ └── net.go │ ├── option.go │ ├── packetaddradaptar.go │ ├── packetparse/ │ │ ├── errors.generated.go │ │ ├── packetParse.go │ │ └── udp.go │ ├── stack.go │ ├── tun.go │ └── tunsorter/ │ ├── errors.generated.go │ └── tunsorter.go ├── common/ │ ├── antireplay/ │ │ ├── antireplay.go │ │ ├── bloomring.go │ │ └── replayfilter.go │ ├── bitmask/ │ │ ├── byte.go │ │ └── byte_test.go │ ├── buf/ │ │ ├── buf.go │ │ ├── buffer.go │ │ ├── buffer_test.go │ │ ├── copy.go │ │ ├── copy_test.go │ │ ├── errors.generated.go │ │ ├── io.go │ │ ├── io_test.go │ │ ├── multi_buffer.go │ │ ├── multi_buffer_test.go │ │ ├── reader.go │ │ ├── reader_test.go │ │ ├── readv_posix.go │ │ ├── readv_reader.go │ │ ├── readv_reader_wasm.go │ │ ├── readv_test.go │ │ ├── readv_unix.go │ │ ├── readv_windows.go │ │ ├── writer.go │ │ └── writer_test.go │ ├── bytespool/ │ │ └── pool.go │ ├── cache/ │ │ ├── lru.go │ │ └── lru_test.go │ ├── cmdarg/ │ │ ├── arg.go │ │ ├── cmdarg.go │ │ └── errors.generated.go │ ├── common.go │ ├── common_test.go │ ├── crypto/ │ │ ├── aes.go │ │ ├── auth.go │ │ ├── auth_test.go │ │ ├── benchmark_test.go │ │ ├── chacha20.go │ │ ├── chacha20_test.go │ │ ├── chunk.go │ │ ├── chunk_test.go │ │ ├── crypto.go │ │ ├── errors.generated.go │ │ ├── internal/ │ │ │ ├── chacha.go │ │ │ ├── chacha_core.generated.go │ │ │ └── chacha_core_gen.go │ │ └── io.go │ ├── dice/ │ │ ├── dice.go │ │ └── dice_test.go │ ├── drain/ │ │ ├── drain.go │ │ ├── drainer.go │ │ └── errors.generated.go │ ├── dualStack/ │ │ ├── fusedPacketConn/ │ │ │ └── fusedPacketSocket.go │ │ └── happyEyeball/ │ │ └── racingDialer.go │ ├── environment/ │ │ ├── app.go │ │ ├── base.go │ │ ├── connection.go │ │ ├── deferredpersistentstorage/ │ │ │ └── defereredPersistentStorage.go │ │ ├── envctx/ │ │ │ └── env.go │ │ ├── envimpl/ │ │ │ └── fs.go │ │ ├── filesystemcap/ │ │ │ └── fscap.go │ │ ├── filesystemimpl/ │ │ │ └── fsimpl.go │ │ ├── proxy.go │ │ ├── rootcap.go │ │ ├── rootcap_impl.go │ │ ├── systemnetworkimpl/ │ │ │ └── systemnetwork.go │ │ ├── transientstorageimpl/ │ │ │ ├── errors.generated.go │ │ │ └── storage.go │ │ └── transport.go │ ├── errors/ │ │ ├── errors.go │ │ ├── errors_test.go │ │ └── multi_error.go │ ├── errors.generated.go │ ├── interfaces.go │ ├── log/ │ │ ├── access.go │ │ ├── log.go │ │ ├── log.pb.go │ │ ├── log.proto │ │ ├── log_test.go │ │ ├── logger.go │ │ └── logger_test.go │ ├── mux/ │ │ ├── client.go │ │ ├── client_test.go │ │ ├── errors.generated.go │ │ ├── frame.go │ │ ├── frame_test.go │ │ ├── mux.go │ │ ├── mux_test.go │ │ ├── reader.go │ │ ├── server.go │ │ ├── session.go │ │ ├── session_test.go │ │ └── writer.go │ ├── natTraversal/ │ │ └── stun/ │ │ ├── filteredStunConnection.go │ │ ├── natTypeTest.go │ │ ├── processor.go │ │ ├── stunClientConn.go │ │ └── stuncli/ │ │ └── stuncli.go │ ├── net/ │ │ ├── abstactOutbount/ │ │ │ ├── errors.generated.go │ │ │ └── outbound.go │ │ ├── address.go │ │ ├── address.pb.go │ │ ├── address.proto │ │ ├── address_test.go │ │ ├── connection.go │ │ ├── destination.go │ │ ├── destination.pb.go │ │ ├── destination.proto │ │ ├── destination_test.go │ │ ├── errors.generated.go │ │ ├── net.go │ │ ├── network.go │ │ ├── network.pb.go │ │ ├── network.proto │ │ ├── packetaddr/ │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── connection_adaptor.go │ │ │ ├── packetaddr.go │ │ │ ├── packetaddr_test.go │ │ │ └── special_address.go │ │ ├── port.go │ │ ├── port.pb.go │ │ ├── port.proto │ │ ├── port_test.go │ │ └── system.go │ ├── packetswitch/ │ │ ├── gvisorstack/ │ │ │ ├── adapter.go │ │ │ ├── adapter_test.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── dialer.go │ │ │ ├── stack.go │ │ │ └── tcp_listener.go │ │ ├── interconnect/ │ │ │ ├── interconnect.go │ │ │ ├── networkLayer_cable.go │ │ │ └── networkLayer_cable_test.go │ │ └── packetswitch.go │ ├── peer/ │ │ ├── latency.go │ │ └── peer.go │ ├── platform/ │ │ ├── ctlcmd/ │ │ │ └── attr_other.go │ │ ├── filesystem/ │ │ │ ├── file.go │ │ │ └── fsifce/ │ │ │ └── ifce.go │ │ ├── others.go │ │ ├── platform.go │ │ ├── platform_test.go │ │ ├── securedload/ │ │ │ ├── embedded.go │ │ │ ├── embeddedhash.go │ │ │ ├── errors.generated.go │ │ │ ├── file.go │ │ │ ├── securedload.go │ │ │ └── verify.go │ │ └── windows.go │ ├── protocol/ │ │ ├── account.go │ │ ├── address.go │ │ ├── address_test.go │ │ ├── bittorrent/ │ │ │ └── bittorrent.go │ │ ├── context.go │ │ ├── dns/ │ │ │ ├── errors.generated.go │ │ │ └── io.go │ │ ├── errors.generated.go │ │ ├── headers.go │ │ ├── headers.pb.go │ │ ├── headers.proto │ │ ├── http/ │ │ │ ├── headers.go │ │ │ ├── headers_test.go │ │ │ ├── sniff.go │ │ │ └── sniff_test.go │ │ ├── id.go │ │ ├── id_test.go │ │ ├── payload.go │ │ ├── protocol.go │ │ ├── quic/ │ │ │ ├── cipher_suite.go │ │ │ ├── sniff.go │ │ │ └── sniff_test.go │ │ ├── server_picker.go │ │ ├── server_picker_test.go │ │ ├── server_spec.go │ │ ├── server_spec.pb.go │ │ ├── server_spec.proto │ │ ├── server_spec_test.go │ │ ├── time.go │ │ ├── time_test.go │ │ ├── tls/ │ │ │ ├── cert/ │ │ │ │ ├── .gitignore │ │ │ │ ├── cert.go │ │ │ │ ├── cert_test.go │ │ │ │ ├── errors.generated.go │ │ │ │ └── privateKey.go │ │ │ ├── sniff.go │ │ │ └── sniff_test.go │ │ ├── udp/ │ │ │ ├── packet.go │ │ │ └── udp.go │ │ ├── user.go │ │ ├── user.pb.go │ │ └── user.proto │ ├── protoext/ │ │ ├── errors.generated.go │ │ ├── extensions.go │ │ ├── extensions.pb.go │ │ ├── extensions.proto │ │ └── testing/ │ │ ├── extension_test.go │ │ ├── test.pb.go │ │ └── test.proto │ ├── protofilter/ │ │ ├── errors.generated.go │ │ └── filter.go │ ├── registry/ │ │ ├── errors.generated.go │ │ ├── implementation_set.go │ │ ├── registry.go │ │ └── restrict.go │ ├── retry/ │ │ ├── errors.generated.go │ │ ├── retry.go │ │ └── retry_test.go │ ├── serial/ │ │ ├── resolver.go │ │ ├── serial.go │ │ ├── serial_test.go │ │ ├── string.go │ │ ├── string_test.go │ │ ├── typed_message.go │ │ └── typed_message_test.go │ ├── session/ │ │ ├── context.go │ │ └── session.go │ ├── signal/ │ │ ├── done/ │ │ │ └── done.go │ │ ├── notifier.go │ │ ├── notifier_test.go │ │ ├── pubsub/ │ │ │ ├── pubsub.go │ │ │ └── pubsub_test.go │ │ ├── semaphore/ │ │ │ └── semaphore.go │ │ ├── timer.go │ │ └── timer_test.go │ ├── strmatcher/ │ │ ├── benchmark_indexmatcher_test.go │ │ ├── benchmark_matchers_test.go │ │ ├── indexmatcher_linear.go │ │ ├── indexmatcher_linear_test.go │ │ ├── indexmatcher_mph.go │ │ ├── indexmatcher_mph_test.go │ │ ├── matchergroup_ac_automation.go │ │ ├── matchergroup_ac_automation_test.go │ │ ├── matchergroup_domain.go │ │ ├── matchergroup_domain_test.go │ │ ├── matchergroup_full.go │ │ ├── matchergroup_full_test.go │ │ ├── matchergroup_mph.go │ │ ├── matchergroup_mph_test.go │ │ ├── matchergroup_simple.go │ │ ├── matchergroup_simple_test.go │ │ ├── matchergroup_substr.go │ │ ├── matchergroup_substr_test.go │ │ ├── matchers.go │ │ ├── matchers_test.go │ │ └── strmatcher.go │ ├── taggedfeatures/ │ │ ├── configloader.go │ │ ├── creator.go │ │ ├── errors.generated.go │ │ ├── holder.go │ │ ├── skeleton.pb.go │ │ ├── skeleton.proto │ │ └── taggedfeatures.go │ ├── task/ │ │ ├── common.go │ │ ├── periodic.go │ │ ├── periodic_test.go │ │ ├── task.go │ │ ├── taskDerive/ │ │ │ ├── derive.go │ │ │ ├── errors.generated.go │ │ │ └── tryAll.go │ │ └── task_test.go │ ├── type.go │ ├── type_test.go │ ├── units/ │ │ ├── bytesize.go │ │ └── bytesize_test.go │ └── uuid/ │ ├── uuid.go │ └── uuid_test.go ├── config.go ├── config.pb.go ├── config.proto ├── context.go ├── context_test.go ├── core.go ├── errors.generated.go ├── features/ │ ├── dns/ │ │ ├── client.go │ │ ├── fakedns.go │ │ └── localdns/ │ │ ├── client.go │ │ └── errors.generated.go │ ├── errors.generated.go │ ├── extension/ │ │ ├── browser.go │ │ ├── contextreceiver.go │ │ ├── instance.go │ │ ├── observatory.go │ │ ├── storage/ │ │ │ └── storage.go │ │ └── storage.go │ ├── feature.go │ ├── inbound/ │ │ └── inbound.go │ ├── outbound/ │ │ └── outbound.go │ ├── policy/ │ │ ├── default.go │ │ └── policy.go │ ├── routing/ │ │ ├── balancer.go │ │ ├── context.go │ │ ├── dispatcher.go │ │ ├── dns/ │ │ │ ├── context.go │ │ │ └── errors.generated.go │ │ ├── router.go │ │ └── session/ │ │ └── context.go │ └── stats/ │ ├── errors.generated.go │ └── stats.go ├── format.go ├── functions.go ├── functions_test.go ├── go.mod ├── go.sum ├── infra/ │ ├── conf/ │ │ ├── cfgcommon/ │ │ │ ├── buildable.go │ │ │ ├── common.go │ │ │ ├── common_test.go │ │ │ ├── duration/ │ │ │ │ ├── duration.go │ │ │ │ └── duration_test.go │ │ │ ├── errors.generated.go │ │ │ ├── loader/ │ │ │ │ ├── errors.generated.go │ │ │ │ └── loader.go │ │ │ ├── muxcfg/ │ │ │ │ └── mux.go │ │ │ ├── proxycfg/ │ │ │ │ ├── errors.generated.go │ │ │ │ └── proxy.go │ │ │ ├── session.go │ │ │ ├── sniffer/ │ │ │ │ ├── errors.generated.go │ │ │ │ └── sniffer.go │ │ │ ├── socketcfg/ │ │ │ │ └── socket.go │ │ │ ├── testassist/ │ │ │ │ └── general.go │ │ │ └── tlscfg/ │ │ │ ├── errors.generated.go │ │ │ └── tls.go │ │ ├── geodata/ │ │ │ ├── attr.go │ │ │ ├── errors.generated.go │ │ │ ├── geodata.go │ │ │ ├── geodata_test.go │ │ │ ├── geodataproto.go │ │ │ ├── memconservative/ │ │ │ │ ├── cache.go │ │ │ │ ├── decode.go │ │ │ │ ├── decode_test.go │ │ │ │ ├── errors.generated.go │ │ │ │ └── memc.go │ │ │ └── standard/ │ │ │ ├── errors.generated.go │ │ │ └── standard.go │ │ ├── json/ │ │ │ ├── json_test.go │ │ │ ├── reader.go │ │ │ ├── reader_test.go │ │ │ ├── toml.go │ │ │ ├── toml_test.go │ │ │ ├── yaml.go │ │ │ └── yaml_test.go │ │ ├── jsonpb/ │ │ │ ├── errors.generated.go │ │ │ └── jsonpb.go │ │ ├── merge/ │ │ │ ├── errors.generated.go │ │ │ ├── map.go │ │ │ ├── merge.go │ │ │ ├── merge_test.go │ │ │ ├── priority.go │ │ │ ├── rules.go │ │ │ └── tag.go │ │ ├── mergers/ │ │ │ ├── errors.generated.go │ │ │ ├── extensions.go │ │ │ ├── merge.go │ │ │ ├── merger_base.go │ │ │ ├── mergers.go │ │ │ └── names.go │ │ ├── rule/ │ │ │ ├── errors.generated.go │ │ │ ├── rule.go │ │ │ └── rule_test.go │ │ ├── serial/ │ │ │ ├── errors.generated.go │ │ │ ├── loader.go │ │ │ ├── loader_test.go │ │ │ └── serial.go │ │ ├── synthetic/ │ │ │ ├── dns/ │ │ │ │ ├── dns.go │ │ │ │ ├── dns_test.go │ │ │ │ ├── errors.generated.go │ │ │ │ └── fakedns.go │ │ │ ├── log/ │ │ │ │ └── log.go │ │ │ └── router/ │ │ │ ├── errors.generated.go │ │ │ ├── router.go │ │ │ ├── router_strategy.go │ │ │ └── router_test.go │ │ ├── v2jsonpb/ │ │ │ ├── any2.go │ │ │ ├── errors.generated.go │ │ │ ├── follower.go │ │ │ ├── followerany.go │ │ │ ├── followerlist.go │ │ │ ├── followermap.go │ │ │ └── v2jsonpb.go │ │ ├── v4/ │ │ │ ├── api.go │ │ │ ├── blackhole.go │ │ │ ├── blackhole_test.go │ │ │ ├── browser_forwarder.go │ │ │ ├── conf.go │ │ │ ├── dns_proxy.go │ │ │ ├── dns_proxy_test.go │ │ │ ├── dokodemo.go │ │ │ ├── dokodemo_test.go │ │ │ ├── errors.generated.go │ │ │ ├── freedom.go │ │ │ ├── freedom_test.go │ │ │ ├── gun.go │ │ │ ├── http.go │ │ │ ├── http_test.go │ │ │ ├── hysteria2.go │ │ │ ├── lint.go │ │ │ ├── loopback.go │ │ │ ├── observatory.go │ │ │ ├── policy.go │ │ │ ├── policy_test.go │ │ │ ├── reverse.go │ │ │ ├── reverse_test.go │ │ │ ├── services.go │ │ │ ├── shadowsocks.go │ │ │ ├── shadowsocks_test.go │ │ │ ├── socks.go │ │ │ ├── socks_test.go │ │ │ ├── transport.go │ │ │ ├── transport_authenticators.go │ │ │ ├── transport_internet.go │ │ │ ├── transport_test.go │ │ │ ├── trojan.go │ │ │ ├── v2ray.go │ │ │ ├── v2ray_test.go │ │ │ ├── vless.go │ │ │ ├── vless_test.go │ │ │ ├── vmess.go │ │ │ └── vmess_test.go │ │ └── v5cfg/ │ │ ├── common.go │ │ ├── errors.generated.go │ │ ├── inbound.go │ │ ├── init.go │ │ ├── outbound.go │ │ ├── root.go │ │ ├── skeleton.go │ │ ├── stream.go │ │ └── v5cfg.go │ └── vformat/ │ └── main.go ├── main/ │ ├── commands/ │ │ ├── all/ │ │ │ ├── api/ │ │ │ │ ├── api.go │ │ │ │ ├── balancer_info.go │ │ │ │ ├── balancer_override.go │ │ │ │ ├── jsonv4/ │ │ │ │ │ ├── inbounds_add.go │ │ │ │ │ ├── inbounds_remove.go │ │ │ │ │ ├── init.go │ │ │ │ │ ├── outbounds_add.go │ │ │ │ │ └── outbounds_remove.go │ │ │ │ ├── log.go │ │ │ │ ├── shared.go │ │ │ │ └── stats.go │ │ │ ├── commands.go │ │ │ ├── engineering/ │ │ │ │ ├── convertpb.go │ │ │ │ ├── encodedataurl.go │ │ │ │ ├── engineering.go │ │ │ │ ├── errors.generated.go │ │ │ │ ├── generateRandomData/ │ │ │ │ │ ├── errors.generated.go │ │ │ │ │ └── generateRandomData.go │ │ │ │ ├── nonnativelinkexec.go │ │ │ │ ├── nonnativelinkextract.go │ │ │ │ ├── reversepb.go │ │ │ │ └── subscriptionEntriesExtract.go │ │ │ ├── errors.generated.go │ │ │ ├── format_doc.go │ │ │ ├── jsonv4/ │ │ │ │ ├── convert.go │ │ │ │ └── init.go │ │ │ ├── love.go │ │ │ ├── merge_doc.go │ │ │ ├── tls/ │ │ │ │ ├── cert.go │ │ │ │ ├── chainhash.go │ │ │ │ ├── ping.go │ │ │ │ └── tls.go │ │ │ ├── uuid.go │ │ │ └── verify.go │ │ ├── base/ │ │ │ ├── command.go │ │ │ ├── env.go │ │ │ ├── execute.go │ │ │ ├── help.go │ │ │ └── root.go │ │ ├── errors.generated.go │ │ ├── helpers/ │ │ │ ├── config_load.go │ │ │ └── fs.go │ │ ├── run.go │ │ ├── test.go │ │ └── version.go │ ├── distro/ │ │ ├── all/ │ │ │ ├── all.go │ │ │ ├── pion.go │ │ │ └── wireguard.go │ │ └── debug/ │ │ └── debug.go │ ├── errors.generated.go │ ├── formats/ │ │ ├── errors.generated.go │ │ └── formats.go │ ├── main.go │ ├── main_test.go │ ├── plugins/ │ │ ├── plugin.go │ │ └── plugin_pprof/ │ │ └── plugin_pprof.go │ └── v2binding/ │ ├── startUp.go │ ├── v2api/ │ │ └── api.go │ └── v2binding.go ├── mocks.go ├── proto.go ├── proxy/ │ ├── blackhole/ │ │ ├── blackhole.go │ │ ├── blackhole_test.go │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── config_test.go │ │ └── errors.generated.go │ ├── dns/ │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── dns.go │ │ ├── dns_test.go │ │ └── errors.generated.go │ ├── dokodemo/ │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── dokodemo.go │ │ └── errors.generated.go │ ├── freedom/ │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ └── freedom.go │ ├── http/ │ │ ├── client.go │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ ├── http.go │ │ ├── server.go │ │ └── simplified/ │ │ ├── config.go │ │ ├── config.pb.go │ │ └── config.proto │ ├── hysteria2/ │ │ ├── client.go │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ ├── hysteria2.go │ │ ├── protocol.go │ │ └── server.go │ ├── loopback/ │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ └── loopback.go │ ├── proxy.go │ ├── shadowsocks/ │ │ ├── client.go │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── config_test.go │ │ ├── errors.generated.go │ │ ├── protocol.go │ │ ├── protocol_test.go │ │ ├── server.go │ │ ├── shadowsocks.go │ │ └── simplified/ │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ └── errors.generated.go │ ├── shadowsocks2022/ │ │ ├── client.go │ │ ├── client_session.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── eih_aes.go │ │ ├── encoding.go │ │ ├── errors.generated.go │ │ ├── kdf_blake3.go │ │ ├── method_aes128gcm.go │ │ ├── method_aes256gcm.go │ │ ├── requestsalt.go │ │ ├── ss2022.go │ │ └── udp_aes.go │ ├── socks/ │ │ ├── client.go │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ ├── protocol.go │ │ ├── protocol_test.go │ │ ├── server.go │ │ ├── simplified/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ └── config.proto │ │ └── socks.go │ ├── trojan/ │ │ ├── client.go │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ ├── protocol.go │ │ ├── protocol_test.go │ │ ├── server.go │ │ ├── simplified/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ └── config.proto │ │ ├── trojan.go │ │ └── validator.go │ ├── vless/ │ │ ├── account.go │ │ ├── account.pb.go │ │ ├── account.proto │ │ ├── encoding/ │ │ │ ├── addons.go │ │ │ ├── addons.pb.go │ │ │ ├── addons.proto │ │ │ ├── encoding.go │ │ │ ├── encoding_test.go │ │ │ └── errors.generated.go │ │ ├── errors.generated.go │ │ ├── inbound/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── errors.generated.go │ │ │ └── inbound.go │ │ ├── outbound/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── errors.generated.go │ │ │ └── outbound.go │ │ ├── validator.go │ │ └── vless.go │ ├── vlite/ │ │ ├── inbound/ │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── connAdp.go │ │ │ ├── errors.generated.go │ │ │ └── inbound.go │ │ ├── outbound/ │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── errors.generated.go │ │ │ └── outbound.go │ │ └── vlite.go │ ├── vmess/ │ │ ├── account.go │ │ ├── account.pb.go │ │ ├── account.proto │ │ ├── aead/ │ │ │ ├── authid.go │ │ │ ├── authid_test.go │ │ │ ├── consts.go │ │ │ ├── encrypt.go │ │ │ ├── encrypt_test.go │ │ │ ├── kdf.go │ │ │ └── kdf_test.go │ │ ├── encoding/ │ │ │ ├── auth.go │ │ │ ├── auth_test.go │ │ │ ├── client.go │ │ │ ├── commands.go │ │ │ ├── commands_test.go │ │ │ ├── encoding.go │ │ │ ├── encoding_test.go │ │ │ ├── errors.generated.go │ │ │ └── server.go │ │ ├── errors.generated.go │ │ ├── inbound/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── errors.generated.go │ │ │ └── inbound.go │ │ ├── outbound/ │ │ │ ├── command.go │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── errors.generated.go │ │ │ └── outbound.go │ │ ├── validator.go │ │ ├── validator_test.go │ │ ├── vmess.go │ │ └── vmessCtxInterface.go │ └── wireguard/ │ ├── outbound/ │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── errors.generated.go │ │ └── outbound.go │ └── wgcommon/ │ ├── config.pb.go │ ├── config.proto │ ├── errors.generated.go │ ├── filterDebug.go │ ├── setup.go │ ├── wgConnAdaptor.go │ ├── wgConnAdaptor_test.go │ ├── wgDeviceAdaptor.go │ ├── wgDeviceAdaptor_test.go │ ├── wgLogAdaptor.go │ ├── wgcommon.go │ └── wgdevice.go ├── release/ │ ├── config/ │ │ ├── config.json │ │ ├── systemd/ │ │ │ └── system/ │ │ │ ├── v2ray.service │ │ │ └── v2ray@.service │ │ ├── vpoint_socks_vmess.json │ │ └── vpoint_vmess_freedom.json │ ├── container/ │ │ ├── Containerfile │ │ └── downloadAssets.sh │ ├── debian/ │ │ ├── changelog │ │ ├── control │ │ ├── copyright │ │ ├── rules │ │ ├── source/ │ │ │ └── format │ │ ├── v2ray-docs.docs │ │ ├── v2ray-domain-list-community.install │ │ ├── v2ray-geoip-only-cn-private.install │ │ ├── v2ray-geoip.install │ │ ├── v2ray.install │ │ ├── v2ray.service │ │ └── v2ray@.service │ ├── extra/ │ │ └── browserforwarder/ │ │ ├── index.html │ │ └── index.js │ ├── friendly-filenames.json │ ├── install-release.sh │ ├── requestsign.sh │ └── user-package.sh ├── testing/ │ ├── mocks/ │ │ ├── dns.go │ │ ├── io.go │ │ ├── log.go │ │ ├── mux.go │ │ ├── outbound.go │ │ └── proxy.go │ ├── scenarios/ │ │ ├── cert/ │ │ │ ├── self-signed_cert.pem │ │ │ └── self-signed_key.pem │ │ ├── command_test.go │ │ ├── common.go │ │ ├── common_coverage.go │ │ ├── common_instanceMgr.go │ │ ├── common_instanceMgr_test.go │ │ ├── common_regular.go │ │ ├── config/ │ │ │ ├── grpc_client.json │ │ │ ├── grpc_server.json │ │ │ ├── grpc_servicename_client.json │ │ │ ├── grpc_servicename_server.json │ │ │ ├── httpupgrade_client.json │ │ │ ├── httpupgrade_earlydataShortEarlyData_client.json │ │ │ ├── httpupgrade_earlydataShortEarlyData_server.json │ │ │ ├── httpupgrade_earlydata_client.json │ │ │ ├── httpupgrade_earlydata_server.json │ │ │ ├── httpupgrade_server.json │ │ │ ├── meek_client.json │ │ │ ├── meek_server.json │ │ │ ├── mekya_client.json │ │ │ └── mekya_server.json │ │ ├── dns_test.go │ │ ├── dokodemo_test.go │ │ ├── feature_test.go │ │ ├── grpc_test.go │ │ ├── http_test.go │ │ ├── httpupgrade_test.go │ │ ├── hy2_test.go │ │ ├── meek_test.go │ │ ├── mekya_test.go │ │ ├── policy_test.go │ │ ├── reverse_test.go │ │ ├── shadowsocks_test.go │ │ ├── socks_test.go │ │ ├── tls_test.go │ │ ├── transport_test.go │ │ └── vmess_test.go │ └── servers/ │ ├── http/ │ │ └── http.go │ ├── tcp/ │ │ ├── port.go │ │ └── tcp.go │ └── udp/ │ ├── port.go │ └── udp.go ├── transport/ │ ├── config.go │ ├── config.pb.go │ ├── config.proto │ ├── internet/ │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── connection.go │ │ ├── dialer.go │ │ ├── dialer_test.go │ │ ├── domainsocket/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── dial.go │ │ │ ├── errgen.go │ │ │ ├── errors.generated.go │ │ │ ├── listener.go │ │ │ └── listener_test.go │ │ ├── dtls/ │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── dialer.go │ │ │ ├── dtls.go │ │ │ ├── errors.generated.go │ │ │ └── listener.go │ │ ├── errors.generated.go │ │ ├── filelocker.go │ │ ├── filelocker_other.go │ │ ├── filelocker_windows.go │ │ ├── grpc/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── dial.go │ │ │ ├── encoding/ │ │ │ │ ├── conn.go │ │ │ │ ├── customSeviceName.go │ │ │ │ ├── encoding.go │ │ │ │ ├── errors.generated.go │ │ │ │ ├── stream.pb.go │ │ │ │ ├── stream.proto │ │ │ │ └── stream_grpc.pb.go │ │ │ ├── errors.generated.go │ │ │ ├── grpc.go │ │ │ └── hub.go │ │ ├── header.go │ │ ├── header_test.go │ │ ├── headers/ │ │ │ ├── http/ │ │ │ │ ├── config.go │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── errors.generated.go │ │ │ │ ├── http.go │ │ │ │ ├── http_test.go │ │ │ │ ├── linkedreadRequest.go │ │ │ │ └── resp.go │ │ │ ├── noop/ │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ └── noop.go │ │ │ ├── srtp/ │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── srtp.go │ │ │ │ └── srtp_test.go │ │ │ ├── tls/ │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── dtls.go │ │ │ │ └── dtls_test.go │ │ │ ├── utp/ │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── utp.go │ │ │ │ └── utp_test.go │ │ │ ├── wechat/ │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── wechat.go │ │ │ │ └── wechat_test.go │ │ │ └── wireguard/ │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ └── wireguard.go │ │ ├── http/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── dialer.go │ │ │ ├── errors.generated.go │ │ │ ├── http.go │ │ │ ├── http_test.go │ │ │ └── hub.go │ │ ├── httpupgrade/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── connection.go │ │ │ ├── dialer.go │ │ │ ├── errors.generated.go │ │ │ ├── httpupgrade.go │ │ │ └── hub.go │ │ ├── hysteria2/ │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── conn.go │ │ │ ├── dialer.go │ │ │ ├── errors.generated.go │ │ │ ├── hub.go │ │ │ ├── hy2_transport_test.go │ │ │ └── hysteria2.go │ │ ├── internet.go │ │ ├── kcp/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── connection.go │ │ │ ├── connection_test.go │ │ │ ├── crypt.go │ │ │ ├── crypt_test.go │ │ │ ├── cryptreal.go │ │ │ ├── dialer.go │ │ │ ├── errors.generated.go │ │ │ ├── io.go │ │ │ ├── io_test.go │ │ │ ├── kcp.go │ │ │ ├── kcp_test.go │ │ │ ├── listener.go │ │ │ ├── output.go │ │ │ ├── receiving.go │ │ │ ├── segment.go │ │ │ ├── segment_test.go │ │ │ ├── sending.go │ │ │ ├── xor.go │ │ │ ├── xor_amd64.go │ │ │ └── xor_amd64.s │ │ ├── memory_settings.go │ │ ├── quic/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── conn.go │ │ │ ├── dialer.go │ │ │ ├── errors.generated.go │ │ │ ├── hub.go │ │ │ ├── pool.go │ │ │ ├── quic.go │ │ │ └── quic_test.go │ │ ├── request/ │ │ │ ├── assembler/ │ │ │ │ ├── packetconn/ │ │ │ │ │ ├── errors.generated.go │ │ │ │ │ ├── packetConn.pb.go │ │ │ │ │ ├── packetConn.proto │ │ │ │ │ ├── packetbundle.go │ │ │ │ │ ├── packetconn.go │ │ │ │ │ ├── req2packet.go │ │ │ │ │ ├── udpassembler.go │ │ │ │ │ ├── udpassemblerClient.go │ │ │ │ │ └── udpassemblerServer.go │ │ │ │ └── simple/ │ │ │ │ ├── client.go │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── errors.generated.go │ │ │ │ ├── server.go │ │ │ │ └── simple.go │ │ │ ├── assembler.go │ │ │ ├── assembly/ │ │ │ │ ├── assembly.go │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── dialer.go │ │ │ │ ├── errors.generated.go │ │ │ │ └── hub.go │ │ │ ├── options.go │ │ │ ├── request.go │ │ │ ├── reverser.go │ │ │ ├── roundtripper/ │ │ │ │ └── httprt/ │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── errors.generated.go │ │ │ │ └── httprt.go │ │ │ ├── roundtripper.go │ │ │ ├── roundtripperreverserserver/ │ │ │ │ ├── accesschecker_password.go │ │ │ │ ├── accesschecker_password_test.go │ │ │ │ ├── clicommand/ │ │ │ │ │ ├── errors.generated.go │ │ │ │ │ ├── generate_token_cli.go │ │ │ │ │ └── roundTripperReserseServerCli.go │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── errors.generated.go │ │ │ │ ├── reverser.go │ │ │ │ ├── reverserimpl.go │ │ │ │ └── reverserimpl_test.go │ │ │ └── stereotype/ │ │ │ ├── meek/ │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── errors.generated.go │ │ │ │ └── meek.go │ │ │ └── mekya/ │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── errors.generated.go │ │ │ └── mekya.go │ │ ├── security/ │ │ │ ├── connprop.go │ │ │ ├── errors.generated.go │ │ │ ├── security.go │ │ │ └── util.go │ │ ├── socket_activation_other.go │ │ ├── socket_activation_unix.go │ │ ├── sockopt.go │ │ ├── sockopt_darwin.go │ │ ├── sockopt_freebsd.go │ │ ├── sockopt_linux.go │ │ ├── sockopt_linux_test.go │ │ ├── sockopt_other.go │ │ ├── sockopt_test.go │ │ ├── sockopt_windows.go │ │ ├── system_dialer.go │ │ ├── system_dns_android.go │ │ ├── system_dns_android_test.go │ │ ├── system_listener.go │ │ ├── system_listener_test.go │ │ ├── tagged/ │ │ │ ├── tagged.go │ │ │ └── taggedimpl/ │ │ │ ├── errors.generated.go │ │ │ ├── impl.go │ │ │ └── taggedimpl.go │ │ ├── tcp/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── dialer.go │ │ │ ├── errors.generated.go │ │ │ ├── hub.go │ │ │ ├── sockopt_freebsd.go │ │ │ ├── sockopt_linux.go │ │ │ ├── sockopt_linux_test.go │ │ │ ├── sockopt_other.go │ │ │ └── tcp.go │ │ ├── tcp_hub.go │ │ ├── tls/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── config_other.go │ │ │ ├── config_test.go │ │ │ ├── config_windows.go │ │ │ ├── ech.go │ │ │ ├── ech_go122.go │ │ │ ├── engine.go │ │ │ ├── errors.generated.go │ │ │ ├── pin.go │ │ │ ├── pin_test.go │ │ │ ├── tls.go │ │ │ └── utls/ │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── errors.generated.go │ │ │ ├── nameMapper.go │ │ │ └── utls.go │ │ ├── tlsmirror/ │ │ │ ├── data.pb.go │ │ │ ├── data.proto │ │ │ ├── httponconnection/ │ │ │ │ ├── errors.generated.go │ │ │ │ └── singleconnhttp.go │ │ │ ├── interface.go │ │ │ ├── mirrorbase/ │ │ │ │ ├── base.go │ │ │ │ ├── conn.go │ │ │ │ ├── crypto.go │ │ │ │ ├── crypto_test.go │ │ │ │ └── errors.generated.go │ │ │ ├── mirrorcommon/ │ │ │ │ ├── handshake.go │ │ │ │ ├── loopback_protect.go │ │ │ │ ├── record.go │ │ │ │ ├── record_consts.go │ │ │ │ └── recordstream.go │ │ │ ├── mirrorcrypto/ │ │ │ │ ├── decryptor.go │ │ │ │ ├── derive_key.go │ │ │ │ ├── encrypter.go │ │ │ │ ├── errors.generated.go │ │ │ │ ├── mirrorcrypto.go │ │ │ │ ├── tls_cipher_suites.go │ │ │ │ └── tls_cipher_suites_linkname.go │ │ │ ├── mirrorenrollment/ │ │ │ │ ├── cancelContextOnCloseConn.go │ │ │ │ ├── clicommand/ │ │ │ │ │ └── enrollmentlink_cli.go │ │ │ │ ├── client.go │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── enrollment.go │ │ │ │ ├── enrollmentlink.go │ │ │ │ ├── enrollmentlink_test.go │ │ │ │ ├── errors.generated.go │ │ │ │ ├── httpenrollmentconfirmation/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── clientbuilder.go │ │ │ │ │ ├── enrollment.go │ │ │ │ │ ├── errors.generated.go │ │ │ │ │ ├── hub.go │ │ │ │ │ └── server.go │ │ │ │ ├── keyderivation.go │ │ │ │ ├── roundtripperenrollmentconfirmation/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── config.pb.go │ │ │ │ │ ├── config.proto │ │ │ │ │ ├── errors.generated.go │ │ │ │ │ ├── rttconfirmation.go │ │ │ │ │ ├── server.go │ │ │ │ │ └── serverinverserole.go │ │ │ │ ├── server.go │ │ │ │ └── serverenrollmentprocessor.go │ │ │ ├── server/ │ │ │ │ ├── ciphersuits_lookup.go │ │ │ │ ├── client.go │ │ │ │ ├── client_conn.go │ │ │ │ ├── config.pb.go │ │ │ │ ├── config.proto │ │ │ │ ├── conn.go │ │ │ │ ├── errors.generated.go │ │ │ │ ├── hub.go │ │ │ │ ├── outbound.go │ │ │ │ ├── padding.go │ │ │ │ └── server.go │ │ │ └── tlstrafficgen/ │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── errors.generated.go │ │ │ └── trafficgen.go │ │ ├── transportcommon/ │ │ │ ├── dialer.go │ │ │ ├── errors.generated.go │ │ │ ├── httpDialer.go │ │ │ ├── listener.go │ │ │ └── tansportcommon.go │ │ ├── udp/ │ │ │ ├── config.go │ │ │ ├── config.pb.go │ │ │ ├── config.proto │ │ │ ├── copy.go │ │ │ ├── dialer.go │ │ │ ├── dispatcher.go │ │ │ ├── dispatcher_packetaddr.go │ │ │ ├── dispatcher_split.go │ │ │ ├── dispatcher_split_test.go │ │ │ ├── errors.generated.go │ │ │ ├── hub.go │ │ │ ├── hub_freebsd.go │ │ │ ├── hub_linux.go │ │ │ ├── hub_other.go │ │ │ ├── monodest.go │ │ │ └── udp.go │ │ └── websocket/ │ │ ├── config.go │ │ ├── config.pb.go │ │ ├── config.proto │ │ ├── connection.go │ │ ├── connforwarder.go │ │ ├── dialer.go │ │ ├── errors.generated.go │ │ ├── hub.go │ │ ├── ws.go │ │ └── ws_test.go │ ├── link.go │ └── pipe/ │ ├── impl.go │ ├── pipe.go │ ├── pipe_test.go │ ├── reader.go │ └── writer.go ├── v2ray.go └── v2ray_test.go