Full Code of cloudflare/cloudflared for AI

master d2a87e9b9345 cached
3152 files
31.3 MB
4.1M tokens
30528 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (16,443K chars total). Download the full file to get everything.
Repository: cloudflare/cloudflared
Branch: master
Commit: d2a87e9b9345
Files: 3152
Total size: 31.3 MB

Directory structure:
gitextract_x69hvzqa/

├── .ci/
│   ├── apt-internal.gitlab-ci.yml
│   ├── ci-image.gitlab-ci.yml
│   ├── commons.gitlab-ci.yml
│   ├── github.gitlab-ci.yml
│   ├── image/
│   │   ├── .docker-images
│   │   └── Dockerfile
│   ├── linux.gitlab-ci.yml
│   ├── mac.gitlab-ci.yml
│   ├── release.gitlab-ci.yml
│   ├── scripts/
│   │   ├── component-tests.sh
│   │   ├── fmt-check.sh
│   │   ├── github-push.sh
│   │   ├── linux/
│   │   │   ├── build-packages-fips.sh
│   │   │   └── build-packages.sh
│   │   ├── mac/
│   │   │   ├── build.sh
│   │   │   └── install-go.sh
│   │   ├── package-windows.sh
│   │   ├── release-target.sh
│   │   ├── vuln-check.sh
│   │   └── windows/
│   │       ├── builds.ps1
│   │       ├── component-test.ps1
│   │       ├── go-wrapper.ps1
│   │       └── sign-msi.ps1
│   └── windows.gitlab-ci.yml
├── .docker-images
├── .dockerignore
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── ---bug-report.md
│   │   ├── ---documentation.md
│   │   └── ---feature-request.md
│   └── workflows/
│       ├── check.yaml
│       └── semgrep.yml
├── .gitignore
├── .gitlab-ci.yml
├── .golangci.yaml
├── .mac_resources/
│   ├── scripts/
│   │   └── postinstall
│   └── uninstall.sh
├── .vulnignore
├── AGENTS.md
├── CHANGES.md
├── Dockerfile
├── Dockerfile.amd64
├── Dockerfile.arm64
├── LICENSE
├── Makefile
├── README.md
├── RELEASE_NOTES
├── carrier/
│   ├── carrier.go
│   ├── carrier_test.go
│   ├── websocket.go
│   └── websocket_test.go
├── catalog-info.yaml
├── cfapi/
│   ├── base_client.go
│   ├── client.go
│   ├── hostname.go
│   ├── hostname_test.go
│   ├── ip_route.go
│   ├── ip_route_filter.go
│   ├── ip_route_test.go
│   ├── tunnel.go
│   ├── tunnel_filter.go
│   ├── tunnel_test.go
│   ├── virtual_network.go
│   ├── virtual_network_filter.go
│   └── virtual_network_test.go
├── cfio/
│   └── copy.go
├── cfsetup.yaml
├── check-fips.sh
├── client/
│   ├── config.go
│   └── config_test.go
├── cloudflared.wxs
├── cloudflared_man_template
├── cmd/
│   └── cloudflared/
│       ├── access/
│       │   ├── carrier.go
│       │   ├── cmd.go
│       │   ├── validation.go
│       │   └── validation_test.go
│       ├── app_forward_service.go
│       ├── app_service.go
│       ├── cliutil/
│       │   ├── build_info.go
│       │   ├── deprecated.go
│       │   ├── errors.go
│       │   ├── handler.go
│       │   ├── logger.go
│       │   └── management.go
│       ├── common_service.go
│       ├── flags/
│       │   └── flags.go
│       ├── generic_service.go
│       ├── linux_service.go
│       ├── macos_service.go
│       ├── main.go
│       ├── management/
│       │   ├── cmd.go
│       │   └── cmd_test.go
│       ├── proxydns/
│       │   └── cmd.go
│       ├── service_template.go
│       ├── tail/
│       │   └── cmd.go
│       ├── tunnel/
│       │   ├── cmd.go
│       │   ├── cmd_test.go
│       │   ├── configuration.go
│       │   ├── configuration_test.go
│       │   ├── credential_finder.go
│       │   ├── filesystem.go
│       │   ├── info.go
│       │   ├── ingress_subcommands.go
│       │   ├── login.go
│       │   ├── quick_tunnel.go
│       │   ├── signal.go
│       │   ├── signal_test.go
│       │   ├── subcommand_context.go
│       │   ├── subcommand_context_teamnet.go
│       │   ├── subcommand_context_test.go
│       │   ├── subcommand_context_vnets.go
│       │   ├── subcommands.go
│       │   ├── subcommands_test.go
│       │   ├── tag.go
│       │   ├── tag_test.go
│       │   ├── teamnet_subcommands.go
│       │   └── vnets_subcommands.go
│       ├── updater/
│       │   ├── check.go
│       │   ├── service.go
│       │   ├── update.go
│       │   ├── update_test.go
│       │   ├── workers_service.go
│       │   ├── workers_service_test.go
│       │   └── workers_update.go
│       └── windows_service.go
├── component-tests/
│   ├── .gitignore
│   ├── README.md
│   ├── cli.py
│   ├── config.py
│   ├── config.yaml
│   ├── conftest.py
│   ├── constants.py
│   ├── requirements.txt
│   ├── setup.py
│   ├── test_config.py
│   ├── test_edge_discovery.py
│   ├── test_logging.py
│   ├── test_management.py
│   ├── test_pq.py
│   ├── test_quicktunnels.py
│   ├── test_reconnect.py
│   ├── test_service.py
│   ├── test_tail.py
│   ├── test_termination.py
│   ├── test_token.py
│   ├── test_tunnel.py
│   └── util.py
├── config/
│   ├── configuration.go
│   ├── configuration_test.go
│   ├── manager.go
│   ├── manager_test.go
│   └── model.go
├── connection/
│   ├── connection.go
│   ├── connection_test.go
│   ├── control.go
│   ├── errors.go
│   ├── event.go
│   ├── header.go
│   ├── header_test.go
│   ├── http2.go
│   ├── http2_test.go
│   ├── json.go
│   ├── metrics.go
│   ├── observer.go
│   ├── observer_test.go
│   ├── protocol.go
│   ├── protocol_test.go
│   ├── quic.go
│   ├── quic_connection.go
│   ├── quic_connection_test.go
│   ├── quic_datagram_v2.go
│   ├── quic_datagram_v2_test.go
│   ├── quic_datagram_v3.go
│   └── tunnelsforha.go
├── credentials/
│   ├── credentials.go
│   ├── credentials_test.go
│   ├── origin_cert.go
│   ├── origin_cert_test.go
│   ├── test-cert-no-token.pem
│   ├── test-cert-unknown-block.pem
│   └── test-cloudflare-tunnel-cert-json.pem
├── datagramsession/
│   ├── event.go
│   ├── manager.go
│   ├── manager_test.go
│   ├── metrics.go
│   ├── session.go
│   └── session_test.go
├── diagnostic/
│   ├── client.go
│   ├── consts.go
│   ├── diagnostic.go
│   ├── diagnostic_utils.go
│   ├── diagnostic_utils_test.go
│   ├── error.go
│   ├── handlers.go
│   ├── handlers_test.go
│   ├── log_collector.go
│   ├── log_collector_docker.go
│   ├── log_collector_host.go
│   ├── log_collector_kubernetes.go
│   ├── log_collector_utils.go
│   ├── network/
│   │   ├── collector.go
│   │   ├── collector_unix.go
│   │   ├── collector_unix_test.go
│   │   ├── collector_utils.go
│   │   ├── collector_windows.go
│   │   └── collector_windows_test.go
│   ├── system_collector.go
│   ├── system_collector_linux.go
│   ├── system_collector_macos.go
│   ├── system_collector_test.go
│   ├── system_collector_utils.go
│   └── system_collector_windows.go
├── edgediscovery/
│   ├── allregions/
│   │   ├── address.go
│   │   ├── address_test.go
│   │   ├── discovery.go
│   │   ├── discovery_test.go
│   │   ├── mocks_for_test.go
│   │   ├── region.go
│   │   ├── region_test.go
│   │   ├── regions.go
│   │   ├── regions_test.go
│   │   └── usedby.go
│   ├── dial.go
│   ├── edgediscovery.go
│   ├── edgediscovery_test.go
│   ├── mocks_for_test.go
│   ├── protocol.go
│   └── protocol_test.go
├── features/
│   ├── features.go
│   ├── selector.go
│   └── selector_test.go
├── fips/
│   ├── fips.go
│   └── nofips.go
├── flow/
│   ├── limiter.go
│   ├── limiter_test.go
│   └── metrics.go
├── github_message.py
├── github_release.py
├── go.mod
├── go.sum
├── hello/
│   ├── hello.go
│   └── hello_test.go
├── ingress/
│   ├── config.go
│   ├── config_test.go
│   ├── constants_test.go
│   ├── icmp_darwin.go
│   ├── icmp_darwin_test.go
│   ├── icmp_generic.go
│   ├── icmp_linux.go
│   ├── icmp_linux_test.go
│   ├── icmp_metrics.go
│   ├── icmp_posix.go
│   ├── icmp_posix_test.go
│   ├── icmp_windows.go
│   ├── icmp_windows_test.go
│   ├── ingress.go
│   ├── ingress_test.go
│   ├── middleware/
│   │   ├── jwtvalidator.go
│   │   ├── jwtvalidator_test.go
│   │   └── middleware.go
│   ├── origin_connection.go
│   ├── origin_connection_test.go
│   ├── origin_dialer.go
│   ├── origin_icmp_proxy.go
│   ├── origin_icmp_proxy_test.go
│   ├── origin_proxy.go
│   ├── origin_proxy_test.go
│   ├── origin_service.go
│   ├── origin_service_test.go
│   ├── origins/
│   │   ├── dns.go
│   │   ├── dns_test.go
│   │   ├── metrics.go
│   │   └── metrics_test.go
│   ├── packet_router.go
│   ├── packet_router_test.go
│   ├── rule.go
│   └── rule_test.go
├── internal/
│   └── test/
│       └── wstest.go
├── ipaccess/
│   ├── access.go
│   └── access_test.go
├── logger/
│   ├── configuration.go
│   ├── console.go
│   ├── console_test.go
│   ├── create.go
│   └── create_test.go
├── management/
│   ├── events.go
│   ├── events_test.go
│   ├── logger.go
│   ├── logger_test.go
│   ├── middleware.go
│   ├── middleware_test.go
│   ├── service.go
│   ├── service_test.go
│   ├── session.go
│   ├── session_test.go
│   ├── token.go
│   └── token_test.go
├── metrics/
│   ├── config.go
│   ├── metrics.go
│   ├── metrics_test.go
│   ├── readiness.go
│   └── readiness_test.go
├── mocks/
│   ├── mock_limiter.go
│   └── mockgen.go
├── orchestration/
│   ├── config.go
│   ├── config_test.go
│   ├── metrics.go
│   ├── orchestrator.go
│   └── orchestrator_test.go
├── overwatch/
│   ├── app_manager.go
│   ├── manager.go
│   └── manager_test.go
├── packet/
│   ├── decoder.go
│   ├── decoder_test.go
│   ├── encoder.go
│   ├── funnel.go
│   ├── funnel_test.go
│   ├── packet.go
│   ├── packet_test.go
│   └── session.go
├── postinst.sh
├── postrm.sh
├── proxy/
│   ├── logger.go
│   ├── metrics.go
│   ├── proxy.go
│   ├── proxy_posix_test.go
│   └── proxy_test.go
├── quic/
│   ├── constants.go
│   ├── conversion.go
│   ├── datagram.go
│   ├── datagram_test.go
│   ├── datagramv2.go
│   ├── metrics.go
│   ├── param_unix.go
│   ├── param_windows.go
│   ├── safe_stream.go
│   ├── safe_stream_test.go
│   ├── tracing.go
│   └── v3/
│       ├── datagram.go
│       ├── datagram_errors.go
│       ├── datagram_test.go
│       ├── icmp.go
│       ├── icmp_test.go
│       ├── manager.go
│       ├── manager_test.go
│       ├── metrics.go
│       ├── metrics_test.go
│       ├── muxer.go
│       ├── muxer_test.go
│       ├── request.go
│       ├── request_test.go
│       ├── session.go
│       ├── session_fuzz_test.go
│       └── session_test.go
├── release/
│   └── index.html
├── release_pkgs.py
├── retry/
│   ├── backoffhandler.go
│   └── backoffhandler_test.go
├── signal/
│   ├── safe_signal.go
│   └── safe_signal_test.go
├── socks/
│   ├── auth_handler.go
│   ├── authenticator.go
│   ├── connection_handler.go
│   ├── connection_handler_test.go
│   ├── dialer.go
│   ├── request.go
│   ├── request_handler.go
│   ├── request_handler_test.go
│   └── request_test.go
├── sshgen/
│   ├── sshgen.go
│   └── sshgen_test.go
├── stream/
│   ├── debug.go
│   ├── stream.go
│   └── stream_test.go
├── supervisor/
│   ├── conn_aware_logger.go
│   ├── external_control.go
│   ├── fuse.go
│   ├── metrics.go
│   ├── pqtunnels.go
│   ├── pqtunnels_test.go
│   ├── supervisor.go
│   ├── tunnel.go
│   ├── tunnel_test.go
│   └── tunnelsforha.go
├── tlsconfig/
│   ├── certreloader.go
│   ├── cloudflare_ca.go
│   ├── hello_ca.go
│   ├── testcert.pem
│   ├── testcert2.pem
│   ├── testkey.pem
│   ├── tlsconfig.go
│   └── tlsconfig_test.go
├── token/
│   ├── encrypt.go
│   ├── launch_browser_darwin.go
│   ├── launch_browser_other.go
│   ├── launch_browser_unix.go
│   ├── launch_browser_windows.go
│   ├── path.go
│   ├── shell.go
│   ├── signal_test.go
│   ├── token.go
│   ├── token_test.go
│   └── transfer.go
├── tracing/
│   ├── client.go
│   ├── client_test.go
│   ├── identity.go
│   ├── identity_test.go
│   ├── tracing.go
│   └── tracing_test.go
├── tunnelrpc/
│   ├── metrics/
│   │   └── metrics.go
│   ├── pogs/
│   │   ├── cloudflared_server.go
│   │   ├── configuration_manager.go
│   │   ├── errors.go
│   │   ├── quic_metadata_protocol.go
│   │   ├── registration_server.go
│   │   ├── registration_server_test.go
│   │   ├── session_manager.go
│   │   └── tag.go
│   ├── proto/
│   │   ├── go.capnp
│   │   ├── quic_metadata_protocol.capnp
│   │   ├── quic_metadata_protocol.capnp.go
│   │   ├── tunnelrpc.capnp
│   │   └── tunnelrpc.capnp.go
│   ├── quic/
│   │   ├── cloudflared_client.go
│   │   ├── cloudflared_server.go
│   │   ├── protocol.go
│   │   ├── request_client_stream.go
│   │   ├── request_server_stream.go
│   │   ├── request_server_stream_test.go
│   │   ├── session_client.go
│   │   └── session_server.go
│   ├── registration_client.go
│   ├── registration_server.go
│   └── utils.go
├── tunnelstate/
│   └── conntracker.go
├── validation/
│   ├── validation.go
│   └── validation_test.go
├── vendor/
│   ├── github.com/
│   │   ├── BurntSushi/
│   │   │   └── toml/
│   │   │       ├── .gitignore
│   │   │       ├── COPYING
│   │   │       ├── README.md
│   │   │       ├── decode.go
│   │   │       ├── decode_go116.go
│   │   │       ├── deprecated.go
│   │   │       ├── doc.go
│   │   │       ├── encode.go
│   │   │       ├── error.go
│   │   │       ├── internal/
│   │   │       │   └── tz.go
│   │   │       ├── lex.go
│   │   │       ├── meta.go
│   │   │       ├── parse.go
│   │   │       ├── type_fields.go
│   │   │       └── type_toml.go
│   │   ├── beorn7/
│   │   │   └── perks/
│   │   │       ├── LICENSE
│   │   │       └── quantile/
│   │   │           ├── exampledata.txt
│   │   │           └── stream.go
│   │   ├── cespare/
│   │   │   └── xxhash/
│   │   │       └── v2/
│   │   │           ├── LICENSE.txt
│   │   │           ├── README.md
│   │   │           ├── testall.sh
│   │   │           ├── xxhash.go
│   │   │           ├── xxhash_amd64.s
│   │   │           ├── xxhash_arm64.s
│   │   │           ├── xxhash_asm.go
│   │   │           ├── xxhash_other.go
│   │   │           ├── xxhash_safe.go
│   │   │           └── xxhash_unsafe.go
│   │   ├── coreos/
│   │   │   ├── go-oidc/
│   │   │   │   └── v3/
│   │   │   │       ├── LICENSE
│   │   │   │       ├── NOTICE
│   │   │   │       └── oidc/
│   │   │   │           ├── jose.go
│   │   │   │           ├── jwks.go
│   │   │   │           ├── oidc.go
│   │   │   │           └── verify.go
│   │   │   └── go-systemd/
│   │   │       └── v22/
│   │   │           ├── LICENSE
│   │   │           ├── NOTICE
│   │   │           └── daemon/
│   │   │               ├── sdnotify.go
│   │   │               └── watchdog.go
│   │   ├── cpuguy83/
│   │   │   └── go-md2man/
│   │   │       └── v2/
│   │   │           ├── LICENSE.md
│   │   │           └── md2man/
│   │   │               ├── md2man.go
│   │   │               └── roff.go
│   │   ├── davecgh/
│   │   │   └── go-spew/
│   │   │       ├── LICENSE
│   │   │       └── spew/
│   │   │           ├── bypass.go
│   │   │           ├── bypasssafe.go
│   │   │           ├── common.go
│   │   │           ├── config.go
│   │   │           ├── doc.go
│   │   │           ├── dump.go
│   │   │           ├── format.go
│   │   │           └── spew.go
│   │   ├── facebookgo/
│   │   │   └── grace/
│   │   │       └── gracenet/
│   │   │           └── net.go
│   │   ├── fortytw2/
│   │   │   └── leaktest/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       └── leaktest.go
│   │   ├── fsnotify/
│   │   │   └── fsnotify/
│   │   │       ├── .editorconfig
│   │   │       ├── .gitattributes
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── AUTHORS
│   │   │       ├── CHANGELOG.md
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── fen.go
│   │   │       ├── fsnotify.go
│   │   │       ├── inotify.go
│   │   │       ├── inotify_poller.go
│   │   │       ├── kqueue.go
│   │   │       ├── open_mode_bsd.go
│   │   │       ├── open_mode_darwin.go
│   │   │       └── windows.go
│   │   ├── getsentry/
│   │   │   └── sentry-go/
│   │   │       ├── .codecov.yml
│   │   │       ├── .craft.yml
│   │   │       ├── .gitattributes
│   │   │       ├── .gitignore
│   │   │       ├── .golangci.yml
│   │   │       ├── CHANGELOG.md
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── LICENSE
│   │   │       ├── MIGRATION.md
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── attribute/
│   │   │       │   ├── builder.go
│   │   │       │   ├── rawhelpers.go
│   │   │       │   └── value.go
│   │   │       ├── batch_processor.go
│   │   │       ├── check_in.go
│   │   │       ├── client.go
│   │   │       ├── doc.go
│   │   │       ├── dsn.go
│   │   │       ├── dynamic_sampling_context.go
│   │   │       ├── exception.go
│   │   │       ├── hub.go
│   │   │       ├── integrations.go
│   │   │       ├── interfaces.go
│   │   │       ├── internal/
│   │   │       │   ├── debug/
│   │   │       │   │   └── transport.go
│   │   │       │   ├── debuglog/
│   │   │       │   │   └── log.go
│   │   │       │   ├── http/
│   │   │       │   │   └── transport.go
│   │   │       │   ├── otel/
│   │   │       │   │   └── baggage/
│   │   │       │   │       ├── README.md
│   │   │       │   │       ├── baggage.go
│   │   │       │   │       └── internal/
│   │   │       │   │           └── baggage/
│   │   │       │   │               └── baggage.go
│   │   │       │   ├── protocol/
│   │   │       │   │   ├── dsn.go
│   │   │       │   │   ├── envelope.go
│   │   │       │   │   ├── interfaces.go
│   │   │       │   │   ├── log_batch.go
│   │   │       │   │   ├── metric_batch.go
│   │   │       │   │   ├── types.go
│   │   │       │   │   └── uuid.go
│   │   │       │   ├── ratelimit/
│   │   │       │   │   ├── category.go
│   │   │       │   │   ├── deadline.go
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── map.go
│   │   │       │   │   ├── rate_limits.go
│   │   │       │   │   └── retry_after.go
│   │   │       │   ├── telemetry/
│   │   │       │   │   ├── bucketed_buffer.go
│   │   │       │   │   ├── buffer.go
│   │   │       │   │   ├── processor.go
│   │   │       │   │   ├── ring_buffer.go
│   │   │       │   │   ├── scheduler.go
│   │   │       │   │   └── trace_aware.go
│   │   │       │   └── util/
│   │   │       │       ├── map.go
│   │   │       │       └── util.go
│   │   │       ├── log.go
│   │   │       ├── log_batch_processor.go
│   │   │       ├── log_fallback.go
│   │   │       ├── metric_batch_processor.go
│   │   │       ├── metrics.go
│   │   │       ├── mocks.go
│   │   │       ├── propagation_context.go
│   │   │       ├── scope.go
│   │   │       ├── sentry.go
│   │   │       ├── sourcereader.go
│   │   │       ├── span_recorder.go
│   │   │       ├── stacktrace.go
│   │   │       ├── traces_sampler.go
│   │   │       ├── tracing.go
│   │   │       ├── transport.go
│   │   │       └── util.go
│   │   ├── go-chi/
│   │   │   ├── chi/
│   │   │   │   └── v5/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── CHANGELOG.md
│   │   │   │       ├── CONTRIBUTING.md
│   │   │   │       ├── LICENSE
│   │   │   │       ├── Makefile
│   │   │   │       ├── README.md
│   │   │   │       ├── SECURITY.md
│   │   │   │       ├── chain.go
│   │   │   │       ├── chi.go
│   │   │   │       ├── context.go
│   │   │   │       ├── mux.go
│   │   │   │       ├── path_value.go
│   │   │   │       ├── path_value_fallback.go
│   │   │   │       └── tree.go
│   │   │   └── cors/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── cors.go
│   │   │       └── utils.go
│   │   ├── go-jose/
│   │   │   └── go-jose/
│   │   │       └── v4/
│   │   │           ├── .gitignore
│   │   │           ├── .golangci.yml
│   │   │           ├── .travis.yml
│   │   │           ├── CONTRIBUTING.md
│   │   │           ├── LICENSE
│   │   │           ├── README.md
│   │   │           ├── SECURITY.md
│   │   │           ├── asymmetric.go
│   │   │           ├── cipher/
│   │   │           │   ├── cbc_hmac.go
│   │   │           │   ├── concat_kdf.go
│   │   │           │   ├── ecdh_es.go
│   │   │           │   └── key_wrap.go
│   │   │           ├── crypter.go
│   │   │           ├── doc.go
│   │   │           ├── encoding.go
│   │   │           ├── json/
│   │   │           │   ├── LICENSE
│   │   │           │   ├── README.md
│   │   │           │   ├── decode.go
│   │   │           │   ├── encode.go
│   │   │           │   ├── indent.go
│   │   │           │   ├── scanner.go
│   │   │           │   ├── stream.go
│   │   │           │   └── tags.go
│   │   │           ├── jwe.go
│   │   │           ├── jwk.go
│   │   │           ├── jws.go
│   │   │           ├── jwt/
│   │   │           │   ├── builder.go
│   │   │           │   ├── claims.go
│   │   │           │   ├── doc.go
│   │   │           │   ├── errors.go
│   │   │           │   ├── jwt.go
│   │   │           │   └── validation.go
│   │   │           ├── opaque.go
│   │   │           ├── shared.go
│   │   │           ├── signing.go
│   │   │           └── symmetric.go
│   │   ├── go-logr/
│   │   │   ├── logr/
│   │   │   │   ├── .golangci.yaml
│   │   │   │   ├── CHANGELOG.md
│   │   │   │   ├── CONTRIBUTING.md
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── SECURITY.md
│   │   │   │   ├── context.go
│   │   │   │   ├── context_noslog.go
│   │   │   │   ├── context_slog.go
│   │   │   │   ├── discard.go
│   │   │   │   ├── funcr/
│   │   │   │   │   ├── funcr.go
│   │   │   │   │   └── slogsink.go
│   │   │   │   ├── logr.go
│   │   │   │   ├── sloghandler.go
│   │   │   │   ├── slogr.go
│   │   │   │   └── slogsink.go
│   │   │   └── stdr/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       └── stdr.go
│   │   ├── gobwas/
│   │   │   ├── httphead/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── cookie.go
│   │   │   │   ├── head.go
│   │   │   │   ├── httphead.go
│   │   │   │   ├── lexer.go
│   │   │   │   ├── octet.go
│   │   │   │   ├── option.go
│   │   │   │   └── writer.go
│   │   │   ├── pool/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── generic.go
│   │   │   │   ├── internal/
│   │   │   │   │   └── pmath/
│   │   │   │   │       └── pmath.go
│   │   │   │   ├── option.go
│   │   │   │   ├── pbufio/
│   │   │   │   │   ├── pbufio.go
│   │   │   │   │   ├── pbufio_go110.go
│   │   │   │   │   └── pbufio_go19.go
│   │   │   │   ├── pbytes/
│   │   │   │   │   ├── pbytes.go
│   │   │   │   │   ├── pool.go
│   │   │   │   │   └── pool_sanitize.go
│   │   │   │   └── pool.go
│   │   │   └── ws/
│   │   │       ├── .gitignore
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── check.go
│   │   │       ├── cipher.go
│   │   │       ├── dialer.go
│   │   │       ├── dialer_tls_go17.go
│   │   │       ├── dialer_tls_go18.go
│   │   │       ├── doc.go
│   │   │       ├── errors.go
│   │   │       ├── frame.go
│   │   │       ├── http.go
│   │   │       ├── nonce.go
│   │   │       ├── read.go
│   │   │       ├── server.go
│   │   │       ├── util.go
│   │   │       ├── util_purego.go
│   │   │       ├── util_unsafe.go
│   │   │       ├── write.go
│   │   │       └── wsutil/
│   │   │           ├── cipher.go
│   │   │           ├── dialer.go
│   │   │           ├── extenstion.go
│   │   │           ├── handler.go
│   │   │           ├── helper.go
│   │   │           ├── reader.go
│   │   │           ├── upgrader.go
│   │   │           ├── utf8.go
│   │   │           ├── writer.go
│   │   │           └── wsutil.go
│   │   ├── google/
│   │   │   ├── gopacket/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── .travis.gofmt.sh
│   │   │   │   ├── .travis.golint.sh
│   │   │   │   ├── .travis.govet.sh
│   │   │   │   ├── .travis.install.sh
│   │   │   │   ├── .travis.script.sh
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── AUTHORS
│   │   │   │   ├── CONTRIBUTING.md
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── base.go
│   │   │   │   ├── decode.go
│   │   │   │   ├── doc.go
│   │   │   │   ├── flows.go
│   │   │   │   ├── gc
│   │   │   │   ├── layerclass.go
│   │   │   │   ├── layers/
│   │   │   │   │   ├── .lint_blacklist
│   │   │   │   │   ├── arp.go
│   │   │   │   │   ├── asf.go
│   │   │   │   │   ├── asf_presencepong.go
│   │   │   │   │   ├── base.go
│   │   │   │   │   ├── bfd.go
│   │   │   │   │   ├── cdp.go
│   │   │   │   │   ├── ctp.go
│   │   │   │   │   ├── dhcpv4.go
│   │   │   │   │   ├── dhcpv6.go
│   │   │   │   │   ├── dhcpv6_options.go
│   │   │   │   │   ├── dns.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── dot11.go
│   │   │   │   │   ├── dot1q.go
│   │   │   │   │   ├── eap.go
│   │   │   │   │   ├── eapol.go
│   │   │   │   │   ├── endpoints.go
│   │   │   │   │   ├── enums.go
│   │   │   │   │   ├── enums_generated.go
│   │   │   │   │   ├── erspan2.go
│   │   │   │   │   ├── etherip.go
│   │   │   │   │   ├── ethernet.go
│   │   │   │   │   ├── fddi.go
│   │   │   │   │   ├── fuzz_layer.go
│   │   │   │   │   ├── gen_linted.sh
│   │   │   │   │   ├── geneve.go
│   │   │   │   │   ├── gre.go
│   │   │   │   │   ├── gtp.go
│   │   │   │   │   ├── iana_ports.go
│   │   │   │   │   ├── icmp4.go
│   │   │   │   │   ├── icmp6.go
│   │   │   │   │   ├── icmp6msg.go
│   │   │   │   │   ├── igmp.go
│   │   │   │   │   ├── ip4.go
│   │   │   │   │   ├── ip6.go
│   │   │   │   │   ├── ipsec.go
│   │   │   │   │   ├── layertypes.go
│   │   │   │   │   ├── lcm.go
│   │   │   │   │   ├── linux_sll.go
│   │   │   │   │   ├── llc.go
│   │   │   │   │   ├── lldp.go
│   │   │   │   │   ├── loopback.go
│   │   │   │   │   ├── mldv1.go
│   │   │   │   │   ├── mldv2.go
│   │   │   │   │   ├── modbustcp.go
│   │   │   │   │   ├── mpls.go
│   │   │   │   │   ├── ndp.go
│   │   │   │   │   ├── ntp.go
│   │   │   │   │   ├── ospf.go
│   │   │   │   │   ├── pflog.go
│   │   │   │   │   ├── ports.go
│   │   │   │   │   ├── ppp.go
│   │   │   │   │   ├── pppoe.go
│   │   │   │   │   ├── prism.go
│   │   │   │   │   ├── radiotap.go
│   │   │   │   │   ├── radius.go
│   │   │   │   │   ├── rmcp.go
│   │   │   │   │   ├── rudp.go
│   │   │   │   │   ├── sctp.go
│   │   │   │   │   ├── sflow.go
│   │   │   │   │   ├── sip.go
│   │   │   │   │   ├── stp.go
│   │   │   │   │   ├── tcp.go
│   │   │   │   │   ├── tcpip.go
│   │   │   │   │   ├── test_creator.py
│   │   │   │   │   ├── tls.go
│   │   │   │   │   ├── tls_alert.go
│   │   │   │   │   ├── tls_appdata.go
│   │   │   │   │   ├── tls_cipherspec.go
│   │   │   │   │   ├── tls_handshake.go
│   │   │   │   │   ├── udp.go
│   │   │   │   │   ├── udplite.go
│   │   │   │   │   ├── usb.go
│   │   │   │   │   ├── vrrp.go
│   │   │   │   │   └── vxlan.go
│   │   │   │   ├── layers_decoder.go
│   │   │   │   ├── layertype.go
│   │   │   │   ├── packet.go
│   │   │   │   ├── parser.go
│   │   │   │   ├── time.go
│   │   │   │   └── writer.go
│   │   │   ├── pprof/
│   │   │   │   ├── AUTHORS
│   │   │   │   ├── CONTRIBUTORS
│   │   │   │   ├── LICENSE
│   │   │   │   └── profile/
│   │   │   │       ├── encode.go
│   │   │   │       ├── filter.go
│   │   │   │       ├── index.go
│   │   │   │       ├── legacy_java_profile.go
│   │   │   │       ├── legacy_profile.go
│   │   │   │       ├── merge.go
│   │   │   │       ├── profile.go
│   │   │   │       ├── proto.go
│   │   │   │       └── prune.go
│   │   │   └── uuid/
│   │   │       ├── CHANGELOG.md
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── dce.go
│   │   │       ├── doc.go
│   │   │       ├── hash.go
│   │   │       ├── marshal.go
│   │   │       ├── node.go
│   │   │       ├── node_js.go
│   │   │       ├── node_net.go
│   │   │       ├── null.go
│   │   │       ├── sql.go
│   │   │       ├── time.go
│   │   │       ├── util.go
│   │   │       ├── uuid.go
│   │   │       ├── version1.go
│   │   │       ├── version4.go
│   │   │       ├── version6.go
│   │   │       └── version7.go
│   │   ├── gorilla/
│   │   │   └── websocket/
│   │   │       ├── .gitignore
│   │   │       ├── AUTHORS
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── client.go
│   │   │       ├── compression.go
│   │   │       ├── conn.go
│   │   │       ├── doc.go
│   │   │       ├── join.go
│   │   │       ├── json.go
│   │   │       ├── mask.go
│   │   │       ├── mask_safe.go
│   │   │       ├── prepared.go
│   │   │       ├── proxy.go
│   │   │       ├── server.go
│   │   │       ├── tls_handshake.go
│   │   │       ├── tls_handshake_116.go
│   │   │       ├── util.go
│   │   │       └── x_net_proxy.go
│   │   ├── grpc-ecosystem/
│   │   │   └── grpc-gateway/
│   │   │       └── v2/
│   │   │           ├── LICENSE
│   │   │           ├── internal/
│   │   │           │   └── httprule/
│   │   │           │       ├── BUILD.bazel
│   │   │           │       ├── compile.go
│   │   │           │       ├── fuzz.go
│   │   │           │       ├── parse.go
│   │   │           │       └── types.go
│   │   │           ├── runtime/
│   │   │           │   ├── BUILD.bazel
│   │   │           │   ├── context.go
│   │   │           │   ├── convert.go
│   │   │           │   ├── doc.go
│   │   │           │   ├── errors.go
│   │   │           │   ├── fieldmask.go
│   │   │           │   ├── handler.go
│   │   │           │   ├── marshal_httpbodyproto.go
│   │   │           │   ├── marshal_json.go
│   │   │           │   ├── marshal_jsonpb.go
│   │   │           │   ├── marshal_proto.go
│   │   │           │   ├── marshaler.go
│   │   │           │   ├── marshaler_registry.go
│   │   │           │   ├── mux.go
│   │   │           │   ├── pattern.go
│   │   │           │   ├── proto2_convert.go
│   │   │           │   └── query.go
│   │   │           └── utilities/
│   │   │               ├── BUILD.bazel
│   │   │               ├── doc.go
│   │   │               ├── pattern.go
│   │   │               ├── readerfactory.go
│   │   │               ├── string_array_flag.go
│   │   │               └── trie.go
│   │   ├── klauspost/
│   │   │   └── compress/
│   │   │       ├── LICENSE
│   │   │       ├── flate/
│   │   │       │   ├── deflate.go
│   │   │       │   ├── dict_decoder.go
│   │   │       │   ├── fast_encoder.go
│   │   │       │   ├── huffman_bit_writer.go
│   │   │       │   ├── huffman_code.go
│   │   │       │   ├── huffman_sortByFreq.go
│   │   │       │   ├── huffman_sortByLiteral.go
│   │   │       │   ├── inflate.go
│   │   │       │   ├── inflate_gen.go
│   │   │       │   ├── level1.go
│   │   │       │   ├── level2.go
│   │   │       │   ├── level3.go
│   │   │       │   ├── level4.go
│   │   │       │   ├── level5.go
│   │   │       │   ├── level6.go
│   │   │       │   ├── matchlen_generic.go
│   │   │       │   ├── regmask_amd64.go
│   │   │       │   ├── regmask_other.go
│   │   │       │   ├── stateless.go
│   │   │       │   └── token.go
│   │   │       └── internal/
│   │   │           └── le/
│   │   │               ├── le.go
│   │   │               ├── unsafe_disabled.go
│   │   │               └── unsafe_enabled.go
│   │   ├── mattn/
│   │   │   ├── go-colorable/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── colorable_appengine.go
│   │   │   │   ├── colorable_others.go
│   │   │   │   ├── colorable_windows.go
│   │   │   │   ├── go.test.sh
│   │   │   │   └── noncolorable.go
│   │   │   └── go-isatty/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── doc.go
│   │   │       ├── go.test.sh
│   │   │       ├── isatty_bsd.go
│   │   │       ├── isatty_others.go
│   │   │       ├── isatty_plan9.go
│   │   │       ├── isatty_solaris.go
│   │   │       ├── isatty_tcgets.go
│   │   │       └── isatty_windows.go
│   │   ├── mitchellh/
│   │   │   └── go-homedir/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       └── homedir.go
│   │   ├── modern-go/
│   │   │   └── concurrent/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── executor.go
│   │   │       ├── go_above_19.go
│   │   │       ├── go_below_19.go
│   │   │       ├── log.go
│   │   │       ├── test.sh
│   │   │       └── unbounded_executor.go
│   │   ├── munnerz/
│   │   │   └── goautoneg/
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.txt
│   │   │       └── autoneg.go
│   │   ├── onsi/
│   │   │   └── ginkgo/
│   │   │       └── v2/
│   │   │           ├── LICENSE
│   │   │           ├── config/
│   │   │           │   └── deprecated.go
│   │   │           ├── formatter/
│   │   │           │   ├── colorable_others.go
│   │   │           │   ├── colorable_windows.go
│   │   │           │   └── formatter.go
│   │   │           ├── ginkgo/
│   │   │           │   ├── build/
│   │   │           │   │   └── build_command.go
│   │   │           │   ├── command/
│   │   │           │   │   ├── abort.go
│   │   │           │   │   ├── command.go
│   │   │           │   │   └── program.go
│   │   │           │   ├── generators/
│   │   │           │   │   ├── boostrap_templates.go
│   │   │           │   │   ├── bootstrap_command.go
│   │   │           │   │   ├── generate_command.go
│   │   │           │   │   ├── generate_templates.go
│   │   │           │   │   └── generators_common.go
│   │   │           │   ├── internal/
│   │   │           │   │   ├── compile.go
│   │   │           │   │   ├── gocovmerge.go
│   │   │           │   │   ├── profiles_and_reports.go
│   │   │           │   │   ├── run.go
│   │   │           │   │   ├── test_suite.go
│   │   │           │   │   ├── utils.go
│   │   │           │   │   └── verify_version.go
│   │   │           │   ├── labels/
│   │   │           │   │   └── labels_command.go
│   │   │           │   ├── main.go
│   │   │           │   ├── outline/
│   │   │           │   │   ├── ginkgo.go
│   │   │           │   │   ├── import.go
│   │   │           │   │   ├── outline.go
│   │   │           │   │   └── outline_command.go
│   │   │           │   ├── run/
│   │   │           │   │   └── run_command.go
│   │   │           │   ├── unfocus/
│   │   │           │   │   └── unfocus_command.go
│   │   │           │   └── watch/
│   │   │           │       ├── delta.go
│   │   │           │       ├── delta_tracker.go
│   │   │           │       ├── dependencies.go
│   │   │           │       ├── package_hash.go
│   │   │           │       ├── package_hashes.go
│   │   │           │       ├── suite.go
│   │   │           │       └── watch_command.go
│   │   │           ├── internal/
│   │   │           │   ├── interrupt_handler/
│   │   │           │   │   ├── interrupt_handler.go
│   │   │           │   │   ├── sigquit_swallower_unix.go
│   │   │           │   │   └── sigquit_swallower_windows.go
│   │   │           │   └── parallel_support/
│   │   │           │       ├── client_server.go
│   │   │           │       ├── http_client.go
│   │   │           │       ├── http_server.go
│   │   │           │       ├── rpc_client.go
│   │   │           │       ├── rpc_server.go
│   │   │           │       └── server_handler.go
│   │   │           ├── reporters/
│   │   │           │   ├── default_reporter.go
│   │   │           │   ├── deprecated_reporter.go
│   │   │           │   ├── json_report.go
│   │   │           │   ├── junit_report.go
│   │   │           │   ├── reporter.go
│   │   │           │   └── teamcity_report.go
│   │   │           └── types/
│   │   │               ├── code_location.go
│   │   │               ├── config.go
│   │   │               ├── deprecated_types.go
│   │   │               ├── deprecation_support.go
│   │   │               ├── enum_support.go
│   │   │               ├── errors.go
│   │   │               ├── file_filter.go
│   │   │               ├── flags.go
│   │   │               ├── label_filter.go
│   │   │               ├── report_entry.go
│   │   │               ├── types.go
│   │   │               └── version.go
│   │   ├── pkg/
│   │   │   └── errors/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── appveyor.yml
│   │   │       ├── errors.go
│   │   │       ├── go113.go
│   │   │       └── stack.go
│   │   ├── pmezard/
│   │   │   └── go-difflib/
│   │   │       ├── LICENSE
│   │   │       └── difflib/
│   │   │           └── difflib.go
│   │   ├── prometheus/
│   │   │   ├── client_golang/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   ├── internal/
│   │   │   │   │   └── github.com/
│   │   │   │   │       └── golang/
│   │   │   │   │           └── gddo/
│   │   │   │   │               ├── LICENSE
│   │   │   │   │               └── httputil/
│   │   │   │   │                   ├── header/
│   │   │   │   │                   │   └── header.go
│   │   │   │   │                   └── negotiate.go
│   │   │   │   └── prometheus/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── README.md
│   │   │   │       ├── build_info_collector.go
│   │   │   │       ├── collector.go
│   │   │   │       ├── collectorfunc.go
│   │   │   │       ├── counter.go
│   │   │   │       ├── desc.go
│   │   │   │       ├── doc.go
│   │   │   │       ├── expvar_collector.go
│   │   │   │       ├── fnv.go
│   │   │   │       ├── gauge.go
│   │   │   │       ├── get_pid.go
│   │   │   │       ├── get_pid_gopherjs.go
│   │   │   │       ├── go_collector.go
│   │   │   │       ├── go_collector_go116.go
│   │   │   │       ├── go_collector_latest.go
│   │   │   │       ├── histogram.go
│   │   │   │       ├── internal/
│   │   │   │       │   ├── almost_equal.go
│   │   │   │       │   ├── difflib.go
│   │   │   │       │   ├── go_collector_options.go
│   │   │   │       │   ├── go_runtime_metrics.go
│   │   │   │       │   └── metric.go
│   │   │   │       ├── labels.go
│   │   │   │       ├── metric.go
│   │   │   │       ├── num_threads.go
│   │   │   │       ├── num_threads_gopherjs.go
│   │   │   │       ├── observer.go
│   │   │   │       ├── process_collector.go
│   │   │   │       ├── process_collector_darwin.go
│   │   │   │       ├── process_collector_mem_cgo_darwin.c
│   │   │   │       ├── process_collector_mem_cgo_darwin.go
│   │   │   │       ├── process_collector_mem_nocgo_darwin.go
│   │   │   │       ├── process_collector_not_supported.go
│   │   │   │       ├── process_collector_procfsenabled.go
│   │   │   │       ├── process_collector_windows.go
│   │   │   │       ├── promauto/
│   │   │   │       │   └── auto.go
│   │   │   │       ├── promhttp/
│   │   │   │       │   ├── delegator.go
│   │   │   │       │   ├── http.go
│   │   │   │       │   ├── instrument_client.go
│   │   │   │       │   ├── instrument_server.go
│   │   │   │       │   ├── internal/
│   │   │   │       │   │   └── compression.go
│   │   │   │       │   └── option.go
│   │   │   │       ├── registry.go
│   │   │   │       ├── summary.go
│   │   │   │       ├── timer.go
│   │   │   │       ├── untyped.go
│   │   │   │       ├── value.go
│   │   │   │       ├── vec.go
│   │   │   │       ├── vnext.go
│   │   │   │       └── wrap.go
│   │   │   ├── client_model/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   └── go/
│   │   │   │       └── metrics.pb.go
│   │   │   ├── common/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   ├── expfmt/
│   │   │   │   │   ├── decode.go
│   │   │   │   │   ├── encode.go
│   │   │   │   │   ├── expfmt.go
│   │   │   │   │   ├── fuzz.go
│   │   │   │   │   ├── openmetrics_create.go
│   │   │   │   │   ├── text_create.go
│   │   │   │   │   └── text_parse.go
│   │   │   │   └── model/
│   │   │   │       ├── alert.go
│   │   │   │       ├── fingerprinting.go
│   │   │   │       ├── fnv.go
│   │   │   │       ├── labels.go
│   │   │   │       ├── labelset.go
│   │   │   │       ├── labelset_string.go
│   │   │   │       ├── metadata.go
│   │   │   │       ├── metric.go
│   │   │   │       ├── model.go
│   │   │   │       ├── signature.go
│   │   │   │       ├── silence.go
│   │   │   │       ├── time.go
│   │   │   │       ├── value.go
│   │   │   │       ├── value_float.go
│   │   │   │       ├── value_histogram.go
│   │   │   │       └── value_type.go
│   │   │   └── procfs/
│   │   │       ├── .gitignore
│   │   │       ├── .golangci.yml
│   │   │       ├── CODE_OF_CONDUCT.md
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── LICENSE
│   │   │       ├── MAINTAINERS.md
│   │   │       ├── Makefile
│   │   │       ├── Makefile.common
│   │   │       ├── NOTICE
│   │   │       ├── README.md
│   │   │       ├── SECURITY.md
│   │   │       ├── arp.go
│   │   │       ├── buddyinfo.go
│   │   │       ├── cmdline.go
│   │   │       ├── cpuinfo.go
│   │   │       ├── cpuinfo_armx.go
│   │   │       ├── cpuinfo_loong64.go
│   │   │       ├── cpuinfo_mipsx.go
│   │   │       ├── cpuinfo_others.go
│   │   │       ├── cpuinfo_ppcx.go
│   │   │       ├── cpuinfo_riscvx.go
│   │   │       ├── cpuinfo_s390x.go
│   │   │       ├── cpuinfo_x86.go
│   │   │       ├── crypto.go
│   │   │       ├── doc.go
│   │   │       ├── fs.go
│   │   │       ├── fs_statfs_notype.go
│   │   │       ├── fs_statfs_type.go
│   │   │       ├── fscache.go
│   │   │       ├── internal/
│   │   │       │   ├── fs/
│   │   │       │   │   └── fs.go
│   │   │       │   └── util/
│   │   │       │       ├── parse.go
│   │   │       │       ├── readfile.go
│   │   │       │       ├── sysreadfile.go
│   │   │       │       ├── sysreadfile_compat.go
│   │   │       │       └── valueparser.go
│   │   │       ├── ipvs.go
│   │   │       ├── kernel_random.go
│   │   │       ├── loadavg.go
│   │   │       ├── mdstat.go
│   │   │       ├── meminfo.go
│   │   │       ├── mountinfo.go
│   │   │       ├── mountstats.go
│   │   │       ├── net_conntrackstat.go
│   │   │       ├── net_dev.go
│   │   │       ├── net_ip_socket.go
│   │   │       ├── net_protocols.go
│   │   │       ├── net_route.go
│   │   │       ├── net_sockstat.go
│   │   │       ├── net_softnet.go
│   │   │       ├── net_tcp.go
│   │   │       ├── net_tls_stat.go
│   │   │       ├── net_udp.go
│   │   │       ├── net_unix.go
│   │   │       ├── net_wireless.go
│   │   │       ├── net_xfrm.go
│   │   │       ├── netstat.go
│   │   │       ├── proc.go
│   │   │       ├── proc_cgroup.go
│   │   │       ├── proc_cgroups.go
│   │   │       ├── proc_environ.go
│   │   │       ├── proc_fdinfo.go
│   │   │       ├── proc_interrupts.go
│   │   │       ├── proc_io.go
│   │   │       ├── proc_limits.go
│   │   │       ├── proc_maps.go
│   │   │       ├── proc_netstat.go
│   │   │       ├── proc_ns.go
│   │   │       ├── proc_psi.go
│   │   │       ├── proc_smaps.go
│   │   │       ├── proc_snmp.go
│   │   │       ├── proc_snmp6.go
│   │   │       ├── proc_stat.go
│   │   │       ├── proc_status.go
│   │   │       ├── proc_sys.go
│   │   │       ├── schedstat.go
│   │   │       ├── slab.go
│   │   │       ├── softirqs.go
│   │   │       ├── stat.go
│   │   │       ├── swaps.go
│   │   │       ├── thread.go
│   │   │       ├── ttar
│   │   │       ├── vm.go
│   │   │       └── zoneinfo.go
│   │   ├── quic-go/
│   │   │   └── quic-go/
│   │   │       ├── .gitignore
│   │   │       ├── .golangci.yml
│   │   │       ├── Changelog.md
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── SECURITY.md
│   │   │       ├── buffer_pool.go
│   │   │       ├── client.go
│   │   │       ├── closed_conn.go
│   │   │       ├── codecov.yml
│   │   │       ├── config.go
│   │   │       ├── conn_id_generator.go
│   │   │       ├── conn_id_manager.go
│   │   │       ├── connection.go
│   │   │       ├── connection_logging.go
│   │   │       ├── connection_timer.go
│   │   │       ├── crypto_stream.go
│   │   │       ├── crypto_stream_manager.go
│   │   │       ├── datagram_queue.go
│   │   │       ├── errors.go
│   │   │       ├── frame_sorter.go
│   │   │       ├── framer.go
│   │   │       ├── interface.go
│   │   │       ├── internal/
│   │   │       │   ├── ackhandler/
│   │   │       │   │   ├── ack_eliciting.go
│   │   │       │   │   ├── ackhandler.go
│   │   │       │   │   ├── ecn.go
│   │   │       │   │   ├── frame.go
│   │   │       │   │   ├── interfaces.go
│   │   │       │   │   ├── mockgen.go
│   │   │       │   │   ├── packet.go
│   │   │       │   │   ├── packet_number_generator.go
│   │   │       │   │   ├── received_packet_handler.go
│   │   │       │   │   ├── received_packet_history.go
│   │   │       │   │   ├── received_packet_tracker.go
│   │   │       │   │   ├── send_mode.go
│   │   │       │   │   ├── sent_packet_handler.go
│   │   │       │   │   └── sent_packet_history.go
│   │   │       │   ├── congestion/
│   │   │       │   │   ├── bandwidth.go
│   │   │       │   │   ├── clock.go
│   │   │       │   │   ├── cubic.go
│   │   │       │   │   ├── cubic_sender.go
│   │   │       │   │   ├── hybrid_slow_start.go
│   │   │       │   │   ├── interface.go
│   │   │       │   │   └── pacer.go
│   │   │       │   ├── flowcontrol/
│   │   │       │   │   ├── base_flow_controller.go
│   │   │       │   │   ├── connection_flow_controller.go
│   │   │       │   │   ├── interface.go
│   │   │       │   │   └── stream_flow_controller.go
│   │   │       │   ├── handshake/
│   │   │       │   │   ├── aead.go
│   │   │       │   │   ├── cipher_suite.go
│   │   │       │   │   ├── crypto_setup.go
│   │   │       │   │   ├── fake_conn.go
│   │   │       │   │   ├── header_protector.go
│   │   │       │   │   ├── hkdf.go
│   │   │       │   │   ├── initial_aead.go
│   │   │       │   │   ├── interface.go
│   │   │       │   │   ├── retry.go
│   │   │       │   │   ├── session_ticket.go
│   │   │       │   │   ├── tls_config.go
│   │   │       │   │   ├── token_generator.go
│   │   │       │   │   ├── token_protector.go
│   │   │       │   │   ├── updatable_aead.go
│   │   │       │   │   ├── xor_nonce_aead_boring.go
│   │   │       │   │   └── xor_nonce_aead_noboring.go
│   │   │       │   ├── protocol/
│   │   │       │   │   ├── connection_id.go
│   │   │       │   │   ├── encryption_level.go
│   │   │       │   │   ├── key_phase.go
│   │   │       │   │   ├── packet_number.go
│   │   │       │   │   ├── params.go
│   │   │       │   │   ├── perspective.go
│   │   │       │   │   ├── protocol.go
│   │   │       │   │   ├── stream.go
│   │   │       │   │   └── version.go
│   │   │       │   ├── qerr/
│   │   │       │   │   ├── error_codes.go
│   │   │       │   │   └── errors.go
│   │   │       │   ├── utils/
│   │   │       │   │   ├── buffered_write_closer.go
│   │   │       │   │   ├── linkedlist/
│   │   │       │   │   │   ├── README.md
│   │   │       │   │   │   └── linkedlist.go
│   │   │       │   │   ├── log.go
│   │   │       │   │   ├── rand.go
│   │   │       │   │   ├── ringbuffer/
│   │   │       │   │   │   └── ringbuffer.go
│   │   │       │   │   ├── rtt_stats.go
│   │   │       │   │   └── timer.go
│   │   │       │   └── wire/
│   │   │       │       ├── ack_frame.go
│   │   │       │       ├── ack_range.go
│   │   │       │       ├── connection_close_frame.go
│   │   │       │       ├── crypto_frame.go
│   │   │       │       ├── data_blocked_frame.go
│   │   │       │       ├── datagram_frame.go
│   │   │       │       ├── extended_header.go
│   │   │       │       ├── frame.go
│   │   │       │       ├── frame_parser.go
│   │   │       │       ├── handshake_done_frame.go
│   │   │       │       ├── header.go
│   │   │       │       ├── log.go
│   │   │       │       ├── max_data_frame.go
│   │   │       │       ├── max_stream_data_frame.go
│   │   │       │       ├── max_streams_frame.go
│   │   │       │       ├── new_connection_id_frame.go
│   │   │       │       ├── new_token_frame.go
│   │   │       │       ├── path_challenge_frame.go
│   │   │       │       ├── path_response_frame.go
│   │   │       │       ├── ping_frame.go
│   │   │       │       ├── pool.go
│   │   │       │       ├── reset_stream_frame.go
│   │   │       │       ├── retire_connection_id_frame.go
│   │   │       │       ├── short_header.go
│   │   │       │       ├── stop_sending_frame.go
│   │   │       │       ├── stream_data_blocked_frame.go
│   │   │       │       ├── stream_frame.go
│   │   │       │       ├── streams_blocked_frame.go
│   │   │       │       ├── transport_parameters.go
│   │   │       │       └── version_negotiation.go
│   │   │       ├── logging/
│   │   │       │   ├── connection_tracer.go
│   │   │       │   ├── connection_tracer_multiplexer.go
│   │   │       │   ├── frame.go
│   │   │       │   ├── generate_multiplexer.go
│   │   │       │   ├── interface.go
│   │   │       │   ├── multiplexer.tmpl
│   │   │       │   ├── packet_header.go
│   │   │       │   ├── tracer.go
│   │   │       │   ├── tracer_multiplexer.go
│   │   │       │   └── types.go
│   │   │       ├── mockgen.go
│   │   │       ├── mtu_discoverer.go
│   │   │       ├── oss-fuzz.sh
│   │   │       ├── packet_handler_map.go
│   │   │       ├── packet_packer.go
│   │   │       ├── packet_unpacker.go
│   │   │       ├── path_manager.go
│   │   │       ├── path_manager_outgoing.go
│   │   │       ├── quicvarint/
│   │   │       │   ├── io.go
│   │   │       │   └── varint.go
│   │   │       ├── receive_stream.go
│   │   │       ├── retransmission_queue.go
│   │   │       ├── send_conn.go
│   │   │       ├── send_queue.go
│   │   │       ├── send_stream.go
│   │   │       ├── server.go
│   │   │       ├── stateless_reset.go
│   │   │       ├── stream.go
│   │   │       ├── streams_map.go
│   │   │       ├── streams_map_incoming.go
│   │   │       ├── streams_map_outgoing.go
│   │   │       ├── sys_conn.go
│   │   │       ├── sys_conn_buffers.go
│   │   │       ├── sys_conn_buffers_write.go
│   │   │       ├── sys_conn_df.go
│   │   │       ├── sys_conn_df_darwin.go
│   │   │       ├── sys_conn_df_linux.go
│   │   │       ├── sys_conn_df_windows.go
│   │   │       ├── sys_conn_helper_darwin.go
│   │   │       ├── sys_conn_helper_freebsd.go
│   │   │       ├── sys_conn_helper_linux.go
│   │   │       ├── sys_conn_helper_nonlinux.go
│   │   │       ├── sys_conn_no_oob.go
│   │   │       ├── sys_conn_oob.go
│   │   │       ├── sys_conn_windows.go
│   │   │       ├── token_store.go
│   │   │       ├── tools.go
│   │   │       └── transport.go
│   │   ├── rs/
│   │   │   └── zerolog/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── CNAME
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── _config.yml
│   │   │       ├── array.go
│   │   │       ├── console.go
│   │   │       ├── context.go
│   │   │       ├── ctx.go
│   │   │       ├── encoder.go
│   │   │       ├── encoder_cbor.go
│   │   │       ├── encoder_json.go
│   │   │       ├── event.go
│   │   │       ├── fields.go
│   │   │       ├── globals.go
│   │   │       ├── go112.go
│   │   │       ├── hook.go
│   │   │       ├── internal/
│   │   │       │   ├── cbor/
│   │   │       │   │   ├── README.md
│   │   │       │   │   ├── base.go
│   │   │       │   │   ├── cbor.go
│   │   │       │   │   ├── decode_stream.go
│   │   │       │   │   ├── string.go
│   │   │       │   │   ├── time.go
│   │   │       │   │   └── types.go
│   │   │       │   └── json/
│   │   │       │       ├── base.go
│   │   │       │       ├── bytes.go
│   │   │       │       ├── string.go
│   │   │       │       ├── time.go
│   │   │       │       └── types.go
│   │   │       ├── log/
│   │   │       │   └── log.go
│   │   │       ├── log.go
│   │   │       ├── not_go112.go
│   │   │       ├── sampler.go
│   │   │       ├── syslog.go
│   │   │       └── writer.go
│   │   ├── russross/
│   │   │   └── blackfriday/
│   │   │       └── v2/
│   │   │           ├── .gitignore
│   │   │           ├── .travis.yml
│   │   │           ├── LICENSE.txt
│   │   │           ├── README.md
│   │   │           ├── block.go
│   │   │           ├── doc.go
│   │   │           ├── entities.go
│   │   │           ├── esc.go
│   │   │           ├── html.go
│   │   │           ├── inline.go
│   │   │           ├── markdown.go
│   │   │           ├── node.go
│   │   │           └── smartypants.go
│   │   └── stretchr/
│   │       └── testify/
│   │           ├── LICENSE
│   │           ├── assert/
│   │           │   ├── assertion_compare.go
│   │           │   ├── assertion_format.go
│   │           │   ├── assertion_format.go.tmpl
│   │           │   ├── assertion_forward.go
│   │           │   ├── assertion_forward.go.tmpl
│   │           │   ├── assertion_order.go
│   │           │   ├── assertions.go
│   │           │   ├── doc.go
│   │           │   ├── errors.go
│   │           │   ├── forward_assertions.go
│   │           │   ├── http_assertions.go
│   │           │   └── yaml/
│   │           │       ├── yaml_custom.go
│   │           │       ├── yaml_default.go
│   │           │       └── yaml_fail.go
│   │           └── require/
│   │               ├── doc.go
│   │               ├── forward_requirements.go
│   │               ├── require.go
│   │               ├── require.go.tmpl
│   │               ├── require_forward.go
│   │               ├── require_forward.go.tmpl
│   │               └── requirements.go
│   ├── go.opentelemetry.io/
│   │   ├── auto/
│   │   │   └── sdk/
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── LICENSE
│   │   │       ├── VERSIONING.md
│   │   │       ├── doc.go
│   │   │       ├── internal/
│   │   │       │   └── telemetry/
│   │   │       │       ├── attr.go
│   │   │       │       ├── doc.go
│   │   │       │       ├── id.go
│   │   │       │       ├── number.go
│   │   │       │       ├── resource.go
│   │   │       │       ├── scope.go
│   │   │       │       ├── span.go
│   │   │       │       ├── status.go
│   │   │       │       ├── traces.go
│   │   │       │       └── value.go
│   │   │       ├── limit.go
│   │   │       ├── span.go
│   │   │       ├── tracer.go
│   │   │       └── tracer_provider.go
│   │   ├── contrib/
│   │   │   └── propagators/
│   │   │       ├── LICENSE
│   │   │       └── jaeger/
│   │   │           ├── context.go
│   │   │           ├── doc.go
│   │   │           └── jaeger_propagator.go
│   │   ├── otel/
│   │   │   ├── .clomonitor.yml
│   │   │   ├── .codespellignore
│   │   │   ├── .codespellrc
│   │   │   ├── .gitattributes
│   │   │   ├── .gitignore
│   │   │   ├── .golangci.yml
│   │   │   ├── .lycheeignore
│   │   │   ├── .markdownlint.yaml
│   │   │   ├── CHANGELOG.md
│   │   │   ├── CODEOWNERS
│   │   │   ├── CONTRIBUTING.md
│   │   │   ├── LICENSE
│   │   │   ├── Makefile
│   │   │   ├── README.md
│   │   │   ├── RELEASING.md
│   │   │   ├── SECURITY-INSIGHTS.yml
│   │   │   ├── VERSIONING.md
│   │   │   ├── attribute/
│   │   │   │   ├── README.md
│   │   │   │   ├── doc.go
│   │   │   │   ├── encoder.go
│   │   │   │   ├── filter.go
│   │   │   │   ├── hash.go
│   │   │   │   ├── internal/
│   │   │   │   │   ├── attribute.go
│   │   │   │   │   └── xxhash/
│   │   │   │   │       └── xxhash.go
│   │   │   │   ├── iterator.go
│   │   │   │   ├── key.go
│   │   │   │   ├── kv.go
│   │   │   │   ├── rawhelpers.go
│   │   │   │   ├── set.go
│   │   │   │   ├── type_string.go
│   │   │   │   └── value.go
│   │   │   ├── baggage/
│   │   │   │   ├── README.md
│   │   │   │   ├── baggage.go
│   │   │   │   ├── context.go
│   │   │   │   └── doc.go
│   │   │   ├── codes/
│   │   │   │   ├── README.md
│   │   │   │   ├── codes.go
│   │   │   │   └── doc.go
│   │   │   ├── dependencies.Dockerfile
│   │   │   ├── doc.go
│   │   │   ├── error_handler.go
│   │   │   ├── exporters/
│   │   │   │   └── otlp/
│   │   │   │       └── otlptrace/
│   │   │   │           ├── LICENSE
│   │   │   │           ├── README.md
│   │   │   │           ├── clients.go
│   │   │   │           ├── doc.go
│   │   │   │           ├── exporter.go
│   │   │   │           ├── internal/
│   │   │   │           │   └── tracetransform/
│   │   │   │           │       ├── attribute.go
│   │   │   │           │       ├── instrumentation.go
│   │   │   │           │       ├── resource.go
│   │   │   │           │       └── span.go
│   │   │   │           └── version.go
│   │   │   ├── handler.go
│   │   │   ├── internal/
│   │   │   │   ├── baggage/
│   │   │   │   │   ├── baggage.go
│   │   │   │   │   └── context.go
│   │   │   │   └── global/
│   │   │   │       ├── handler.go
│   │   │   │       ├── instruments.go
│   │   │   │       ├── internal_logging.go
│   │   │   │       ├── meter.go
│   │   │   │       ├── propagator.go
│   │   │   │       ├── state.go
│   │   │   │       └── trace.go
│   │   │   ├── internal_logging.go
│   │   │   ├── metric/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── asyncfloat64.go
│   │   │   │   ├── asyncint64.go
│   │   │   │   ├── config.go
│   │   │   │   ├── doc.go
│   │   │   │   ├── embedded/
│   │   │   │   │   ├── README.md
│   │   │   │   │   └── embedded.go
│   │   │   │   ├── instrument.go
│   │   │   │   ├── meter.go
│   │   │   │   ├── noop/
│   │   │   │   │   ├── README.md
│   │   │   │   │   └── noop.go
│   │   │   │   ├── syncfloat64.go
│   │   │   │   └── syncint64.go
│   │   │   ├── metric.go
│   │   │   ├── propagation/
│   │   │   │   ├── README.md
│   │   │   │   ├── baggage.go
│   │   │   │   ├── doc.go
│   │   │   │   ├── propagation.go
│   │   │   │   └── trace_context.go
│   │   │   ├── propagation.go
│   │   │   ├── renovate.json
│   │   │   ├── requirements.txt
│   │   │   ├── sdk/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── instrumentation/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── library.go
│   │   │   │   │   └── scope.go
│   │   │   │   ├── internal/
│   │   │   │   │   └── x/
│   │   │   │   │       ├── README.md
│   │   │   │   │       ├── features.go
│   │   │   │   │       └── x.go
│   │   │   │   ├── resource/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── auto.go
│   │   │   │   │   ├── builtin.go
│   │   │   │   │   ├── config.go
│   │   │   │   │   ├── container.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── env.go
│   │   │   │   │   ├── host_id.go
│   │   │   │   │   ├── host_id_bsd.go
│   │   │   │   │   ├── host_id_darwin.go
│   │   │   │   │   ├── host_id_exec.go
│   │   │   │   │   ├── host_id_linux.go
│   │   │   │   │   ├── host_id_readfile.go
│   │   │   │   │   ├── host_id_unsupported.go
│   │   │   │   │   ├── host_id_windows.go
│   │   │   │   │   ├── os.go
│   │   │   │   │   ├── os_release_darwin.go
│   │   │   │   │   ├── os_release_unix.go
│   │   │   │   │   ├── os_unix.go
│   │   │   │   │   ├── os_unsupported.go
│   │   │   │   │   ├── os_windows.go
│   │   │   │   │   ├── process.go
│   │   │   │   │   └── resource.go
│   │   │   │   ├── trace/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── batch_span_processor.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── event.go
│   │   │   │   │   ├── evictedqueue.go
│   │   │   │   │   ├── id_generator.go
│   │   │   │   │   ├── internal/
│   │   │   │   │   │   ├── env/
│   │   │   │   │   │   │   └── env.go
│   │   │   │   │   │   └── observ/
│   │   │   │   │   │       ├── batch_span_processor.go
│   │   │   │   │   │       ├── doc.go
│   │   │   │   │   │       ├── simple_span_processor.go
│   │   │   │   │   │       └── tracer.go
│   │   │   │   │   ├── link.go
│   │   │   │   │   ├── provider.go
│   │   │   │   │   ├── sampler_env.go
│   │   │   │   │   ├── sampling.go
│   │   │   │   │   ├── simple_span_processor.go
│   │   │   │   │   ├── snapshot.go
│   │   │   │   │   ├── span.go
│   │   │   │   │   ├── span_exporter.go
│   │   │   │   │   ├── span_limits.go
│   │   │   │   │   ├── span_processor.go
│   │   │   │   │   └── tracer.go
│   │   │   │   └── version.go
│   │   │   ├── semconv/
│   │   │   │   ├── internal/
│   │   │   │   │   └── http.go
│   │   │   │   ├── v1.37.0/
│   │   │   │   │   ├── MIGRATION.md
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── attribute_group.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── error_type.go
│   │   │   │   │   ├── exception.go
│   │   │   │   │   └── schema.go
│   │   │   │   ├── v1.39.0/
│   │   │   │   │   ├── MIGRATION.md
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── attribute_group.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── error_type.go
│   │   │   │   │   ├── exception.go
│   │   │   │   │   ├── otelconv/
│   │   │   │   │   │   └── metric.go
│   │   │   │   │   └── schema.go
│   │   │   │   └── v1.7.0/
│   │   │   │       ├── README.md
│   │   │   │       ├── doc.go
│   │   │   │       ├── exception.go
│   │   │   │       ├── http.go
│   │   │   │       ├── resource.go
│   │   │   │       ├── schema.go
│   │   │   │       └── trace.go
│   │   │   ├── trace/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── auto.go
│   │   │   │   ├── config.go
│   │   │   │   ├── context.go
│   │   │   │   ├── doc.go
│   │   │   │   ├── embedded/
│   │   │   │   │   ├── README.md
│   │   │   │   │   └── embedded.go
│   │   │   │   ├── hex.go
│   │   │   │   ├── internal/
│   │   │   │   │   └── telemetry/
│   │   │   │   │       ├── attr.go
│   │   │   │   │       ├── doc.go
│   │   │   │   │       ├── id.go
│   │   │   │   │       ├── number.go
│   │   │   │   │       ├── resource.go
│   │   │   │   │       ├── scope.go
│   │   │   │   │       ├── span.go
│   │   │   │   │       ├── status.go
│   │   │   │   │       ├── traces.go
│   │   │   │   │       └── value.go
│   │   │   │   ├── nonrecording.go
│   │   │   │   ├── noop/
│   │   │   │   │   ├── README.md
│   │   │   │   │   └── noop.go
│   │   │   │   ├── noop.go
│   │   │   │   ├── provider.go
│   │   │   │   ├── span.go
│   │   │   │   ├── trace.go
│   │   │   │   ├── tracer.go
│   │   │   │   └── tracestate.go
│   │   │   ├── trace.go
│   │   │   ├── verify_released_changelog.sh
│   │   │   ├── version.go
│   │   │   └── versions.yaml
│   │   └── proto/
│   │       └── otlp/
│   │           ├── LICENSE
│   │           ├── collector/
│   │           │   └── trace/
│   │           │       └── v1/
│   │           │           ├── trace_service.pb.go
│   │           │           ├── trace_service.pb.gw.go
│   │           │           └── trace_service_grpc.pb.go
│   │           ├── common/
│   │           │   └── v1/
│   │           │       └── common.pb.go
│   │           ├── resource/
│   │           │   └── v1/
│   │           │       └── resource.pb.go
│   │           └── trace/
│   │               └── v1/
│   │                   └── trace.pb.go
│   ├── go.uber.org/
│   │   └── mock/
│   │       ├── AUTHORS
│   │       ├── LICENSE
│   │       ├── gomock/
│   │       │   ├── call.go
│   │       │   ├── callset.go
│   │       │   ├── controller.go
│   │       │   ├── doc.go
│   │       │   ├── matchers.go
│   │       │   └── string.go
│   │       └── mockgen/
│   │           ├── deprecated.go
│   │           ├── generic.go
│   │           ├── gob.go
│   │           ├── mockgen.go
│   │           ├── model/
│   │           │   └── model.go
│   │           ├── package_mode.go
│   │           ├── parse.go
│   │           └── version.go
│   ├── golang.org/
│   │   └── x/
│   │       ├── crypto/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── blake2b/
│   │       │   │   ├── blake2b.go
│   │       │   │   ├── blake2bAVX2_amd64.go
│   │       │   │   ├── blake2bAVX2_amd64.s
│   │       │   │   ├── blake2b_amd64.s
│   │       │   │   ├── blake2b_generic.go
│   │       │   │   ├── blake2b_ref.go
│   │       │   │   ├── blake2x.go
│   │       │   │   └── register.go
│   │       │   ├── blowfish/
│   │       │   │   ├── block.go
│   │       │   │   ├── cipher.go
│   │       │   │   └── const.go
│   │       │   ├── chacha20/
│   │       │   │   ├── chacha_arm64.go
│   │       │   │   ├── chacha_arm64.s
│   │       │   │   ├── chacha_generic.go
│   │       │   │   ├── chacha_noasm.go
│   │       │   │   ├── chacha_ppc64x.go
│   │       │   │   ├── chacha_ppc64x.s
│   │       │   │   ├── chacha_s390x.go
│   │       │   │   ├── chacha_s390x.s
│   │       │   │   └── xor.go
│   │       │   ├── chacha20poly1305/
│   │       │   │   ├── chacha20poly1305.go
│   │       │   │   ├── chacha20poly1305_amd64.go
│   │       │   │   ├── chacha20poly1305_amd64.s
│   │       │   │   ├── chacha20poly1305_generic.go
│   │       │   │   ├── chacha20poly1305_noasm.go
│   │       │   │   └── xchacha20poly1305.go
│   │       │   ├── curve25519/
│   │       │   │   └── curve25519.go
│   │       │   ├── hkdf/
│   │       │   │   └── hkdf.go
│   │       │   ├── internal/
│   │       │   │   ├── alias/
│   │       │   │   │   ├── alias.go
│   │       │   │   │   └── alias_purego.go
│   │       │   │   └── poly1305/
│   │       │   │       ├── mac_noasm.go
│   │       │   │       ├── poly1305.go
│   │       │   │       ├── sum_amd64.s
│   │       │   │       ├── sum_asm.go
│   │       │   │       ├── sum_generic.go
│   │       │   │       ├── sum_loong64.s
│   │       │   │       ├── sum_ppc64x.s
│   │       │   │       ├── sum_s390x.go
│   │       │   │       └── sum_s390x.s
│   │       │   ├── nacl/
│   │       │   │   ├── box/
│   │       │   │   │   └── box.go
│   │       │   │   └── secretbox/
│   │       │   │       └── secretbox.go
│   │       │   ├── salsa20/
│   │       │   │   └── salsa/
│   │       │   │       ├── hsalsa20.go
│   │       │   │       ├── salsa208.go
│   │       │   │       ├── salsa20_amd64.go
│   │       │   │       ├── salsa20_amd64.s
│   │       │   │       ├── salsa20_noasm.go
│   │       │   │       └── salsa20_ref.go
│   │       │   └── ssh/
│   │       │       ├── buffer.go
│   │       │       ├── certs.go
│   │       │       ├── channel.go
│   │       │       ├── cipher.go
│   │       │       ├── client.go
│   │       │       ├── client_auth.go
│   │       │       ├── common.go
│   │       │       ├── connection.go
│   │       │       ├── doc.go
│   │       │       ├── handshake.go
│   │       │       ├── internal/
│   │       │       │   └── bcrypt_pbkdf/
│   │       │       │       └── bcrypt_pbkdf.go
│   │       │       ├── kex.go
│   │       │       ├── keys.go
│   │       │       ├── mac.go
│   │       │       ├── messages.go
│   │       │       ├── mlkem.go
│   │       │       ├── mux.go
│   │       │       ├── server.go
│   │       │       ├── session.go
│   │       │       ├── ssh_gss.go
│   │       │       ├── streamlocal.go
│   │       │       ├── tcpip.go
│   │       │       └── transport.go
│   │       ├── mod/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── internal/
│   │       │   │   └── lazyregexp/
│   │       │   │       └── lazyre.go
│   │       │   ├── modfile/
│   │       │   │   ├── print.go
│   │       │   │   ├── read.go
│   │       │   │   ├── rule.go
│   │       │   │   └── work.go
│   │       │   ├── module/
│   │       │   │   ├── module.go
│   │       │   │   └── pseudo.go
│   │       │   └── semver/
│   │       │       └── semver.go
│   │       ├── net/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── bpf/
│   │       │   │   ├── asm.go
│   │       │   │   ├── constants.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── instructions.go
│   │       │   │   ├── setter.go
│   │       │   │   ├── vm.go
│   │       │   │   └── vm_instructions.go
│   │       │   ├── context/
│   │       │   │   └── context.go
│   │       │   ├── http/
│   │       │   │   └── httpguts/
│   │       │   │       ├── guts.go
│   │       │   │       └── httplex.go
│   │       │   ├── http2/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── ascii.go
│   │       │   │   ├── ciphers.go
│   │       │   │   ├── client_conn_pool.go
│   │       │   │   ├── config.go
│   │       │   │   ├── config_go124.go
│   │       │   │   ├── config_pre_go124.go
│   │       │   │   ├── databuffer.go
│   │       │   │   ├── errors.go
│   │       │   │   ├── flow.go
│   │       │   │   ├── frame.go
│   │       │   │   ├── gotrack.go
│   │       │   │   ├── hpack/
│   │       │   │   │   ├── encode.go
│   │       │   │   │   ├── hpack.go
│   │       │   │   │   ├── huffman.go
│   │       │   │   │   ├── static_table.go
│   │       │   │   │   └── tables.go
│   │       │   │   ├── http2.go
│   │       │   │   ├── pipe.go
│   │       │   │   ├── server.go
│   │       │   │   ├── timer.go
│   │       │   │   ├── transport.go
│   │       │   │   ├── unencrypted.go
│   │       │   │   ├── write.go
│   │       │   │   ├── writesched.go
│   │       │   │   ├── writesched_priority.go
│   │       │   │   ├── writesched_random.go
│   │       │   │   └── writesched_roundrobin.go
│   │       │   ├── icmp/
│   │       │   │   ├── dstunreach.go
│   │       │   │   ├── echo.go
│   │       │   │   ├── endpoint.go
│   │       │   │   ├── extension.go
│   │       │   │   ├── helper_posix.go
│   │       │   │   ├── interface.go
│   │       │   │   ├── ipv4.go
│   │       │   │   ├── ipv6.go
│   │       │   │   ├── listen_posix.go
│   │       │   │   ├── listen_stub.go
│   │       │   │   ├── message.go
│   │       │   │   ├── messagebody.go
│   │       │   │   ├── mpls.go
│   │       │   │   ├── multipart.go
│   │       │   │   ├── packettoobig.go
│   │       │   │   ├── paramprob.go
│   │       │   │   ├── sys_freebsd.go
│   │       │   │   └── timeexceeded.go
│   │       │   ├── idna/
│   │       │   │   ├── go118.go
│   │       │   │   ├── idna10.0.0.go
│   │       │   │   ├── idna9.0.0.go
│   │       │   │   ├── pre_go118.go
│   │       │   │   ├── punycode.go
│   │       │   │   ├── tables10.0.0.go
│   │       │   │   ├── tables11.0.0.go
│   │       │   │   ├── tables12.0.0.go
│   │       │   │   ├── tables13.0.0.go
│   │       │   │   ├── tables15.0.0.go
│   │       │   │   ├── tables9.0.0.go
│   │       │   │   ├── trie.go
│   │       │   │   ├── trie12.0.0.go
│   │       │   │   ├── trie13.0.0.go
│   │       │   │   └── trieval.go
│   │       │   ├── internal/
│   │       │   │   ├── httpcommon/
│   │       │   │   │   ├── ascii.go
│   │       │   │   │   ├── headermap.go
│   │       │   │   │   └── request.go
│   │       │   │   ├── iana/
│   │       │   │   │   └── const.go
│   │       │   │   ├── socket/
│   │       │   │   │   ├── cmsghdr.go
│   │       │   │   │   ├── cmsghdr_bsd.go
│   │       │   │   │   ├── cmsghdr_linux_32bit.go
│   │       │   │   │   ├── cmsghdr_linux_64bit.go
│   │       │   │   │   ├── cmsghdr_solaris_64bit.go
│   │       │   │   │   ├── cmsghdr_stub.go
│   │       │   │   │   ├── cmsghdr_unix.go
│   │       │   │   │   ├── cmsghdr_zos_s390x.go
│   │       │   │   │   ├── complete_dontwait.go
│   │       │   │   │   ├── complete_nodontwait.go
│   │       │   │   │   ├── empty.s
│   │       │   │   │   ├── error_unix.go
│   │       │   │   │   ├── error_windows.go
│   │       │   │   │   ├── iovec_32bit.go
│   │       │   │   │   ├── iovec_64bit.go
│   │       │   │   │   ├── iovec_solaris_64bit.go
│   │       │   │   │   ├── iovec_stub.go
│   │       │   │   │   ├── mmsghdr_stub.go
│   │       │   │   │   ├── mmsghdr_unix.go
│   │       │   │   │   ├── msghdr_bsd.go
│   │       │   │   │   ├── msghdr_bsdvar.go
│   │       │   │   │   ├── msghdr_linux.go
│   │       │   │   │   ├── msghdr_linux_32bit.go
│   │       │   │   │   ├── msghdr_linux_64bit.go
│   │       │   │   │   ├── msghdr_openbsd.go
│   │       │   │   │   ├── msghdr_solaris_64bit.go
│   │       │   │   │   ├── msghdr_stub.go
│   │       │   │   │   ├── msghdr_zos_s390x.go
│   │       │   │   │   ├── norace.go
│   │       │   │   │   ├── race.go
│   │       │   │   │   ├── rawconn.go
│   │       │   │   │   ├── rawconn_mmsg.go
│   │       │   │   │   ├── rawconn_msg.go
│   │       │   │   │   ├── rawconn_nommsg.go
│   │       │   │   │   ├── rawconn_nomsg.go
│   │       │   │   │   ├── socket.go
│   │       │   │   │   ├── sys.go
│   │       │   │   │   ├── sys_bsd.go
│   │       │   │   │   ├── sys_const_unix.go
│   │       │   │   │   ├── sys_linux.go
│   │       │   │   │   ├── sys_linux_386.go
│   │       │   │   │   ├── sys_linux_386.s
│   │       │   │   │   ├── sys_linux_amd64.go
│   │       │   │   │   ├── sys_linux_arm.go
│   │       │   │   │   ├── sys_linux_arm64.go
│   │       │   │   │   ├── sys_linux_loong64.go
│   │       │   │   │   ├── sys_linux_mips.go
│   │       │   │   │   ├── sys_linux_mips64.go
│   │       │   │   │   ├── sys_linux_mips64le.go
│   │       │   │   │   ├── sys_linux_mipsle.go
│   │       │   │   │   ├── sys_linux_ppc.go
│   │       │   │   │   ├── sys_linux_ppc64.go
│   │       │   │   │   ├── sys_linux_ppc64le.go
│   │       │   │   │   ├── sys_linux_riscv64.go
│   │       │   │   │   ├── sys_linux_s390x.go
│   │       │   │   │   ├── sys_linux_s390x.s
│   │       │   │   │   ├── sys_netbsd.go
│   │       │   │   │   ├── sys_posix.go
│   │       │   │   │   ├── sys_stub.go
│   │       │   │   │   ├── sys_unix.go
│   │       │   │   │   ├── sys_windows.go
│   │       │   │   │   ├── sys_zos_s390x.go
│   │       │   │   │   ├── sys_zos_s390x.s
│   │       │   │   │   ├── zsys_aix_ppc64.go
│   │       │   │   │   ├── zsys_darwin_amd64.go
│   │       │   │   │   ├── zsys_darwin_arm64.go
│   │       │   │   │   ├── zsys_dragonfly_amd64.go
│   │       │   │   │   ├── zsys_freebsd_386.go
│   │       │   │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   │   ├── zsys_freebsd_arm.go
│   │       │   │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   │   ├── zsys_freebsd_riscv64.go
│   │       │   │   │   ├── zsys_linux_386.go
│   │       │   │   │   ├── zsys_linux_amd64.go
│   │       │   │   │   ├── zsys_linux_arm.go
│   │       │   │   │   ├── zsys_linux_arm64.go
│   │       │   │   │   ├── zsys_linux_loong64.go
│   │       │   │   │   ├── zsys_linux_mips.go
│   │       │   │   │   ├── zsys_linux_mips64.go
│   │       │   │   │   ├── zsys_linux_mips64le.go
│   │       │   │   │   ├── zsys_linux_mipsle.go
│   │       │   │   │   ├── zsys_linux_ppc.go
│   │       │   │   │   ├── zsys_linux_ppc64.go
│   │       │   │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   │   ├── zsys_linux_riscv64.go
│   │       │   │   │   ├── zsys_linux_s390x.go
│   │       │   │   │   ├── zsys_netbsd_386.go
│   │       │   │   │   ├── zsys_netbsd_amd64.go
│   │       │   │   │   ├── zsys_netbsd_arm.go
│   │       │   │   │   ├── zsys_netbsd_arm64.go
│   │       │   │   │   ├── zsys_openbsd_386.go
│   │       │   │   │   ├── zsys_openbsd_amd64.go
│   │       │   │   │   ├── zsys_openbsd_arm.go
│   │       │   │   │   ├── zsys_openbsd_arm64.go
│   │       │   │   │   ├── zsys_openbsd_mips64.go
│   │       │   │   │   ├── zsys_openbsd_ppc64.go
│   │       │   │   │   ├── zsys_openbsd_riscv64.go
│   │       │   │   │   ├── zsys_solaris_amd64.go
│   │       │   │   │   └── zsys_zos_s390x.go
│   │       │   │   ├── socks/
│   │       │   │   │   ├── client.go
│   │       │   │   │   └── socks.go
│   │       │   │   └── timeseries/
│   │       │   │       └── timeseries.go
│   │       │   ├── ipv4/
│   │       │   │   ├── batch.go
│   │       │   │   ├── control.go
│   │       │   │   ├── control_bsd.go
│   │       │   │   ├── control_pktinfo.go
│   │       │   │   ├── control_stub.go
│   │       │   │   ├── control_unix.go
│   │       │   │   ├── control_windows.go
│   │       │   │   ├── control_zos.go
│   │       │   │   ├── dgramopt.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── endpoint.go
│   │       │   │   ├── genericopt.go
│   │       │   │   ├── header.go
│   │       │   │   ├── helper.go
│   │       │   │   ├── iana.go
│   │       │   │   ├── icmp.go
│   │       │   │   ├── icmp_linux.go
│   │       │   │   ├── icmp_stub.go
│   │       │   │   ├── packet.go
│   │       │   │   ├── payload.go
│   │       │   │   ├── payload_cmsg.go
│   │       │   │   ├── payload_nocmsg.go
│   │       │   │   ├── sockopt.go
│   │       │   │   ├── sockopt_posix.go
│   │       │   │   ├── sockopt_stub.go
│   │       │   │   ├── sys_aix.go
│   │       │   │   ├── sys_asmreq.go
│   │       │   │   ├── sys_asmreq_stub.go
│   │       │   │   ├── sys_asmreqn.go
│   │       │   │   ├── sys_asmreqn_stub.go
│   │       │   │   ├── sys_bpf.go
│   │       │   │   ├── sys_bpf_stub.go
│   │       │   │   ├── sys_bsd.go
│   │       │   │   ├── sys_darwin.go
│   │       │   │   ├── sys_dragonfly.go
│   │       │   │   ├── sys_freebsd.go
│   │       │   │   ├── sys_linux.go
│   │       │   │   ├── sys_solaris.go
│   │       │   │   ├── sys_ssmreq.go
│   │       │   │   ├── sys_ssmreq_stub.go
│   │       │   │   ├── sys_stub.go
│   │       │   │   ├── sys_windows.go
│   │       │   │   ├── sys_zos.go
│   │       │   │   ├── zsys_aix_ppc64.go
│   │       │   │   ├── zsys_darwin.go
│   │       │   │   ├── zsys_dragonfly.go
│   │       │   │   ├── zsys_freebsd_386.go
│   │       │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   ├── zsys_freebsd_arm.go
│   │       │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   ├── zsys_freebsd_riscv64.go
│   │       │   │   ├── zsys_linux_386.go
│   │       │   │   ├── zsys_linux_amd64.go
│   │       │   │   ├── zsys_linux_arm.go
│   │       │   │   ├── zsys_linux_arm64.go
│   │       │   │   ├── zsys_linux_loong64.go
│   │       │   │   ├── zsys_linux_mips.go
│   │       │   │   ├── zsys_linux_mips64.go
│   │       │   │   ├── zsys_linux_mips64le.go
│   │       │   │   ├── zsys_linux_mipsle.go
│   │       │   │   ├── zsys_linux_ppc.go
│   │       │   │   ├── zsys_linux_ppc64.go
│   │       │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   ├── zsys_linux_riscv64.go
│   │       │   │   ├── zsys_linux_s390x.go
│   │       │   │   ├── zsys_netbsd.go
│   │       │   │   ├── zsys_openbsd.go
│   │       │   │   ├── zsys_solaris.go
│   │       │   │   └── zsys_zos_s390x.go
│   │       │   ├── ipv6/
│   │       │   │   ├── batch.go
│   │       │   │   ├── control.go
│   │       │   │   ├── control_rfc2292_unix.go
│   │       │   │   ├── control_rfc3542_unix.go
│   │       │   │   ├── control_stub.go
│   │       │   │   ├── control_unix.go
│   │       │   │   ├── control_windows.go
│   │       │   │   ├── dgramopt.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── endpoint.go
│   │       │   │   ├── genericopt.go
│   │       │   │   ├── header.go
│   │       │   │   ├── helper.go
│   │       │   │   ├── iana.go
│   │       │   │   ├── icmp.go
│   │       │   │   ├── icmp_bsd.go
│   │       │   │   ├── icmp_linux.go
│   │       │   │   ├── icmp_solaris.go
│   │       │   │   ├── icmp_stub.go
│   │       │   │   ├── icmp_windows.go
│   │       │   │   ├── icmp_zos.go
│   │       │   │   ├── payload.go
│   │       │   │   ├── payload_cmsg.go
│   │       │   │   ├── payload_nocmsg.go
│   │       │   │   ├── sockopt.go
│   │       │   │   ├── sockopt_posix.go
│   │       │   │   ├── sockopt_stub.go
│   │       │   │   ├── sys_aix.go
│   │       │   │   ├── sys_asmreq.go
│   │       │   │   ├── sys_asmreq_stub.go
│   │       │   │   ├── sys_bpf.go
│   │       │   │   ├── sys_bpf_stub.go
│   │       │   │   ├── sys_bsd.go
│   │       │   │   ├── sys_darwin.go
│   │       │   │   ├── sys_freebsd.go
│   │       │   │   ├── sys_linux.go
│   │       │   │   ├── sys_solaris.go
│   │       │   │   ├── sys_ssmreq.go
│   │       │   │   ├── sys_ssmreq_stub.go
│   │       │   │   ├── sys_stub.go
│   │       │   │   ├── sys_windows.go
│   │       │   │   ├── sys_zos.go
│   │       │   │   ├── zsys_aix_ppc64.go
│   │       │   │   ├── zsys_darwin.go
│   │       │   │   ├── zsys_dragonfly.go
│   │       │   │   ├── zsys_freebsd_386.go
│   │       │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   ├── zsys_freebsd_arm.go
│   │       │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   ├── zsys_freebsd_riscv64.go
│   │       │   │   ├── zsys_linux_386.go
│   │       │   │   ├── zsys_linux_amd64.go
│   │       │   │   ├── zsys_linux_arm.go
│   │       │   │   ├── zsys_linux_arm64.go
│   │       │   │   ├── zsys_linux_loong64.go
│   │       │   │   ├── zsys_linux_mips.go
│   │       │   │   ├── zsys_linux_mips64.go
│   │       │   │   ├── zsys_linux_mips64le.go
│   │       │   │   ├── zsys_linux_mipsle.go
│   │       │   │   ├── zsys_linux_ppc.go
│   │       │   │   ├── zsys_linux_ppc64.go
│   │       │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   ├── zsys_linux_riscv64.go
│   │       │   │   ├── zsys_linux_s390x.go
│   │       │   │   ├── zsys_netbsd.go
│   │       │   │   ├── zsys_openbsd.go
│   │       │   │   ├── zsys_solaris.go
│   │       │   │   └── zsys_zos_s390x.go
│   │       │   ├── nettest/
│   │       │   │   ├── conntest.go
│   │       │   │   ├── nettest.go
│   │       │   │   ├── nettest_stub.go
│   │       │   │   ├── nettest_unix.go
│   │       │   │   └── nettest_windows.go
│   │       │   ├── proxy/
│   │       │   │   ├── dial.go
│   │       │   │   ├── direct.go
│   │       │   │   ├── per_host.go
│   │       │   │   ├── proxy.go
│   │       │   │   └── socks5.go
│   │       │   ├── trace/
│   │       │   │   ├── events.go
│   │       │   │   ├── histogram.go
│   │       │   │   └── trace.go
│   │       │   └── websocket/
│   │       │       ├── client.go
│   │       │       ├── dial.go
│   │       │       ├── hybi.go
│   │       │       ├── server.go
│   │       │       └── websocket.go
│   │       ├── oauth2/
│   │       │   ├── .travis.yml
│   │       │   ├── CONTRIBUTING.md
│   │       │   ├── LICENSE
│   │       │   ├── README.md
│   │       │   ├── deviceauth.go
│   │       │   ├── internal/
│   │       │   │   ├── doc.go
│   │       │   │   ├── oauth2.go
│   │       │   │   ├── token.go
│   │       │   │   └── transport.go
│   │       │   ├── oauth2.go
│   │       │   ├── pkce.go
│   │       │   ├── token.go
│   │       │   └── transport.go
│   │       ├── sync/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   └── errgroup/
│   │       │       └── errgroup.go
│   │       ├── sys/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── cpu/
│   │       │   │   ├── asm_aix_ppc64.s
│   │       │   │   ├── asm_darwin_x86_gc.s
│   │       │   │   ├── byteorder.go
│   │       │   │   ├── cpu.go
│   │       │   │   ├── cpu_aix.go
│   │       │   │   ├── cpu_arm.go
│   │       │   │   ├── cpu_arm64.go
│   │       │   │   ├── cpu_arm64.s
│   │       │   │   ├── cpu_darwin_x86.go
│   │       │   │   ├── cpu_gc_arm64.go
│   │       │   │   ├── cpu_gc_s390x.go
│   │       │   │   ├── cpu_gc_x86.go
│   │       │   │   ├── cpu_gc_x86.s
│   │       │   │   ├── cpu_gccgo_arm64.go
│   │       │   │   ├── cpu_gccgo_s390x.go
│   │       │   │   ├── cpu_gccgo_x86.c
│   │       │   │   ├── cpu_gccgo_x86.go
│   │       │   │   ├── cpu_linux.go
│   │       │   │   ├── cpu_linux_arm.go
│   │       │   │   ├── cpu_linux_arm64.go
│   │       │   │   ├── cpu_linux_loong64.go
│   │       │   │   ├── cpu_linux_mips64x.go
│   │       │   │   ├── cpu_linux_noinit.go
│   │       │   │   ├── cpu_linux_ppc64x.go
│   │       │   │   ├── cpu_linux_riscv64.go
│   │       │   │   ├── cpu_linux_s390x.go
│   │       │   │   ├── cpu_loong64.go
│   │       │   │   ├── cpu_loong64.s
│   │       │   │   ├── cpu_mips64x.go
│   │       │   │   ├── cpu_mipsx.go
│   │       │   │   ├── cpu_netbsd_arm64.go
│   │       │   │   ├── cpu_openbsd_arm64.go
│   │       │   │   ├── cpu_openbsd_arm64.s
│   │       │   │   ├── cpu_other_arm.go
│   │       │   │   ├── cpu_other_arm64.go
│   │       │   │   ├── cpu_other_mips64x.go
│   │       │   │   ├── cpu_other_ppc64x.go
│   │       │   │   ├── cpu_other_riscv64.go
│   │       │   │   ├── cpu_other_x86.go
│   │       │   │   ├── cpu_ppc64x.go
│   │       │   │   ├── cpu_riscv64.go
│   │       │   │   ├── cpu_s390x.go
│   │       │   │   ├── cpu_s390x.s
│   │       │   │   ├── cpu_wasm.go
│   │       │   │   ├── cpu_x86.go
│   │       │   │   ├── cpu_zos.go
│   │       │   │   ├── cpu_zos_s390x.go
│   │       │   │   ├── endian_big.go
│   │       │   │   ├── endian_little.go
│   │       │   │   ├── hwcap_linux.go
│   │       │   │   ├── parse.go
│   │       │   │   ├── proc_cpuinfo_linux.go
│   │       │   │   ├── runtime_auxv.go
│   │       │   │   ├── runtime_auxv_go121.go
│   │       │   │   ├── syscall_aix_gccgo.go
│   │       │   │   ├── syscall_aix_ppc64_gc.go
│   │       │   │   └── syscall_darwin_x86_gc.go
│   │       │   ├── execabs/
│   │       │   │   ├── execabs.go
│   │       │   │   ├── execabs_go118.go
│   │       │   │   └── execabs_go119.go
│   │       │   ├── plan9/
│   │       │   │   ├── asm.s
│   │       │   │   ├── asm_plan9_386.s
│   │       │   │   ├── asm_plan9_amd64.s
│   │       │   │   ├── asm_plan9_arm.s
│   │       │   │   ├── const_plan9.go
│   │       │   │   ├── dir_plan9.go
│   │       │   │   ├── env_plan9.go
│   │       │   │   ├── errors_plan9.go
│   │       │   │   ├── mkall.sh
│   │       │   │   ├── mkerrors.sh
│   │       │   │   ├── mksysnum_plan9.sh
│   │       │   │   ├── pwd_plan9.go
│   │       │   │   ├── race.go
│   │       │   │   ├── race0.go
│   │       │   │   ├── str.go
│   │       │   │   ├── syscall.go
│   │       │   │   ├── syscall_plan9.go
│   │       │   │   ├── zsyscall_plan9_386.go
│   │       │   │   ├── zsyscall_plan9_amd64.go
│   │       │   │   ├── zsyscall_plan9_arm.go
│   │       │   │   └── zsysnum_plan9.go
│   │       │   ├── unix/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── README.md
│   │       │   │   ├── affinity_linux.go
│   │       │   │   ├── aliases.go
│   │       │   │   ├── asm_aix_ppc64.s
│   │       │   │   ├── asm_bsd_386.s
│   │       │   │   ├── asm_bsd_amd64.s
│   │       │   │   ├── asm_bsd_arm.s
│   │       │   │   ├── asm_bsd_arm64.s
│   │       │   │   ├── asm_bsd_ppc64.s
│   │       │   │   ├── asm_bsd_riscv64.s
│   │       │   │   ├── asm_linux_386.s
│   │       │   │   ├── asm_linux_amd64.s
│   │       │   │   ├── asm_linux_arm.s
│   │       │   │   ├── asm_linux_arm64.s
│   │       │   │   ├── asm_linux_loong64.s
│   │       │   │   ├── asm_linux_mips64x.s
│   │       │   │   ├── asm_linux_mipsx.s
│   │       │   │   ├── asm_linux_ppc64x.s
│   │       │   │   ├── asm_linux_riscv64.s
│   │       │   │   ├── asm_linux_s390x.s
│   │       │   │   ├── asm_openbsd_mips64.s
│   │       │   │   ├── asm_solaris_amd64.s
│   │       │   │   ├── asm_zos_s390x.s
│   │       │   │   ├── auxv.go
│   │       │   │   ├── auxv_unsupported.go
│   │       │   │   ├── bluetooth_linux.go
│   │       │   │   ├── bpxsvc_zos.go
│   │       │   │   ├── bpxsvc_zos.s
│   │       │   │   ├── cap_freebsd.go
│   │       │   │   ├── constants.go
│   │       │   │   ├── dev_aix_ppc.go
│   │       │   │   ├── dev_aix_ppc64.go
│   │       │   │   ├── dev_darwin.go
│   │       │   │   ├── dev_dragonfly.go
│   │       │   │   ├── dev_freebsd.go
│   │       │   │   ├── dev_linux.go
│   │       │   │   ├── dev_netbsd.go
│   │       │   │   ├── dev_openbsd.go
│   │       │   │   ├── dev_zos.go
│   │       │   │   ├── dirent.go
│   │       │   │   ├── endian_big.go
│   │       │   │   ├── endian_little.go
│   │       │   │   ├── env_unix.go
│   │       │   │   ├── fcntl.go
│   │       │   │   ├── fcntl_darwin.go
│   │       │   │   ├── fcntl_linux_32bit.go
│   │       │   │   ├── fdset.go
│   │       │   │   ├── gccgo.go
│   │       │   │   ├── gccgo_c.c
│   │       │   │   ├── gccgo_linux_amd64.go
│   │       │   │   ├── ifreq_linux.go
│   │       │   │   ├── ioctl_linux.go
│   │       │   │   ├── ioctl_signed.go
│   │       │   │   ├── ioctl_unsigned.go
│   │       │   │   ├── ioctl_zos.go
│   │       │   │   ├── mkall.sh
│   │       │   │   ├── mkerrors.sh
│   │       │   │   ├── mmap_nomremap.go
│   │       │   │   ├── mremap.go
│   │       │   │   ├── pagesize_unix.go
│   │       │   │   ├── pledge_openbsd.go
│   │       │   │   ├── ptrace_darwin.go
│   │       │   │   ├── ptrace_ios.go
│   │       │   │   ├── race.go
│   │       │   │   ├── race0.go
│   │       │   │   ├── readdirent_getdents.go
│   │       │   │   ├── readdirent_getdirentries.go
│   │       │   │   ├── sockcmsg_dragonfly.go
│   │       │   │   ├── sockcmsg_linux.go
│   │       │   │   ├── sockcmsg_unix.go
│   │       │   │   ├── sockcmsg_unix_other.go
│   │       │   │   ├── sockcmsg_zos.go
│   │       │   │   ├── symaddr_zos_s390x.s
│   │       │   │   ├── syscall.go
│   │       │   │   ├── syscall_aix.go
│   │       │   │   ├── syscall_aix_ppc.go
│   │       │   │   ├── syscall_aix_ppc64.go
│   │       │   │   ├── syscall_bsd.go
│   │       │   │   ├── syscall_darwin.go
│   │       │   │   ├── syscall_darwin_amd64.go
│   │       │   │   ├── syscall_darwin_arm64.go
│   │       │   │   ├── syscall_darwin_libSystem.go
│   │       │   │   ├── syscall_dragonfly.go
│   │       │   │   ├── syscall_dragonfly_amd64.go
│   │       │   │   ├── syscall_freebsd.go
│   │       │   │   ├── syscall_freebsd_386.go
│   │       │   │   ├── syscall_freebsd_amd64.go
│   │       │   │   ├── syscall_freebsd_arm.go
│   │       │   │   ├── syscall_freebsd_arm64.go
│   │       │   │   ├── syscall_freebsd_riscv64.go
│   │       │   │   ├── syscall_hurd.go
│   │       │   │   ├── syscall_hurd_386.go
│   │       │   │   ├── syscall_illumos.go
│   │       │   │   ├── syscall_linux.go
│   │       │   │   ├── syscall_linux_386.go
│   │       │   │   ├── syscall_linux_alarm.go
│   │       │   │   ├── syscall_linux_amd64.go
│   │       │   │   ├── syscall_linux_amd64_gc.go
│   │       │   │   ├── syscall_linux_arm.go
│   │       │   │   ├── syscall_linux_arm64.go
│   │       │   │   ├── syscall_linux_gc.go
│   │       │   │   ├── syscall_linux_gc_386.go
│   │       │   │   ├── syscall_linux_gc_arm.go
│   │       │   │   ├── syscall_linux_gccgo_386.go
│   │       │   │   ├── syscall_linux_gccgo_arm.go
│   │       │   │   ├── syscall_linux_loong64.go
│   │       │   │   ├── syscall_linux_mips64x.go
│   │       │   │   ├── syscall_linux_mipsx.go
│   │       │   │   ├── syscall_linux_ppc.go
│   │       │   │   ├── syscall_linux_ppc64x.go
│   │       │   │   ├── syscall_linux_riscv64.go
│   │       │   │   ├── syscall_linux_s390x.go
│   │       │   │   ├── syscall_linux_sparc64.go
│   │       │   │   ├── syscall_netbsd.go
│   │       │   │   ├── syscall_netbsd_386.go
│   │       │   │   ├── syscall_netbsd_amd64.go
│   │       │   │   ├── syscall_netbsd_arm.go
│   │       │   │   ├── syscall_netbsd_arm64.go
│   │       │   │   ├── syscall_openbsd.go
│   │       │   │   ├── syscall_openbsd_386.go
│   │       │   │   ├── syscall_openbsd_amd64.go
│   │       │   │   ├── syscall_openbsd_arm.go
│   │       │   │   ├── syscall_openbsd_arm64.go
│   │       │   │   ├── syscall_openbsd_libc.go
│   │       │   │   ├── syscall_openbsd_mips64.go
│   │       │   │   ├── syscall_openbsd_ppc64.go
│   │       │   │   ├── syscall_openbsd_riscv64.go
│   │       │   │   ├── syscall_solaris.go
│   │       │   │   ├── syscall_solaris_amd64.go
│   │       │   │   ├── syscall_unix.go
│   │       │   │   ├── syscall_unix_gc.go
│   │       │   │   ├── syscall_unix_gc_ppc64x.go
│   │       │   │   ├── syscall_zos_s390x.go
│   │       │   │   ├── sysvshm_linux.go
│   │       │   │   ├── sysvshm_unix.go
│   │       │   │   ├── sysvshm_unix_other.go
│   │       │   │   ├── timestruct.go
│   │       │   │   ├── unveil_openbsd.go
│   │       │   │   ├── vgetrandom_linux.go
│   │       │   │   ├── vgetrandom_unsupported.go
│   │       │   │   ├── xattr_bsd.go
│   │       │   │   ├── zerrors_aix_ppc.go
│   │       │   │   ├── zerrors_aix_ppc64.go
│   │       │   │   ├── zerrors_darwin_amd64.go
│   │       │   │   ├── zerrors_darwin_arm64.go
│   │       │   │   ├── zerrors_dragonfly_amd64.go
│   │       │   │   ├── zerrors_freebsd_386.go
│   │       │   │   ├── zerrors_freebsd_amd64.go
│   │       │   │   ├── zerrors_freebsd_arm.go
│   │       │   │   ├── zerrors_freebsd_arm64.go
│   │       │   │   ├── zerrors_freebsd_riscv64.go
│   │       │   │   ├── zerrors_linux.go
│   │       │   │   ├── zerrors_linux_386.go
│   │       │   │   ├── zerrors_linux_amd64.go
│   │       │   │   ├── zerrors_linux_arm.go
│   │       │   │   ├── zerrors_linux_arm64.go
│   │       │   │   ├── zerrors_linux_loong64.go
│   │       │   │   ├── zerrors_linux_mips.go
│   │       │   │   ├── zerrors_linux_mips64.go
│   │       │   │   ├── zerrors_linux_mips64le.go
│   │       │   │   ├── zerrors_linux_mipsle.go
│   │       │   │   ├── zerrors_linux_ppc.go
│   │       │   │   ├── zerrors_linux_ppc64.go
│   │       │   │   ├── zerrors_linux_ppc64le.go
│   │       │   │   ├── zerrors_linux_riscv64.go
│   │       │   │   ├── zerrors_linux_s390x.go
│   │       │   │   ├── zerrors_linux_sparc64.go
│   │       │   │   ├── zerrors_netbsd_386.go
│   │       │   │   ├── zerrors_netbsd_amd64.go
│   │       │   │   ├── zerrors_netbsd_arm.go
│   │       │   │   ├── zerrors_netbsd_arm64.go
│   │       │   │   ├── zerrors_openbsd_386.go
│   │       │   │   ├── zerrors_openbsd_amd64.go
│   │       │   │   ├── zerrors_openbsd_arm.go
│   │       │   │   ├── zerrors_openbsd_arm64.go
│   │       │   │   ├── zerrors_openbsd_mips64.go
│   │       │   │   ├── zerrors_openbsd_ppc64.go
│   │       │   │   ├── zerrors_openbsd_riscv64.go
│   │       │   │   ├── zerrors_solaris_amd64.go
│   │       │   │   ├── zerrors_zos_s390x.go
│   │       │   │   ├── zptrace_armnn_linux.go
│   │       │   │   ├── zptrace_linux_arm64.go
│   │       │   │   ├── zptrace_mipsnn_linux.go
│   │       │   │   ├── zptrace_mipsnnle_linux.go
│   │       │   │   ├── zptrace_x86_linux.go
│   │       │   │   ├── zsymaddr_zos_s390x.s
│   │       │   │   ├── zsyscall_aix_ppc.go
│   │       │   │   ├── zsyscall_aix_ppc64.go
│   │       │   │   ├── zsyscall_aix_ppc64_gc.go
│   │       │   │   ├── zsyscall_aix_ppc64_gccgo.go
│   │       │   │   ├── zsyscall_darwin_amd64.go
│   │       │   │   ├── zsyscall_darwin_amd64.s
│   │       │   │   ├── zsyscall_darwin_arm64.go
│   │       │   │   ├── zsyscall_darwin_arm64.s
│   │       │   │   ├── zsyscall_dragonfly_amd64.go
│   │       │   │   ├── zsyscall_freebsd_386.go
│   │       │   │   ├── zsyscall_freebsd_amd64.go
│   │       │   │   ├── zsyscall_freebsd_arm.go
│   │       │   │   ├── zsyscall_freebsd_arm64.go
│   │       │   │   ├── zsyscall_freebsd_riscv64.go
│   │       │   │   ├── zsyscall_illumos_amd64.go
│   │       │   │   ├── zsyscall_linux.go
│   │       │   │   ├── zsyscall_linux_386.go
│   │       │   │   ├── zsyscall_linux_amd64.go
│   │       │   │   ├── zsyscall_linux_arm.go
│   │       │   │   ├── zsyscall_linux_arm64.go
│   │       │   │   ├── zsyscall_linux_loong64.go
│   │       │   │   ├── zsyscall_linux_mips.go
│   │       │   │   ├── zsyscall_linux_mips64.go
│   │       │   │   ├── zsyscall_linux_mips64le.go
│   │       │   │   ├── zsyscall_linux_mipsle.go
│   │       │   │   ├── zsyscall_linux_ppc.go
│   │       │   │   ├── zsyscall_linux_ppc64.go
│   │       │   │   ├── zsyscall_linux_ppc64le.go
│   │       │   │   ├── zsyscall_linux_riscv64.go
│   │       │   │   ├── zsyscall_linux_s390x.go
│   │       │   │   ├── zsyscall_linux_sparc64.go
│   │       │   │   ├── zsyscall_netbsd_386.go
│   │       │   │   ├── zsyscall_netbsd_amd64.go
│   │       │   │   ├── zsyscall_netbsd_arm.go
│   │       │   │   ├── zsyscall_netbsd_arm64.go
│   │       │   │   ├── zsyscall_openbsd_386.go
│   │       │   │   ├── zsyscall_openbsd_386.s
│   │       │   │   ├── zsyscall_openbsd_amd64.go
│   │       │   │   ├── zsyscall_openbsd_amd64.s
│   │       │   │   ├── zsyscall_openbsd_arm.go
│   │       │   │   ├── zsyscall_openbsd_arm.s
│   │       │   │   ├── zsyscall_openbsd_arm64.go
│   │       │   │   ├── zsyscall_openbsd_arm64.s
│   │       │   │   ├── zsyscall_openbsd_mips64.go
│   │       │   │   ├── zsyscall_openbsd_mips64.s
│   │       │   │   ├── zsyscall_openbsd_ppc64.go
│   │       │   │   ├── zsyscall_openbsd_ppc64.s
│   │       │   │   ├── zsyscall_openbsd_riscv64.go
│   │       │   │   ├── zsyscall_openbsd_riscv64.s
│   │       │   │   ├── zsyscall_solaris_amd64.go
│   │       │   │   ├── zsyscall_zos_s390x.go
│   │       │   │   ├── zsysctl_openbsd_386.go
│   │       │   │   ├── zsysctl_openbsd_amd64.go
│   │       │   │   ├── zsysctl_openbsd_arm.go
│   │       │   │   ├── zsysctl_openbsd_arm64.go
│   │       │   │   ├── zsysctl_openbsd_mips64.go
│   │       │   │   ├── zsysctl_openbsd_ppc64.go
│   │       │   │   ├── zsysctl_openbsd_riscv64.go
│   │       │   │   ├── zsysnum_darwin_amd64.go
│   │       │   │   ├── zsysnum_darwin_arm64.go
│   │       │   │   ├── zsysnum_dragonfly_amd64.go
│   │       │   │   ├── zsysnum_freebsd_386.go
│   │       │   │   ├── zsysnum_freebsd_amd64.go
│   │       │   │   ├── zsysnum_freebsd_arm.go
│   │       │   │   ├── zsysnum_freebsd_arm64.go
│   │       │   │   ├── zsysnum_freebsd_riscv64.go
│   │       │   │   ├── zsysnum_linux_386.go
│   │       │   │   ├── zsysnum_linux_amd64.go
│   │       │   │   ├── zsysnum_linux_arm.go
│   │       │   │   ├── zsysnum_linux_arm64.go
│   │       │   │   ├── zsysnum_linux_loong64.go
│   │       │   │   ├── zsysnum_linux_mips.go
│   │       │   │   ├── zsysnum_linux_mips64.go
│   │       │   │   ├── zsysnum_linux_mips64le.go
│   │       │   │   ├── zsysnum_linux_mipsle.go
│   │       │   │   ├── zsysnum_linux_ppc.go
│   │       │   │   ├── zsysnum_linux_ppc64.go
│   │       │   │   ├── zsysnum_linux_ppc64le.go
│   │       │   │   ├── zsysnum_linux_riscv64.go
│   │       │   │   ├── zsysnum_linux_s390x.go
│   │       │   │   ├── zsysnum_linux_sparc64.go
│   │       │   │   ├── zsysnum_netbsd_386.go
│   │       │   │   ├── zsysnum_netbsd_amd64.go
│   │       │   │   ├── zsysnum_netbsd_arm.go
│   │       │   │   ├── zsysnum_netbsd_arm64.go
│   │       │   │   ├── zsysnum_openbsd_386.go
│   │       │   │   ├── zsysnum_openbsd_amd64.go
│   │       │   │   ├── zsysnum_openbsd_arm.go
│   │       │   │   ├── zsysnum_openbsd_arm64.go
│   │       │   │   ├── zsysnum_openbsd_mips64.go
│   │       │   │   ├── zsysnum_openbsd_ppc64.go
│   │       │   │   ├── zsysnum_openbsd_riscv64.go
│   │       │   │   ├── zsysnum_zos_s390x.go
│   │       │   │   ├── ztypes_aix_ppc.go
│   │       │   │   ├── ztypes_aix_ppc64.go
│   │       │   │   ├── ztypes_darwin_amd64.go
│   │       │   │   ├── ztypes_darwin_arm64.go
│   │       │   │   ├── ztypes_dragonfly_amd64.go
│   │       │   │   ├── ztypes_freebsd_386.go
│   │       │   │   ├── ztypes_freebsd_amd64.go
│   │       │   │   ├── ztypes_freebsd_arm.go
│   │       │   │   ├── ztypes_freebsd_arm64.go
│   │       │   │   ├── ztypes_freebsd_riscv64.go
│   │       │   │   ├── ztypes_linux.go
│   │       │   │   ├── ztypes_linux_386.go
│   │       │   │   ├── ztypes_linux_amd64.go
│   │       │   │   ├── ztypes_linux_arm.go
│   │       │   │   ├── ztypes_linux_arm64.go
│   │       │   │   ├── ztypes_linux_loong64.go
│   │       │   │   ├── ztypes_linux_mips.go
│   │       │   │   ├── ztypes_linux_mips64.go
│   │       │   │   ├── ztypes_linux_mips64le.go
│   │       │   │   ├── ztypes_linux_mipsle.go
│   │       │   │   ├── ztypes_linux_ppc.go
│   │       │   │   ├── ztypes_linux_ppc64.go
│   │       │   │   ├── ztypes_linux_ppc64le.go
│   │       │   │   ├── ztypes_linux_riscv64.go
│   │       │   │   ├── ztypes_linux_s390x.go
│   │       │   │   ├── ztypes_linux_sparc64.go
│   │       │   │   ├── ztypes_netbsd_386.go
│   │       │   │   ├── ztypes_netbsd_amd64.go
│   │       │   │   ├── ztypes_netbsd_arm.go
│   │       │   │   ├── ztypes_netbsd_arm64.go
│   │       │   │   ├── ztypes_openbsd_386.go
│   │       │   │   ├── ztypes_openbsd_amd64.go
│   │       │   │   ├── ztypes_openbsd_arm.go
│   │       │   │   ├── ztypes_openbsd_arm64.go
│   │       │   │   ├── ztypes_openbsd_mips64.go
│   │       │   │   ├── ztypes_openbsd_ppc64.go
│   │       │   │   ├── ztypes_openbsd_riscv64.go
│   │       │   │   ├── ztypes_solaris_amd64.go
│   │       │   │   └── ztypes_zos_s390x.go
│   │       │   └── windows/
│   │       │       ├── aliases.go
│   │       │       ├── dll_windows.go
│   │       │       ├── env_windows.go
│   │       │       ├── eventlog.go
│   │       │       ├── exec_windows.go
│   │       │       ├── memory_windows.go
│   │       │       ├── mkerrors.bash
│   │       │       ├── mkknownfolderids.bash
│   │       │       ├── mksyscall.go
│   │       │       ├── race.go
│   │       │       ├── race0.go
│   │       │       ├── registry/
│   │       │       │   ├── key.go
│   │       │       │   ├── mksyscall.go
│   │       │       │   ├── syscall.go
│   │       │       │   ├── value.go
│   │       │       │   └── zsyscall_windows.go
│   │       │       ├── security_windows.go
│   │       │       ├── service.go
│   │       │       ├── setupapi_windows.go
│   │       │       ├── str.go
│   │       │       ├── svc/
│   │       │       │   ├── eventlog/
│   │       │       │   │   ├── install.go
│   │       │       │   │   └── log.go
│   │       │       │   ├── mgr/
│   │       │       │   │   ├── config.go
│   │       │       │   │   ├── mgr.go
│   │       │       │   │   ├── recovery.go
│   │       │       │   │   └── service.go
│   │       │       │   ├── security.go
│   │       │       │   └── service.go
│   │       │       ├── syscall.go
│   │       │       ├── syscall_windows.go
│   │       │       ├── types_windows.go
│   │       │       ├── types_windows_386.go
│   │       │       ├── types_windows_amd64.go
│   │       │       ├── types_windows_arm.go
│   │       │       ├── types_windows_arm64.go
│   │       │       ├── zerrors_windows.go
│   │       │       ├── zknownfolderids_windows.go
│   │       │       └── zsyscall_windows.go
│   │       ├── term/
│   │       │   ├── CONTRIBUTING.md
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── README.md
│   │       │   ├── codereview.cfg
│   │       │   ├── term.go
│   │       │   ├── term_plan9.go
│   │       │   ├── term_unix.go
│   │       │   ├── term_unix_bsd.go
│   │       │   ├── term_unix_other.go
│   │       │   ├── term_unsupported.go
│   │       │   ├── term_windows.go
│   │       │   └── terminal.go
│   │       ├── text/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── cases/
│   │       │   │   ├── cases.go
│   │       │   │   ├── context.go
│   │       │   │   ├── fold.go
│   │       │   │   ├── icu.go
│   │       │   │   ├── info.go
│   │       │   │   ├── map.go
│   │       │   │   ├── tables10.0.0.go
│   │       │   │   ├── tables11.0.0.go
│   │       │   │   ├── tables12.0.0.go
│   │       │   │   ├── tables13.0.0.go
│   │       │   │   ├── tables15.0.0.go
│   │       │   │   ├── tables9.0.0.go
│   │       │   │   └── trieval.go
│   │       │   ├── internal/
│   │       │   │   ├── internal.go
│   │       │   │   ├── language/
│   │       │   │   │   ├── common.go
│   │       │   │   │   ├── compact/
│   │       │   │   │   │   ├── compact.go
│   │       │   │   │   │   ├── language.go
│   │       │   │   │   │   ├── parents.go
│   │       │   │   │   │   ├── tables.go
│   │       │   │   │   │   └── tags.go
│   │       │   │   │   ├── compact.go
│   │       │   │   │   ├── compose.go
│   │       │   │   │   ├── coverage.go
│   │       │   │   │   ├── language.go
│   │       │   │   │   ├── lookup.go
│   │       │   │   │   ├── match.go
│   │       │   │   │   ├── parse.go
│   │       │   │   │   ├── tables.go
│   │       │   │   │   └── tags.go
│   │       │   │   ├── match.go
│   │       │   │   └── tag/
│   │       │   │       └── tag.go
│   │       │   ├── language/
│   │       │   │   ├── coverage.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── language.go
│   │       │   │   ├── match.go
│   │       │   │   ├── parse.go
│   │       │   │   ├── tables.go
│   │       │   │   └── tags.go
│   │       │   ├── secure/
│   │       │   │   └── bidirule/
│   │       │   │       ├── bidirule.go
│   │       │   │       ├── bidirule10.0.0.go
│   │       │   │       └── bidirule9.0.0.go
│   │       │   ├── transform/
│   │       │   │   └── transform.go
│   │       │   └── unicode/
│   │       │       ├── bidi/
│   │       │       │   ├── bidi.go
│   │       │       │   ├── bracket.go
│   │       │       │   ├── core.go
│   │       │       │   ├── prop.go
│   │       │       │   ├── tables10.0.0.go
│   │       │       │   ├── tables11.0.0.go
│   │       │       │   ├── tables12.0.0.go
│   │       │       │   ├── tables13.0.0.go
│   │       │       │   ├── tables15.0.0.go
│   │       │       │   ├── tables9.0.0.go
│   │       │       │   └── trieval.go
│   │       │       └── norm/
│   │       │           ├── composition.go
│   │       │           ├── forminfo.go
│   │       │           ├── input.go
│   │       │           ├── iter.go
│   │       │           ├── normalize.go
│   │       │           ├── readwriter.go
│   │       │           ├── tables10.0.0.go
│   │       │           ├── tables11.0.0.go
│   │       │           ├── tables12.0.0.go
│   │       │           ├── tables13.0.0.go
│   │       │           ├── tables15.0.0.go
│   │       │           ├── tables9.0.0.go
│   │       │           ├── transform.go
│   │       │           └── trie.go
│   │       └── tools/
│   │           ├── LICENSE
│   │           ├── PATENTS
│   │           ├── cover/
│   │           │   └── profile.go
│   │           ├── go/
│   │           │   ├── ast/
│   │           │   │   ├── astutil/
│   │           │   │   │   ├── enclosing.go
│   │           │   │   │   ├── imports.go
│   │           │   │   │   ├── rewrite.go
│   │           │   │   │   └── util.go
│   │           │   │   └── inspector/
│   │           │   │       ├── inspector.go
│   │           │   │       ├── iter.go
│   │           │   │       ├── typeof.go
│   │           │   │       └── walk.go
│   │           │   ├── gcexportdata/
│   │           │   │   ├── gcexportdata.go
│   │           │   │   └── importer.go
│   │           │   ├── packages/
│   │           │   │   ├── doc.go
│   │           │   │   ├── external.go
│   │           │   │   ├── golist.go
│   │           │   │   ├── golist_overlay.go
│   │           │   │   ├── loadmode_string.go
│   │           │   │   ├── packages.go
│   │           │   │   └── visit.go
│   │           │   └── types/
│   │           │       ├── objectpath/
│   │           │       │   └── objectpath.go
│   │           │       └── typeutil/
│   │           │           ├── callee.go
│   │           │           ├── imports.go
│   │           │           ├── map.go
│   │           │           ├── methodsetcache.go
│   │           │           └── ui.go
│   │           ├── imports/
│   │           │   └── forward.go
│   │           └── internal/
│   │               ├── aliases/
│   │               │   ├── aliases.go
│   │               │   └── aliases_go122.go
│   │               ├── astutil/
│   │               │   └── edge/
│   │               │       └── edge.go
│   │               ├── event/
│   │               │   ├── core/
│   │               │   │   ├── event.go
│   │               │   │   ├── export.go
│   │               │   │   └── fast.go
│   │               │   ├── doc.go
│   │               │   ├── event.go
│   │               │   ├── keys/
│   │               │   │   ├── keys.go
│   │               │   │   ├── standard.go
│   │               │   │   └── util.go
│   │               │   └── label/
│   │               │       └── label.go
│   │               ├── gcimporter/
│   │               │   ├── bimport.go
│   │               │   ├── exportdata.go
│   │               │   ├── gcimporter.go
│   │               │   ├── iexport.go
│   │               │   ├── iimport.go
│   │               │   ├── iimport_go122.go
│   │               │   ├── predeclared.go
│   │               │   ├── support.go
│   │               │   └── ureader_yes.go
│   │               ├── gocommand/
│   │               │   ├── invoke.go
│   │               │   ├── invoke_notunix.go
│   │               │   ├── invoke_unix.go
│   │               │   ├── vendor.go
│   │               │   └── version.go
│   │               ├── gopathwalk/
│   │               │   └── walk.go
│   │               ├── imports/
│   │               │   ├── fix.go
│   │               │   ├── imports.go
│   │               │   ├── mod.go
│   │               │   ├── mod_cache.go
│   │               │   ├── sortimports.go
│   │               │   ├── source.go
│   │               │   ├── source_env.go
│   │               │   └── source_modindex.go
│   │               ├── modindex/
│   │               │   ├── directories.go
│   │               │   ├── index.go
│   │               │   ├── lookup.go
│   │               │   ├── modindex.go
│   │               │   ├── symbols.go
│   │               │   └── types.go
│   │               ├── packagesinternal/
│   │               │   └── packages.go
│   │               ├── pkgbits/
│   │               │   ├── codes.go
│   │               │   ├── decoder.go
│   │               │   ├── doc.go
│   │               │   ├── encoder.go
│   │               │   ├── flags.go
│   │               │   ├── reloc.go
│   │               │   ├── support.go
│   │               │   ├── sync.go
│   │               │   ├── syncmarker_string.go
│   │               │   └── version.go
│   │               ├── stdlib/
│   │               │   ├── deps.go
│   │               │   ├── import.go
│   │               │   ├── manifest.go
│   │               │   └── stdlib.go
│   │               ├── typeparams/
│   │               │   ├── common.go
│   │               │   ├── coretype.go
│   │               │   ├── free.go
│   │               │   ├── normalize.go
│   │               │   ├── termlist.go
│   │               │   └── typeterm.go
│   │               ├── typesinternal/
│   │               │   ├── classify_call.go
│   │               │   ├── element.go
│   │               │   ├── errorcode.go
│   │               │   ├── errorcode_string.go
│   │               │   ├── qualifier.go
│   │               │   ├── recv.go
│   │               │   ├── toonew.go
│   │               │   ├── types.go
│   │               │   ├── varkind.go
│   │               │   └── zerovalue.go
│   │               └── versions/
│   │                   ├── features.go
│   │                   ├── gover.go
│   │                   ├── types.go
│   │                   └── versions.go
│   ├── google.golang.org/
│   │   ├── genproto/
│   │   │   └── googleapis/
│   │   │       ├── api/
│   │   │       │   ├── LICENSE
│   │   │       │   └── httpbody/
│   │   │       │       └── httpbody.pb.go
│   │   │       └── rpc/
│   │   │           ├── LICENSE
│   │   │           └── status/
│   │   │               └── status.pb.go
│   │   ├── grpc/
│   │   │   ├── AUTHORS
│   │   │   ├── CODE-OF-CONDUCT.md
│   │   │   ├── CONTRIBUTING.md
│   │   │   ├── GOVERNANCE.md
│   │   │   ├── LICENSE
│   │   │   ├── MAINTAINERS.md
│   │   │   ├── Makefile
│   │   │   ├── NOTICE.txt
│   │   │   ├── README.md
│   │   │   ├── SECURITY.md
│   │   │   ├── attributes/
│   │   │   │   └── attributes.go
│   │   │   ├── backoff/
│   │   │   │   └── backoff.go
│   │   │   ├── backoff.go
│   │   │   ├── balancer/
│   │   │   │   ├── balancer.go
│   │   │   │   ├── base/
│   │   │   │   │   ├── balancer.go
│   │   │   │   │   └── base.go
│   │   │   │   ├── conn_state_evaluator.go
│   │   │   │   ├── endpointsharding/
│   │   │   │   │   └── endpointsharding.go
│   │   │   │   ├── grpclb/
│   │   │   │   │   └── state/
│   │   │   │   │       └── state.go
│   │   │   │   ├── pickfirst/
│   │   │   │   │   ├── internal/
│   │   │   │   │   │   └── internal.go
│   │   │   │   │   ├── pickfirst.go
│   │   │   │   │   └── pickfirstleaf/
│   │   │   │   │       └── pickfirstleaf.go
│   │   │   │   ├── roundrobin/
│   │   │   │   │   └── roundrobin.go
│   │   │   │   └── subconn.go
│   │   │   ├── balancer_wrapper.go
│   │   │   ├── binarylog/
│   │   │   │   └── grpc_binarylog_v1/
│   │   │   │       └── binarylog.pb.go
│   │   │   ├── call.go
│   │   │   ├── channelz/
│   │   │   │   └── channelz.go
│   │   │   ├── clientconn.go
│   │   │   ├── codec.go
│   │   │   ├── codes/
│   │   │   │   ├── code_string.go
│   │   │   │   └── codes.go
│   │   │   ├── connectivity/
│   │   │   │   └── connectivity.go
│   │   │   ├── credentials/
│   │   │   │   ├── credentials.go
│   │   │   │   ├── insecure/
│   │   │   │   │   └── insecure.go
│   │   │   │   └── tls.go
│   │   │   ├── dialoptions.go
│   │   │   ├── doc.go
│   │   │   ├── encoding/
│   │   │   │   ├── encoding.go
│   │   │   │   ├── encoding_v2.go
│   │   │   │   └── proto/
│   │   │   │       └── proto.go
│   │   │   ├── experimental/
│   │   │   │   └── stats/
│   │   │   │       ├── metricregistry.go
│   │   │   │       └── metrics.go
│   │   │   ├── grpclog/
│   │   │   │   ├── component.go
│   │   │   │   ├── grpclog.go
│   │   │   │   ├── internal/
│   │   │   │   │   ├── grpclog.go
│   │   │   │   │   ├── logger.go
│   │   │   │   │   └── loggerv2.go
│   │   │   │   ├── logger.go
│   │   │   │   └── loggerv2.go
│   │   │   ├── health/
│   │   │   │   └── grpc_health_v1/
│   │   │   │       ├── health.pb.go
│   │   │   │       └── health_grpc.pb.go
│   │   │   ├── interceptor.go
│   │   │   ├── internal/
│   │   │   │   ├── backoff/
│   │   │   │   │   └── backoff.go
│   │   │   │   ├── balancer/
│   │   │   │   │   └── gracefulswitch/
│   │   │   │   │       ├── config.go
│   │   │   │   │       └── gracefulswitch.go
│   │   │   │   ├── balancerload/
│   │   │   │   │   └── load.go
│   │   │   │   ├── binarylog/
│   │   │   │   │   ├── binarylog.go
│   │   │   │   │   ├── binarylog_testutil.go
│   │   │   │   │   ├── env_config.go
│   │   │   │   │   ├── method_logger.go
│   │   │   │   │   └── sink.go
│   │   │   │   ├── buffer/
│   │   │   │   │   └── unbounded.go
│   │   │   │   ├── channelz/
│   │   │   │   │   ├── channel.go
│   │   │   │   │   ├── channelmap.go
│   │   │   │   │   ├── funcs.go
│   │   │   │   │   ├── logging.go
│   │   │   │   │   ├── server.go
│   │   │   │   │   ├── socket.go
│   │   │   │   │   ├── subchannel.go
│   │   │   │   │   ├── syscall_linux.go
│   │   │   │   │   ├── syscall_nonlinux.go
│   │   │   │   │   └── trace.go
│   │   │   │   ├── credentials/
│   │   │   │   │   ├── credentials.go
│   │   │   │   │   ├── spiffe.go
│   │   │   │   │   ├── syscallconn.go
│   │   │   │   │   └── util.go
│   │   │   │   ├── envconfig/
│   │   │   │   │   ├── envconfig.go
│   │   │   │   │   ├── observability.go
│   │   │   │   │   └── xds.go
│   │   │   │   ├── experimental.go
│   │   │   │   ├── grpclog/
│   │   │   │   │   └── prefix_logger.go
│   │   │   │   ├── grpcsync/
│   │   │   │   │   ├── callback_serializer.go
│   │   │   │   │   ├── event.go
│   │   │   │   │   └── pubsub.go
│   │   │   │   ├── grpcutil/
│   │   │   │   │   ├── compressor.go
│   │   │   │   │   ├── encode_duration.go
│   │   │   │   │   ├── grpcutil.go
│   │   │   │   │   ├── metadata.go
│   │   │   │   │   ├── method.go
│   │   │   │   │   └── regex.go
│   │   │   │   ├── idle/
│   │   │   │   │   └── idle.go
│   │   │   │   ├── internal.go
│   │   │   │   ├── metadata/
│   │   │   │   │   └── metadata.go
│   │   │   │   ├── pretty/
│   │   │   │   │   └── pretty.go
│   │   │   │   ├── proxyattributes/
│   │   │   │   │   └── proxyattributes.go
│   │   │   │   ├── resolver/
│   │   │   │   │   ├── config_selector.go
│   │   │   │   │   ├── delegatingresolver/
│   │   │   │   │   │   └── delegatingresolver.go
│   │   │   │   │   ├── dns/
│   │   │   │   │   │   ├── dns_resolver.go
│   │   │   │   │   │   └── internal/
│   │   │   │   │   │       └── internal.go
│   │   │   │   │   ├── passthrough/
│   │   │   │   │   │   └── passthrough.go
│   │   │   │   │   └── unix/
│   │   │   │   │       └── unix.go
│   │   │   │   ├── serviceconfig/
│   │   │   │   │   ├── duration.go
│   │   │   │   │   └── serviceconfig.go
│   │   │   │   ├── stats/
│   │   │   │   │   ├── labels.go
│   │   │   │   │   └── metrics_recorder_list.go
│   │   │   │   ├── status/
│   │   │   │   │   └── status.go
│   │   │   │   ├── syscall/
│   │   │   │   │   ├── syscall_linux.go
│   │   │   │   │   └── syscall_nonlinux.go
│   │   │   │   ├── tcp_keepalive_others.go
│   │   │   │   ├── tcp_keepalive_unix.go
│   │   │   │   ├── tcp_keepalive_windows.go
│   │   │   │   └── transport/
│   │   │   │       ├── bdp_estimator.go
│   │   │   │       ├── client_stream.go
│   │   │   │       ├── controlbuf.go
│   │   │   │       ├── defaults.go
│   │   │   │       ├── flowcontrol.go
│   │   │   │       ├── handler_server.go
│   │   │   │       ├── http2_client.go
│   │   │   │       ├── http2_server.go
│   │   │   │       ├── http_util.go
│   │   │   │       ├── logging.go
│   │   │   │       ├── networktype/
│   │   │   │       │   └── networktype.go
│   │   │   │       ├── proxy.go
│   │   │   │       ├── server_stream.go
│   │   │   │       └── transport.go
│   │   │   ├── keepalive/
│   │   │   │   └── keepalive.go
│   │   │   ├── mem/
│   │   │   │   ├── buffer_pool.go
│   │   │   │   ├── buffer_slice.go
│   │   │   │   └── buffers.go
│   │   │   ├── metadata/
│   │   │   │   └── metadata.go
│   │   │   ├── peer/
│   │   │   │   └── peer.go
│   │   │   ├── picker_wrapper.go
│   │   │   ├── preloader.go
│   │   │   ├── resolver/
│   │   │   │   ├── dns/
│   │   │   │   │   └── dns_resolver.go
│   │   │   │   ├── map.go
│   │   │   │   └── resolver.go
│   │   │   ├── resolver_wrapper.go
│   │   │   ├── rpc_util.go
│   │   │   ├── server.go
│   │   │   ├── service_config.go
│   │   │   ├── serviceconfig/
│   │   │   │   └── serviceconfig.go
│   │   │   ├── stats/
│   │   │   │   ├── handlers.go
│   │   │   │   ├── metrics.go
│   │   │   │   └── stats.go
│   │   │   ├── status/
│   │   │   │   └── status.go
│   │   │   ├── stream.go
│   │   │   ├── stream_interfaces.go
│   │   │   ├── tap/
│   │   │   │   └── tap.go
│   │   │   ├── trace.go
│   │   │   ├── trace_notrace.go
│   │   │   ├── trace_withtrace.go
│   │   │   └── version.go
│   │   └── protobuf/
│   │       ├── LICENSE
│   │       ├── PATENTS
│   │       ├── encoding/
│   │       │   ├── protodelim/
│   │       │   │   └── protodelim.go
│   │       │   ├── protojson/
│   │       │   │   ├── decode.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── encode.go
│   │       │   │   └── well_known_types.go
│   │       │   ├── prototext/
│   │       │   │   ├── decode.go
│   │       │   │   ├── doc.go
│   │       │   │   └── encode.go
│   │       │   └── protowire/
│   │       │       └── wire.go
│   │       ├── internal/
│   │       │   ├── descfmt/
│   │       │   │   └── stringer.go
│   │       │   ├── descopts/
│   │       │   │   └── options.go
│   │       │   ├── detrand/
│   │       │   │   └── rand.go
│   │       │   ├── editiondefaults/
│   │       │   │   ├── defaults.go
│   │       │   │   └── editions_defaults.binpb
│   │       │   ├── encoding/
│   │       │   │   ├── defval/
│   │       │   │   │   └── default.go
│   │       │   │   ├── json/
│   │       │   │   │   ├── decode.go
│   │       │   │   │   ├── decode_number.go
│   │       │   │   │   ├── decode_string.go
│   │       │   │   │   ├── decode_token.go
│   │       │   │   │   └── encode.go
│   │       │   │   ├── messageset/
│   │       │   │   │   └── messageset.go
│   │       │   │   ├── tag/
│   │       │   │   │   └── tag.go
│   │       │   │   └── text/
│   │       │   │       ├── decode.go
│   │       │   │       ├── decode_number.go
│   │       │   │       ├── decode_string.go
│   │       │   │       ├── decode_token.go
│   │       │   │       ├── doc.go
│   │       │   │       └── encode.go
│   │       │   ├── errors/
│   │       │   │   └── errors.go
│   │       │   ├── filedesc/
│   │       │   │   ├── build.go
│   │       │   │   ├── desc.go
│   │       │   │   ├── desc_init.go
│   │       │   │   ├── desc_lazy.go
│   │       │   │   ├── desc_list.go
│   │       │   │   ├── desc_list_gen.go
│   │       │   │   ├── editions.go
│   │       │   │   └── placeholder.go
│   │       │   ├── filetype/
│   │       │   │   └── build.go
│   │       │   ├── flags/
│   │       │   │   ├── flags.go
│   │       │   │   ├── proto_legacy_disable.go
│   │       │   │   └── proto_legacy_enable.go
│   │       │   ├── genid/
│   │       │   │   ├── any_gen.go
│   │       │   │   ├── api_gen.go
│   │       │   │   ├── descriptor_gen.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── duration_gen.go
│   │       │   │   ├── empty_gen.go
│   │       │   │   ├── field_mask_gen.go
│   │       │   │   ├── go_features_gen.go
│   │       │   │   ├── goname.go
│   │       │   │   ├── map_entry.go
│   │       │   │   ├── name.go
│   │       │   │   ├── source_context_gen.go
│   │       │   │   ├── struct_gen.go
│   │       │   │   ├── timestamp_gen.go
│   │       │   │   ├── type_gen.go
│   │       │   │   ├── wrappers.go
│   │       │   │   └── wrappers_gen.go
│   │       │   ├── impl/
│   │       │   │   ├── api_export.go
│   │       │   │   ├── api_export_opaque.go
│   │       │   │   ├── bitmap.go
│   │       │   │   ├── bitmap_race.go
│   │       │   │   ├── checkinit.go
│   │       │   │   ├── codec_extension.go
│   │       │   │   ├── codec_field.go
│   │       │   │   ├── codec_field_opaque.go
│   │       │   │   ├── codec_gen.go
│   │       │   │   ├── codec_map.go
│   │       │   │   ├── codec_message.go
│   │       │   │   ├── codec_message_opaque.go
│   │       │   │   ├── codec_messageset.go
│   │       │   │   ├── codec_tables.go
│   │       │   │   ├── codec_unsafe.go
│   │       │   │   ├── convert.go
│   │       │   │   ├── convert_list.go
│   │       │   │   ├── convert_map.go
│   │       │   │   ├── decode.go
│   │       │   │   ├── encode.go
│   │       │   │   ├── enum.go
│   │       │   │   ├── equal.go
│   │       │   │   ├── extension.go
│   │       │   │   ├── lazy.go
│   │       │   │   ├── legacy_enum.go
│   │       │   │   ├── legacy_export.go
│   │       │   │   ├── legacy_extension.go
│   │       │   │   ├── legacy_file.go
│   │       │   │   ├── legacy_message.go
│   │       │   │   ├── merge.go
│   │       │   │   ├── merge_gen.go
│   │       │   │   ├── message.go
│   │       │   │   ├── message_opaque.go
│   │       │   │   ├── message_opaque_gen.go
│   │       │   │   ├── message_reflect.go
│   │       │   │   ├── message_reflect_field.go
│   │       │   │   ├── message_reflect_field_gen.go
│   │       │   │   ├── message_reflect_gen.go
│   │       │   │   ├── pointer_unsafe.go
│   │       │   │   ├── pointer_unsafe_opaque.go
│   │       │   │   ├── presence.go
│   │       │   │   └── validate.go
│   │       │   ├── order/
│   │       │   │   ├── order.go
│   │       │   │   └── range.go
│   │       │   ├── pragma/
│   │       │   │   └── pragma.go
│   │       │   ├── protolazy/
│   │       │   │   ├── bufferreader.go
│   │       │   │   ├── lazy.go
│   │       │   │   └── pointer_unsafe.go
│   │       │   ├── set/
│   │       │   │   └── ints.go
│   │       │   ├── strs/
│   │       │   │   ├── strings.go
│   │       │   │   └── strings_unsafe.go
│   │       │   └── version/
│   │       │       └── version.go
│   │       ├── proto/
│   │       │   ├── checkinit.go
│   │       │   ├── decode.go
│   │       │   ├── decode_gen.go
│   │       │   ├── doc.go
│   │       │   ├── encode.go
│   │       │   ├── encode_gen.go
│   │       │   ├── equal.go
│   │       │   ├── extension.go
│   │       │   ├── merge.go
│   │       │   ├── messageset.go
│   │       │   ├── proto.go
│   │       │   ├── proto_methods.go
│   │       │   ├── proto_reflect.go
│   │       │   ├── reset.go
│   │       │   ├── size.go
│   │       │   ├── size_gen.go
│   │       │   ├── wrapperopaque.go
│   │       │   └── wrappers.go
│   │       ├── protoadapt/
│   │       │   └── convert.go
│   │       ├── reflect/
│   │       │   ├── protoreflect/
│   │       │   │   ├── methods.go
│   │       │   │   ├── proto.go
│   │       │   │   ├── source.go
│   │       │   │   ├── source_gen.go
│   │       │   │   ├── type.go
│   │       │   │   ├── value.go
│   │       │   │   ├── value_equal.go
│   │       │   │   ├── value_union.go
│   │       │   │   └── value_unsafe.go
│   │       │   └── protoregistry/
│   │       │       └── registry.go
│   │       ├── runtime/
│   │       │   ├── protoiface/
│   │       │   │   ├── legacy.go
│   │       │   │   └── methods.go
│   │       │   └── protoimpl/
│   │       │       ├── impl.go
│   │       │       └── version.go
│   │       └── types/
│   │           └── known/
│   │               ├── anypb/
│   │               │   └── any.pb.go
│   │               ├── durationpb/
│   │               │   └── duration.pb.go
│   │               ├── fieldmaskpb/
│   │               │   └── field_mask.pb.go
│   │               ├── structpb/
│   │               │   └── struct.pb.go
│   │               ├── timestamppb/
│   │               │   └── timestamp.pb.go
│   │               └── wrapperspb/
│   │                   └── wrappers.pb.go
│   ├── gopkg.in/
│   │   ├── natefinch/
│   │   │   └── lumberjack.v2/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── chown.go
│   │   │       ├── chown_linux.go
│   │   │       └── lumberjack.go
│   │   ├── yaml.v2/
│   │   │   ├── .travis.yml
│   │   │   ├── LICENSE
│   │   │   ├── LICENSE.libyaml
│   │   │   ├── NOTICE
│   │   │   ├── README.md
│   │   │   ├── apic.go
│   │   │   ├── decode.go
│   │   │   ├── emitterc.go
│   │   │   ├── encode.go
│   │   │   ├── parserc.go
│   │   │   ├── readerc.go
│   │   │   ├── resolve.go
│   │   │   ├── scannerc.go
│   │   │   ├── sorter.go
│   │   │   ├── writerc.go
│   │   │   ├── yaml.go
│   │   │   ├── yamlh.go
│   │   │   └── yamlprivateh.go
│   │   └── yaml.v3/
│   │       ├── LICENSE
│   │       ├── NOTICE
│   │       ├── README.md
│   │       ├── apic.go
│   │       ├── decode.go
│   │       ├── emitterc.go
│   │       ├── encode.go
│   │       ├── parserc.go
│   │       ├── readerc.go
│   │       ├── resolve.go
│   │       ├── scannerc.go
│   │       ├── sorter.go
│   │       ├── writerc.go
│   │       ├── yaml.go
│   │       ├── yamlh.go
│   │       └── yamlprivateh.go
│   ├── modules.txt
│   ├── nhooyr.io/
│   │   └── websocket/
│   │       ├── .gitignore
│   │       ├── LICENSE.txt
│   │       ├── README.md
│   │       ├── accept.go
│   │       ├── accept_js.go
│   │       ├── close.go
│   │       ├── close_notjs.go
│   │       ├── compress.go
│   │       ├── compress_notjs.go
│   │       ├── conn.go
│   │       ├── conn_notjs.go
│   │       ├── dial.go
│   │       ├── doc.go
│   │       ├── frame.go
│   │       ├── internal/
│   │       │   ├── bpool/
│   │       │   │   └── bpool.go
│   │       │   ├── errd/
│   │       │   │   └── wrap.go
│   │       │   ├── wsjs/
│   │       │   │   └── wsjs_js.go
│   │       │   └── xsync/
│   │       │       ├── go.go
│   │       │       └── int64.go
│   │       ├── netconn.go
│   │       ├── read.go
│   │       ├── stringer.go
│   │       ├── write.go
│   │       └── ws_js.go
│   └── zombiezen.com/
│       └── go/
│           └── capnproto2/
│               ├── .gitignore
│               ├── .travis.yml
│               ├── AUTHORS
│               ├── BUILD.bazel
│               ├── CHANGELOG.md
│               ├── CONTRIBUTING.md
│               ├── CONTRIBUTORS
│               ├── LICENSE
│               ├── README.md
│               ├── WORKSPACE
│               ├── address.go
│               ├── canonical.go
│               ├── capability.go
│               ├── capn.go
│               ├── doc.go
│               ├── encoding/
│               │   └── text/
│               │       ├── BUILD.bazel
│               │       └── marshal.go
│               ├── go.capnp.go
│               ├── internal/
│               │   ├── fulfiller/
│               │   │   ├── BUILD.bazel
│               │   │   └── fulfiller.go
│               │   ├── nodemap/
│               │   │   ├── BUILD.bazel
│               │   │   └── nodemap.go
│               │   ├── packed/
│               │   │   ├── BUILD.bazel
│               │   │   ├── discard.go
│               │   │   ├── discard_go14.go
│               │   │   ├── fuzz.go
│               │   │   └── packed.go
│               │   ├── queue/
│               │   │   ├── BUILD.bazel
│               │   │   └── queue.go
│               │   ├── schema/
│               │   │   ├── BUILD.bazel
│               │   │   └── schema.capnp.go
│               │   └── strquote/
│               │       ├── BUILD.bazel
│               │       └── strquote.go
│               ├── list.go
│               ├── mem.go
│               ├── mem_18.go
│               ├── mem_other.go
│               ├── pogs/
│               │   ├── BUILD.bazel
│               │   ├── doc.go
│               │   ├── extract.go
│               │   ├── fields.go
│               │   └── insert.go
│               ├── pointer.go
│               ├── rawpointer.go
│               ├── readlimit.go
│               ├── regen.sh
│               ├── rpc/
│               │   ├── BUILD.bazel
│               │   ├── answer.go
│               │   ├── errors.go
│               │   ├── internal/
│               │   │   └── refcount/
│               │   │       ├── BUILD.bazel
│               │   │       └── refcount.go
│               │   ├── introspect.go
│               │   ├── log.go
│               │   ├── question.go
│               │   ├── rpc.go
│               │   ├── tables.go
│               │   └── transport.go
│               ├── schemas/
│               │   ├── BUILD.bazel
│               │   └── schemas.go
│               ├── server/
│               │   ├── BUILD.bazel
│               │   └── server.go
│               ├── std/
│               │   └── capnp/
│               │       └── rpc/
│               │           ├── BUILD.bazel
│               │           └── rpc.capnp.go
│               ├── strings.go
│               └── struct.go
├── watcher/
│   ├── file.go
│   ├── file_test.go
│   └── notify.go
├── websocket/
│   ├── connection.go
│   ├── websocket.go
│   └── websocket_test.go
└── wix.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .ci/apt-internal.gitlab-ci.yml
================================================
.register_inputs: &register_inputs
  stage: release-internal
  runOnBranches: "^master$"
  COMPONENT: "common"

.register_inputs_stable_bookworm: &register_inputs_stable_bookworm
  <<: *register_inputs
  runOnChangesTo: ['RELEASE_NOTES']
  FLAVOR: "bookworm"
  SERIES: "stable"

.register_inputs_stable_trixie: &register_inputs_stable_trixie
  <<: *register_inputs
  runOnChangesTo: ['RELEASE_NOTES']
  FLAVOR: "trixie"
  SERIES: "stable"

.register_inputs_next_bookworm: &register_inputs_next_bookworm
  <<: *register_inputs
  FLAVOR: "bookworm"
  SERIES: next

.register_inputs_next_trixie: &register_inputs_next_trixie
  <<: *register_inputs
  FLAVOR: "trixie"
  SERIES: next

################################################
### Generate Debian Package for Internal APT ###
################################################
.cloudflared-apt-build: &cloudflared_apt_build
  stage: package
  needs:
    - ci-image-get-image-ref
    - linux-packaging # For consistency, we only run this job after we knew we could build the packages for external delivery
  image: $BUILD_IMAGE
  cache: {}
  script:
    - make cloudflared-deb
  artifacts:
    paths:
      - cloudflared*.deb

##############
### Stable ###
##############
cloudflared-amd64-stable:
  <<: *cloudflared_apt_build
  rules:
    - !reference [.default-rules, run-on-release]
  variables: &amd64-stable-vars
    GOOS: linux
    GOARCH: amd64
    FIPS: true
    ORIGINAL_NAME: true
    CGO_ENABLED: 1

cloudflared-arm64-stable:
  <<: *cloudflared_apt_build
  rules:
    - !reference [.default-rules, run-on-release]
  variables: &arm64-stable-vars
    GOOS: linux
    GOARCH: arm64
    FIPS: false # TUN-7595
    ORIGINAL_NAME: true
    CGO_ENABLED: 1

############
### Next ###
############
cloudflared-amd64-next:
  <<: *cloudflared_apt_build
  rules:
    - !reference [.default-rules, run-on-master]
  variables:
    <<: *amd64-stable-vars
    NIGHTLY: true

cloudflared-arm64-next:
  <<: *cloudflared_apt_build
  rules:
    - !reference [.default-rules, run-on-master]
  variables:
    <<: *arm64-stable-vars
    NIGHTLY: true

include:
  - local: .ci/commons.gitlab-ci.yml

  ##########################################
  ### Publish Packages to Internal Repos ###
  ##########################################
  # Bookworm AMD64
  - component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
    inputs:
      <<: *register_inputs_stable_bookworm
      jobPrefix: cloudflared-bookworm-amd64
      needs: &amd64-stable ["cloudflared-amd64-stable"]

  # Bookworm ARM64
  - component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
    inputs:
      <<: *register_inputs_stable_bookworm
      jobPrefix: cloudflared-bookworm-arm64
      needs: &arm64-stable ["cloudflared-arm64-stable"]

  # Trixie AMD64
  - component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
    inputs:
      <<: *register_inputs_stable_trixie
      jobPrefix: cloudflared-trixie-amd64
      needs: *amd64-stable

  # Trixie ARM64
  - component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
    inputs:
      <<: *register_inputs_stable_trixie
      jobPrefix: cloudflared-trixie-arm64
      needs: *arm64-stable

  ##################################################
  ### Publish Nightly Packages to Internal Repos ###
  ##################################################
  # Bookworm AMD64
  - component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
    inputs:
      <<: *register_inputs_next_bookworm
      jobPrefix: cloudflared-nightly-bookworm-amd64
      needs: &amd64-next ['cloudflared-amd64-next']

  # Bookworm ARM64
  - component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
    inputs:
      <<: *register_inputs_next_bookworm
      jobPrefix: cloudflared-nightly-bookworm-arm64
      needs: &arm64-next ['cloudflared-arm64-next']

  # Trixie AMD64
  - component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
    inputs:
      <<: *register_inputs_next_trixie
      jobPrefix: cloudflared-nightly-trixie-amd64
      needs: *amd64-next

  # Trixie ARM64
  - component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
    inputs:
      <<: *register_inputs_next_trixie
      jobPrefix: cloudflared-nightly-trixie-arm64
      needs: *arm64-next


================================================
FILE: .ci/ci-image.gitlab-ci.yml
================================================
# Builds a custom CI Image when necessary

include:
  #####################################################
  ############## Build and Push CI Image ##############
  #####################################################
  - component: $CI_SERVER_FQDN/cloudflare/ci/docker-image/build-push-image@~latest
    inputs:
      stage: pre-build
      jobPrefix: ci-image
      runOnChangesTo: [".ci/image/**"]
      runOnMR: true
      runOnBranches: '^master$'
      commentImageRefs: false
      runner: vm-linux-x86-4cpu-8gb
      EXTRA_DIB_ARGS: "--manifest=.ci/image/.docker-images"

  #####################################################
  ## Resolve the image reference for downstream jobs ##
  #####################################################
  - component: $CI_SERVER_FQDN/cloudflare/ci/docker-image/get-image-ref@~latest
    inputs:
      stage: pre-build
      jobPrefix: ci-image
      runOnMR: true
      runOnBranches: '^master$'
      IMAGE_PATH: "$REGISTRY_HOST/stash/tun/cloudflared/ci-image/master"
      VARIABLE_NAME: BUILD_IMAGE
      needs:
        - job: ci-image-build-push-image
          optional: true


================================================
FILE: .ci/commons.gitlab-ci.yml
================================================
## A set of predefined rules to use on the different jobs
.default-rules:
  # Rules to run the job only on the master branch
  run-on-master:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: on_success
    - when: never
  # Rules to run the job only on merge requests
  run-on-mr:
    - if: $CI_COMMIT_TAG
      when: never
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: on_success
    - when: never
  # Rules to run the job on merge_requests and master branch
  run-always:
    - if: $CI_COMMIT_TAG
      when: never
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_BRANCH != null && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: on_success
    - when: never
  # Rules to run the job only when a release happens
  run-on-release:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      changes:
          - 'RELEASE_NOTES'
      when: on_success
    - when: never

.component-tests:
  image: $BUILD_IMAGE
  rules:
    - !reference [.default-rules, run-always]
  variables:
    COMPONENT_TESTS_CONFIG: component-test-config.yaml
    COMPONENT_TESTS_CONFIG_CONTENT: Y2xvdWRmbGFyZWRfYmluYXJ5OiBjbG91ZGZsYXJlZC5leGUKY3JlZGVudGlhbHNfZmlsZTogY3JlZC5qc29uCm9yaWdpbmNlcnQ6IGNlcnQucGVtCnpvbmVfZG9tYWluOiBhcmdvdHVubmVsdGVzdC5jb20Kem9uZV90YWc6IDQ4Nzk2ZjFlNzBiYjc2NjljMjliYjUxYmEyODJiZjY1
  secrets:
    DNS_API_TOKEN:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/_terraform_atlantis/component_tests_token/data@kv
      file: false
    COMPONENT_TESTS_ORIGINCERT:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/component_tests_cert_pem/data@kv
      file: false
  cache: {}


================================================
FILE: .ci/github.gitlab-ci.yml
================================================
include:
  - local: .ci/commons.gitlab-ci.yml

######################################
### Sync master branch with Github ###
######################################
push-github:
  stage: sync
  rules:
    - !reference [.default-rules, run-on-master]
  script:
    - ./.ci/scripts/github-push.sh
  secrets:
    CLOUDFLARED_DEPLOY_SSH_KEY:
      vault: gitlab/cloudflare/tun/cloudflared/_branch/master/cloudflared_github_ssh/data@kv
      file: false
  cache: {}


================================================
FILE: .ci/image/.docker-images
================================================
images:
  - name: ci-image


================================================
FILE: .ci/image/Dockerfile
================================================
ARG CLOUDFLARE_DOCKER_REGISTRY_HOST

FROM ${CLOUDFLARE_DOCKER_REGISTRY_HOST:-registry.cfdata.org}/stash/cf/debian-images/trixie/main:2026.1.0@sha256:e32092fd01520f5ae7de1fa6bb5a721720900ebeaa48e98f36f6f86168833cd7
RUN apt-get update && \
  apt-get upgrade -y && \
  apt-get install --no-install-recommends --allow-downgrades -y \
  build-essential \
  git \
  go-boring=1.24.13-1 \
  libffi-dev \
  procps \
  python3-dev \
  python3-pip \
  python3-setuptools \
  python3-venv \
  # tool to create msi packages
  wixl \
  # install ruby and rpm which are required to install fpm package builder
  rpm \
  ruby \
  ruby-dev \
  rubygems \
  # create deb and rpm repository files
  reprepro \
  createrepo-c \
  # gcc for cross architecture compilation in arm
  gcc-aarch64-linux-gnu \
  libc6-dev-arm64-cross && \
  rm -rf /var/lib/apt/lists/* && \
  # Install fpm gem
  gem install fpm --no-document && \
  # Initialize rpm repository, SQL Lite DB
  mkdir -p /var/lib/rpm && \
  rpm --initdb && \
  chmod -R 777 /var/lib/rpm && \
  # Create work directory
  mkdir -p opt

WORKDIR /opt


================================================
FILE: .ci/linux.gitlab-ci.yml
================================================
.golang-inputs: &golang_inputs
  runOnMR: true
  runOnBranches: "^master$"
  outputDir: artifacts
  runner: linux-x86-8cpu-16gb
  stage: build
  golangVersion: "boring-1.24"
  imageVersion: "3462-0b23466e0715@sha256:42e8533370666a2463041572293a79e1449001ef803a993e6a860be00858c806"
  CGO_ENABLED: 1

.default-packaging-job: &packaging-job-defaults
  stage: package
  needs:
    - ci-image-get-image-ref
  rules:
    - !reference [.default-rules, run-on-master]
  image: $BUILD_IMAGE
  cache: {}
  artifacts:
    paths:
      - artifacts/*

include:
  ###################
  ### Linux Build ###
  ###################
  - component: $CI_SERVER_FQDN/cloudflare/ci/golang/boring-make@~latest
    inputs:
      <<: *golang_inputs
      jobPrefix: linux-build
      GOLANG_MAKE_TARGET: ci-build

  ########################
  ### Linux FIPS Build ###
  ########################
  - component: $CI_SERVER_FQDN/cloudflare/ci/golang/boring-make@~latest
    inputs:
      <<: *golang_inputs
      jobPrefix: linux-fips-build
      GOLANG_MAKE_TARGET: ci-fips-build

  #################
  ### Unit Tests ##
  #################
  - component: $CI_SERVER_FQDN/cloudflare/ci/golang/boring-make@~latest
    inputs:
      <<: *golang_inputs
      stage: test
      jobPrefix: test
      GOLANG_MAKE_TARGET: ci-test

  ######################
  ### Unit Tests FIPS ##
  ######################
  - component: $CI_SERVER_FQDN/cloudflare/ci/golang/boring-make@~latest
    inputs:
      <<: *golang_inputs
      stage: test
      jobPrefix: test-fips
      GOLANG_MAKE_TARGET: ci-fips-test

  #################
  ### Vuln Check ##
  #################
  - component: $CI_SERVER_FQDN/cloudflare/ci/golang/boring-make@~latest
    inputs:
      <<: *golang_inputs
      runOnBranches: "^$"
      stage: validate
      jobPrefix: vulncheck
      GOLANG_MAKE_TARGET: vulncheck

#################################
### Run Linux Component Tests ###
#################################
linux-component-tests: &linux-component-tests
  stage: test
  extends: .component-tests
  needs:
    - ci-image-get-image-ref
    - linux-build-boring-make
  script:
    - ./.ci/scripts/component-tests.sh
  variables: &component-tests-variables
    CI: 1
    COMPONENT_TESTS_CONFIG_CONTENT: Y2xvdWRmbGFyZWRfYmluYXJ5OiAuL2Nsb3VkZmxhcmVkCmNyZWRlbnRpYWxzX2ZpbGU6IGNyZWQuanNvbgpvcmlnaW5jZXJ0OiBjZXJ0LnBlbQp6b25lX2RvbWFpbjogYXJnb3R1bm5lbHRlc3QuY29tCnpvbmVfdGFnOiA0ODc5NmYxZTcwYmI3NjY5YzI5YmI1MWJhMjgyYmY2NQ==
  tags:
    - linux-x86-8cpu-16gb
  artifacts:
    reports:
      junit: report.xml

######################################
### Run Linux FIPS Component Tests ###
######################################
linux-component-tests-fips:
  <<: *linux-component-tests
  needs:
    - ci-image-get-image-ref
    - linux-fips-build-boring-make
  variables:
    <<: *component-tests-variables
    COMPONENT_TESTS_FIPS: 1

################################
####### Linux Packaging ########
################################
linux-packaging:
  <<: *packaging-job-defaults
  parallel:
    matrix:
      - ARCH: ["386", "amd64", "arm", "armhf", "arm64"]
  script:
    - ./.ci/scripts/linux/build-packages.sh ${ARCH}

################################
##### Linux FIPS Packaging #####
################################
linux-packaging-fips:
  <<: *packaging-job-defaults
  script:
    - ./.ci/scripts/linux/build-packages-fips.sh


================================================
FILE: .ci/mac.gitlab-ci.yml
================================================
include:
  - local: .ci/commons.gitlab-ci.yml

###############################
### Defaults for Mac Builds ###
###############################
.mac-build-defaults: &mac-build-defaults
  rules:
    - !reference [.default-rules, run-on-mr]
  tags:
    - "macstadium-${RUNNER_ARCH}"
  parallel:
    matrix:
      - RUNNER_ARCH: [arm, intel]
  cache: {}

######################################
### Build Cloudflared Mac Binaries ###
######################################
macos-build-cloudflared: &mac-build
  <<: *mac-build-defaults
  stage: build
  artifacts:
    paths:
      - artifacts/*
  script:
    - '[ "${RUNNER_ARCH}" = "arm" ] && export TARGET_ARCH=arm64'
    - '[ "${RUNNER_ARCH}" = "intel" ] && export TARGET_ARCH=amd64'
    - ARCH=$(uname -m)
    - echo ARCH=$ARCH - TARGET_ARCH=$TARGET_ARCH
    - ./.ci/scripts/mac/install-go.sh "$MAC_GO_VERSION"
    - BUILD_SCRIPT=.ci/scripts/mac/build.sh
    - if [[ ! -x ${BUILD_SCRIPT} ]] ; then exit ; fi
    - set -euo pipefail
    - echo "Executing ${BUILD_SCRIPT}"
    - exec ${BUILD_SCRIPT}

###############################################
### Build and Sign Cloudflared Mac Binaries ###
###############################################
macos-build-and-sign-cloudflared:
  <<: *mac-build
  rules:
    - !reference [.default-rules, run-on-master]
  secrets:
    APPLE_DEV_CA_CERT:
      vault: gitlab/cloudflare/tun/cloudflared/_branch/master/apple_dev_ca_cert_v2/data@kv
      file: false
    CFD_CODE_SIGN_CERT:
      vault: gitlab/cloudflare/tun/cloudflared/_branch/master/cfd_code_sign_cert_v2/data@kv
      file: false
    CFD_CODE_SIGN_KEY:
      vault: gitlab/cloudflare/tun/cloudflared/_branch/master/cfd_code_sign_key_v2/data@kv
      file: false
    CFD_CODE_SIGN_PASS:
      vault: gitlab/cloudflare/tun/cloudflared/_branch/master/cfd_code_sign_pass_v2/data@kv
      file: false
    CFD_INSTALLER_CERT:
      vault: gitlab/cloudflare/tun/cloudflared/_branch/master/cfd_installer_cert_v2/data@kv
      file: false
    CFD_INSTALLER_KEY:
      vault: gitlab/cloudflare/tun/cloudflared/_branch/master/cfd_installer_key_v2/data@kv
      file: false
    CFD_INSTALLER_PASS:
      vault: gitlab/cloudflare/tun/cloudflared/_branch/master/cfd_installer_pass_v2/data@kv
      file: false


================================================
FILE: .ci/release.gitlab-ci.yml
================================================
include:
  - local: .ci/commons.gitlab-ci.yml

  ######################################
  ### Build and Push DockerHub Image ###
  ######################################
  - component: $CI_SERVER_FQDN/cloudflare/ci/docker-image/build-push-image@~latest
    inputs:
      stage: release
      jobPrefix: docker-hub
      runOnMR: false
      runOnBranches: '^master$'
      runOnChangesTo: ['RELEASE_NOTES']
      needs:
        - generate-version-file
        - release-cloudflared-to-r2
      commentImageRefs: false
      runner: vm-linux-x86-4cpu-8gb
      # Based on if the CI reference is protected or not the CI component will
      # either use _BRANCH or _PROD, therefore, to prevent the pipelines from failing
      # we simply set both to the same value.
      DOCKER_USER_BRANCH: &docker-hub-user svcgithubdockerhubcloudflar045
      DOCKER_PASSWORD_BRANCH: &docker-hub-password gitlab/cloudflare/tun/cloudflared/_dev/dockerhub/svc_password/data
      DOCKER_USER_PROD: *docker-hub-user
      DOCKER_PASSWORD_PROD: *docker-hub-password
      EXTRA_DIB_ARGS: --overwrite

.default-release-job: &release-job-defaults
  stage: release
  image: $BUILD_IMAGE
  cache:
    paths:
      - .cache/pip
  variables: &release-job-variables
    PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
    # KV Vars
    KV_NAMESPACE: 380e19aa04314648949b6ad841417ebe
    KV_ACCOUNT: &cf-account 5ab4e9dfbd435d24068829fda0077963
    # R2 Vars
    R2_BUCKET: cloudflared-pkgs
    R2_ACCOUNT_ID: *cf-account
    # APT and RPM Repository Vars
    GPG_PUBLIC_KEY_URL: "https://pkg.cloudflare.com/cloudflare-ascii-pubkey.gpg"
    PKG_URL: "https://pkg.cloudflare.com/cloudflared"
    BINARY_NAME: cloudflared
  secrets:
    KV_API_TOKEN:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/cfd_kv_api_token/data@kv
      file: false
    API_KEY:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/cfd_github_api_key/data@kv
      file: false
    R2_CLIENT_ID:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/_terraform_atlantis/r2_api_token/client_id@kv
      file: false
    R2_CLIENT_SECRET:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/_terraform_atlantis/r2_api_token/client_secret@kv
      file: false
    LINUX_SIGNING_PUBLIC_KEY:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/gpg_v1/public_key@kv
      file: false
    LINUX_SIGNING_PRIVATE_KEY:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/gpg_v1/private_key@kv
      file: false
    LINUX_SIGNING_PUBLIC_KEY_2:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/gpg_v2/public_key@kv
      file: false
    LINUX_SIGNING_PRIVATE_KEY_2:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/gpg_v2/private_key@kv
      file: false

###########################################
### Push Cloudflared Binaries to Github ###
###########################################
release-cloudflared-to-github:
  <<: *release-job-defaults
  rules:
    - !reference [.default-rules, run-on-release]
  needs:
    - ci-image-get-image-ref
    - linux-packaging
    - linux-packaging-fips
    - macos-build-and-sign-cloudflared
    - windows-package-sign
  script:
    - ./.ci/scripts/release-target.sh github-release

#########################################
### Upload Cloudflared Binaries to R2 ###
#########################################
release-cloudflared-to-r2:
  <<: *release-job-defaults
  rules:
    - !reference [.default-rules, run-on-release]
  needs:
    - ci-image-get-image-ref
    - linux-packaging # We only release non-FIPS binaries to R2
    - release-cloudflared-to-github
  script:
    - ./.ci/scripts/release-target.sh r2-linux-release

#################################################
### Upload Cloudflared Nightly Binaries to R2 ###
#################################################
release-cloudflared-nightly-to-r2:
  <<: *release-job-defaults
  rules:
    - !reference [.default-rules, run-on-master]
  variables:
    <<: *release-job-variables
    R2_BUCKET: cloudflared-pkgs-next
    GPG_PUBLIC_KEY_URL: "https://next.pkg.cloudflare.com/cloudflare-ascii-pubkey.gpg"
    PKG_URL: "https://next.pkg.cloudflare.com/cloudflared"
  needs:
    - ci-image-get-image-ref
    - linux-packaging # We only release non-FIPS binaries to R2
  script:
    - ./.ci/scripts/release-target.sh r2-linux-release

#############################
### Generate Version File ###
#############################
generate-version-file:
  <<: *release-job-defaults
  rules:
    - !reference [.default-rules, run-on-release]
  needs:
    - ci-image-get-image-ref
  script:
    - make generate-docker-version
  artifacts:
    paths:
      - versions


================================================
FILE: .ci/scripts/component-tests.sh
================================================
#!/bin/bash
set -e -u -o pipefail

# Fetch cloudflared from the artifacts folder
mv ./artifacts/cloudflared ./cloudflared

python3 -m venv env
. env/bin/activate

pip install --upgrade -r component-tests/requirements.txt

# Creates and routes a Named Tunnel for this build. Also constructs
# config file from env vars.
python3 component-tests/setup.py --type create

# Define the cleanup function
cleanup() {
    # The Named Tunnel is deleted and its route unprovisioned here.
    python3 component-tests/setup.py --type cleanup
}

# The trap will call the cleanup function on script exit
trap cleanup EXIT

pytest component-tests -o log_cli=true --log-cli-level=INFO --junit-xml=report.xml


================================================
FILE: .ci/scripts/fmt-check.sh
================================================
#!/bin/bash
set -e -u -o pipefail

OUTPUT=$(go run -mod=readonly golang.org/x/tools/cmd/goimports@v0.30.0 -l -d -local github.com/cloudflare/cloudflared $(go list -mod=vendor -f '{{.Dir}}' -a ./... | fgrep -v tunnelrpc))

if [ -n "$OUTPUT" ] ; then
  PAGER=$(which colordiff || echo cat)
  echo
  echo "Code formatting issues found, use 'make fmt' to correct them"
  echo
  echo "$OUTPUT" | $PAGER
  exit 1
fi


================================================
FILE: .ci/scripts/github-push.sh
================================================
#!/bin/bash
set -e -u -o pipefail

BRANCH="master"
TMP_PATH="$PWD/tmp"
PRIVATE_KEY_PATH="$TMP_PATH/github-deploy-key"
PUBLIC_KEY_GITHUB_PATH="$TMP_PATH/github.pub"

mkdir -p $TMP_PATH

# Setup Private Key
echo "$CLOUDFLARED_DEPLOY_SSH_KEY" > $PRIVATE_KEY_PATH
chmod 400 $PRIVATE_KEY_PATH

# Download GitHub Public Key for KnownHostsFile
ssh-keyscan -t ed25519 github.com > $PUBLIC_KEY_GITHUB_PATH

# Setup git ssh command with the right configurations
export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=$PUBLIC_KEY_GITHUB_PATH -o IdentitiesOnly=yes -i $PRIVATE_KEY_PATH"

# Add GitHub as a new remote
git remote add github git@github.com:cloudflare/cloudflared.git || true

# GitLab doesn't pull branch references, instead it creates a new one on each pipeline.
# Therefore, we need to manually fetch the reference to then push it to GitHub.
git fetch origin $BRANCH:$BRANCH
git push -u github $BRANCH

if TAG="$(git describe --tags --exact-match 2>/dev/null)"; then
  git push -u github "$TAG"
fi


================================================
FILE: .ci/scripts/linux/build-packages-fips.sh
================================================
#!/bin/bash
set -e -u -o pipefail
VERSION=$(git describe --tags --always --match "[0-9][0-9][0-9][0-9].*.*")
echo $VERSION

# This controls the directory the built artifacts go into
export ARTIFACT_DIR=artifacts/
mkdir -p $ARTIFACT_DIR

arch=("amd64")
export TARGET_ARCH=$arch
export TARGET_OS=linux
export FIPS=true
# For BoringCrypto to link, we need CGO enabled. Otherwise compilation fails.
export CGO_ENABLED=1

make cloudflared-deb
mv cloudflared-fips\_$VERSION\_$arch.deb $ARTIFACT_DIR/cloudflared-fips-linux-$arch.deb

# rpm packages invert the - and _ and use x86_64 instead of amd64.
RPMVERSION=$(echo $VERSION | sed -r 's/-/_/g')
RPMARCH="x86_64"
make cloudflared-rpm
mv cloudflared-fips-$RPMVERSION-1.$RPMARCH.rpm $ARTIFACT_DIR/cloudflared-fips-linux-$RPMARCH.rpm

# finally move the linux binary as well.
mv ./cloudflared $ARTIFACT_DIR/cloudflared-fips-linux-$arch


================================================
FILE: .ci/scripts/linux/build-packages.sh
================================================
#!/bin/bash
set -e -u -o pipefail

# Check if architecture argument is provided
if [ $# -eq 0 ]; then
    echo "Error: Architecture argument is required"
    echo "Usage: $0 <architecture>"
    exit 1
fi

# Parameters
arch=$1

# Get Version
VERSION=$(git describe --tags --always --match "[0-9][0-9][0-9][0-9].*.*")
echo $VERSION

# Disable FIPS module in go-boring
export GOEXPERIMENT=noboringcrypto
export CGO_ENABLED=0

# This controls the directory the built artifacts go into
export ARTIFACT_DIR=artifacts/
mkdir -p $ARTIFACT_DIR

export TARGET_OS=linux

unset TARGET_ARM
export TARGET_ARCH=$arch

## Support for arm platforms without hardware FPU enabled
if [[ $arch == arm ]] ; then
    export TARGET_ARCH=arm
    export TARGET_ARM=5
fi

## Support for armhf builds
if [[ $arch == armhf ]] ; then
    export TARGET_ARCH=arm
    export TARGET_ARM=7
fi

make cloudflared-deb
mv cloudflared\_$VERSION\_$arch.deb $ARTIFACT_DIR/cloudflared-linux-$arch.deb

# rpm packages invert the - and _ and use x86_64 instead of amd64.
RPMVERSION=$(echo $VERSION|sed -r 's/-/_/g')
RPMARCH=$arch
if [ $arch == "amd64" ];then
    RPMARCH="x86_64"
fi
if [ $arch == "arm64" ]; then
    RPMARCH="aarch64"
fi
make cloudflared-rpm
mv cloudflared-$RPMVERSION-1.$RPMARCH.rpm $ARTIFACT_DIR/cloudflared-linux-$RPMARCH.rpm

# finally move the linux binary as well.
mv ./cloudflared $ARTIFACT_DIR/cloudflared-linux-$arch



================================================
FILE: .ci/scripts/mac/build.sh
================================================
#!/bin/bash

set -exo pipefail

if [[ "$(uname)" != "Darwin" ]] ; then
    echo "This should be run on macOS"
    exit 1
fi

if [[ "amd64" != "${TARGET_ARCH}" && "arm64" != "${TARGET_ARCH}" ]]
then
  echo "TARGET_ARCH must be amd64 or arm64"
  exit 1
fi

go version
export GO111MODULE=on

# build 'cloudflared-darwin-amd64.tgz'
mkdir -p artifacts
TARGET_DIRECTORY=".build"
BINARY_NAME="cloudflared"
VERSION=$(git describe --tags --always --dirty="-dev")
PRODUCT="cloudflared"
APPLE_CA_CERT="apple_dev_ca.cert"
CODE_SIGN_PRIV="code_sign.p12"
CODE_SIGN_CERT="code_sign.cer"
INSTALLER_PRIV="installer.p12"
INSTALLER_CERT="installer.cer"
BUNDLE_ID="com.cloudflare.cloudflared"
SEC_DUP_MSG="security: SecKeychainItemImport: The specified item already exists in the keychain."
export PATH="$PATH:/usr/local/bin"
FILENAME="$(pwd)/artifacts/cloudflared-darwin-$TARGET_ARCH.tgz"
PKGNAME="$(pwd)/artifacts/cloudflared-$TARGET_ARCH.pkg"
mkdir -p ../src/github.com/cloudflare/    
cp -r . ../src/github.com/cloudflare/cloudflared
cd ../src/github.com/cloudflare/cloudflared 

# Imports certificates to the Apple KeyChain
import_certificate() {
    local CERTIFICATE_NAME=$1
    local CERTIFICATE_ENV_VAR=$2
    local CERTIFICATE_FILE_NAME=$3

    echo "Importing $CERTIFICATE_NAME"

    if [[ ! -z "$CERTIFICATE_ENV_VAR" ]]; then
      # write certificate to disk and then import it keychain
      echo -n -e ${CERTIFICATE_ENV_VAR} | base64 -D > ${CERTIFICATE_FILE_NAME}
      # we set || true  here and for every `security import invoke` because the  "duplicate SecKeychainItemImport" error
      # will cause set -e to exit 1. It is okay we do this because we deliberately handle this error in the lines below.
      local out=$(security import ${CERTIFICATE_FILE_NAME} -T /usr/bin/pkgbuild -A 2>&1) || true
      local exitcode=$?
      # delete the certificate from disk
      rm -rf ${CERTIFICATE_FILE_NAME}
      if [ -n "$out" ]; then
        if [ $exitcode -eq 0 ]; then
            echo "$out"
        else
            if [ "$out" != "${SEC_DUP_MSG}" ]; then
                echo "$out" >&2
                exit $exitcode
            else
                echo "already imported code signing certificate"
            fi
        fi
      fi
    fi
}

create_cloudflared_build_keychain() {
  # Reusing the private key password as the keychain key
  local PRIVATE_KEY_PASS=$1

  # Create keychain only if it doesn't already exist
  if [ ! -f "$HOME/Library/Keychains/cloudflared_build_keychain.keychain-db" ]; then
    security create-keychain -p "$PRIVATE_KEY_PASS" cloudflared_build_keychain
  else
    echo "Keychain already exists: cloudflared_build_keychain"
  fi

  # Append temp keychain to the user domain
  security list-keychains -d user -s cloudflared_build_keychain $(security list-keychains -d user | sed s/\"//g)

  # Remove relock timeout
  security set-keychain-settings cloudflared_build_keychain

  # Unlock keychain so it doesn't require password
  security unlock-keychain -p "$PRIVATE_KEY_PASS" cloudflared_build_keychain

}

# Imports private keys to the Apple KeyChain
import_private_keys() {
    local PRIVATE_KEY_NAME=$1
    local PRIVATE_KEY_ENV_VAR=$2
    local PRIVATE_KEY_FILE_NAME=$3
    local PRIVATE_KEY_PASS=$4

    echo "Importing $PRIVATE_KEY_NAME"

    if [[ ! -z "$PRIVATE_KEY_ENV_VAR" ]]; then
      if [[ ! -z "$PRIVATE_KEY_PASS" ]]; then
        # write private key to disk and then import it keychain
        echo -n -e ${PRIVATE_KEY_ENV_VAR} | base64 -D > ${PRIVATE_KEY_FILE_NAME}
        # we set || true  here and for every `security import invoke` because the  "duplicate SecKeychainItemImport" error
        # will cause set -e to exit 1. It is okay we do this because we deliberately handle this error in the lines below.
        local out=$(security import ${PRIVATE_KEY_FILE_NAME} -k cloudflared_build_keychain -P "$PRIVATE_KEY_PASS" -T /usr/bin/pkgbuild -A -P "${PRIVATE_KEY_PASS}" 2>&1) || true
        local exitcode=$?
        rm -rf ${PRIVATE_KEY_FILE_NAME}
        if [ -n "$out" ]; then
          if [ $exitcode -eq 0 ]; then
              echo "$out"
          else
              if [ "$out" != "${SEC_DUP_MSG}" ]; then
                  echo "$out" >&2
                  exit $exitcode
              fi
          fi
        fi
      fi
    fi
}

# Create temp keychain only for this build
create_cloudflared_build_keychain "${CFD_CODE_SIGN_PASS}"

# Add Apple Root Developer certificate to the key chain
import_certificate "Apple Developer CA" "${APPLE_DEV_CA_CERT}" "${APPLE_CA_CERT}"

# Add code signing private key to the key chain
import_private_keys "Developer ID Application" "${CFD_CODE_SIGN_KEY}" "${CODE_SIGN_PRIV}" "${CFD_CODE_SIGN_PASS}"

# Add code signing certificate to the key chain
import_certificate "Developer ID Application" "${CFD_CODE_SIGN_CERT}" "${CODE_SIGN_CERT}"

# Add package signing private key to the key chain
import_private_keys "Developer ID Installer" "${CFD_INSTALLER_KEY}" "${INSTALLER_PRIV}" "${CFD_INSTALLER_PASS}"

# Add package signing certificate to the key chain
import_certificate "Developer ID Installer" "${CFD_INSTALLER_CERT}" "${INSTALLER_CERT}"

# get the code signing certificate name
if [[ ! -z "$CFD_CODE_SIGN_NAME" ]]; then
  CODE_SIGN_NAME="${CFD_CODE_SIGN_NAME}"
else
  if [[ -n "$(security find-certificate -c "Developer ID Application" cloudflared_build_keychain | cut -d'"' -f 4 -s | grep "Developer ID Application:" | head -1)" ]]; then
    CODE_SIGN_NAME=$(security find-certificate -c "Developer ID Application" cloudflared_build_keychain | cut -d'"' -f 4 -s | grep "Developer ID Application:" | head -1)
  else
    CODE_SIGN_NAME=""
  fi
fi

# get the package signing certificate name
if [[ ! -z "$CFD_INSTALLER_NAME" ]]; then
  PKG_SIGN_NAME="${CFD_INSTALLER_NAME}"
else
  if [[ -n "$(security find-certificate -c "Developer ID Installer" cloudflared_build_keychain | cut -d'"' -f 4 -s | grep "Developer ID Installer:" | head -1)" ]]; then
    PKG_SIGN_NAME=$(security find-certificate -c "Developer ID Installer" cloudflared_build_keychain | cut -d'"' -f 4 -s | grep "Developer ID Installer:" | head -1)
  else
    PKG_SIGN_NAME=""
  fi
fi

# cleanup the build directory because the previous execution might have failed without cleaning up.
rm -rf "${TARGET_DIRECTORY}"
export TARGET_OS="darwin"
GOCACHE="$PWD/../../../../" GOPATH="$PWD/../../../../" CGO_ENABLED=1 make cloudflared


# This allows apple tools to use the certificates in the keychain without requiring password input.
# This command always needs to run after the certificates have been loaded into the keychain
if [[ ! -z "$CFD_CODE_SIGN_PASS" ]]; then
  security set-key-partition-list -S apple-tool:,apple: -s -k "${CFD_CODE_SIGN_PASS}" cloudflared_build_keychain
fi

# sign the cloudflared binary
if [[ ! -z "$CODE_SIGN_NAME" ]]; then
  codesign --keychain $HOME/Library/Keychains/cloudflared_build_keychain.keychain-db -s "${CODE_SIGN_NAME}" -fv --options runtime --timestamp ${BINARY_NAME}

 # notarize the binary
 # TODO: TUN-5789
fi

ARCH_TARGET_DIRECTORY="${TARGET_DIRECTORY}/${TARGET_ARCH}-build"
# creating build directory
rm -rf $ARCH_TARGET_DIRECTORY
mkdir -p "${ARCH_TARGET_DIRECTORY}"
mkdir -p "${ARCH_TARGET_DIRECTORY}/contents"
cp -r ".mac_resources/scripts" "${ARCH_TARGET_DIRECTORY}/scripts"

# copy cloudflared into the build directory
cp ${BINARY_NAME} "${ARCH_TARGET_DIRECTORY}/contents/${PRODUCT}"

# compress cloudflared into a tar and gzipped file
tar czf "$FILENAME" "${BINARY_NAME}"

# build the installer package
if [[ ! -z "$PKG_SIGN_NAME" ]]; then

  pkgbuild --identifier com.cloudflare.${PRODUCT} \
      --version ${VERSION} \
      --scripts ${ARCH_TARGET_DIRECTORY}/scripts \
      --root ${ARCH_TARGET_DIRECTORY}/contents \
      --install-location /usr/local/bin \
      --keychain cloudflared_build_keychain \
      --sign "${PKG_SIGN_NAME}" \
      ${PKGNAME}

      # notarize the package
      # TODO: TUN-5789
else
    pkgbuild --identifier com.cloudflare.${PRODUCT} \
      --version ${VERSION} \
      --scripts ${ARCH_TARGET_DIRECTORY}/scripts \
      --root ${ARCH_TARGET_DIRECTORY}/contents \
      --install-location /usr/local/bin \
      ${PKGNAME}
fi

# cleanup build directory because this script is not ran within containers,
# which might lead to future issues in subsequent runs.
rm -rf "${TARGET_DIRECTORY}"

# cleanup the keychain
security default-keychain -d user -s login.keychain-db
security list-keychains -d user -s login.keychain-db
security delete-keychain cloudflared_build_keychain


================================================
FILE: .ci/scripts/mac/install-go.sh
================================================
rm -rf /tmp/go
export GOCACHE=/tmp/gocache
rm -rf $GOCACHE

if [ -z "$1" ]
  then
    echo "No go version supplied"
fi

brew install "$1"

go version
which go
go env


================================================
FILE: .ci/scripts/package-windows.sh
================================================
#!/bin/bash
set -e -u -o pipefail

python3 -m venv env
. env/bin/activate
pip install pynacl==1.4.0 pygithub==1.55

VERSION=$(git describe --tags --always --match "[0-9][0-9][0-9][0-9].*.*")
echo $VERSION

export TARGET_OS=windows
# This controls the directory the built artifacts go into
export BUILT_ARTIFACT_DIR=artifacts/
export FINAL_ARTIFACT_DIR=artifacts/
mkdir -p $BUILT_ARTIFACT_DIR
mkdir -p $FINAL_ARTIFACT_DIR
windowsArchs=("amd64" "386")
for arch in ${windowsArchs[@]}; do
    export TARGET_ARCH=$arch
    # Copy .exe from artifacts directory
    cp $BUILT_ARTIFACT_DIR/cloudflared-windows-$arch.exe ./cloudflared.exe
    make cloudflared-msi
    # Copy msi into final directory
    mv cloudflared-$VERSION-$arch.msi $FINAL_ARTIFACT_DIR/cloudflared-windows-$arch.msi
done


================================================
FILE: .ci/scripts/release-target.sh
================================================
#!/bin/bash
set -e -u -o pipefail

# Check if a make target is provided as an argument
if [ $# -eq 0 ]; then
    echo "Error: Make target argument is required"
    echo "Usage: $0 <make-target>"
    exit 1
fi

MAKE_TARGET=$1

python3 -m venv venv
source venv/bin/activate

# Our release scripts are written in python, so we should install their dependecies here.
pip install pynacl==1.4.0 pygithub==1.55 boto3==1.42.30 python-gnupg==0.4.9
make $MAKE_TARGET


================================================
FILE: .ci/scripts/vuln-check.sh
================================================
#!/bin/bash
set -e -u

# Define the file to store the list of vulnerabilities to ignore.
IGNORE_FILE=".vulnignore"

go version
# Check if the ignored vulnerabilities file exists. If not, create an empty one.
if [ ! -f "$IGNORE_FILE" ]; then
  touch "$IGNORE_FILE"
  echo "Created an empty file to store ignored vulnerabilities: $IGNORE_FILE"
  echo "# Add vulnerability IDs (e.g., GO-2022-0450) to ignore, one per line." >>"$IGNORE_FILE"
  echo "# You can also add comments on the same line after the ID." >>"$IGNORE_FILE"
  echo "" >>"$IGNORE_FILE"
fi

# Run govulncheck and capture its output.
VULN_OUTPUT=$(go run -mod=readonly golang.org/x/vuln/cmd/govulncheck@latest ./... || true)

# Print the govuln output
echo "====================================="
echo "Full Output of govulncheck:"
echo "====================================="
echo "$VULN_OUTPUT"
echo "====================================="
echo "End of govulncheck Output"
echo "====================================="

# Process the ignore file to remove comments and empty lines.
# The 'cut' command gets the vulnerability ID and removes anything after the '#'.
# The 'grep' command filters out empty lines and lines starting with '#'.
CLEAN_IGNORES=$(grep -v '^\s*#' "$IGNORE_FILE" | cut -d'#' -f1 | sed 's/ //g' | sort -u || true)

# Filter out the ignored vulnerabilities.
UNIGNORED_VULNS=$(echo "$VULN_OUTPUT" | grep 'Vulnerability' || true)

# If the list of ignored vulnerabilities is not empty, filter them out.
if [ -n "$CLEAN_IGNORES" ]; then
  UNIGNORED_VULNS=$(echo "$UNIGNORED_VULNS" | grep -vFf <(echo "$CLEAN_IGNORES") || true)
fi

# If there are any vulnerabilities that were not in our ignore list, print them and exit with an error.
if [ -n "$UNIGNORED_VULNS" ]; then
  echo "🚨 Found new, unignored vulnerabilities:"
  echo "-------------------------------------"
  echo "$UNIGNORED_VULNS"
  echo "-------------------------------------"
  echo "Exiting with an error. ❌"
  exit 1
else
  echo "🎉 No new vulnerabilities found. All clear! ✨"
  exit 0
fi


================================================
FILE: .ci/scripts/windows/builds.ps1
================================================
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"

$env:TARGET_OS = "windows"
$env:LOCAL_OS = "windows"
$TIMESTAMP_RFC3161 = "http://timestamp.digicert.com"

New-Item -Path ".\artifacts" -ItemType Directory

Write-Output "Building for amd64"
$env:TARGET_ARCH = "amd64"
$env:LOCAL_ARCH = "amd64"
$env:CGO_ENABLED = 1
& make cloudflared
if ($LASTEXITCODE -ne 0) { throw "Failed to build cloudflared for amd64" }
# Sign build
azuresigntool.exe sign -kvu $env:KEY_VAULT_URL -kvi "$env:KEY_VAULT_CLIENT_ID" -kvs "$env:KEY_VAULT_SECRET" -kvc "$env:KEY_VAULT_CERTIFICATE" -kvt "$env:KEY_VAULT_TENANT_ID" -tr "$TIMESTAMP_RFC3161" -d "Cloudflare Tunnel Daemon" .\cloudflared.exe
copy .\cloudflared.exe .\artifacts\cloudflared-windows-amd64.exe

Write-Output "Building for 386"
$env:TARGET_ARCH = "386"
$env:LOCAL_ARCH = "386"
$env:CGO_ENABLED = 0
& make cloudflared
if ($LASTEXITCODE -ne 0) { throw "Failed to build cloudflared for 386" }
## Sign build
azuresigntool.exe sign -kvu $env:KEY_VAULT_URL -kvi "$env:KEY_VAULT_CLIENT_ID" -kvs "$env:KEY_VAULT_SECRET" -kvc "$env:KEY_VAULT_CERTIFICATE" -kvt "$env:KEY_VAULT_TENANT_ID" -tr "$TIMESTAMP_RFC3161" -d "Cloudflare Tunnel Daemon" .\cloudflared.exe
copy .\cloudflared.exe .\artifacts\cloudflared-windows-386.exe


================================================
FILE: .ci/scripts/windows/component-test.ps1
================================================
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"

$env:TARGET_OS = "windows"
$env:LOCAL_OS = "windows"
$env:TARGET_ARCH = "amd64"
$env:LOCAL_ARCH = "amd64"
$env:CGO_ENABLED = 1

python --version
python -m pip --version


Write-Host "Building cloudflared"
& make cloudflared
if ($LASTEXITCODE -ne 0) { throw "Failed to build cloudflared" }


Write-Host "Running unit tests"
# Not testing with race detector because of https://github.com/golang/go/issues/61058
# We already test it on other platforms
go test -failfast -v -mod=vendor ./...
if ($LASTEXITCODE -ne 0) { throw "Failed unit tests" }


# On Gitlab runners we need to add all of this addresses to the NO_PROXY list in order for the tests to run.
$env:NO_PROXY = "pypi.org,files.pythonhosted.org,api.cloudflare.com,argotunneltest.com,argotunnel.com,trycloudflare.com,${env:NO_PROXY}"
Write-Host "No Proxy: ${env:NO_PROXY}"
Write-Host "Running component tests"
try {
    python -m pip --disable-pip-version-check install --upgrade -r component-tests/requirements.txt --use-pep517
    python component-tests/setup.py --type create
    python -m pytest component-tests -o log_cli=true --log-cli-level=INFO --junit-xml=report.xml
    if ($LASTEXITCODE -ne 0) {
        throw "Failed component tests"
    }
} finally {
    python component-tests/setup.py --type cleanup
}


================================================
FILE: .ci/scripts/windows/go-wrapper.ps1
================================================
Param(
    [string]$GoVersion,
    [string]$ScriptToExecute
)

# The script is a wrapper that downloads a specific version
# of go, adds it to the PATH and executes a script with that go
# version in the path.

Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"

# Get the path to the system's temporary directory.
$tempPath = [System.IO.Path]::GetTempPath()

# Create a unique name for the new temporary folder.
$folderName = "go_" + (Get-Random)

# Join the temp path and the new folder name to create the full path.
$fullPath = Join-Path -Path $tempPath -ChildPath $folderName

# Store the current value of PATH environment variable.
$oldPath = $env:Path

# Use a try...finally block to ensure the temporrary folder and PATH are cleaned up.
try {
    # Create the temporary folder.
    Write-Host "Creating temporary folder at: $fullPath"
    $newTempFolder = New-Item -ItemType Directory -Path $fullPath -Force

    # Download go
    $url = "https://go.dev/dl/$GoVersion.windows-amd64.zip"
    $destinationFile = Join-Path -Path $newTempFolder.FullName -ChildPath "go$GoVersion.windows-amd64.zip"
    Write-Host "Downloading go from: $url"
    Invoke-WebRequest -Uri $url -OutFile $destinationFile
    Write-Host "File downloaded to: $destinationFile"

    # Unzip the downloaded file.
    Write-Host "Unzipping the file..."
    Expand-Archive -Path $destinationFile -DestinationPath $newTempFolder.FullName -Force
    Write-Host "File unzipped successfully."

    # Define the go/bin path wich is inside the temporary folder
    $goBinPath = Join-Path -Path $fullPath -ChildPath "go\bin"

    # Add the go/bin path to the PATH environment variable.
    $env:Path = "$goBinPath;$($env:Path)"
    Write-Host "Added $goBinPath to the environment PATH."

    go env
    go version

    & $ScriptToExecute
} finally {
    # Cleanup: Remove the path from the environment variable and then the temporary folder.
    Write-Host "Starting cleanup..."

    $env:Path = $oldPath
    Write-Host "Reverted changes in the environment PATH."

    # Remove the temporary folder and its contents.
    if (Test-Path -Path $fullPath) {
        Remove-Item -Path $fullPath -Recurse -Force
        Write-Host "Temporary folder and its contents have been removed."
    } else {
        Write-Host "Temporary folder does not exist, no cleanup needed."
    }
}


================================================
FILE: .ci/scripts/windows/sign-msi.ps1
================================================
# Sign Windows artifacts using azuretool
# This script processes MSI files from the artifacts directory

$ErrorActionPreference = "Stop"

# Define paths
$ARTIFACT_DIR = "artifacts"
$TIMESTAMP_RFC3161 = "http://timestamp.digicert.com"

Write-Host "Looking for Windows artifacts to sign in $ARTIFACT_DIR..."

# Find all Windows MSI files
$msiFiles = Get-ChildItem -Path $ARTIFACT_DIR -Filter "cloudflared-windows-*.msi" -ErrorAction SilentlyContinue

if ($msiFiles.Count -eq 0) {
    Write-Host "No Windows MSI files found in $ARTIFACT_DIR"
    exit 1
}

Write-Host "Found $($msiFiles.Count) file(s) to sign:"
foreach ($file in $msiFiles) {
    Write-Host "Running azuretool sign for $($file.Name)"
    azuresigntool.exe sign -kvu $env:KEY_VAULT_URL -kvi "$env:KEY_VAULT_CLIENT_ID" -kvs "$env:KEY_VAULT_SECRET" -kvc "$env:KEY_VAULT_CERTIFICATE" -kvt "$env:KEY_VAULT_TENANT_ID" -tr "$TIMESTAMP_RFC3161" -d "Cloudflare Tunnel Daemon" .\\$ARTIFACT_DIR\\$($file.Name)
}

Write-Host "Signing process completed"


================================================
FILE: .ci/windows.gitlab-ci.yml
================================================
include:
  - local: .ci/commons.gitlab-ci.yml

###################################
### Defaults for Windows Builds ###
###################################
.windows-build-defaults: &windows-build-defaults
  rules:
    - !reference [.default-rules, run-always]
  tags:
    - windows-x86
  cache: {}

##########################################
### Build Cloudflared Windows Binaries ###
##########################################
windows-build-cloudflared:
  <<: *windows-build-defaults
  stage: build
  script:
    - powershell -ExecutionPolicy Bypass -File ".\.ci\scripts\windows\go-wrapper.ps1" "${WIN_GO_VERSION}" ".\.ci\scripts\windows\builds.ps1"
  artifacts:
    paths:
      - artifacts/*

######################################################
### Load Environment Variables for Component Tests ###
######################################################
windows-load-env-variables:
  stage: pre-build
  extends: .component-tests
  script:
    - echo "COMPONENT_TESTS_CONFIG=$COMPONENT_TESTS_CONFIG" >> windows.env
    - echo "COMPONENT_TESTS_CONFIG_CONTENT=$COMPONENT_TESTS_CONFIG_CONTENT" >> windows.env
    - echo "DNS_API_TOKEN=$DNS_API_TOKEN" >> windows.env
    # We have to encode the `COMPONENT_TESTS_ORIGINCERT` secret, because it content is a file, otherwise we can't export it using gitlab
    - echo "COMPONENT_TESTS_ORIGINCERT=$(echo "$COMPONENT_TESTS_ORIGINCERT" | base64 -w0)" >> windows.env
    - echo "KEY_VAULT_URL=$KEY_VAULT_URL" >> windows.env
    - echo "KEY_VAULT_CLIENT_ID=$KEY_VAULT_CLIENT_ID" >> windows.env
    - echo "KEY_VAULT_TENANT_ID=$KEY_VAULT_TENANT_ID" >> windows.env
    - echo "KEY_VAULT_SECRET=$KEY_VAULT_SECRET" >> windows.env
    - echo "KEY_VAULT_CERTIFICATE=$KEY_VAULT_CERTIFICATE" >> windows.env
  variables:
    COMPONENT_TESTS_CONFIG_CONTENT: Y2xvdWRmbGFyZWRfYmluYXJ5OiAuL2Nsb3VkZmxhcmVkLmV4ZQpjcmVkZW50aWFsc19maWxlOiBjcmVkLmpzb24Kb3JpZ2luY2VydDogY2VydC5wZW0Kem9uZV9kb21haW46IGFyZ290dW5uZWx0ZXN0LmNvbQp6b25lX3RhZzogNDg3OTZmMWU3MGJiNzY2OWMyOWJiNTFiYTI4MmJmNjU=
  secrets:
    KEY_VAULT_URL:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/azure_vault/app_info/key_vault_url@kv
      file: false
    KEY_VAULT_CLIENT_ID:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/azure_vault/app_info/key_vault_client_id@kv
      file: false
    KEY_VAULT_TENANT_ID:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/azure_vault/app_info/key_vault_tenant_id@kv
      file: false
    KEY_VAULT_SECRET:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/azure_vault/secret/key_vault_secret@kv
      file: false
    KEY_VAULT_CERTIFICATE:
      vault: gitlab/cloudflare/tun/cloudflared/_dev/azure_vault/certificate/key_vault_certificate@kv
      file: false
  artifacts:
    access: 'none'
    reports:
      dotenv: windows.env

###################################
### Run Windows Component Tests ###
###################################
windows-component-tests-cloudflared:
  <<: *windows-build-defaults
  stage: test
  needs: ["windows-load-env-variables"]
  script:
    # We have to decode the secret we encoded on the `windows-load-env-variables` job
    - $env:COMPONENT_TESTS_ORIGINCERT = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($env:COMPONENT_TESTS_ORIGINCERT))
    - powershell -ExecutionPolicy Bypass -File ".\.ci\scripts\windows\go-wrapper.ps1" "${WIN_GO_VERSION}" ".\.ci\scripts\windows\component-test.ps1"
  artifacts:
    reports:
      junit: report.xml

################################
### Package Windows Binaries ###
################################
windows-package:
  rules:
    - !reference [.default-rules, run-on-master]
  stage: package
  needs:
    - ci-image-get-image-ref
    - windows-build-cloudflared
  image: $BUILD_IMAGE
  script:
    - .ci/scripts/package-windows.sh
  cache: {}
  artifacts:
    paths:
      - artifacts/*

#############################
### Sign Windows Binaries ###
#############################
windows-package-sign:
  <<: *windows-build-defaults
  rules:
    - !reference [.default-rules, run-on-master]
  stage: package
  needs:
    - windows-package
    - windows-load-env-variables
  script:
    - powershell -ExecutionPolicy Bypass -File ".\.ci\scripts\windows\sign-msi.ps1"
  artifacts:
    paths:
      - artifacts/*


================================================
FILE: .docker-images
================================================
images:
  - name: cloudflared
    dockerfile: Dockerfile.$ARCH
    context: .
    version_file: versions
    registries:
    - name: docker.io/cloudflare
      user: env:DOCKER_USER
      password: env:DOCKER_PASSWORD
    architectures:
    - amd64
    - arm64


================================================
FILE: .dockerignore
================================================


================================================
FILE: .github/ISSUE_TEMPLATE/---bug-report.md
================================================
---
name: "\U0001F41B Bug report"
about: Create a report to help us improve cloudflared
title: "\U0001F41B"
labels: 'Priority: Normal, Type: Bug'

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Configure '...'
2. Run '....'
3. See error

If it's an issue with Cloudflare Tunnel:
4. Tunnel ID : 
5. cloudflared config: 

**Expected behavior**
A clear and concise description of what you expected to happen.

**Environment and versions**
 - OS: [e.g. MacOS]
 - Architecture: [e.g. AMD, ARM]
 - Version: [e.g. 2022.02.0]

**Logs and errors**
If applicable, add logs or errors to help explain your problem.

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/---documentation.md
================================================
---
name: "\U0001F4DD Documentation"
about: Request new or updated documentation for cloudflared
title: "\U0001F4DD"
labels: 'Priority: Normal, Type: Documentation'

---

**Available Documentation**
A link to the documentation that is available today and the areas which could be improved. 

**Suggested Documentation**
A clear and concise description of the documentation, tutorial, or guide that should be added. 

**Additional context**
Add any other context or screenshots about the documentation request here.


================================================
FILE: .github/ISSUE_TEMPLATE/---feature-request.md
================================================
---
name: "\U0001F4A1 Feature request"
about: Suggest a feature or enhancement for cloudflared
title: "\U0001F4A1"
labels: 'Priority: Normal, Type: Feature Request'

---

**Describe the feature you'd like**
A clear and concise description of the feature. What problem does it solve for you?

**Describe alternatives you've considered**
Are there any alternatives to solving this problem? If so, what was your experience with them?

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/workflows/check.yaml
================================================
on: [push, pull_request]
name: Check
jobs:
  check:
    strategy:
      matrix:
        go-version: [1.22.x]
        os: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
    - name: Install Go
      uses: actions/setup-go@v5
      with:
        go-version: ${{ matrix.go-version }}
    - name: Checkout code
      uses: actions/checkout@v4
    - name: Test
      run: make test


================================================
FILE: .github/workflows/semgrep.yml
================================================
on:
  pull_request: {}
  workflow_dispatch: {}
  push: 
    branches:
      - main
      - master
  schedule:
    - cron: '0 0 * * *'
name: Semgrep config
jobs:
  semgrep:
    name: semgrep/ci
    runs-on: ubuntu-latest
    env:
      SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}
      SEMGREP_URL: https://cloudflare.semgrep.dev
      SEMGREP_APP_URL: https://cloudflare.semgrep.dev
      SEMGREP_VERSION_CHECK_URL: https://cloudflare.semgrep.dev/api/check-version
    container:
      image: semgrep/semgrep
    steps:
      - uses: actions/checkout@v4
      - run: semgrep ci


================================================
FILE: .gitignore
================================================
/tmp
/bin
.idea
.build
.vscode
\#*\#
cscope.*
/cloudflared
/cloudflared.pkg
/cloudflared.exe
/cloudflared.msi
/cloudflared-x86-64*
/cloudflared.1
/packaging
.DS_Store
*-session.log
ssh_server_tests/.env
/.cover
built_artifacts/
component-tests/.venv
/artifacts


================================================
FILE: .gitlab-ci.yml
================================================
variables:
  GO_VERSION: "1.24.13"
  MAC_GO_VERSION: "go@$GO_VERSION"
  WIN_GO_VERSION: "go$GO_VERSION"
  GIT_DEPTH: "0"

default:
  id_tokens:
    VAULT_ID_TOKEN:
      aud: https://vault.cfdata.org

stages:
  [
    sync,
    pre-build,
    build,
    validate,
    test,
    package,
    release,
    release-internal,
    review,
  ]

include:
  #####################################################
  ########## Import Commons Configurations ############
  #####################################################
  - local: .ci/commons.gitlab-ci.yml

  #####################################################
  ########### Sync Repository with Github #############
  #####################################################
  - local: .ci/github.gitlab-ci.yml

  #####################################################
  ############# Build or Fetch CI Image ###############
  #####################################################
  - local: .ci/ci-image.gitlab-ci.yml

  #####################################################
  ################## Linux Builds ###################
  #####################################################
  - local: .ci/linux.gitlab-ci.yml

  #####################################################
  ################## Windows Builds ###################
  #####################################################
  - local: .ci/windows.gitlab-ci.yml

  #####################################################
  ################### macOS Builds ####################
  #####################################################
  - local: .ci/mac.gitlab-ci.yml

  #####################################################
  ################# Release Packages ##################
  #####################################################
  - local: .ci/release.gitlab-ci.yml

  #####################################################
  ########## Release Packages Internally ##############
  #####################################################
  - local: .ci/apt-internal.gitlab-ci.yml

  #####################################################
  ############## Manual Claude Review #################
  #####################################################
  - component: $CI_SERVER_FQDN/cloudflare/ci/ai/review@~latest


================================================
FILE: .golangci.yaml
================================================
linters:
  enable:
    # Some of the linters below are commented out. We should uncomment and start running them, but they return
    # too many problems to fix in one commit. Something for later.
    - asasalint        # Check for pass []any as any in variadic func(...any).
    - asciicheck       # Checks that all code identifiers does not have non-ASCII symbols in the name.
    - bidichk          # Checks for dangerous unicode character sequences.
    - bodyclose        # Checks whether HTTP response body is closed successfully.
    - decorder         # Check declaration order and count of types, constants, variables and functions.
    - dogsled          # Checks assignments with too many blank identifiers (e.g. x, , , _, := f()).
    - dupl             # Tool for code clone detection.
    - dupword          # Checks for duplicate words in the source code.
    - durationcheck    # Check for two durations multiplied together.
    - errcheck         # Errcheck is a program for checking for unchecked errors in Go code. These unchecked errors can be critical bugs in some cases.
    - errname          # Checks that sentinel errors are prefixed with the Err and error types are suffixed with the Error.
    - exhaustive       # Check exhaustiveness of enum switch statements.
    - gofmt            # Gofmt checks whether code was gofmt-ed. By default this tool runs with -s option to check for code simplification.
    - goimports        # Check import statements are formatted according to the 'goimport' command. Reformat imports in autofix mode.
    - gosec            # Inspects source code for security problems.
    - gosimple         # Linter for Go source code that specializes in simplifying code.
    - govet            # Vet examines Go source code and reports suspicious constructs. It is roughly the same as 'go vet' and uses its passes.
    - ineffassign      # Detects when assignments to existing variables are not used.
    - importas         # Enforces consistent import aliases.
    - misspell         # Finds commonly misspelled English words.
    - prealloc         # Finds slice declarations that could potentially be pre-allocated.
    - promlinter       # Check Prometheus metrics naming via promlint.
    - sloglint         # Ensure consistent code style when using log/slog.
    - sqlclosecheck    # Checks that sql.Rows, sql.Stmt, sqlx.NamedStmt, pgx.Query are closed.
    - staticcheck      # It's a set of rules from staticcheck. It's not the same thing as the staticcheck binary.
    - usetesting       # Reports uses of functions with replacement inside the testing package.
    - testableexamples # Linter checks if examples are testable (have an expected output).
    - testifylint      # Checks usage of github.com/stretchr/testify.
    - tparallel        # Tparallel detects inappropriate usage of t.Parallel() method in your Go test codes.
    - unconvert        # Remove unnecessary type conversions.
    - unused           # Checks Go code for unused constants, variables, functions and types.
    - wastedassign     # Finds wasted assignment statements.
    - whitespace       # Whitespace is a linter that checks for unnecessary newlines at the start and end of functions, if, for, etc.
    - zerologlint      # Detects the wrong usage of zerolog that a user forgets to dispatch with Send or Msg.
  # Other linters are disabled, list of all is here: https://golangci-lint.run/usage/linters/
run:
  timeout: 5m
  modules-download-mode: vendor

# output configuration options
output:
  formats:
    - format: 'colored-line-number'
  print-issued-lines: true
  print-linter-name: true

issues:
  # Maximum issues count per one linter.
  # Set to 0 to disable.
  # Default: 50
  max-issues-per-linter: 50
  # Maximum count of issues with the same text.
  # Set to 0 to disable.
  # Default: 3
  max-same-issues: 15
  # Show only new issues: if there are unstaged changes or untracked files,
  # only those changes are analyzed, else only changes in HEAD~ are analyzed.
  # It's a super-useful option for integration of golangci-lint into existing large codebase.
  # It's not practical to fix all existing issues at the moment of integration:
  # much better don't allow issues in new code.
  #
  # Default: false
  new: true
  # Show only new issues created after git revision `REV`.
  # Default: ""
  new-from-rev: ac34f94d423273c8fa8fdbb5f2ac60e55f2c77d5
  # Show issues in any part of update files (requires new-from-rev or new-from-patch).
  # Default: false
  whole-files: true
  # Which dirs to exclude: issues from them won't be reported.
  # Can use regexp here: `generated.*`, regexp is applied on full path,
  # including the path prefix if one is set.
  # Default dirs are skipped independently of this option's value (see exclude-dirs-use-default).
  # "/" will be replaced by current OS file path separator to properly work on Windows.
  # Default: []
  exclude-dirs:
    - vendor

linters-settings:
  # Check exhaustiveness of enum switch statements.
  exhaustive:
    # Presence of "default" case in switch statements satisfies exhaustiveness,
    # even if all enum members are not listed.
    # Default: false
    default-signifies-exhaustive: true


================================================
FILE: .mac_resources/scripts/postinstall
================================================
#!/bin/bash

# uninstall first in case this is an upgrade
/usr/local/bin/cloudflared service uninstall

# install the new service using launchctl
/usr/local/bin/cloudflared service install

================================================
FILE: .mac_resources/uninstall.sh
================================================
#!/bin/bash

/usr/local/bin/cloudflared service uninstall
rm /usr/local/bin/cloudflared
pkgutil --forget com.cloudflare.cloudflared

================================================
FILE: .vulnignore
================================================
# Add vulnerability IDs (e.g., GO-2022-0450) to ignore, one per line.
# You can also add comments on the same line after the ID.


================================================
FILE: AGENTS.md
================================================
# Cloudflared

Cloudflare's command-line tool and networking daemon written in Go.
Production-grade tunneling and network connectivity services used by millions of
developers and organizations worldwide.

## Essential Commands

### Build & Test (Always run before commits)

```bash
# Full development check (run before any commit)
make test lint

# Build for current platform
make cloudflared

# Run all unit tests with coverage
make test
make cover

# Run specific test
go test -run TestFunctionName ./path/to/package

# Run tests with race detection
go test -race ./...
```

### Platform-Specific Builds

```bash
# Linux
TARGET_OS=linux TARGET_ARCH=amd64 make cloudflared

# Windows
TARGET_OS=windows TARGET_ARCH=amd64 make cloudflared

# macOS ARM64
TARGET_OS=darwin TARGET_ARCH=arm64 make cloudflared

# FIPS compliant build
FIPS=true make cloudflared
```

### Code Quality & Formatting

```bash
# Run linter (38+ enabled linters)
make lint

# Auto-fix formatting
make fmt
gofmt -w .
goimports -w .

# Security scanning
make vet

# Component tests (Python integration tests)
cd component-tests && python -m pytest test_file.py::test_function_name
```

## Project Knowledge

### Package Structure

- Use meaningful package names that reflect functionality
- Package names should be lowercase, single words when possible
- Avoid generic names like `util`, `common`, `helper`

### Function and Method Guidelines

```go
// Good: Clear purpose, proper error handling
func (c *Connection) HandleRequest(ctx context.Context, req *http.Request) error {
    if req == nil {
        return errors.New("request cannot be nil")
    }
    // Implementation...
    return nil
}
```

### Error Handling

- Always handle errors explicitly, never ignore them
- Use `fmt.Errorf` for error wrapping
- Create meaningful error messages with context
- Use error variables for common errors

```go
// Good error handling patterns
if err != nil {
    return fmt.Errorf("failed to process connection: %w", err)
}
```

### Logging Standards

- Use `github.com/rs/zerolog` for structured logging
- Include relevant context fields
- Use appropriate log levels (Debug, Info, Warn, Error)

```go
logger.Info().
    Str("tunnelID", tunnel.ID).
    Int("connIndex", connIndex).
    Msg("Connection established")
```

### Testing Patterns

- Use `github.com/stretchr/testify` for assertions
- Test files end with `_test.go`
- Use table-driven tests for multiple scenarios
- Always use `t.Parallel()` for parallel-safe tests
- Use meaningful test names that describe behavior

```go
func TestMetricsListenerCreation(t *testing.T) {
    t.Parallel()
    // Test implementation
    assert.Equal(t, expected, actual)
    require.NoError(t, err)
}
```

### Constants and Variables

```go
const (
    MaxGracePeriod       = time.Minute * 3
    MaxConcurrentStreams = math.MaxUint32
    LogFieldConnIndex    = "connIndex"
)

var (
    // Group related variables
    switchingProtocolText = fmt.Sprintf("%d %s", http.StatusSwitchingProtocols, http.StatusText(http.StatusSwitchingProtocols))
    flushableContentTypes = []string{sseContentType, grpcContentType, sseJsonContentType}
)
```

### Type Definitions

- Define interfaces close to their usage
- Keep interfaces small and focused
- Use descriptive names for complex types

```go
type TunnelConnection interface {
    Serve(ctx context.Context) error
}

type TunnelProperties struct {
    Credentials    Credentials
    QuickTunnelUrl string
}
```

## Key Architectural Patterns

### Context Usage

- Always accept `context.Context` as first parameter for long-running operations
- Respect context cancellation in loops and blocking operations
- Pass context through call chains

### Concurrency

- Use channels for goroutine communication
- Protect shared state with mutexes
- Prefer `sync.RWMutex` for read-heavy workloads

### Configuration

- Use structured configuration with validation
- Support both file-based and CLI flag configuration
- Provide sensible defaults

### Metrics and Observability

- Instrument code with Prometheus metrics
- Use OpenTelemetry for distributed tracing
- Include structured logging with relevant context

## Boundaries

### ✅ Always Do

- Run `make test lint` before any commit
- Handle all errors explicitly with proper context
- Use `github.com/rs/zerolog` for all logging
- Add `t.Parallel()` to all parallel-safe tests
- Follow the import grouping conventions
- Use meaningful variable and function names
- Include context.Context for long-running operations
- Close resources in defer statements

### ⚠️ Ask First Before

- Adding new dependencies to go.mod
- Modifying CI/CD configuration files
- Changing build system or Makefile
- Modifying component test infrastructure
- Adding new linter rules or changing golangci-lint config
- Making breaking changes to public APIs
- Changing logging levels or structured logging fields

### 🚫 Never Do

- Ignore errors without explicit handling (`_ = err`)
- Use generic package names (`util`, `helper`, `common`)
- Commit code that fails `make test lint`
- Use `fmt.Print*` instead of structured logging
- Modify vendor dependencies directly
- Commit secrets, credentials, or sensitive data
- Use deprecated or unsafe Go patterns
- Skip testing for new functionality
- Remove existing tests unless they're genuinely invalid

## Dependencies Management

- Use Go modules (`go.mod`) exclusively
- Vendor dependencies for reproducible builds
- Keep dependencies up-to-date and secure
- Prefer standard library when possible
- Cloudflared uses a fork of quic-go always check release notes before bumping
  this dependency.

## Security Considerations

- FIPS compliance support available
- Vulnerability scanning integrated in CI
- Credential handling follows security best practices
- Network security with TLS/QUIC protocols
- Regular security audits and updates
- Post quantum encryption

## Common Patterns to Follow

1. **Graceful shutdown**: Always implement proper cleanup
2. **Resource management**: Close resources in defer statements
3. **Error propagation**: Wrap errors with meaningful context
4. **Configuration validation**: Validate inputs early
5. **Logging consistency**: Use structured logging throughout
6. **Testing coverage**: Aim for comprehensive test coverage
7. **Documentation**: Comment exported functions and types

Remember: This is a mission-critical networking tool used in production by many
organizations. Code quality, security, and reliability are paramount.


================================================
FILE: CHANGES.md
================================================
## 2026.2.0
### Breaking Change
- Removes the `proxy-dns` feature from cloudflared. This feature allowed running a local DNS over HTTPS (DoH) proxy.
  Users who relied on this functionality should migrate to alternative solutions.
  
  Removed commands and flags:
  - `cloudflared proxy-dns`
  - `cloudflared tunnel proxy-dns` 
  - `--proxy-dns`, `--proxy-dns-port`, `--proxy-dns-address`, `--proxy-dns-upstream`, `--proxy-dns-max-upstream-conns`, `--proxy-dns-bootstrap`
  - `resolver` section in configuration file

## 2025.7.1
### Notices
- `cloudflared` will no longer officially support Debian and Ubuntu distros that reached end-of-life: `buster`, `bullseye`, `impish`, `trusty`.

## 2025.1.1
### New Features
- This release introduces the use of new Post Quantum curves and the ability to use Post Quantum curves when running tunnels with the QUIC protocol this applies to non-FIPS and FIPS builds.

## 2024.12.2
### New Features
- This release introduces the ability to collect troubleshooting information from one instance of cloudflared running on the local machine. The command can be executed as `cloudflared tunnel diag`.

## 2024.12.1
### Notices
- The use of the `--metrics` is still honoured meaning that if this flag is set the metrics server will try to bind it, however, this version includes a change that makes the metrics server bind to a port with a semi-deterministic approach. If the metrics flag is not present the server will bind to the first available port of the range 20241 to 20245. In case of all ports being unavailable then the fallback is to bind to a random port.

## 2024.10.0
### Bug Fixes
- We fixed a bug related to `--grace-period`. Tunnels that use QUIC as transport weren't abiding by this waiting period before forcefully closing the connections to the edge. From now on, both QUIC and HTTP2 tunnels will wait for either the grace period to end (defaults to 30 seconds) or until the last in-flight request is handled. Users that wish to maintain the previous behavior should set `--grace-period` to 0 if `--protocol` is set to `quic`. This will force `cloudflared` to shutdown as soon as either SIGTERM or SIGINT is received.

## 2024.2.1
### Notices
- Starting from this version, tunnel diagnostics will be enabled by default. This will allow the engineering team to remotely get diagnostics from cloudflared during debug activities. Users still have the capability to opt-out of this feature by defining `--management-diagnostics=false` (or env `TUNNEL_MANAGEMENT_DIAGNOSTICS`).

## 2023.9.0
### Notices
- The `warp-routing` `enabled: boolean` flag is no longer supported in the configuration file. Warp Routing traffic (eg TCP, UDP, ICMP) traffic is proxied to cloudflared if routes to the target tunnel are configured. This change does not affect remotely managed tunnels, but for locally managed tunnels, users that might be relying on this feature flag to block traffic should instead guarantee that tunnel has no Private Routes configured for the tunnel.
## 2023.7.0
### New Features
- You can now enable additional diagnostics over the management.argotunnel.com service for your active cloudflared connectors via a new runtime flag `--management-diagnostics` (or env `TUNNEL_MANAGEMENT_DIAGNOSTICS`). This feature is provided as opt-in and requires the flag to enable. Endpoints such as /metrics provides your prometheus metrics endpoint another mechanism to be reached. Additionally /debug/pprof/(goroutine|heap) are also introduced to allow for remotely retrieving active pprof information from a running cloudflared connector.

## 2023.4.1
### New Features
- You can now stream your logs from your remote cloudflared to your local terminal with `cloudflared tail <TUNNEL-ID>`. This new feature requires the remote cloudflared to be version 2023.4.1 or higher.

## 2023.3.2
### Notices
- Due to the nature of QuickTunnels (https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/do-more-with-tunnels/trycloudflare/) and its intended usage for testing and experiment of Cloudflare Tunnels, starting from 2023.3.2, QuickTunnels only make a single connection to the edge. If users want to use Tunnels in a production environment, they should move to Named Tunnels instead. (https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/remote/#set-up-a-tunnel-remotely-dashboard-setup)

## 2023.3.1
### Breaking Change
- Running a tunnel without ingress rules defined in configuration file nor from the CLI flags will no longer provide a default ingress rule to localhost:8080 and instead will return HTTP response code 503 for all incoming HTTP requests.

### Security Fixes
- Windows 32 bit machines MSI now defaults to Program Files to install cloudflared. (See CVE-2023-1314). The cloudflared client itself is unaffected. This just changes how the installer works on 32 bit windows machines.

### Bug Fixes
- Fixed a bug that would cause running tunnel on Bastion mode and without ingress rules to crash.

## 2023.2.2
### Notices
- Legacy tunnels were officially deprecated on December 1, 2022. Starting with this version, cloudflared no longer supports connecting legacy tunnels.
- h2mux tunnel connection protocol is no longer supported. Any tunnels still configured to use this protocol will alert and use http2 tunnel protocol instead. We recommend using quic protocol for all tunnels going forward.

## 2023.2.1
### Bug fixes
- Fixed a bug in TCP connection proxy that could result in the connection being closed before all data was written.
- cloudflared now correctly aborts body write if connection to origin service fails after response headers were sent already.
- Fixed a bug introduced in the previous release where debug endpoints were removed.

## 2022.12.0
### Improvements
- cloudflared now attempts to try other edge addresses before falling back to a lower protocol.
- cloudflared tunnel no longer spins up a quick tunnel. The call has to be explicit and provide a --url flag.
- cloudflared will now randomly pick the first or second region to connect to instead of always connecting to region2 first.

## 2022.9.0
### New Features
- cloudflared now rejects ingress rules with invalid http status codes for http_status.

## 2022.8.1
### New Features
- cloudflared now remembers if it connected to a certain protocol successfully. If it did, it does not fall back to a lower
  protocol on connection failures.

## 2022.7.1
### New Features
- It is now possible to connect cloudflared tunnel to Cloudflare Global Network with IPv6. See `cloudflared tunnel --help` and look for `edge-ip-version` for more information. For now, the default behavior is to still connect with IPv4 only.

### Bug Fixes
- Several bug fixes related with QUIC transport (used between cloudflared tunnel and Cloudflare Global Network). Updating to this version is highly recommended.

## 2022.4.0
### Bug Fixes
- `cloudflared tunnel run` no longer logs the Tunnel token or JSON credentials in clear text as those are the secret
that allows to run the Tunnel.

## 2022.3.4
### New Features
- It is now possible to retrieve the credentials that allow to run a Tunnel in case you forgot/lost them. This is
achievable with: `cloudflared tunnel token --cred-file /path/to/file.json TUNNEL`. This new feature only works for
Tunnels created with cloudflared version 2022.3.0 or more recent.

### Bug Fixes
- `cloudflared service install` now starts the underlying agent service on Linux operating system (similarly to the
behaviour in Windows and MacOS).

## 2022.3.3
### Bug Fixes
- `cloudflared service install` now starts the underlying agent service on Windows operating system (similarly to the
behaviour in MacOS).

## 2022.3.1
### Bug Fixes
- Various fixes to the reliability of `quic` protocol, including an edge case that could lead to cloudflared crashing.

## 2022.3.0
### New Features
- It is now possible to configure Ingress Rules to point to an origin served by unix socket with either HTTP or HTTPS.
If the origin starts with `unix:/` then we assume HTTP (existing behavior). Otherwise, the origin can start with
`unix+tls:/` for HTTPS.

## 2022.2.1
### New Features
- This project now has a new LICENSE that is more compliant with open source purposes.

### Bug Fixes
- Various fixes to the reliability of `quic` protocol.

## 2022.1.3
### New Features
- New `cloudflared tunnel vnet` commands to allow for private routing to be virtualized. This means that the same CIDR
can now be used to point to two different Tunnels with `cloudflared tunnel route ip` command. More information will be
made available on blog.cloudflare.com and developers.cloudflare.com/cloudflare-one once the feature is globally available.

### Bug Fixes
- Correctly handle proxying UDP datagrams with no payload.
- Bug fix for origins that use Server-Sent Events (SSE).

## 2022.1.0
### Improvements
- If a specific `protocol` property is defined (e.g. for `quic`), cloudflared no longer falls back to an older protocol
(such as `http2`) in face of connectivity errors. This is important because some features are only supported in a specific
protocol (e.g. UDP proxying only works for `quic`). Hence, if a user chooses a protocol, cloudflared now adheres to it
no matter what.

### Bug Fixes
- Stopping cloudflared running with `quic` protocol now respects graceful shutdown.

## 2021.12.2
### Bug Fixes
- Fix logging when `quic` transport is used and UDP traffic is proxied.
- FIPS compliant cloudflared binaries will now be released as separate artifacts. Recall that these are only for linux
and amd64.

## 2021.12.1
### Bug Fixes
 - Fixes Github issue #530 where cloudflared 2021.12.0 could not reach origins that were HTTPS and using certain encryption
methods forbidden by FIPS compliance (such as Let's Encrypt certificates). To address this fix we have temporarily reverted
FIPS compliance from amd64 linux binaries that was recently introduced (or fixed actually as it was never working before).

## 2021.12.0
### New Features
- Cloudflared binary released for amd64 linux is now FIPS compliant.

### Improvements
- Logging about connectivity to Cloudflare edge now only yields `ERR` level logging if there are no connections to
Cloudflare edge that are active. Otherwise it logs `WARN` level.
 
### Bug Fixes
- Fixes Github issue #501.

## 2021.11.0
### Improvements
- Fallback from `protocol:quic` to `protocol:http2` immediately if UDP connectivity isn't available. This could be because of a firewall or 
egress rule.

## 2021.10.4
### Improvements
- Collect quic transport metrics on RTT, packets and bytes transferred.

### Bug Fixes
- Fix race condition that was writing to the connection after the http2 handler returns.

## 2021.9.2

### New features
- `cloudflared` can now run with `quic` as the underlying tunnel transport protocol. To try it, change or add "protocol: quic" to your config.yml file or
run cloudflared with the `--protocol quic` flag. e.g:
    `cloudflared tunnel --protocol quic run <tunnel-name>`

### Bug Fixes
- Fixed some generic transport bugs in `quic` mode. It's advised to upgrade to at least this version (2021.9.2) when running `cloudflared`
with `quic` protocol.
- `cloudflared` docker images will now show version.


## 2021.8.4
### Improvements
- Temporary tunnels (those hosted on trycloudflare.com that do not require a Cloudflare login) now run as Named Tunnels
underneath. We recall that these tunnels should not be relied upon for production usage as they come with no guarantee
of uptime. Previous cloudflared versions will soon be unable to run legacy temporary tunnels and will require an update
(to this version or more recent).

## 2021.8.2
### Improvements
- Because Equinox os shutting down, all cloudflared releases are now present [here](https://github.com/cloudflare/cloudflared/releases).
[Equinox](https://dl.equinox.io/cloudflare/cloudflared/stable) will no longer receive updates. 

## 2021.8.0
### Bug fixes
- Prevents tunnel from accidentally running when only proxy-dns should run. 

### Improvements
- If auto protocol transport lookup fails, we now default to a transport instead of not connecting.

## 2021.6.0
### Bug Fixes
- Fixes a http2 transport (the new default for Named Tunnels) to work with unix socket origins.


## 2021.5.10
### Bug Fixes
- Fixes a memory leak in h2mux transport that connects cloudflared to Cloudflare edge.


## 2021.5.9
### New Features
- Uses new Worker based login helper service to facilitate token exchange in cloudflared flows.

### Bug Fixes
- Fixes Centos-7 builds.

## 2021.5.8
### New Features
- When creating a DNS record to point a hostname at a tunnel, you can now use --overwrite-dns to overwrite any existing
  DNS records with that hostname. This works both when using the CLI to provision DNS, as well as when starting an adhoc
  named tunnel, e.g.:
  - `cloudflared tunnel route dns --overwrite-dns foo-tunnel foo.example.com`
  - `cloudflared tunnel --overwrite-dns --name foo-tunnel --hostname foo.example.com`

## 2021.5.7
### New Features
- Named Tunnels will automatically select the protocol to connect to Cloudflare's edge network.

## 2021.5.0

### New Features
- It is now possible to run the same tunnel using more than one `cloudflared` instance. This is a server-side change and
  is compatible with any client version that uses Named Tunnels.

  To get started, visit our [developer documentation](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/deploy-cloudflared-replicas).
- `cloudflared tunnel ingress validate` will now warn about unused keys in your config file. This is helpful for
  detecting typos in your config.
- If `cloudflared` detects it is running inside a Linux container, it will limit itself to use only the number of CPUs
  the pod has been granted, instead of trying to use every CPU available.

## 2021.4.0

### Bug Fixes

- Fixed proxying of websocket requests to avoid possibility of losing initial frames that were sent in the same TCP
  packet as response headers [#345](https://github.com/cloudflare/cloudflared/issues/345).
- `proxy-dns` option now works in conjunction with running a named tunnel [#346](https://github.com/cloudflare/cloudflared/issues/346).

## 2021.3.6

### Bug Fixes

- Reverted 2021.3.5 improvement to use HTTP/2 in a best-effort manner between cloudflared and origin services because
  it was found to break in some cases.

## 2021.3.5

### Improvements

 - HTTP/2 transport is now always chosen if origin server supports it and the service url scheme is HTTPS.
   This was previously done in a best attempt manner.

### Bug Fixes

 - The MacOS binaries were not successfully released in 2021.3.3 and 2021.3.4. This release is aimed at addressing that.

## 2021.3.3

### Improvements

- Tunnel create command, as well as, running ad-hoc tunnels using `cloudflared tunnel -name NAME`, will not overwrite
  existing files when writing tunnel credentials.

### Bug Fixes

- Tunnel create and delete commands no longer use path to credentials from the configuration file.
  If you need to place tunnel credentials file at a specific location, you must use `--credentials-file` flag.
- Access ssh-gen creates properly named keys for SSH short lived certs.


## 2021.3.2

### New Features

- It is now possible to obtain more detailed information about the cloudflared connectors to Cloudflare Edge via
  `cloudflared tunnel info <name/uuid>`. It is possible to sort the output as well as output in different formats,
  such as: `cloudflared tunnel info --sort-by version --invert-sort --output json <name/uuid>`.
  You can obtain more information via `cloudflared tunnel info --help`.

### Bug Fixes

- Don't look for configuration file in default paths when `--config FILE` flag is present after `tunnel` subcommand.
- cloudflared access token command now functions correctly with the new token-per-app change from 2021.3.0.


## 2021.3.0

### New Features

- [Cloudflare One Routing](https://developers.cloudflare.com/cloudflare-one/tutorials/warp-to-tunnel) specific commands
  now show up in the `cloudflared tunnel route --help` output.
- There is a new ingress type that allows cloudflared to proxy SOCKS5 as a bastion. You can use it with an ingress
  rule by adding `service: socks-proxy`. Traffic is routed to any destination specified by the SOCKS5 packet but only
  if allowed by a rule. In the following example we allow proxying to a certain CIDR but explicitly forbid one address
  within it:
```
ingress:
  - hostname: socks.example.com
    service: socks-proxy
    originRequest:
      ipRules:
        - prefix: 192.168.1.8/32
          allow: false
        - prefix: 192.168.1.0/24
          ports: [80, 443]
          allow: true
```


### Improvements

- Nested commands, such as `cloudflared tunnel run`, now consider CLI arguments even if they appear earlier on the
  command. For instance, `cloudflared --config config.yaml tunnel run` will now behave the same as
  `cloudflared tunnel --config config.yaml run`
- Warnings are now shown in the output logs whenever cloudflared is running without the most recent version and
  `no-autoupdate` is `true`.
- Access tokens are now stored per Access App instead of per request path. This decreases the number of times that the
  user is required to authenticate with an Access policy redundantly.

### Bug Fixes

- GitHub [PR #317](https://github.com/cloudflare/cloudflared/issues/317) was broken in 2021.2.5 and is now fixed again.

## 2021.2.5

### New Features

- We introduce [Cloudflare One Routing](https://developers.cloudflare.com/cloudflare-one/tutorials/warp-to-tunnel) in
  beta mode. Cloudflare customer can now connect users and private networks with RFC 1918 IP addresses via the
  Cloudflare edge network. Users running Cloudflare WARP client in the same organization can connect to the services
  made available by Argo Tunnel IP routes. Please share your feedback in the GitHub issue tracker.

## 2021.2.4

### Bug Fixes

- Reverts the Improvement released in 2021.2.3 for CLI arguments as it introduced a regression where cloudflared failed
  to read URLs in configuration files.
- cloudflared now logs the reason for failed connections if the error is recoverable.

## 2021.2.3

### Backward Incompatible Changes

- Removes db-connect. The Cloudflare Workers product will continue to support db-connect implementations with versions
  of cloudflared that predate this release and include support for db-connect.

### New Features

- Introduces support for proxy configurations with websockets in arbitrary TCP connections (#318).

### Improvements

- (reverted) Nested command line argument handling.

### Bug Fixes

- The maximum number of upstream connections is now limited by default which should fix reported issues of cloudflared
  exhausting CPU usage when faced with connectivity issues.


================================================
FILE: Dockerfile
================================================
# use a builder image for building cloudflare
ARG TARGET_GOOS
ARG TARGET_GOARCH
FROM golang:1.24.13 AS builder
ENV GO111MODULE=on \
  CGO_ENABLED=0 \
  TARGET_GOOS=${TARGET_GOOS} \
  TARGET_GOARCH=${TARGET_GOARCH} \
  # the CONTAINER_BUILD envvar is used set github.com/cloudflare/cloudflared/metrics.Runtime=virtual
  # which changes how cloudflared binds the metrics server
  CONTAINER_BUILD=1


WORKDIR /go/src/github.com/cloudflare/cloudflared/

# copy our sources into the builder image
COPY . .

# compile cloudflared
RUN make cloudflared

# use a distroless base image with glibc
FROM gcr.io/distroless/base-debian13:nonroot

LABEL org.opencontainers.image.source="https://github.com/cloudflare/cloudflared"

# copy our compiled binary
COPY --from=builder --chown=nonroot /go/src/github.com/cloudflare/cloudflared/cloudflared /usr/local/bin/

# run as nonroot user
# We need to use numeric user id's because Kubernetes doesn't support strings:
# https://github.com/kubernetes/kubernetes/blob/v1.33.2/pkg/kubelet/kuberuntime/security_context_others.go#L49
# The `nonroot` user maps to `65532`, from: https://github.com/GoogleContainerTools/distroless/blob/main/common/variables.bzl#L18
USER 65532:65532

# command / entrypoint of container
ENTRYPOINT ["cloudflared", "--no-autoupdate"]
CMD ["version"]


================================================
FILE: Dockerfile.amd64
================================================
# use a builder image for building cloudflare
FROM golang:1.24.13 AS builder
ENV GO111MODULE=on \
  CGO_ENABLED=0 \
  # the CONTAINER_BUILD envvar is used set github.com/cloudflare/cloudflared/metrics.Runtime=virtual
  # which changes how cloudflared binds the metrics server
  CONTAINER_BUILD=1 

WORKDIR /go/src/github.com/cloudflare/cloudflared/

# copy our sources into the builder image
COPY . .

# compile cloudflared
RUN GOOS=linux GOARCH=amd64 make cloudflared

# use a distroless base image with glibc
FROM gcr.io/distroless/base-debian13:nonroot

LABEL org.opencontainers.image.source="https://github.com/cloudflare/cloudflared"

# copy our compiled binary
COPY --from=builder --chown=nonroot /go/src/github.com/cloudflare/cloudflared/cloudflared /usr/local/bin/

# run as nonroot user
# We need to use numeric user id's because Kubernetes doesn't support strings:
# https://github.com/kubernetes/kubernetes/blob/v1.33.2/pkg/kubelet/kuberuntime/security_context_others.go#L49
# The `nonroot` user maps to `65532`, from: https://github.com/GoogleContainerTools/distroless/blob/main/common/variables.bzl#L18
USER 65532:65532

# command / entrypoint of container
ENTRYPOINT ["cloudflared", "--no-autoupdate"]
CMD ["version"]


================================================
FILE: Dockerfile.arm64
================================================
# use a builder image for building cloudflare
FROM golang:1.24.13 AS builder
ENV GO111MODULE=on \
  CGO_ENABLED=0 \
  # the CONTAINER_BUILD envvar is used set github.com/cloudflare/cloudflared/metrics.Runtime=virtual
  # which changes how cloudflared binds the metrics server
  CONTAINER_BUILD=1

WORKDIR /go/src/github.com/cloudflare/cloudflared/

# copy our sources into the builder image
COPY . .

# compile cloudflared
RUN GOOS=linux GOARCH=arm64 make cloudflared

# use a distroless base image with glibc
FROM gcr.io/distroless/base-debian13:nonroot-arm64

LABEL org.opencontainers.image.source="https://github.com/cloudflare/cloudflared"

# copy our compiled binary
COPY --from=builder --chown=nonroot /go/src/github.com/cloudflare/cloudflared/cloudflared /usr/local/bin/

# run as nonroot user
# We need to use numeric user id's because Kubernetes doesn't support strings:
# https://github.com/kubernetes/kubernetes/blob/v1.33.2/pkg/kubelet/kuberuntime/security_context_others.go#L49
# The `nonroot` user maps to `65532`, from: https://github.com/GoogleContainerTools/distroless/blob/main/common/variables.bzl#L18
USER 65532:65532

# command / entrypoint of container
ENTRYPOINT ["cloudflared", "--no-autoupdate"]
CMD ["version"]


================================================
FILE: LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

================================================
FILE: Makefile
================================================
# The targets cannot be run in parallel
.NOTPARALLEL:

VERSION       := $(shell git describe --tags --always --match "[0-9][0-9][0-9][0-9].*.*")
MSI_VERSION   := $(shell git tag -l --sort=v:refname | grep "w" | tail -1 | cut -c2-)
#MSI_VERSION expects the format of the tag to be: (wX.X.X). Starts with the w character to not break cfsetup.
#e.g. w3.0.1 or w4.2.10. It trims off the w character when creating the MSI.

ifeq ($(ORIGINAL_NAME), true)
	# Used for builds that want FIPS compilation but want the artifacts generated to still have the original name.
	BINARY_NAME := cloudflared
else ifeq ($(FIPS), true)
	# Used for FIPS compliant builds that do not match the case above.
	BINARY_NAME := cloudflared-fips
else
	# Used for all other (non-FIPS) builds.
	BINARY_NAME := cloudflared
endif

ifeq ($(NIGHTLY), true)
	DEB_PACKAGE_NAME := $(BINARY_NAME)-nightly
	NIGHTLY_FLAGS := --conflicts cloudflared --replaces cloudflared
else
	DEB_PACKAGE_NAME := $(BINARY_NAME)
endif

# Use git in windows since we don't have access to the `date` tool
ifeq ($(TARGET_OS), windows)
	DATE := $(shell git log -1 --format="%ad" --date=format-local:'%Y-%m-%dT%H:%M UTC' -- RELEASE_NOTES)
else
	DATE := $(shell date -u -r RELEASE_NOTES '+%Y-%m-%d-%H:%M UTC')
endif

VERSION_FLAGS := -X "main.Version=$(VERSION)" -X "main.BuildTime=$(DATE)"
ifdef PACKAGE_MANAGER
	VERSION_FLAGS := $(VERSION_FLAGS) -X "github.com/cloudflare/cloudflared/cmd/cloudflared/updater.BuiltForPackageManager=$(PACKAGE_MANAGER)"
endif

ifdef CONTAINER_BUILD
	VERSION_FLAGS := $(VERSION_FLAGS) -X "github.com/cloudflare/cloudflared/metrics.Runtime=virtual"
endif

LINK_FLAGS :=
ifeq ($(FIPS), true)
	LINK_FLAGS := -linkmode=external -extldflags=-static $(LINK_FLAGS)
	# Prevent linking with libc regardless of CGO enabled or not.
	GO_BUILD_TAGS := $(GO_BUILD_TAGS) osusergo netgo fips
	VERSION_FLAGS := $(VERSION_FLAGS) -X "main.BuildType=FIPS"
endif

LDFLAGS := -ldflags='$(VERSION_FLAGS) $(LINK_FLAGS)'
ifneq ($(GO_BUILD_TAGS),)
	GO_BUILD_TAGS := -tags "$(GO_BUILD_TAGS)"
endif

ifeq ($(debug), 1)
	GO_BUILD_TAGS += -gcflags="all=-N -l"
endif

IMPORT_PATH    := github.com/cloudflare/cloudflared
PACKAGE_DIR    := $(CURDIR)/packaging
PREFIX         := /usr
INSTALL_BINDIR := $(PREFIX)/bin/
INSTALL_MANDIR := $(PREFIX)/share/man/man1/

LOCAL_ARCH ?= $(shell uname -m)
ifneq ($(GOARCH),)
    TARGET_ARCH ?= $(GOARCH)
else ifeq ($(LOCAL_ARCH),x86_64)
    TARGET_ARCH ?= amd64
else ifeq ($(LOCAL_ARCH),amd64)
    TARGET_ARCH ?= amd64
else ifeq ($(LOCAL_ARCH),386)
    TARGET_ARCH ?= 386
else ifeq ($(LOCAL_ARCH),i686)
    TARGET_ARCH ?= amd64
else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 5),armv8)
    TARGET_ARCH ?= arm64
else ifeq ($(LOCAL_ARCH),aarch64)
    TARGET_ARCH ?= arm64
else ifeq ($(LOCAL_ARCH),arm64)
    TARGET_ARCH ?= arm64
else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 4),armv)
    TARGET_ARCH ?= arm
else ifeq ($(LOCAL_ARCH),s390x)
    TARGET_ARCH ?= s390x
else
    $(error This system's architecture $(LOCAL_ARCH) isn't supported)
endif

LOCAL_OS ?= $(shell go env GOOS)
ifeq ($(LOCAL_OS),linux)
    TARGET_OS ?= linux
else ifeq ($(LOCAL_OS),darwin)
    TARGET_OS ?= darwin
else ifeq ($(LOCAL_OS),windows)
    TARGET_OS ?= windows
else ifeq ($(LOCAL_OS),freebsd)
    TARGET_OS ?= freebsd
else ifeq ($(LOCAL_OS),openbsd)
    TARGET_OS ?= openbsd
else
    $(error This system's OS $(LOCAL_OS) isn't supported)
endif

ifeq ($(TARGET_OS), windows)
	EXECUTABLE_PATH=./$(BINARY_NAME).exe
else
	EXECUTABLE_PATH=./$(BINARY_NAME)
endif

ifeq ($(FLAVOR), centos-7)
	TARGET_PUBLIC_REPO ?= el7
else
	TARGET_PUBLIC_REPO ?= $(FLAVOR)
endif

ifneq ($(TARGET_ARM), )
	ARM_COMMAND := GOARM=$(TARGET_ARM)
endif

ifeq ($(TARGET_ARM), 7)
	PACKAGE_ARCH := armhf
else
	PACKAGE_ARCH := $(TARGET_ARCH)
endif

#for FIPS compliance, FPM defaults to MD5.
RPM_DIGEST := --rpm-digest sha256

GO_TEST_LOG_OUTPUT = /tmp/gotest.log

.PHONY: all
all: cloudflared test

.PHONY: clean
clean:
	go clean

.PHONY: vulncheck
vulncheck:
	@./.ci/scripts/vuln-check.sh

.PHONY: cloudflared
cloudflared:
ifeq ($(FIPS), true)
	$(info Building cloudflared with go-fips)
endif
	GOOS=$(TARGET_OS) GOARCH=$(TARGET_ARCH) $(ARM_COMMAND) go build -mod=vendor $(GO_BUILD_TAGS) $(LDFLAGS) $(IMPORT_PATH)/cmd/cloudflared
ifeq ($(FIPS), true)
	./check-fips.sh cloudflared
endif

.PHONY: container
container:
	docker build --build-arg=TARGET_ARCH=$(TARGET_ARCH) --build-arg=TARGET_OS=$(TARGET_OS) -t cloudflare/cloudflared-$(TARGET_OS)-$(TARGET_ARCH):"$(VERSION)" .

.PHONY: generate-docker-version
generate-docker-version:
	echo latest $(VERSION) > versions


.PHONY: test
test: vet
	$Q go test -json -v -mod=vendor -race $(LDFLAGS) ./... 2>&1 | tee $(GO_TEST_LOG_OUTPUT)
ifneq ($(FIPS), true)
	@go run -mod=readonly github.com/gotesttools/gotestfmt/v2/cmd/gotestfmt@latest -input $(GO_TEST_LOG_OUTPUT)
endif

.PHONY: cover
cover:
	@echo ""
	@echo "=====> Total test coverage: <====="
	@echo ""
	# Print the overall coverage here for quick access.
	$Q go tool cover -func ".cover/c.out" | grep "total:" | awk '{print $$3}'
	# Generate the HTML report that can be viewed from the browser in CI.
	$Q go tool cover -html ".cover/c.out" -o .cover/all.html

.PHONY: fuzz
fuzz:
	@go test -fuzz=FuzzIPDecoder -fuzztime=600s ./packet
	@go test -fuzz=FuzzICMPDecoder -fuzztime=600s ./packet
	@go test -fuzz=FuzzSessionWrite -fuzztime=600s ./quic/v3
	@go test -fuzz=FuzzSessionRead -fuzztime=600s ./quic/v3
	@go test -fuzz=FuzzRegistrationDatagram -fuzztime=600s ./quic/v3
	@go test -fuzz=FuzzPayloadDatagram -fuzztime=600s ./quic/v3
	@go test -fuzz=FuzzRegistrationResponseDatagram -fuzztime=600s ./quic/v3
	@go test -fuzz=FuzzNewIdentity -fuzztime=600s ./tracing
	@go test -fuzz=FuzzNewAccessValidator -fuzztime=600s ./validation

cloudflared.1: cloudflared_man_template
	sed -e 's/\$${VERSION}/$(VERSION)/; s/\$${DATE}/$(DATE)/' cloudflared_man_template > cloudflared.1

install: cloudflared cloudflared.1
	mkdir -p $(DESTDIR)$(INSTALL_BINDIR) $(DESTDIR)$(INSTALL_MANDIR)
	install -m755 cloudflared $(DESTDIR)$(INSTALL_BINDIR)/cloudflared
	install -m644 cloudflared.1 $(DESTDIR)$(INSTALL_MANDIR)/cloudflared.1

# When we build packages, the package name will be FIPS-aware.
# But we keep the binary installed by it to be named "cloudflared" regardless.
define build_package
	mkdir -p $(PACKAGE_DIR)
	cp cloudflared $(PACKAGE_DIR)/cloudflared
	cp cloudflared.1 $(PACKAGE_DIR)/cloudflared.1
	fpm -C $(PACKAGE_DIR) -s dir -t $(1) \
		--description 'Cloudflare Tunnel daemon' \
		--vendor 'Cloudflare' \
		--license 'Apache License Version 2.0' \
		--url 'https://github.com/cloudflare/cloudflared' \
		-m 'Cloudflare <support@cloudflare.com>' \
	    -a $(PACKAGE_ARCH) -v $(VERSION) -n $(DEB_PACKAGE_NAME) $(RPM_DIGEST) $(NIGHTLY_FLAGS) --after-install postinst.sh --after-remove postrm.sh \
		cloudflared=$(INSTALL_BINDIR) cloudflared.1=$(INSTALL_MANDIR)
endef

.PHONY: cloudflared-deb
cloudflared-deb: cloudflared cloudflared.1
	$(call build_package,deb)

.PHONY: cloudflared-rpm
cloudflared-rpm: cloudflared cloudflared.1
	$(call build_package,rpm)

.PHONY: cloudflared-msi
cloudflared-msi:
	wixl --define Version=$(VERSION) --define Path=$(EXECUTABLE_PATH) --output cloudflared-$(VERSION)-$(TARGET_ARCH).msi cloudflared.wxs

.PHONY: github-release-dryrun
github-release-dryrun:
	python3 github_release.py --path $(PWD)/built_artifacts --release-version $(VERSION) --dry-run

.PHONY: github-release
github-release:
	python3 github_release.py --path $(PWD)/artifacts/ --release-version $(VERSION)
	python3 github_message.py --release-version $(VERSION)

.PHONY: r2-linux-release
r2-linux-release:
	python3 ./release_pkgs.py

.PHONY: r2-next-linux-release
# Publishes to a separate R2 repository during GPG key rollover, using dual-key signing.
r2-next-linux-release:
	python3 ./release_pkgs.py --upload-repo-file

.PHONY: capnp
capnp:
	which capnp  # https://capnproto.org/install.html
	which capnpc-go  # go install zombiezen.com/go/capnproto2/capnpc-go@latest
	capnp compile -ogo tunnelrpc/proto/tunnelrpc.capnp tunnelrpc/proto/quic_metadata_protocol.capnp

.PHONY: vet
vet:
	$Q go vet -mod=vendor github.com/cloudflare/cloudflared/...

.PHONY: fmt
fmt:
	@goimports -l -w -local github.com/cloudflare/cloudflared $$(go list -mod=vendor -f '{{.Dir}}' -a ./... | fgrep -v tunnelrpc/proto)
	@go fmt $$(go list -mod=vendor -f '{{.Dir}}' -a ./... | fgrep -v tunnelrpc/proto)

.PHONY: fmt-check
fmt-check:
	@./.ci/scripts/fmt-check.sh

.PHONY: lint
lint:
	@golangci-lint run

.PHONY: mocks
mocks:
	go generate mocks/mockgen.go

.PHONY: ci-build
ci-build:
	@GOOS=linux GOARCH=amd64 $(MAKE) cloudflared
	@mkdir -p artifacts
	@mv cloudflared artifacts/cloudflared

.PHONY: ci-fips-build
ci-fips-build:
	@FIPS=true GOOS=linux GOARCH=amd64 $(MAKE) cloudflared
	@mkdir -p artifacts
	@mv cloudflared artifacts/cloudflared

.PHONY: ci-test
ci-test: fmt-check lint test
	@go run -mod=readonly github.com/jstemmer/go-junit-report/v2@latest -in $(GO_TEST_LOG_OUTPUT) -parser gojson -out report.xml -set-exit-code

.PHONY: ci-fips-test
ci-fips-test:
	@FIPS=true $(MAKE) ci-test


================================================
FILE: README.md
================================================
# Cloudflare Tunnel client

Contains the command-line client for Cloudflare Tunnel, a tunneling daemon that proxies traffic from the Cloudflare network to your origins.
This daemon sits between Cloudflare network and your origin (e.g. a webserver). Cloudflare attracts client requests and sends them to you
via this daemon, without requiring you to poke holes on your firewall --- your origin can remain as closed as possible.
Extensive documentation can be found in the [Cloudflare Tunnel section](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel) of the Cloudflare Docs.
All usages related with proxying to your origins are available under `cloudflared tunnel help`.

You can also use `cloudflared` to access Tunnel origins (that are protected with `cloudflared tunnel`) for TCP traffic
at Layer 4 (i.e., not HTTP/websocket), which is relevant for use cases such as SSH, RDP, etc.
Such usages are available under `cloudflared access help`.

You can instead use [WARP client](https://developers.cloudflare.com/warp-client/)
to access private origins behind Tunnels for Layer 4 traffic without requiring `cloudflared access` commands on the client side.


## Before you get started

Before you use Cloudflare Tunnel, you'll need to complete a few steps in the Cloudflare dashboard: you need to add a
website to your Cloudflare account. Note that today it is possible to use Tunnel without a website (e.g. for private
routing), but for legacy reasons this requirement is still necessary:
1. [Add a website to Cloudflare](https://developers.cloudflare.com/fundamentals/manage-domains/add-site/)
2. [Change your domain nameservers to Cloudflare](https://developers.cloudflare.com/dns/zone-setups/full-setup/setup/)


## Installing `cloudflared`

Downloads are available as standalone binaries, a Docker image, and Debian, RPM, and Homebrew packages. You can also find releases [here](https://github.com/cloudflare/cloudflared/releases) on the `cloudflared` GitHub repository.

* You can [install on macOS](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/#macos) via Homebrew or by downloading the [latest Darwin amd64 release](https://github.com/cloudflare/cloudflared/releases)
* Binaries, Debian, and RPM packages for Linux [can be found here](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/#linux)
* A Docker image of `cloudflared` is [available on DockerHub](https://hub.docker.com/r/cloudflare/cloudflared)
* You can install on Windows machines with the [steps here](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/#windows)
* To build from source, install the required version of go, mentioned in the [Development](#development) section below. Then you can run `make cloudflared`.

User documentation for Cloudflare Tunnel can be found at https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/


## Creating Tunnels and routing traffic

Once installed, you can authenticate `cloudflared` into your Cloudflare account and begin creating Tunnels to serve traffic to your origins.

* Create a Tunnel with [these instructions](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/)
* Route traffic to that Tunnel:
  * Via public [DNS records in Cloudflare](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/dns/)
  * Or via a public hostname guided by a [Cloudflare Load Balancer](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/public-load-balancers/)
  * Or from [WARP client private traffic](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/)


## TryCloudflare

Want to test Cloudflare Tunnel before adding a website to Cloudflare? You can do so with TryCloudflare using the documentation [available here](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/do-more-with-tunnels/trycloudflare/).

## Deprecated versions

Cloudflare currently supports versions of cloudflared that are **within one year** of the most recent release. Breaking changes unrelated to feature availability may be introduced that will impact versions released more than one year ago. You can read more about upgrading cloudflared in our [developer documentation](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/update-cloudflared/).

For example, as of January 2023 Cloudflare will support cloudflared version 2023.1.1 to cloudflared 2022.1.1.

## Development

### Requirements
- [GNU Make](https://www.gnu.org/software/make/)
- [capnp](https://capnproto.org/install.html)
- [go >= 1.24](https://go.dev/doc/install)
- Optional tools:
  - [capnpc-go](https://pkg.go.dev/zombiezen.com/go/capnproto2/capnpc-go)
  - [goimports](https://pkg.go.dev/golang.org/x/tools/cmd/goimports)
  - [golangci-lint](https://github.com/golangci/golangci-lint)
  - [gomocks](https://pkg.go.dev/go.uber.org/mock)

### Build
To build cloudflared locally run `make cloudflared`

### Test
To locally run the tests run `make test`

### Linting
To format the code and keep a good code quality use `make fmt` and `make lint`

### Mocks
After changes on interfaces you might need to regenerate the mocks, so run `make mock`


================================================
FILE: RELEASE_NOTES
================================================
2026.3.0
- 2026-03-05 TUN-10292: Add cloudflared management token command
- 2026-03-03 chore: Addressing small fixes and typos
- 2026-03-03 fix: Update go-sentry and go-oidc to address CVE's
- 2026-02-24 TUN-10258: add agents.md
- 2026-02-23 TUN-10267: Update mods to fix CVE GO-2026-4394
- 2026-02-20 TUN-10247: Update tail command to use /management/logs endpoint
- 2026-02-11 TUN-9858: Add more information to proxy-dns removal message

2026.2.0
- 2026-02-06 TUN-10216: TUN fix cloudflare vulnerabilities GO-2026-4340 and GO-2026-4341
- 2026-02-02 TUN-9858: Remove proxy-dns feature from cloudflared

2026.1.2
- 2026-01-23 Revert "TUN-9863: Update pipelines to use cloudflared EV Certificate"
- 2026-01-21 Revert "TUN-9886 notarize cloudflared"
- 2025-12-12 TUN-9886 notarize cloudflared

2026.1.1
- 2026-01-19 fix: Update boto3 to run on trixie
- 2026-01-19 fix: Fix wixl bundling tool for windows msi packages
- 2026-01-19 fix: rpm bundling and rpm key import

2026.1.0
- 2026-01-13 TUN-10162: Update go to 1.24.11 and Debian distroless to debian13
- 2025-11-21 Replace jira.cfops.it with jira.cfdata.org in connection/http2_test.go
- 2025-11-19 TUN-9863: Update pipelines to use cloudflared EV Certificate
- 2025-11-07 TUN-9800: Migrate apt internal builds to Gitlab
- 2025-11-04 TUN-9998: Don't need to read origin cert to determine if the endpoint is fedramp
- 2025-10-13 TUN-9910: Make the metadata key to carry HTTP status over QUIC transport a constant

2025.11.1
- 2025-11-07 TUN-9800: Fix docker hub push step

2025.11.0
- 2025-11-06 TUN-9863: Introduce Code Signing for Windows Builds
- 2025-11-06 TUN-9800: Prefix gitlab steps with operating system
- 2025-11-04 chore: Update cloudflared signing key name in index.html
- 2025-10-31 chore: add claude review
- 2025-10-31 Chore: Update documentation links in README
- 2025-10-31 TUN-9800: Add pipelines for linux packaging

2025.10.1
- 2025-10-30 chore: Update ci image to use goboring 1.24.9
- 2025-10-28 TUN-9849: Add cf-proxy-* to control response headers
- 2025-10-24 TUN-9961: Add pkg.cloudflared.com index.html to git repo
- 2025-10-23 TUN-9954: Update from go1.24.6 to go1.24.9
- 2025-10-23 Fix systemd service installation hanging
- 2025-10-21 TUN-9941: Use new GPG key for RPM builds
- 2025-10-21 TUN-9941: Fix typo causing r2-release-next deployment to fail
- 2025-10-21 TUN-9941: Lookup correct key for RPM signature
- 2025-10-15 TUN-9919: Make RPM postinstall scriplet idempotent
- 2025-10-14 TUN-9916: Fix the cloudflared binary path used in the component test

2025.10.0
- 2025-10-14 chore: Fix upload of RPM repo file during double signing
- 2025-10-13 TUN-9882: Bump datagram v3 write channel capacity
- 2025-10-10 chore: Fix import of GPG keys when two keys are provided
- 2025-10-10 chore: Fix parameter order when uploading RPM .repo file to R2
- 2025-10-10 TUN-9883: Add new datagram v3 feature flag
- 2025-10-09 chore: Force usage of go-boring 1.24
- 2025-10-08 TUN-9882: Improve metrics for datagram v3
- 2025-10-07 GRC-16749: Add fedramp tags to catalog
- 2025-10-07 TUN-9882: Add buffers for UDP and ICMP datagrams in datagram v3
- 2025-10-07 TUN-9882: Add write deadline for UDP origin writes
- 2025-09-29 TUN-9776: Support signing Debian packages with two keys for rollover
- 2025-09-22 TUN-9800: Add pipeline to sync between gitlab and github repos

2025.9.1
- 2025-09-22 TUN-9855: Create script to ignore vulnerabilities from govuln check
- 2025-09-19 TUN-9852: Remove fmt.Println from cloudflared access command

2025.9.0
- 2025-09-15 TUN-9820: Add support for FedRAMP in originRequest Access config
- 2025-09-11 TUN-9800: Migrate cloudflared-ci pipelines to Gitlab CI
- 2025-09-04 TUN-9803: Add windows builds to gitlab-ci
- 2025-08-27 TUN-9755: Set endpoint in tunnel credentials when generating locally managed tunnel with a Fed token

2025.8.1
- 2025-08-19 AUTH-7480 update fed callback url for login helper
- 2025-08-19 CUSTESC-53681: Correct QUIC connection management for datagram handlers
- 2025-08-12 AUTH-7260: Add support for login interstitial auto closure

2025.8.0
- 2025-08-07 vuln: Fix GO-2025-3770 vulnerability
- 2025-07-23 TUN-9583: set proper url and hostname for cloudflared tail command
- 2025-07-07 TUN-9542: Remove unsupported Debian-based releases

2025.7.0
- 2025-07-03 TUN-9540: Use numeric user id for Dockerfiles
- 2025-07-01 TUN-9161: Remove P256Kyber768Draft00PQKex curve from nonFips curve preferences
- 2025-07-01 TUN-9531: Bump go-boring from 1.24.2 to 1.24.4
- 2025-07-01 TUN-9511: Add metrics for virtual DNS origin
- 2025-06-30 TUN-9470: Add OriginDialerService to include TCP
- 2025-06-30 TUN-9473: Add --dns-resolver-addrs flag
- 2025-06-27 TUN-9472: Add virtual DNS service
- 2025-06-23 TUN-9469: Centralize UDP origin proxy dialing as ingress service

2025.6.1
- 2025-06-16 TUN-9467: add vulncheck to cloudflared
- 2025-06-16 TUN-9495: Remove references to cloudflare-go
- 2025-06-16 TUN-9371: Add logging format as JSON
- 2025-06-12 TUN-9467: bump coredns to solve CVE

2025.6.0
- 2025-06-06 TUN-9016: update go to 1.24
- 2025-06-05 TUN-9171: Use `is_default_network` instead of `is_default` to create vnet's

2025.5.0
- 2025-05-14 TUN-9319: Add dynamic loading of features to connections via ConnectionOptionsSnapshot
- 2025-05-13 TUN-9322: Add metric for unsupported RPC commands for datagram v3
- 2025-05-07 TUN-9291: Remove dynamic reloading of features for datagram v3

2025.4.2
- 2025-04-30 chore: Do not use gitlab merge request pipelines
- 2025-04-30 DEVTOOLS-16383: Create GitlabCI pipeline to release Mac builds
- 2025-04-24 TUN-9255: Improve flush on write conditions in http2 tunnel type to match what is done on the edge
- 2025-04-10 SDLC-3727 - Adding FIPS status to backstage

2025.4.0
- 2025-04-02 Fix broken links in `cmd/cloudflared/*.go` related to running tunnel as a service
- 2025-04-02 chore: remove repetitive words
- 2025-04-01 Fix messages to point to one.dash.cloudflare.com
- 2025-04-01 feat: emit explicit errors for the `service` command on unsupported OSes
- 2025-04-01 Use RELEASE_NOTES date instead of build date
- 2025-04-01 chore: Update tunnel configuration link in the readme
- 2025-04-01 fix: expand home directory for credentials file
- 2025-04-01 fix: Use path and filepath operation appropriately
- 2025-04-01 feat: Adds a new command line for tunnel run for token file
- 2025-04-01 chore: fix linter rules
- 2025-03-17 TUN-9101: Don't ignore errors on `cloudflared access ssh`
- 2025-03-06 TUN-9089: Pin go import to v0.30.0, v0.31.0 requires go 1.23

2025.2.1
- 2025-02-26 TUN-9016: update base-debian to v12
- 2025-02-25 TUN-8960: Connect to FED API GW based on the OriginCert's endpoint
- 2025-02-25 TUN-9007: modify logic to resolve region when the tunnel token has an endpoint field
- 2025-02-13 SDLC-3762: Remove backstage.io/source-location from catalog-info.yaml
- 2025-02-06 TUN-8914: Create a flags module to group all cloudflared cli flags

2025.2.0
- 2025-02-03 TUN-8914: Add a new configuration to locally override the max-active-flows
- 2025-02-03 Bump x/crypto to 0.31.0

2025.1.1
- 2025-01-30 TUN-8858: update go to 1.22.10 and include quic-go FIPS changes
- 2025-01-30 TUN-8855: fix lint issues
- 2025-01-30 TUN-8855: Update PQ curve preferences
- 2025-01-30 TUN-8857: remove restriction for using FIPS and PQ
- 2025-01-30 TUN-8894: report FIPS+PQ error to Sentry when dialling to the edge
- 2025-01-22 TUN-8904: Rename Connect Response Flow Rate Limited metadata
- 2025-01-21 AUTH-6633 Fix cloudflared access login + warp as auth
- 2025-01-20 TUN-8861: Add session limiter to UDP session manager
- 2025-01-20 TUN-8861: Rename Session Limiter to Flow Limiter
- 2025-01-17 TUN-8900: Add import of Apple Developer Certificate Authority to macOS Pipeline
- 2025-01-17 TUN-8871: Accept login flag to authenticate with Fedramp environment
- 2025-01-16 TUN-8866: Add linter to cloudflared repository
- 2025-01-14 TUN-8861: Add session limiter to TCP session manager
- 2025-01-13 TUN-8861: Add configuration for active sessions limiter
- 2025-01-09 TUN-8848: Don't treat connection shutdown as an error condition when RPC server is done

2025.1.0
- 2025-01-06 TUN-8842: Add Ubuntu Noble and 'any' debian distributions to release script
- 2025-01-06 TUN-8807: Add support_datagram_v3 to remote feature rollout
- 2024-12-20 TUN-8829: add CONTAINER_BUILD to dockerfiles

2024.12.2
- 2024-12-19 TUN-8822: Prevent concurrent usage of ICMPDecoder
- 2024-12-18 TUN-8818: update changes document to reflect newly added diag subcommand
- 2024-12-17 TUN-8817: Increase close session channel by one since there are two writers
- 2024-12-13 TUN-8797: update CHANGES.md with note about semi-deterministic approach used to bind metrics server
- 2024-12-13 TUN-8724: Add CLI command for diagnostic procedure
- 2024-12-11 TUN-8786: calculate cli flags once for the diagnostic procedure
- 2024-12-11 TUN-8792: Make diag/system endpoint always return a JSON
- 2024-12-10 TUN-8783: fix log collectors for the diagnostic procedure
- 2024-12-10 TUN-8785: include the icmp sources in the diag's tunnel state
- 2024-12-10 TUN-8784: Set JSON encoder options to print formatted JSON when writing diag files

2024.12.1
- 2024-12-10 TUN-8795: update createrepo to createrepo_c to fix the release_pkgs.py script

2024.12.0
- 2024-12-09 TUN-8640: Add ICMP support for datagram V3
- 2024-12-09 TUN-8789: make python package installation consistent
- 2024-12-06 TUN-8781: Add Trixie, drop Buster. Default to Bookworm
- 2024-12-05 TUN-8775: Make sure the session Close can only be called once
- 2024-12-04 TUN-8725: implement diagnostic procedure
- 2024-12-04 TUN-8767: include raw output from network collector in diagnostic zipfile
- 2024-12-04 TUN-8770: add cli configuration and tunnel configuration to diagnostic zipfile
- 2024-12-04 TUN-8768: add job report to diagnostic zipfile
- 2024-12-03 TUN-8726: implement compression routine to be used in diagnostic procedure
- 2024-12-03 TUN-8732: implement port selection algorithm
- 2024-12-03 TUN-8762: fix argument order when invoking tracert and modify network info output parsing.
- 2024-12-03 TUN-8769: fix k8s log collector arguments
- 2024-12-03 TUN-8727: extend client to include function to get cli configuration and tunnel configuration
- 2024-11-29 TUN-8729: implement network collection for diagnostic procedure
- 2024-11-29 TUN-8727: implement metrics, runtime, system, and tunnelstate in diagnostic http client
- 2024-11-27 TUN-8733: add log collection for docker
- 2024-11-27 TUN-8734: add log collection for kubernetes
- 2024-11-27 TUN-8640: Refactor ICMPRouter to support new ICMPResponders
- 2024-11-26 TUN-8735: add managed/local log collection
- 2024-11-25 TUN-8728: implement diag/tunnel endpoint
- 2024-11-25 TUN-8730: implement diag/configuration
- 2024-11-22 TUN-8737: update metrics server port selection
- 2024-11-22 TUN-8731: Implement diag/system endpoint
- 2024-11-21 TUN-8748: Migrated datagram V3 flows to use migrated context

2024.11.1
- 2024-11-18 Add cloudflared tunnel ready command
- 2024-11-14 Make metrics a requirement for tunnel ready command
- 2024-11-12 TUN-8701:  Simplify flow registration logs for datagram v3
- 2024-11-11 add: new go-fuzz targets
- 2024-11-07 TUN-8701: Add metrics and adjust logs for datagram v3
- 2024-11-06 TUN-8709: Add session migration for datagram v3
- 2024-11-04 Fixed 404 in README.md to TryCloudflare
- 2024-09-24 Update semgrep.yml

2024.11.0
- 2024-11-05 VULN-66059: remove ssh server tests
- 2024-11-04 TUN-8700: Add datagram v3 muxer
- 2024-11-04 TUN-8646: Allow experimental feature support for datagram v3
- 2024-11-04 TUN-8641: Expose methods to simplify V3 Datagram parsing on the edge
- 2024-10-31 TUN-8708: Bump python min version to 3.10
- 2024-10-31 TUN-8667: Add datagram v3 session manager
- 2024-10-25 TUN-8692: remove dashes from session id
- 2024-10-24 TUN-8694: Rework release script
- 2024-10-24 TUN-8661: Refactor connection methods to support future different datagram muxing methods
- 2024-07-22 TUN-8553: Bump go to 1.22.5 and go-boring 1.22.5-1

2024.10.1
- 2024-10-23 TUN-8694: Fix github release script
- 2024-10-21 Revert "TUN-8592: Use metadata from the edge to determine if request body is empty for QUIC transport"
- 2024-10-18 TUN-8688: Correct UDP bind for IPv6 edge connectivity on macOS
- 2024-10-17 TUN-8685: Bump coredns dependency
- 2024-10-16 TUN-8638: Add datagram v3 serializers and deserializers
- 2024-10-15 chore: Remove h2mux code
- 2024-10-11 TUN-8631: Abort release on version mismatch

2024.10.0
- 2024-10-01 TUN-8646: Add datagram v3 support feature flag
- 2024-09-30 TUN-8621: Fix cloudflared version in change notes to account for release date
- 2024-09-19 Adding semgrep yaml file
- 2024-09-12 TUN-8632: Delay checking auto-update by the provided frequency
- 2024-09-11 TUN-8630: Check checksum of downloaded binary to compare to current for auto-updating
- 2024-09-09 TUN-8629: Cloudflared update on Windows requires running it twice to update
- 2024-09-06 PPIP-2310: Update quick tunnel disclaimer
- 2024-08-30 TUN-8621: Prevent QUIC connection from closing before grace period after unregistering
- 2024-08-09 TUN-8592: Use metadata from the edge to determine if request body is empty for QUIC transport
- 2024-06-26 TUN-8484: Print response when QuickTunnel can't be unmarshalled

2024.9.1
- 2024-09-10 Revert Release 2024.9.0

2024.9.0
- 2024-09-10 TUN-8621: Fix cloudflared version in change notes.
- 2024-09-06 PPIP-2310: Update quick tunnel disclaimer
- 2024-08-30 TUN-8621: Prevent QUIC connection from closing before grace period after unregistering
- 2024-08-09 TUN-8592: Use metadata from the edge to determine if request body is empty for QUIC transport
- 2024-06-26 TUN-8484: Print response when QuickTunnel can't be unmarshalled

2024.8.3
- 2024-08-15 TUN-8591 login command without extra text
- 2024-03-25 remove code that will not be executed
- 2024-03-25 remove code that will not be executed

2024.8.2
- 2024-08-05 TUN-8583: change final directory of artifacts
- 2024-08-05 TUN-8585: Avoid creating GH client when dry-run is true

2024.7.3
- 2024-07-31 TUN-8546: Fix final artifacts paths

2024.7.2
- 2024-07-17 TUN-8546: rework MacOS build script

2024.7.1
- 2024-07-16 TUN-8543: use -p flag to create intermediate directories

2024.7.0
- 2024-07-05 TUN-8520: add macos arm64 build
- 2024-07-05 TUN-8523: refactor makefile and cfsetup
- 2024-07-02 TUN-8504: Use pre-installed python version instead of downloading it on Windows builds
- 2024-06-26 TUN-8489: Add default noop logger for capnprpc
- 2024-06-25 TUN-8487: Add user-agent for quick-tunnel requests
- 2023-12-12 TUN-8057: cloudflared uses new PQ curve ID

2024.6.1
- 2024-06-12 TUN-8461: Don't log Failed to send session payload if the error is EOF
- 2024-06-07 TUN-8456: Update quic-go to 0.45 and collect mtu and congestion control metrics
- 2024-06-06 TUN-8452: Add flag to control QUIC stream-level flow control limit
- 2024-06-06 TUN-8451: Log QUIC flow control frames and transport parameters received
- 2024-06-05 TUN-8449: Add flag to control QUIC connection-level flow control limit and increase default to 30MB

2024.6.0
- 2024-05-30 TUN-8441: Correct UDP total sessions metric to a counter and add new ICMP metrics
- 2024-05-28 TUN-8422: Add metrics for capnp method calls
- 2024-05-24 TUN-8424: Refactor capnp registration server
- 2024-05-23 TUN-8427: Fix BackoffHandler's internally shared clock structure
- 2024-05-21 TUN-8425: Remove ICMP binding for quick tunnels
- 2024-05-20 TUN-8423: Deprecate older legacy tunnel capnp interfaces
- 2024-05-15 TUN-8419: Add capnp safe transport
- 2024-05-13 TUN-8415: Refactor capnp rpc into a single module

2024.5.0
- 2024-05-07 TUN-8407: Upgrade go to version 1.22.2

2024.4.1
- 2024-04-22 TUN-8380: Add sleep before requesting quick tunnel as temporary fix for component tests
- 2024-04-19 TUN-8374: Close UDP socket if registration fails
- 2024-04-18 TUN-8371: Bump quic-go to v0.42.0
- 2024-04-03 TUN-8333: Bump go-jose dependency to v4
- 2024-04-02 TUN-8331: Add unit testing for AccessJWTValidator middleware

2024.4.0
- 2024-04-02 feat: provide short version (#1206)
- 2024-04-02 Format code
- 2024-01-18 feat: auto tls sni
- 2023-12-24 fix checkInPingGroup bugs
- 2023-12-15 Add environment variables for TCP tunnel hostname / destination / URL.

2024.3.0
- 2024-03-14 TUN-8281: Run cloudflared query list tunnels/routes endpoint in a paginated way
- 2024-03-13 TUN-8297: Improve write timeout logging on safe_stream.go
- 2024-03-07 TUN-8290: Remove `|| true` from postrm.sh
- 2024-03-05 TUN-8275: Skip write timeout log on "no network activity"
- 2024-01-23 Update postrm.sh to fix incomplete uninstall
- 2024-01-05 fix typo in errcheck for response parsing logic in CreateTunnel routine
- 2023-12-23 Update linux_service.go
- 2023-12-07 ci: bump actions/checkout to v4
- 2023-12-07 ci/check: bump actions/setup-go to v5
- 2023-04-28 check.yaml: bump actions/setup-go to v4

2024.2.1
- 2024-02-20 TUN-8242: Update Changes.md file with new remote diagnostics behaviour
- 2024-02-19 TUN-8238: Fix type mismatch introduced by fast-forward
- 2024-02-16 TUN-8243: Collect metrics on the number of QUIC frames sent/received
- 2024-02-15 TUN-8238: Refactor proxy logging
- 2024-02-14 TUN-8242: Enable remote diagnostics by default
- 2024-02-12 TUN-8236: Add write timeout to quic and tcp connections
- 2024-02-09 TUN-8224: Fix safety of TCP stream logging, separate connect and ack log messages

2024.2.0
- 2024-02-07 TUN-8224: Count and collect metrics on stream connect successes/errors

2024.1.5
- 2024-01-22 TUN-8176: Support ARM platforms that don't have an FPU or have it enabled in kernel
- 2024-01-15 TUN-8158: Bring back commit e6537418859afcac29e56a39daa08bcabc09e048 and fixes infinite loop on linux when the socket is closed

2024.1.4
- 2024-01-19 Revert "TUN-8158: Add logging to confirm when ICMP reply is returned to the edge"

2024.1.3
- 2024-01-15 TUN-8161: Fix broken ARM build for armv6
- 2024-01-15 TUN-8158: Add logging to confirm when ICMP reply is returned to the edge

2024.1.2
- 2024-01-11 TUN-8147: Disable ECN usage due to bugs in detecting if supported
- 2024-01-11 TUN-8146: Fix export path for install-go command
- 2024-01-11 TUN-8146: Fix Makefile targets should not be run in parallel and install-go script was missing shebang
- 2024-01-10 TUN-8140: Remove homebrew scripts

2024.1.1
- 2024-01-10 TUN-8134: Revert installed prefix to /usr
- 2024-01-09 TUN-8130: Fix path to install go for mac build
- 2024-01-09 TUN-8129: Use the same build command between branch and release builds
- 2024-01-09 TUN-8130: Install go tool chain in /tmp on build agents
- 2024-01-09 TUN-8134: Install cloudflare go as part of make install
- 2024-01-08 TUN-8118: Disable FIPS module to build with go-boring without CGO_ENABLED

2024.1.0
- 2024-01-01 TUN-7934: Update quic-go to a version that queues datagrams for better throughput and drops large datagram
- 2023-12-20 TUN-8072: Need to set GOCACHE in mac go installation script
- 2023-12-17 TUN-8072: Add script to download cloudflare go for Mac build agents
- 2023-12-15 Fix nil pointer dereference segfault when passing "null" config json to cloudflared tunnel ingress validate (#1070)
- 2023-12-15 configuration.go: fix developerPortal link (#960)
- 2023-12-14 tunnelrpc/pogs: fix dropped test errors (#1106)
- 2023-12-14 cmd/cloudflared/updater: fix dropped error (#1055)
- 2023-12-14 use os.Executable to discover the path to cloudflared (#1040)
- 2023-12-14 Remove extraneous `period` from Path Environment Variable (#1009)
- 2023-12-14 Use CLI context when running tunnel (#597)
- 2023-12-14 TUN-8066: Define scripts to build on Windows agents
- 2023-12-11 TUN-8052: Update go to 1.21.5
- 2023-12-07 TUN-7970: Default to enable post quantum encryption for quic transport
- 2023-12-04 TUN-8006: Update quic-go to latest upstream
- 2023-11-15 VULN-44842 Add a flag that allows users to not send the Access JWT to stdout
- 2023-11-13 TUN-7965: Remove legacy incident status page check
- 2023-11-13 AUTH-5682 Org token flow in Access logins should pass CF_AppSession cookie

2023.10.0
- 2023-10-06 TUN-7864: Document cloudflared versions support
- 2023-10-03 CUSTESC-33731: Make rule match test report rule in 0-index base
- 2023-09-22 TUN-7824: Fix usage of systemctl status to detect which services are installed
- 2023-09-20 TUN-7813: Improve tunnel delete command to use cascade delete
- 2023-09-20 TUN-7787: cloudflared only list ip routes targeted for cfd_tunnel
- 2023-09-15 TUN-7787: Refactor cloudflared to use new route endpoints based on route IDs
- 2023-09-08 TUN-7776: Remove warp-routing flag from cloudflared
- 2023-09-05 TUN-7756: Clarify that QUIC is mandatory to support ICMP proxying

2023.8.2
- 2023-08-25 TUN-7700: Implement feature selector to determine if connections will prefer post quantum cryptography
- 2023-08-22 TUN-7707: Use X25519Kyber768Draft00 curve when post-quantum feature is enabled

2023.8.1
- 2023-08-23 TUN-7718: Update R2 Token to no longer encode secret

2023.8.0
- 2023-07-26 TUN-7584: Bump go 1.20.6

2023.7.3
- 2023-07-25 TUN-7628: Correct Host parsing for Access
- 2023-07-24 TUN-7624: Fix flaky TestBackoffGracePeriod test in cloudflared

2023.7.2
- 2023-07-19 TUN-7599: Onboard cloudflared to Software Dashboard
- 2023-07-19 TUN-7587: Remove junos builds
- 2023-07-18 TUN-7597: Add flag to disable auto-update services to be installed
- 2023-07-17 TUN-7594: Add nightly arm64 cloudflared internal deb publishes
- 2023-07-14 TUN-7586: Upgrade go-jose/go-jose/v3 and core-os/go-oidc/v3
- 2023-07-14 TUN-7589: Remove legacy golang.org/x/crypto/ssh/terminal package usage
- 2023-07-14 TUN-7590: Remove usages of ioutil
- 2023-07-14 TUN-7585: Remove h2mux compression
- 2023-07-14 TUN-7588: Update package coreos/go-systemd

2023.7.1
- 2023-07-13 TUN-7582: Correct changelog wording for --management-diagnostics
- 2023-07-12 TUN-7575: Add option to disable PTMU discovery over QUIC

2023.7.0
- 2023-07-06 TUN-7558: Flush on Writes for StreamBasedOriginProxy
- 2023-07-05 TUN-7553: Add flag to enable management diagnostic services
- 2023-07-05 TUN-7564: Support cf-trace-id for cloudflared access
- 2023-07-05 TUN-7477: Decrement UDP sessions on shutdown
- 2023-07-03 TUN-7545: Add support for full bidirectionally streaming with close signal propagation
- 2023-06-30 TUN-7549: Add metrics route to management service
- 2023-06-30 TUN-7551: Complete removal of raven-go to sentry-go
- 2023-06-30 TUN-7550: Add pprof endpoint to management service
- 2023-06-29 TUN-7543: Add --debug-stream flag to cloudflared access ssh
- 2023-06-26 TUN-6011: Remove docker networks from ICMP Proxy test
- 2023-06-20 AUTH-5328 Pass cloudflared_token_check param when running cloudflared access login

2023.6.1
- 2023-06-19 TUN-7480: Added a timeout for unregisterUDP.
- 2023-06-16 TUN-7477: Add UDP/TCP session metrics
- 2023-06-14 TUN-7468: Increase the limit of incoming streams

2023.6.0
- 2023-06-15 TUN-7471: Fixes cloudflared not closing the quic stream on unregister UDP session
- 2023-06-09 TUN-7463: Add default ingress rule if no ingress rules are provided when updating the configuration
- 2023-05-31 TUN-7447: Add a cover build to report code coverage

2023.5.1
- 2023-05-16 TUN-7424: Add CORS headers to host_details responses
- 2023-05-11 TUN-7421: Add *.cloudflare.com to permitted Origins for management WebSocket requests
- 2023-05-05 TUN-7404: Default configuration version set to -1
- 2023-05-05 TUN-7227: Migrate to devincarr/quic-go

2023.5.0
- 2023-04-27 TUN-7398: Add support for quic safe stream to set deadline
- 2023-04-26 TUN-7394: Retry StartFirstTunnel on quic.ApplicationErrors
- 2023-04-26 TUN-7392: Ignore release checksum upload if asset already uploaded
- 2023-04-25 TUN-7392: Ignore duplicate artifact uploads for github release
- 2023-04-25 TUN-7393: Add json output for cloudflared tail
- 2023-04-24 TUN-7390: Remove Debian stretch builds

2023.4.2
- 2023-04-24 TUN-7133: Add sampling support for streaming logs
- 2023-04-21 TUN-7141: Add component tests for streaming logs
- 2023-04-21 TUN-7373: Streaming logs override for same actor
- 2023-04-20 TUN-7383: Bump requirements.txt
- 2023-04-19 TUN-7361: Add a label to override hostname
- 2023-04-19 TUN-7378: Remove RPC debug logs
- 2023-04-18 TUN-7360: Add Get Host Details handler in management service
- 2023-04-17 AUTH-3122 Verify that Access tokens are still valid in curl command
- 2023-04-17 TUN-7129: Categorize TCP logs for streaming logs
- 2023-04-17 TUN-7130: Categorize UDP logs for streaming logs
- 2023-04-10 AUTH-4887 Add aud parameter to token transfer url

2023.4.1
- 2023-04-13 TUN-7368: Report destination address for TCP requests in logs
- 2023-04-12 TUN-7134: Acquire token for cloudflared tail
- 2023-04-12 TUN-7131: Add cloudflared log event to connection messages and enable streaming logs
- 2023-04-11 TUN-7132 TUN-7136: Add filter support for streaming logs
- 2023-04-06 TUN-7354: Don't warn for empty ingress rules when using --token
- 2023-04-06 TUN-7128: Categorize logs from public hostname locations
- 2023-04-06 TUN-7351: Add streaming logs session ping and timeout
- 2023-04-06 TUN-7335: Fix cloudflared update not working in windows

2023.4.0
- 2023-04-07 TUN-7356: Bump golang.org/x/net package to 0.7.0
- 2023-04-07 TUN-7357: Bump to go 1.19.6
- 2023-04-06 TUN-7127: Disconnect logger level requirement for management
- 2023-04-05 TUN-7332: Remove legacy tunnel force flag
- 2023-04-05 TUN-7135: Add cloudflared tail
- 2023-04-04 Add suport for OpenBSD (#916)
- 2023-04-04 Fix typo (#918)
- 2023-04-04 TUN-7125: Add management streaming logs WebSocket protocol
- 2023-03-30 TUN-9999: Remove classic tunnel component tests
- 2023-03-30 TUN-7126: Add Management logger io.Writer
- 2023-03-29 TUN-7324: Add http.Hijacker to connection.ResponseWriter
- 2023-03-29 TUN-7333: Default features checkable at runtime across all packages
- 2023-03-21 TUN-7124: Add intercept ingress rule for management requests

2023.3.1
- 2023-03-13 TUN-7271: Return 503 status code when no ingress rules configured
- 2023-03-10 TUN-7272: Fix cloudflared returning non supported status service which breaks configuration migration
- 2023-03-09 TUN-7259: Add warning for missing ingress rules
- 2023-03-09 TUN-7268: Default to Program Files as location for win32
- 2023-03-07 TUN-7252: Remove h2mux connection
- 2023-03-07 TUN-7253: Adopt http.ResponseWriter for connection.ResponseWriter
- 2023-03-06 TUN-7245: Add bastion flag to origin service check
- 2023-03-06 EDGESTORE-108: Remove deprecated s3v2 signature
- 2023-03-02 TUN-7226: Fixed a missed rename

2023.3.0
- 2023-03-01 GH-352: Add Tunnel CLI option "edge-bind-address" (#870)
- 2023-03-01 Fixed WIX template to allow MSI upgrades (#838)
- 2023-02-28 TUN-7213: Decode Base64 encoded key before writing it
- 2023-02-28 check.yaml: update actions to v3 (#876)
- 2023-02-27 TUN-7213: Debug homebrew-cloudflare  build
- 2023-02-15 RTG-2476 Add qtls override for Go 1.20

2023.2.2
- 2023-02-22 TUN-7197: Add connIndex tag to debug messages of incoming requests
- 2023-02-08 TUN-7167: Respect protocol overrides with --token
- 2023-02-06 TUN-7065: Remove classic tunnel creation
- 2023-02-06 TUN-6938: Force h2mux protocol to http2 for named tunnels
- 2023-02-06 TUN-6938: Provide QUIC as first in protocol list
- 2023-02-03 TUN-7158: Correct TCP tracing propagation
- 2023-02-01 TUN-7151: Update changes file with latest release notices

2023.2.1
- 2023-02-01 TUN-7065: Revert Ingress Rule check for named tunnel configurations
- 2023-02-01 Revert "TUN-7065: Revert Ingress Rule check for named tunnel configurations"
- 2023-02-01 Revert "TUN-7065: Remove classic tunnel creation"
2023.1.0
- 2023-01-10 TUN-7064: RPM digests are now sha256 instead of md5sum
- 2023-01-04 RTG-2418 Update qtls
- 2022-12-24 TUN-7057: Remove dependency github.com/gorilla/mux
- 2022-12-24 TUN-6724: Migrate to sentry-go from raven-go

2022.12.1
- 2022-12-20 TUN-7021: Fix proxy-dns not starting when cloudflared tunnel is run
- 2022-12-15 TUN-7010: Changelog for release 2022.12.0

2022.12.0
- 2022-12-14 TUN-6999: cloudflared should attempt other edge addresses before falling back on protocol
- 2022-12-13 TUN-7004: Dont show local config dirs for remotely configured tuns
- 2022-12-12 TUN-7003: Tempoarily disable erroneous notarize-app
- 2022-12-12 TUN-7003: Add back a missing fi
- 2022-12-07 TUN-7000: Reduce metric cardinality of closedConnections metric by removing error as tag
- 2022-12-07 TUN-6994: Improve logging config file not found
- 2022-12-07 TUN-7002: Randomise first region selection
- 2022-12-07 TUN-6995: Disable quick-tunnels spin up by default
- 2022-12-05 TUN-6984: Add bash set x to improve visibility during builds
- 2022-12-05 TUN-6984: [CI] Ignore security import errors for code_sigining
- 2022-12-05 TUN-6984: [CI] Don't fail on unset.
- 2022-11-30 TUN-6984: Set euo pipefile for homebrew builds

2022.11.1
- 2022-11-29 TUN-6981: We should close UDP socket if failed to connecto to edge
- 2022-11-25 CUSTESC-23757: Fix a bug where a wildcard ingress rule would match an host without starting with a dot
- 2022-11-24 TUN-6970: Print newline when printing tunnel token
- 2022-11-22 TUN-6963: Refactor Metrics service setup
2022.11.0
- 2022-11-16 Revert "TUN-6935: Cloudflared should use APIToken instead of serviceKey"
- 2022-11-16 TUN-6929: Use same protocol for other connections as first one
- 2022-11-14 TUN-6941: Reduce log level to debug when failing to proxy ICMP reply
- 2022-11-14 TUN-6935: Cloudflared should use APIToken instead of serviceKey
- 2022-11-14 TUN-6935: Cloudflared should use APIToken instead of serviceKey
- 2022-11-11 TUN-6937: Bump golang.org/x/* packages to new release tags
- 2022-11-10 ZTC-234: macOS tests
- 2022-11-09 TUN-6927: Refactor validate access configuration to allow empty audTags only
- 2022-11-08 ZTC-234: Replace ICMP funnels when ingress connection changes
- 2022-11-04 TUN-6917: Bump go to 1.19.3
- 2022-11-02 Issue #574: Better ssh config for short-lived cert (#763)
- 2022-10-28 TUN-6898: Fix bug handling IPv6 based ingresses with missing port
- 2022-10-28 TUN-6898: Refactor addPortIfMissing
2022.10.3
- 2022-10-24 TUN-6871: Add default feature to cloudflared to support EOF on QUIC connections
- 2022-10-19 TUN-6876: Fix flaky TestTraceICMPRouterEcho by taking account request span can return before reply
- 2022-10-18 TUN-6867: Clear spans right after they are serialized to avoid returning duplicate spans
2022.10.2
- 2022-10-18 TUN-6869: Fix Makefile complaining about missing GO packages
- 2022-10-18 TUN-6864: Don't reuse port in quic unit tests
- 2022-10-18 TUN-6868: Return left padded tracing ID when tracing identity is converted to string

2022.10.1
- 2022-10-16 TUN-6861: Trace ICMP on Windows
- 2022-10-15 TUN-6860: Send access configuration keys to the edge
- 2022-10-14 TUN-6858: Trace ICMP reply
- 2022-10-13 TUN-6855: Add DatagramV2Type for IP packet with trace and tracing spans
- 2022-10-13 TUN-6856: Refactor to lay foundation for tracing ICMP
- 2022-10-13 TUN-6604: Trace icmp echo request on Linux and Darwin
- 2022-10-12 Fix log message (#591)
- 2022-10-12 TUN-6853: Reuse source port when connecting to the edge for quic connections
- 2022-10-11 TUN-6829: Allow user of datagramsession to control logging level of errors
- 2022-10-10 RTG-2276 Update qtls and go mod tidy
- 2022-10-05 Add post-quantum flag to quick tunnel
- 2022-10-05 TUN-6823: Update github release message to pull from KV
- 2022-10-04 TUN-6825: Fix cloudflared:version images require arch hyphens
- 2022-10-03 TUN-6806: Add ingress rule number to log when filtering due to middlware handler
- 2022-08-17 Label correct container
- 2022-08-16 Fix typo in help text for `cloudflared tunnel route lb`
- 2022-07-18 drop usage of cat when sed is invoked to generate the manpage
- 2021-03-15 update-build-readme
- 2021-03-15 fix link

2022.10.0
- 2022-09-30 TUN-6755: Remove unused publish functions
- 2022-09-30 TUN-6813: Only proxy ICMP packets when warp-routing is enabled
- 2022-09-29 TUN-6811: Ping group range should be parsed as int32
- 2022-09-29 TUN-6812: Drop IP packets if ICMP proxy is not initialized
- 2022-09-28 TUN-6716: Document limitation of Windows ICMP proxy
- 2022-09-28 TUN-6810: Add component test for post-quantum
- 2022-09-27 TUN-6715: Provide suggestion to add cloudflared to ping_group_range if it failed to open ICMP socket
- 2022-09-22 TUN-6792: Fix brew core release by not auditing the formula
- 2022-09-22 TUN-6774: Validate OriginRequest.Access to add Ingress.Middleware
- 2022-09-22 TUN-6775: Add middleware.Handler verification to ProxyHTTP
- 2022-09-22 TUN-6791: Calculate ICMPv6 checksum
- 2022-09-22 TUN-6801: Add punycode alternatives for ingress rules
- 2022-09-21 TUN-6772: Add a JWT Validator as an ingress verifier
- 2022-09-21 TUN-6772: Add a JWT Validator as an ingress verifier
- 2022-09-21 TUN-6774: Validate OriginRequest.Access to add Ingress.Middleware
- 2022-09-21 TUN-6772: Add a JWT Validator as an ingress verifier
- 2022-09-20 TUN-6741: ICMP proxy tries to listen on specific IPv4 & IPv6 when possible
2022.9.1
- 2022-09-20 TUN-6777: Fix race condition in TestFunnelIdleTimeout
- 2022-09-20 TUN-6595: Enable datagramv2 and icmp proxy by default
- 2022-09-20 TUN-6773: Add access based configuration to ingress.OriginRequestConfig
- 2022-09-19 TUN-6778: Cleanup logs about ICMP
- 2022-09-19 TUN-6779: cloudflared should also use the root CAs from system pool to validate edge certificate
- 2022-09-19 TUN-6780: Add support for certReload to also include support for client certificates
- 2022-09-16 TUN-6767: Build ICMP proxy for Windows only when CGO is enabled
- 2022-09-15 TUN-6590: Use Windows Teamcity agent to build binary
- 2022-09-13 TUN-6592: Decrement TTL and return ICMP time exceed if it's 0
- 2022-09-09 TUN-6749: Fix icmp_generic build
- 2022-09-09 TUN-6744: On posix platforms, assign unique echo ID per (src, dst, echo ID)
- 2022-09-08 TUN-6743: Support ICMPv6 echo on Windows
- 2022-09-08 TUN-6689: Utilize new RegisterUDPSession to begin tracing
- 2022-09-07 TUN-6688: Update RegisterUdpSession capnproto to include trace context
- 2022-09-06 TUN-6740: Detect no UDP packets allowed and fallback from QUIC in that case
- 2022-09-06 TUN-6654: Support ICMPv6 on Linux and Darwin
- 2022-09-02 TUN-6696: Refactor flow into funnel and close idle funnels
- 2022-09-02 TUN-6718: Bump go and go-boring 1.18.6
- 2022-08-29 TUN-6531: Implement ICMP proxy for Windows using IcmpSendEcho
- 2022-08-24 RTG-1339 Support post-quantum hybrid key exchange

2022.9.0
- 2022-09-05 TUN-6737: Fix datagramV2Type should be declared in its own block so it starts at 0
- 2022-09-01 TUN-6725: Fix testProxySSEAllData
- 2022-09-01 TUN-6726: Fix maxDatagramPayloadSize for Windows QUIC datagrams
- 2022-09-01 TUN-6729: Fix flaky TestClosePreviousProxies
- 2022-09-01 TUN-6728: Verify http status code ingress rule
- 2022-08-25 TUN-6695: Implement ICMP proxy for linux

2022.8.4
- 2022-08-31 TUN-6717: Update Github action to run with Go 1.19
- 2022-08-31 TUN-6720: Remove forcibly closing connection during reconnect signal
- 2022-08-29 Release 2022.8.3

2022.8.3
- 2022-08-26 TUN-6708: Fix replace flow logic
- 2022-08-25 TUN-6705: Tunnel should retry connections forever
- 2022-08-25 TUN-6704: Honor protocol flag when edge discovery is unreachable
- 2022-08-25 TUN-6699: Add metric for packet too big dropped
- 2022-08-24 TUN-6691: Properly error check for net.ErrClosed
- 2022-08-22 TUN-6679: Allow client side of quic request to close body
- 2022-08-22 TUN-6586: Change ICMP proxy to only build for Darwin and use echo ID to track flows
- 2022-08-18 TUN-6530: Implement ICMPv4 proxy
- 2022-08-17 TUN-6666: Define packet package
- 2022-08-17 TUN-6667: DatagramMuxerV2 provides a method to receive RawPacket
- 2022-08-16 TUN-6657: Ask for Tunnel ID and Configuration on Bug Report
- 2022-08-16 TUN-6676: Add suport for trailers in http2 connections
- 2022-08-11 TUN-6575: Consume cf-trace-id from incoming http2 TCP requests

2022.8.2
- 2022-08-16 TUN-6656: Docker for arm64 should not be deployed in an amd64 container

2022.8.1
- 2022-08-15 TUN-6617: Updated CHANGES.md for protocol stickiness
- 2022-08-12 EDGEPLAT-3918: bump go and go-boring to 1.18.5
- 2022-08-12 TUN-6652: Publish dockerfile for both amd64 and arm64
- 2022-08-11 TUN-6617: Dont fallback to http2 if QUIC conn was successful.
- 2022-08-11 TUN-6617: Dont fallback to http2 if QUIC conn was successful.
- 2022-08-11 Revert "TUN-6617: Dont fallback to http2 if QUIC conn was successful."
- 2022-08-11 TUN-6617: Dont fallback to http2 if QUIC conn was successful.
- 2022-08-01 TUN-6584: Define QUIC datagram v2 format to support proxying IP packets

2022.8.0
- 2022-08-10 TUN-6637: Upgrade quic-go
- 2022-08-10 TUN-6646: Add support to SafeStreamCloser to close only write side of stream
- 2022-08-09 TUN-6642: Fix unexpected close of quic stream triggered by upstream origin close
- 2022-08-09 TUN-6639: Validate cyclic ingress configuration
- 2022-08-08 TUN-6637: Upgrade go version and quic-go
- 2022-08-08 TUN-6639: Validate cyclic ingress configuration
- 2022-08-04 EDGEPLAT-3918: build cloudflared for Bookworm
- 2022-08-02 Revert "TUN-6576: Consume cf-trace-id from incoming TCP requests to create root span"
- 2022-07-27 TUN-6601: Update gopkg.in/yaml.v3 references in modules
- 2022-07-26 TUN-6576: Consume cf-trace-id from incoming TCP requests to create root span
- 2022-07-26 TUN-6576: Consume cf-trace-id from incoming TCP requests to create root span
- 2022-07-25 TUN-6598: Remove auto assignees on github issues
- 2022-07-20 TUN-6583: Remove legacy --ui flag
- 2022-07-20 cURL supports stdin and uses os pipes directly without copying
- 2022-07-07 TUN-6517: Use QUIC stream context while proxying HTTP requests and TCP connections
2022.7.1
- 2022-07-06 TUN-6503: Fix transport fallback from QUIC in face of dial error "no network activity"

2022.7.0
- 2022-07-05 TUN-6499: Remove log that is per datagram
- 2022-06-24 TUN-6460: Rename metric label location to edge_location
- 2022-06-24 TUN-6459: Add cloudflared user-agent to access calls
- 2022-06-17 TUN-6427: Differentiate between upstream request closed/canceled and failed origin requests
- 2022-06-17 TUN-6388: Fix first tunnel connection not retrying
- 2022-06-13 TUN-6384: Correct duplicate connection error to fetch new IP first
- 2022-06-13 TUN-6373: Add edge-ip-version to remotely pushed configuration
- 2022-06-07 TUN-6010: Add component tests for --edge-ip-version
- 2022-05-20 TUN-6007: Implement new edge discovery algorithm
- 2022-02-18 Ensure service install directories are created before writing file

2022.6.3
- 2022-06-20 TUN-6362: Add armhf support to cloudflare packaging

2022.6.2
- 2022-06-13 TUN-6381: Write error data on QUIC stream when we fail to talk to the origin; separate logging for protocol errors vs. origin errors.
- 2022-06-17 TUN-6414: Remove go-sumtype from cloudflared build process
- 2022-06-01 Add Http2Origin option to force HTTP/2 origin connections
- 2022-06-02 fix ingress rules unit test
- 2022-06-09 Update remaining OriginRequestConfig functions for Http2Origins
- 2022-05-31 Add image source label to docker container.
- 2022-05-10 Warp Private Network link updated

2022.6.1
- 2022-06-14 TUN-6395: Fix writing RPM repo data

2022.6.0
- 2022-06-14 Revert "TUN-6010: Add component tests for --edge-ip-version"
- 2022-06-14 Revert "TUN-6373: Add edge-ip-version to remotely pushed configuration"
- 2022-06-14 Revert "TUN-6384: Correct duplicate connection error to fetch new IP first"
- 2022-06-14 Revert "TUN-6007: Implement new edge discovery algorithm"
- 2022-06-13 TUN-6385: Don't share err between acceptStream loop and per-stream goroutines
- 2022-06-13 TUN-6384: Correct duplicate connection error to fetch new IP first
- 2022-06-13 TUN-6373: Add edge-ip-version to remotely pushed configuration
- 2022-06-13 TUN-6380: Enforce connect and keep-alive timeouts for TCP connections in both WARP routing and websocket based TCP proxy.
- 2022-06-11 Update issue templates
- 2022-06-11 Amendment to previous PR
- 2022-06-09 TUN-6347: Add TCP stream logs with FlowID
- 2022-06-08 TUN-6361: Add cloudflared arm builds to pkging as well
- 2022-06-07 TUN-6357: Add connector id to ready check endpoint
- 2022-06-07 TUN-6010: Add component tests for --edge-ip-version
- 2022-06-06 TUN-6191: Update quic-go to v0.27.1 and with custom patch to allow keep alive period to be configurable
- 2022-06-03 TUN-6343: Fix QUIC->HTTP2 fallback
- 2022-06-02 TUN-6339: Add config for IPv6 support
- 2022-06-02 TUN-6341: Fix default config value for edge-ip-version
- 2022-06-01 TUN-6323: Add Xenial and Trusty for Ubuntu pkging
- 2022-05-31 TUN-6210: Add cloudflared.repo to make it easy for yum installs
- 2022-05-30 TUN-6293: Update yaml v3 to latest hotfix
- 2022-05-20 TUN-6007: Implement new edge discovery algorithm
2022.5.3
- 2022-05-30 TUN-6308: Add debug logs to see if packets are sent/received from edge
- 2022-05-30 TUN-6301: Allow to update logger used by UDP session manager

2022.5.2
- 2022-05-23 TUN-6270: Import gpg keys from environment variables
- 2022-05-24 TUN-6209: Improve feedback process if release_pkgs to deb and rpm fail
- 2022-05-24 TUN-6280: Don't wrap qlog connection tracer for gatethering QUIC metrics since we're not writing qlog files.
- 2022-05-25 TUN-6209: Sign RPM packages
- 2022-05-25 TUN-6285: Upload pkg assets to repos when cloudflared is released.
- 2022-05-24 TUN-6282: Upgrade golang to 1.17.10, go-boring to 1.17.9
- 2022-05-26 TUN-6292: Debug builds for cloudflared
- 2022-05-28 TUN-6304: Fixed some file permission issues
- 2022-05-11 TUN-6197: Publish to brew core should not try to open the browser
- 2022-05-12 TUN-5943: Add RPM support
- 2022-05-18 TUN-6248: Fix panic in cloudflared during tracing when origin doesn't provide header map
- 2022-05-18 TUN-6250: Add upstream response status code to tracing span attributes

2022.5.1
- 2022-05-06 TUN-6146: Release_pkgs is now a generic command line script
- 2022-05-06 TUN-6185: Fix tcpOverWSOriginService not using original scheme for String representation
- 2022-05-05 TUN-6175: Simply debian packaging by structural upload
- 2022-05-05 TUN-5945: Added support for Ubuntu releases
- 2022-05-04 TUN-6054: Create and upload deb packages to R2
- 2022-05-03 TUN-6161: Set git user/email for brew core release
- 2022-05-03 TUN-6166: Fix mocked QUIC transport for UDP proxy manager to return expected error
- 2022-04-27 TUN-6016: Push local managed tunnels configuration to the edge
2022.5.0
- 2022-05-02 TUN-6158: Update golang.org/x/crypto
- 2022-04-20 VULN-8383 Bump yaml.v2 to yaml.v3
- 2022-04-21 TUN-6123: For a given connection with edge, close all datagram sessions through this connection when it's closed
- 2022-04-20 TUN-6015: Add RPC method for pushing local config
- 2022-04-21 TUN-6130: Fix vendoring due to case sensitive typo in package
- 2022-04-27 TUN-6142: Add tunnel details support to RPC
- 2022-04-28 TUN-6014: Add remote config flag as default feature
- 2022-04-12 TUN-6000: Another fix for publishing to brew core
- 2022-04-11 TUN-5990: Add otlp span export to response header
- 2022-04-19 TUN-6070: First connection retries other edge IPs if the error is quic timeout(likely due to firewall blocking UDP)
- 2022-04-11 TUN-6030: Add ttfb span for origin http request

2022.4.1
- 2022-04-11 TUN-6035: Reduce buffer size when proxying data
- 2022-04-11 TUN-6038: Reduce buffer size used for proxying data
- 2022-04-11 TUN-6043: Allow UI-managed Tunnels to fallback from QUIC but warn about that
- 2022-04-07 TUN-6000 add version argument to bump-formula-pr
- 2022-04-06 TUN-5989: Add in-memory otlp exporter

2022.4.0
- 2022-04-01 TUN-5973: Add backoff for non-recoverable errors as well
- 2022-04-05 TUN-5992: Use QUIC protocol for remotely managed tunnels when protocol is unspecified
- 2022-04-06 Update Makefile
- 2022-04-06 TUN-5995: Update prometheus to 1.12.1 to avoid vulnerabilities
- 2022-04-07 TUN-5995: Force prometheus v1.12.1 usage
- 2022-04-07 TUN-4130: cloudflared docker images now have a latest tag
- 2022-03-30 TUN-5842: Fix flaky TestConcurrentUpdateAndRead by making sure resources are released
- 2022-03-30 carrier: fix dropped errors
- 2022-03-25 TUN-5959: tidy go.mod
- 2022-03-25 TUN-5958: Fix release to homebrew core
- 2022-03-28 TUN-5960: Do not log the tunnel token or json credentials
- 2022-03-28 TUN-5956: Add timeout to session manager APIs

2022.3.4
- 2022-03-22 TUN-5918: Clean up text in cloudflared tunnel --help
- 2022-03-22 TUN-5895 run brew bump-formula-pr on release
- 2022-03-22 TUN-5915: New cloudflared command to allow to retrieve the token credentials for a Tunnel
- 2022-03-24 TUN-5933: Better messaging to help user when installing service if it is already installed
- 2022-03-25 TUN-5954: Start cloudflared service in Linux too similarly to other OSs
- 2022-03-14 TUN-5869: Add configuration endpoint in metrics server

2022.3.3
- 2022-03-17 TUN-5893: Start windows service on install, stop on uninstall. Previously user had to manually start the service after running 'cloudflared tunnel install' and stop the service before running uninstall command.
- 2022-03-17 Revert "CC-796: Remove dependency on unsupported version of go-oidc"
- 2022-03-18 TUN-5881: Clarify success (or lack thereof) of (un)installing cloudflared service
- 2022-03-18 CC-796: Remove dependency on unsupported version of go-oidc
- 2022-03-18 TUN-5907: Change notes for 2022.3.3

2022.3.2
- 2022-03-10 TUN-5833: Create constant for allow-remote-config
- 2022-03-15 TUN-5867: Return error if service was already installed
- 2022-03-16 TUN-5833: Send feature `allow_remote_config` if Tunnel is run with --token
- 2022-03-08 TUN-5849: Remove configuration debug log
- 2022-03-08 TUN-5850: Update CHANGES.md with latest releases
- 2022-03-08 TUN-5851: Update all references to point to Apache License 2.0
- 2022-03-07 TUN-5853 Add "install" make target and build package manager info into executable
- 2022-03-08 TUN-5801: Add custom wrapper for OriginConfig for JSON serde
- 2022-03-09 TUN-5703: Add prometheus metric for current configuration version
- 2022-02-05 CC-796: Remove dependency on unsupported version of go-oidc

2022.3.1
- 2022-03-04 TUN-5837: Log panic recovery in http2 logic with debug level log
- 2022-03-04  TUN-5696: HTTP/2 Configuration Update
- 2022-03-04 TUN-5836: Avoid websocket#Stream function from crashing cloudflared with unexpected memory access
- 2022-03-05 TUN-5836: QUIC transport no longer sets body to nil in any condition

2022.3.0
- 2022-03-02 TUN-5680: Adapt component tests for new service install based on token
- 2022-02-21 TUN-5682: Remove name field from credentials
- 2022-02-21 TUN-5681: Add support for running tunnel using Token
- 2022-02-28 TUN-5824: Update updater no-update-in-shell link
- 2022-02-28 TUN-5823: Warn about legacy flags that are ignored when ingress rules are used
- 2022-02-28 TUN-5737: Support https protocol over unix socket origin
- 2022-02-23 TUN-5679: Add support for service install using Tunnel Token

2022.2.2
- 2022-02-22 TUN-5754: Allow ingress validate to take plaintext option
- 2022-02-17 TUN-5678: Cloudflared uses typed tunnel API

2022.2.1
- 2022-02-10 TUN-5184: Handle errors in bidrectional streaming (websocket#Stream) gracefully when 1 side has ended
- 2022-02-14 Update issue templates
- 2022-02-14 Update issue templates
- 2022-02-11 TUN-5768: Update cloudflared license file
- 2022-02-11 TUN-5698: Make ingress rules and warp routing dynamically configurable
- 2022-02-14 TUN-5678: Adapt cloudflared to use new typed APIs
- 2022-02-17 Revert "TUN-5678: Adapt cloudflared to use new typed APIs"
- 2022-02-11 TUN-5697: Listen for UpdateConfiguration RPC in quic transport
- 2022-02-04 TUN-5744: Add a test to make sure cloudflared uses scheme defined in ingress rule, not X-Forwarded-Proto header
- 2022-02-07 TUN-5749: Refactor cloudflared to pave way for reconfigurable ingress - Split origin into supervisor and proxy packages - Create configManager to handle dynamic config
- 2021-10-19 TUN-5184: Make sure outstanding websocket write is finished, and no more writes after shutdown

2022.2.0
- 2022-02-02 TUN-4947: Use http when talking to Unix sockets origins
- 2022-02-02 TUN-5695: Define RPC method to update configuration
- 2022-01-27 TUN-5621: Correctly manage QUIC stream closing
- 2022-01-28 TUN-5702: Allow to deserialize config from JSON

2022.1.3
- 2022-01-21 TUN-5477: Unhide vnet commands
- 2022-01-24 TUN-5669: Change network command to vnet
- 2022-01-25 TUN-5675: Remove github.com/dgrijalva/jwt-go dependency by upgrading coredns version
- 2022-01-27 TUN-5719: Re-attempt connection to edge with QUIC despite network error when there is no fallback
- 2022-01-28 TUN-5724: Fix SSE streaming by guaranteeing we write everything we read
- 2022-01-17 TUN-5547: Bump golang x/net package to fix http2 transport bugs
- 2022-01-19 TUN-5659: Proxy UDP with zero-byte payload
- 2021-10-22 Add X-Forwarded-Host for http proxy

2022.1.2
- 2022-01-13 TUN-5650: Fix pynacl version to 1.4.0 and pygithub version to 1.55 so release doesn't break unexpectedly

2022.1.1
- 2022-01-10 TUN-5631: Build everything with go 1.17.5
- 2022-01-06 TUN-5623: Configure quic max datagram frame size to 1350 bytes for none Windows platforms

2022.1.0
- 2022-01-03 TUN-5612: Add support for specifying TLS min/max version
- 2022-01-03 TUN-5612: Make tls min/max version public visible
- 2022-01-03 TUN-5551: Internally published debian artifacts are now named just cloudflared even though they are FIPS compliant
- 2022-01-04 TUN-5600: Close QUIC transports as soon as possible while respecting graceful shutdown
- 2022-01-05 TUN-5616: Never fallback transport if user chooses it on purpose
- 2022-01-05 TUN-5204: Unregister QUIC transports on disconnect
- 2022-01-04 TUN-5600: Add coverage to component tests for various transports

2021.12.4
- 2021-12-27 TUN-5482: Refactor tunnelstore client related packages for more coherent package
- 2021-12-27 TUN-5551: Change internally published debian package to be FIPS compliant
- 2021-12-27 TUN-5551: Show whether the binary was built for FIPS compliance

2021.12.3
- 2021-12-22 TUN-5584: Changes for release 2021.12.2
- 2021-12-22 TUN-5590: QUIC datagram max user payload is 1217 bytes
- 2021-12-22 TUN-5593: Read full packet from UDP connection, even if it exceeds MTU of the transport. When packet length is greater than the MTU of the transport, we will silently drop packets (for now).
- 2021-12-23 TUN-5597: Log session ID when session is terminated by edge

2021.12.2
- 2021-12-20 TUN-5571: Remove redundant session manager log, it's already logged in origin/tunnel.ServeQUIC
- 2021-12-20 TUN-5570: Only log RPC server events at error level to reduce noise
- 2021-12-14 TUN-5494: Send a RPC with terminate reason to edge if the session is closed locally
- 2021-11-09 TUN-5551: Reintroduce FIPS compliance for linux amd64 now as separate binaries

2021.12.1
- 2021-12-16 TUN-5549: Revert "TUN-5277: Ensure cloudflared binary is FIPS compliant on linux amd64"

2021.12.0
- 2021-12-13 TUN-5530: Get current time from ticker
- 2021-12-15 TUN-5544: Update CHANGES.md for next release
- 2021-12-07 TUN-5519: Adjust URL for virtual_networks endpoint to match what we will publish
- 2021-12-02 TUN-5488: Close session after it's idle for a period defined by registerUdpSession RPC
- 2021-12-09 TUN-5504: Fix upload of packages to public repo
- 2021-11-30 TUN-5481: Create abstraction for Origin UDP Connection
- 2021-11-30 TUN-5422: Define RPC to unregister session
- 2021-11-26 TUN-5361: Commands for managing virtual networks
- 2021-11-29 TUN-5362: Adjust route ip commands to be aware of virtual networks
- 2021-11-23 TUN-5301: Separate datagram multiplex and session management logic from quic connection logic
- 2021-11-10 TUN-5405: Update net package to v0.0.0-20211109214657-ef0fda0de508
- 2021-11-10 TUN-5408: Update quic package to v0.24.0
- 2021-11-12 Fix typos
- 2021-11-13 Fix for Issue #501: Unexpected User-agent insertion when tunneling http request
- 2021-11-16 TUN-5129: Remove `-dev` suffix when computing version and Git has uncommitted changes
- 2021-11-18 TUN-5441: Fix message about available protocols
- 2021-11-12 TUN-5300: Define RPC to register UDP sessions
- 2021-11-14 TUN-5299: Send/receive QUIC datagram from edge and proxy to origin as UDP
- 2021-11-04 TUN-5387: Updated CHANGES.md for 2021.11.0
- 2021-11-08 TUN-5368: Log connection issues with LogLevel that depends on tunnel state
- 2021-11-09 TUN-5397: Log cloudflared output when it fails to connect tunnel
- 2021-11-09 TUN-5277: Ensure cloudflared binary is FIPS compliant on linux amd64
- 2021-11-08 TUN-5393: Content-length is no longer a control header for non-h2mux transports

2021.11.0
- 2021-11-03 TUN-5285: Fallback to HTTP2 immediately if connection times out with no network activity
- 2021-09-29 Add flag to 'tunnel create' subcommand to specify a base64-encoded secret

2021.10.5
- 2021-10-25 Update change log for release 2021.10.4
- 2021-10-25 Revert "TUN-5184: Make sure outstanding websocket write is finished, and no more writes after shutdown"

2021.10.4
- 2021-10-21 TUN-5287: Fix misuse of wait group in TestQUICServer that caused the test to exit immediately
- 2021-10-21 TUN-5286: Upgrade crypto/ssh package to fix CVE-2020-29652
- 2021-10-18 TUN-5262: Allow to configure max fetch size for listing queries
- 2021-10-19 TUN-5262: Improvements to `max-fetch-size` that allow to deal with large number of tunnels in account
- 2021-10-15 TUN-5261: Collect QUIC metrics about RTT, packets and bytes transfered and log events at tracing level
- 2021-10-19 TUN-5184: Make sure outstanding websocket write is finished, and no more writes after shutdown

2021.10.3
- 2021-10-14 TUN-5255: Fix potential panic if Cloudflare API fails to respond to GetTunnel(id) during delete command
- 2021-10-14 TUN-5257: Fix more cfsetup targets that were broken by recent package changes

2021.10.2
- 2021-10-11 TUN-5138: Switch to QUIC on auto protocol based on threshold
- 2021-10-14 TUN-5250: Add missing packages for cfsetup to succeed in github release pkgs target

2021.10.1
- 2021-10-12 TUN-5246: Use protocol: quic for Quick tunnels if one is not already set
- 2021-10-13 TUN-5249: Revert "TUN-5138: Switch to QUIC on auto protocol based on threshold"

2021.10.0
- 2021-10-11 TUN-5138: Switch to QUIC on auto protocol based on threshold
- 2021-10-07 TUN-5195: Do not set empty body if not applicable
- 2021-10-08 UN-5213: Increase MaxStreams value for QUIC transport
- 2021-09-28 TUN-5169: Release 2021.9.2 CHANGES.md
- 2021-09-28 TUN-5164: Update README and clean up references to Argo Tunnel (using Cloudflare Tunnel instead)

2021.9.2
- 2021-09-21 TUN-5129: Use go 1.17 and copy .git folder to docker build to compute version
- 2021-09-21 TUN-5128: Enforce maximum grace period
- 2021-09-22 TUN-5141: Make sure websocket pinger returns before streaming returns
- 2021-09-24 TUN-5142: Add asynchronous servecontrolstream for QUIC
- 2021-09-24 TUN-5142: defer close rpcconn inside unregister instead of ServeControlStream
- 2021-09-27 TUN-5160: Set request.ContentLength when this value is in request header

2021.9.1
- 2021-09-21 TUN-5118: Quic connection now detects duplicate connections similar to http2
- 2021-09-15 Fix TryCloudflare link

2021.9.0
- 2021-09-02 Fix broken TryCloudflare link
- 2021-09-03 Add support for taking named tunnel credentials from an environment variable
- 2021-08-30 TUN-5012: Use patched go-sumtype
- 2021-08-31 TUN-5011: Use the region parameter in fallback SRV lookup
- 2021-08-31 TUN-5029: Do not strip cf- prefixed headers
- 2021-08-29 TUN-5009: Updated github action to use go 1.17.x for checks
- 2021-08-28 TUN-5010: --region should be a string flag
- 2021-08-10 Allow building on arm64 platforms
- 2021-06-09 Update README.md
- 2021-05-31 🖌️ Allow providing TokenID and TokenSecret as env vars when calling cloudflared access
- 2021-05-31 🎨 Prefix env var parameters with TUNNEL

2021.8.7
- 2021-08-28 Revert "TUN-4926: Implement --region configuration option"

2021.8.6
- 2021-08-27 TUN-5000: De-flake logging to dir component test in Windows by increasing to buffer to cope with more logging
- 2021-08-27 TUN-5003: Fix cfsetup for non-FIPS golang version

2021.8.5
- 2021-08-27 TUN-4961: Update quic-go to latest
- 2021-08-27 Release 2021.8.4

2021.8.4
- 2021-08-26 TUN-4974: Fix regression where we were debug logging by accident
- 2021-08-26 TUN-4970: Only default to http2 for warp-routing if protocol is h2mux
- 2021-08-26 TUN-4981: Improve readability of prepareTunnelConfig method
- 2021-08-26 TUN-4926: Implement --region configuration option
- 2021-07-09 TUN-4821: Make quick tunnels the default in cloudflared

2021.8.3
- 2021-08-23 TUN-4889: Add back appendtagheaders function
- 2021-08-21 TUN-4940: Fix cloudflared not picking up correct NextProtos for quic
- 2021-08-21 TUN-4613: Add a no-op protocol version slot
- 2021-08-13 TUN-4922: Downgrade quic-go library to 0.20.0
- 2021-08-17 TUN-4866: Add Control Stream for QUIC
- 2021-08-17 TUN-4927: Parameterize region in edge discovery code
- 2021-08-06 TUN-4602: Added UDP resolves to Edge discovery

2021.8.2
- 2021-08-03 TUN-4597: Added HTTPProxy for QUIC
- 2021-08-04 TUN-4795: Remove Equinox releases
- 2021-08-09 TUN-4911: Append Environment variable to Path instead of overwriting it

2021.8.1
- 2021-08-02 TUN-4855: Added CHANGES.md for release 2021.8.0
- 2021-08-03 TUN-4597: Add a QUIC server skeleton
- 2021-08-03 TUN-4873: Disable unix domain socket test for windows unit tests
- 2021-08-04 TUN-4875: Added amd64-linux builds back to releases

2021.8.0
- 2021-07-30 TUN-4847: Allow to list tunnels by prefix name or exclusion prefix name
- 2021-07-30 TUN-4772: Release built executables with packages
- 2021-07-30 TUN-4851: Component tests to smoke test that Proxy DNS and Tunnel are only run when expected
- 2021-07-28 TUN-4811: Publish quick tunnels' hostname in /metrics under `userHostname` for backwards-compatibility
- 2021-07-29 TUN-4832: Prevent tunnel from running accidentally when only proxy-dns should run
- 2021-07-28 TUN-4819: Tolerate protocol TXT record lookup failing

2021.7.4
- 2021-07-28 TUN-4814: Revert "TUN-4699: Make quick tunnels the default in cloudflared"
- 2021-07-28 TUN-4812: Disable CGO for cloudflared builds

2021.7.3
- 2021-07-27 TUN-4799: Build deb, msi and rpm packages with fips

2021.7.2
- 2021-07-27 Fixed a syntax error with python logging.

2021.7.1
- 2021-07-21 TUN-4755: Add a windows msi release option to Make
- 2021-07-22 TUN-4761: Added a build-all-packages target to cfsetup
- 2021-07-26 TUN-4771: Upload deb, rpm and msi packages to github
- 2021-07-14 TUN-4714: Name nightly package cloudflared-nightly to avoid apt conflict
- 2021-07-16 TUN-4701: Split Proxy into ProxyHTTP and ProxyTCP
- 2021-07-08 TUN-4596: Add QUIC application protocol for QUIC stream handshake
- 2021-07-09 TUN-4699: Make quick tunnels the default in cloudflared

2021.7.0
- 2021-07-01 TUN-4626: Proxy non-stream based origin websockets with http Roundtrip.
- 2021-07-01 TUN-4655: ingress.StreamBasedProxy.EstablishConnection takes dest input
- 2021-07-09 TUN-4698: Add cloudflared metrics endpoint to serve quick tunnel hostname
- 2021-06-21 TUN-4521: Modify cloudflared to use zoneless-tunnels-worker for free tunnels
- 2021-04-05 AUTH-3475: Updated GetAppInfo error message

2021.6.0
- 2021-06-21 TUN-4571: Changelog for 2021.6.0
- 2021-06-18 TUN-4571: Fix proxying to unix sockets when using HTTP2 transport to Cloudflare Edge
- 2021-06-07 TUN-4502: Make `cloudflared tunnel route` subcommands described consistently
- 2021-06-08 TUN-4504: Fix component tests in windows
- 2021-05-27 TUN-4461: Log resulting DNS hostname if one is received from Cloudflare API

2021.5.10
- 2021-05-25 TUN-4456: Replaced instances of Tick() with Ticker() in h2mux paths

2021.5.9
- 2021-05-20 TUN-4426: Fix centos builds
- 2021-05-20 Update changelog
- 2021-04-30 AUTH-3426: Point to new transfer service URL and eliminate PUT /ok

2021.5.8
- 2021-05-14 TUN-4419: Improve error message when cloudflared cannot reach origin
- 2021-05-19 TUN-4425: --overwrite-dns flag for in adhoc and route dns cmds

2021.5.7
- 2021-05-17 Fix typo in Changes.md
- 2021-05-17 TUN-4421: Named Tunnels will automatically select the protocol to connect to Cloudflare's edge network

2021.5.6
- 2021-05-14 TUN-4418: Downgrade to Go 1.16.3

2021.5.5


2021.5.4
- Fix release pipeline

2021.5.1
- 2021-05-10 TUN-4342: Fix false positive warning about unused hostname property
- 2021-05-10 Release 2021.5.0

2021.5.0
- 2021-05-10 TUN-4384: Silence log from automaxprocs
- 2021-05-10 AUTH-3537: AUDs in JWTs are now always arrays
- 2021-05-10 Update changelog for 2021.5.0
- 2021-05-03 TUN-4343: Fix broken build by setting debug field correctly
- 2021-05-06 TUN-4356: Set AUTOMAXPROCS to the CPU limit when running in a Linux container
- 2021-05-06 TUN-4357: Bump Go to 1.16
- 2021-05-06 TUN-4359: Warn about unused keys in 'tunnel ingress validate'
- 2021-04-30 debug: log host / path
- 2021-04-20 AUTH-3513: Checks header for app info in case response is a 403/401 from the edge
- 2021-04-29 TUN-4000: Release notes for cloudflared replica model
- 2021-04-09 TUN-2853: rename STDIN-CONTROL env var to STDIN_CONTROL
- 2021-04-09 TUN-4206: Better error message when user is only using one ingress rule

2021.4.0
- 2021-04-05 TUN-4178: Fix component test for running as a service in MacOS to not assume a named tunnel
- 2021-04-05 TUN-4177: Running with proxy-dns should not prevent running Named Tunnels
- 2021-04-02 TUN-4168: Transparently proxy websocket connections using stdlib HTTP client instead of gorilla/websocket; move websocket client code into carrier package since it's only used by access subcommands now (#345).
- 2021-04-07 Publish change log for 2021.4.0

2021.3.6
- 2021-03-30 TUN-4150: Only show the connector table in 'tunnel info' if there are connectors. Don't show rows with zero connections.
- 2021-03-31 TUN-4153: Revert best-effort HTTP2 usage when talking to origins
- 2021-03-26 TUN-4141: Better error messages for tunnel info subcommand.
- 2021-03-29 TUN-4146: Unhide and document grace-period
- 2021-03-25 TUN-3863: Consolidate header handling logic in the connection package; move headers definitions from h2mux to packages that manage them; cleanup header conversions

2021.3.5
- 2021-03-26 TUN-3896: http-service and tunnelstore client use http2 transport.
- 2021-03-25 TUN-4125: Change component tests to run in CI with its own dedicated resources
- 2021-03-26 Publish change log for 2021.3.5

2021.3.4


2021.3.3
- 2021-03-23 TUN-4111: Warn the user if both properties "tunnel" and "hostname" are used
- 2021-03-23 TUN-4082: Test logging when running as a service
- 2021-03-23 TUN-4112: Skip testing graceful shutdown with SIGINT on Windows
- 2021-03-23 TUN-4116: Ingore credentials-file setting in configuration file during tunnel create and delete opeations.
- 2021-03-23 TUN-4118: Don't overwrite existing file with tunnel credentials. For ad-hoc tunnels, this means tunnel won't start if there's a file in the way.
- 2021-03-24 TUN-4123: Don't capture output in reconnect componet test
- 2021-03-23 TUN-4067: Reformat code for consistent import order, grouping, and fix formatting. Added goimports target to the Makefile to make this easier in the future.
- 2021-03-24 AUTH-3455: Generate short-lived ssh cert per hostname
- 2021-03-25 Update changelog 2021.3.3

2021.3.2
- 2021-03-23 TUN-4042: Capture cloudflared output to debug component tests
- 2021-03-23 Publish changelog for 2021.3.2
- 2021-03-16 TUN-4089: Address flakiness in component tests for termination
- 2021-03-16 TUN-4060: Fix Go Vet warnings (new with go 1.16) where t.Fatalf is called from a test goroutine
- 2021-03-16 TUN-4091: Use flaky decorator to rerun reconnect component tests when they fail
- 2021-03-12 TUN-4081: Update log severities to use Zerolog's levels
- 2021-03-16 TUN-4094: Don't read configuration file for access commands
- 2021-03-15 TUN-3993: New `cloudflared tunnel info` to obtain details about the active connectors for a tunnel
- 2021-03-17 TUN-3715: Apply input source to the correct context
- 2021-03-17 AUTH-3394: Ensure scheme on token command
- 2021-03-18 TUN-4096: Reduce tunnel not connected assertion backoff to address flaky termination tests
- 2021-03-19 TUN-3998: Allow to cleanup the connections of a tunnel limited to a single client
- 2021-02-04 TUN-3715: Only read config file once, right before invoking the command

2021.3.1
- 2021-03-11 TUN-4051: Add component-tests to test graceful shutdown
- 2021-03-12 TUN-4052: Add component tests to assert service mode behavior

2021.3.0
- 2021-03-10 TUN-4075: Dedup test should not compare order of list
- 2021-03-10 Revert "AUTH-3394: Creates a token per app instead of per path"
- 2021-03-11 TUN-4066: Remove unnecessary chmod during package publish to CF_PKG_HOSTS
- 2021-03-11 TUN-4066: Set permissions in build agent before 'scp'-ing to machine hosting package repo
- 2021-03-11 TUN-4050: Add component tests to assert reconnect behavior
- 2021-03-10 AUTH-3394: Creates a token per app instead of per path - with fix for free tunnels
- 2021-03-15 Publish change log for 2021.3.0
- 2021-03-01 Issue #285 - Makefile does not detect TARGET_ARCH correctly on FreeBSD  (#325)
- 2021-03-01 TUN-3988: Log why it cannot check if origin cert exists
- 2021-03-02 TUN-3995: Optional --features flag for tunnel run.
- 2021-03-02 TUN-3994: Log client_id when running a named tunnel
- 2021-03-04 TUN-4026: Fix regression where HTTP2 edge transport was no longer propagating control plane errors
- 2021-03-05 TUN-4055: Skeleton for component tests
- 2021-03-08 TUN-4047: Add cfsetup target to run component test
- 2021-03-08 TUN-4016: Delegate decision to update for Worker service
- 2021-03-02 TUN-3905: Cannot run go mod vendor in cloudflared due to fips
- 2021-03-08 TUN-4063: Cleanup dependencies between packages.
- 2021-03-09 Allow partial reads from a GorillaConn; add SetDeadline (from net.Conn) (#330)
- 2021-03-09 TUN-4069: Fix regression on support for websocket over proxy
- 2021-03-02 AUTH-3394: Creates a token per app instead of per path
- 2021-03-01 TUN-4017: Add support for using cloudflared as a full socks proxy.
- 2021-03-08 TUN-4062: Read component tests config from yaml file
- 2021-03-08 TUN-4049: Add component tests to assert logging behavior when running from terminal
- 2021-02-23 TUN-3963: Repoint urfave/cli/v2 library at patched branch at github.com/ipostelnik/cli/v2@fixed which correctly handles reading flags declared at multiple levels of subcommands.
- 2021-02-25 TUN-3970: Route ip show has alias route ip list
- 2021-02-26 TUN-3978: Unhide teamnet commands and improve their help
- 2021-02-26 TUN-3983: Renew CA certs in cloudflared
- 2021-02-28 TUN-3989: Check in with Updater service in more situations and convey messages to user
- 2021-02-11 TUN-3819: Remove client-side check that deleted tunnels have no connections

2021.2.5
- 2021-02-23 Publish change notes for 2021.2.5
- 2021-02-11 TUN-3838: ResponseWriter no longer reads and origin error tests
- 2021-02-10 TUN-3895: Tests for socks stream handler
- 2021-02-19 TUN-3939: Add logging that shows that Warp-routing is enabled
- 2021-02-02 TUN-3817: Adds tests for websocket based streaming regression
- 2021-02-04 TUN-3799: extended the Stream interface to take a logger and added debug logs for io.Copy errors
- 2021-02-03 TUN-3855: Add ability to override target of 'access ssh' command to a different host for testing
- 2021-02-04 TUN-3853: Respond with ws headers from the origin service rather than generating our own
- 2021-02-08 TUN-3889: Move host header override logic to httpService
- 2021-02-05 TUN-3868: Refactor singleTCPService and bridgeService to tcpOverWSService and rawTCPService
- 2021-01-21 TUN-3753: Select http2 protocol when warp routing is enabled
- 2021-01-26 TUN-3809: Allow routes ip show to output as JSON or YAML
- 2021-01-11 TUN-3615: added support to  proxy tcp streams
- 2021-01-17 TUN-3725: Warp-routing is independent of ingress
- 2021-01-15 TUN-3764: Actively flush data for TCP streams
- 2020-12-09 TUN-3617: Separate service from client, and implement different client for http vs. tcp origins

2021.2.4
- 2021-02-22 TUN-3948: Log error when retrying connection
- 2021-02-23 TUN-3964: Revert "TUN-3922: Repoint urfave/cli/v2 library at patched branch at github.com/ipostelnik/cli/v2@fixed which correctly handles reading flags declared at multiple levels of subcommands."
- 2021-02-23 Publish release notes for 2021.2.4

2021.2.3
- 2021-02-23 Publish release notes for 2021.2.3
- 2021-02-10 TUN-3902: Add jitter to backoffhandler
- 2021-02-11 TUN-3913: Help gives wrong exit code for autoupdate
- 2021-02-12 Add max upstream connections dns-proxy option (#290)
- 2021-02-16 TUN-3924: Removed db-connect command. Added a placeholder handler for this command that informs users that command is no longer supported.
- 2021-02-12 TUN-3922: Repoint urfave/cli/v2 library at patched branch at github.com/ipostelnik/cli/v2@fixed which correctly handles reading flags declared at multiple levels of subcommands.
- 2021-02-19 Added support for proxy (#318)
- 2021-02-19 TUN-3945: Fix runApp signature for generic service
- 2021-02-09 Update README.md
- 2021-02-09 Update the TryCloudflare link

2021.2.2
- 2021-02-04 TUN-3864: Users can choose where credentials file is written after creating a tunnel
- 2021-02-04 TUN-3869: Improve reliability of graceful shutdown.
- 2021-02-07 TUN-3878: Do not supply -tags when none are specified
- 2021-02-04 TUN-3635: Send event when unregistering tunnel for gracful shutdown so /ready endpoint reports down status befoe connections finish handling pending requests.
- 2021-02-08 TUN-3890: Code coverage for cloudflared in CI
- 2021-02-09 AUTH-3375 exchangeOrgToken deleted cookie fix
- 2020-11-18 Update error message to use login command

2021.2.1
- 2021-02-04 TUN-3858: Do not suffix cloudflared version with -fips

2021.2.0
- 2021-02-01 TUN-3837: Remove automation_email from cloudflared status page test
- 2021-02-03 TUN-3848: Use transport logger for h2mux
- 2021-02-03 TUN-3854: cloudflared tunnel list flags to sort output
- 2021-01-21 TUN-3195: Don't colorize console logs when stderr is not a terminal
- 2021-01-20 Fixed connection error handling by removing duplicated errors, standardizing on non-pointer error types
- 2021-01-20 TUN-3118: Changed graceful shutdown to immediately unregister tunnel from the edge, keep the connection open until the edge drops it or grace period expires
- 2021-01-25 TUN-3165: Add reference to Argo Tunnel documentation in the help output
- 2021-01-25 TUN-3806: Use a .dockerignore
- 2021-01-21 TUN-3795: Use RFC-3339 style date format for logs, produce timestamp in UTC
- 2021-01-26 TUN-3795: Removed errant test
- 2021-01-25 TUN-3792: Handle graceful shutdown correctly when running as a windows service. Only expose one shutdown channel globally, which now triggers the graceful shutdown sequence across all modes. Removed separate handling of zero-duration grace period, instead it's checked only when we need to wait for exit.
- 2021-01-27 TUN-3811: Better error reporting on http2 connection termination. Registration errors from control loop are now propagated out of the connection server code. Unified error handling between h2mux and http2 connections so we log and retry errors the same way, regardless of underlying transport.
- 2021-01-28 TUN-3830: Use Go 1.15.7
- 2021-01-28 TUN-3826: Use go-fips when building cloudflared for linux/amd64
- 2021-01-19 TUN-3777: Fix /ready endpoint for classic tunnels
- 2021-01-19 TUN-3773: Add back pprof endpoints

2021.1.5
- 2021-01-15 TUN-3594: Log ingress response at debug level
- 2021-01-15 TUN-3765: Fix doubly nested log output by `logfile` option
- 2021-01-16 TUN-3767: Tolerate logging errors
- 2021-01-17 TUN-3768: Reuse file loggers
- 2021-01-14 TUN-3738: Refactor observer to avoid potential of blocking on tunnel notifications
- 2021-01-15 TUN-3766: Print flags defined at all levels of command hierarchy, not just locally defined flags for a command. This fixes output of overriden settings for  subcommand.

2021.1.4
- 2021-01-14 TUN-3759: Single file logging output should always append

2021.1.3
- 2021-01-14 TUN-3756: File logging output must consider the directory
- 2021-01-14 TUN-3757: Fix legacy Uint flags that are incorrectly handled by ufarve library

2021.1.2
- 2021-01-13 TUN-3747: Fix logging in Windows

2021.1.1
- 2021-01-13 TUN-3744: Fix compilation error in windows service

2021.1.0
- 2021-01-11 TUN-3670: Update Teamnet API gateway prefixes
- 2021-01-13 TUN-3738: Consume UI events even when UI is disabled
- 2021-01-06 TUN-3722: Teamnet API paths include /network
- 2021-01-05 TUN-3688: Subcommand for users to check which route an IP proxies through
- 2021-01-08 TUN-3691: Edit Teamnet help text
- 2020-12-30 TUN-3706: Quit if any origin service fails to start
- 2020-12-31 TUN-3708: Better info message about system root certpool on Windows
- 2020-12-21 TUN-3669: Teamnet commands to add/show Teamnet routes.
- 2020-12-29 TUN-3689: Delete routes via cloudflared CLI
- 2020-12-28 TUN-3471: Add structured log context to logs
- 2020-12-15 TUN-3650: Remove unused awsuploader package
- 2020-12-03 Update to add deprecated version note (#271)
- 2020-12-02 TUN-3472: Set up rolling logger with zerolog and lumberjack
- 2020-12-08 TUN-3607: Set up single-file logger with zerolog
- 2020-12-03 Update to add deprecated version note (#271)
- 2020-11-25 TUN-3470: Replace in-house logger calls with zerolog

2020.12.0
- 2020-12-04 TUN-3599: improved delete if credentials isnt found.
- 2020-12-04 TUN-3612: Upgrade to Go 1.15.6
- 2020-11-30 TUN-3593: /ready endpoint for k8s readiness. Move tunnel events out of UI package, into connection package.
- 2020-11-27 TUN-3594: Log response status at debug level

2020.11.11
- 2020-11-20 TUN-3578: cloudflared tunnel route dns should allow wildcard subdomains
- 2020-11-21 EDGEPLAT-2958 remove deb-compression, defaulting to gzip
- 2020-11-23 TUN-3581: Tunnels can be run by name using only --credentials-file, no origin cert necessary.
- 2020-11-15 TUN-3561: Unified logger configuration
- 2020-11-08 AUTH-3221: Saves org token to disk and uses it to refresh the app token

2020.11.10
- 2020-11-20 TUN-3562: Fix panic when using bastion mode ingress rule
- 2020-11-20 EDGEPLAT-2958 build cloudflared for Bullseye

2020.11.9
- 2020-11-18 TUN-3557: Detect SSE if content-type starts with text/event-stream
- 2020-11-18 TUN-3559: Share response meta header with other packages
- 2020-11-18 DEVTOOLS-7936: Remove redundant chgrp from publish
- 2020-11-18 TUN-3558: cloudflared allows empty config files
- 2020-11-18 TUN-3544: Upgrade to Go 1.15.5

2020.11.8
- 2020-11-17 TUN-3555: Single origin service should default to localhost:8080

2020.11.7
- 2020-11-13 TUN-3514: Stop setting --is-autoupdated flag after autoupdate because it can break named tunnel running in k8s
- 2020-11-15 TUN-3548, TUN-3547: Bastion mode can be specified as a service, doesn't require URL.
- 2020-11-16 TUN-3549: Use a separate handler for each websocket proxy

2020.11.6
- 2020-11-14 TUN-3546: Fix panic in tlsconfig.LoadOriginCA

2020.11.5
- 2020-11-12 TUN-3540: Better copy in ingress rules error messages
- 2020-11-12 DEVTOOLS-7936: Set permissions on public packages
- 2020-11-13 TUN-3543: ProxyAddress not using default in single-origin mode

2020.11.4
- 2020-11-11 TUN-3534: Specific error message when credentials file is a .pem not .json
- 2020-11-02 TUN-3500: Integrate replace h2mux by http2 work with multiple origin support
- 2020-11-09 TUN-3514: Transport logger write to UI when UI is enabled
- 2020-10-30 TUN-3490: Make sure OriginClient implementation doesn't write after Proxy return
- 2020-10-20 TUN-3403: Unit test for origin/proxy to test serving HTTP and Websocket
- 2020-10-23 TUN-3480: Support SSE with http2 connection, and add SSE handler to hello-world server
- 2020-10-27 TUN-3489: Add unit tests to cover proxy logic in connection package of cloudflared
- 2020-10-16 TUN-3467: Serialize cf-cloudflared-response-meta during package initialization using jsoniter
- 2020-10-14 TUN-3456: New protocol option auto to automatically select between http2 and h2mux
- 2020-10-14 TUN-3458: Upgrade to http2 when available, fallback to h2mux when we reach max retries
- 2020-10-08 TUN-3449: Use flag to select transport protocol implementation
- 2020-10-08 TUN-3462: Refactor cloudflared to separate origin from connection
- 2020-09-21 TUN-3406: Proxy websocket requests over Go http2
- 2020-09-25 TUN-3420: Establish control plane and send RPC over control plane
- 2020-09-11 TUN-3400: Use Go HTTP2 library as transport to connect with the edge

2020.11.3
- 2020-11-11 TUN-3533: Set config for single origin ingress

2020.11.2


2020.11.1
- 2020-11-10 TUN-3527: More specific error for invalid YAML/JSON
- 2020-11-06 Update README.md (#256)

2020.11.0
- 2020-11-04 TUN-3484: OriginService that responds with configured HTTP status
- 2020-11-05 TUN-3505: Response body for status code origin returns EOF on Read
- 2020-11-04 TUN-3503: Matching ingress rule should not take port into account
- 2020-11-05 TUN-3506: OriginService needs to set request host and scheme for websocket requests
- 2020-11-09 TUN-3516: Better error message when parsing invalid YAML config
- 2020-11-09 TUN-3522: ingress validate checks that the config file exists
- 2020-11-09 TUN-3524: Don't ignore errors from app-level action handler (#248)
- 2020-11-09 TUN-3461: Show all origin services in the UI
- 2020-10-30 TUN-3494: Proceed to create tunnel if at least one edge address can be resolved
- 2020-10-30 TUN-3492: Refactor OriginService, shrink its interface
- 2020-10-22 TUN-3478: Increase download timeout to 60s
- 2020-10-15 TUN-2640: Users can configure per-origin config. Unify single-rule CLI flow with multi-rule config file code.

2020.10.2
- 2020-10-21 Release 2020.10.1
- 2020-10-21 AUTH-3185 fixed indention error
- 2020-10-19 TUN-3459: Make service install on linux use named tunnels

2020.10.1
- 2020-10-20 Split out typed config from legacy command-line switches; refactor ingress commands and fix tests
- 2020-10-20 Move raw ingress rules to config package
- 2020-10-21 TUN-3476: Fix conversion to string and int slice
- 2020-10-12 TUN-3441:  Multiple-origin routing via ingress rules
- 2020-10-15 TUN-3464: Newtype to wrap []ingress.Rule
- 2020-10-15 TUN-3465: Use Go 1.15.3
- 2020-10-15 TUN-3463: Let users run a named tunnel via config file setting
- 2020-10-19 TUN-3475: Unify config file handling with typed config for new fields
- 2020-10-19 TUN-3459: Make service install on linux use named tunnels
- 2020-10-06 AUTH-3148 fixed cloudflared copy and match all the files in the checksum upload
- 2020-10-06 TUN-3436, TUN-3437: Parse ingress from YAML, ensure last rule catches everything
- 2020-10-06 TUN-3446: Use go 1.15.2 and add a step to build cloudflared in the dev Dockerfile
- 2020-10-07 TUN-3439: 'tunnel validate' command to check ingress rules
- 2020-10-07 TUN-3440: 'tunnel rule' command to test ingress rules
- 2020-10-08 TUN-3451: Cloudflared tunnel ingress command
- 2020-10-09 TUN-3452: Fix loading of flags from config file for tunnel run subcommand. This change also cleans up building of tunnel subcommand list, hides deprecated subcommands and improves help.
- 2020-10-08 TUN-3438: move ingress into own package, read into TunnelConfig

2020.10.0
- 2020-10-02 AUTH-2993 cleaned up worker service tests
- 2020-10-02 TUN-3443: Decode as v4api response on non-200 status
- 2020-09-24 TRAFFIC-448: allow the user to specify the proxy address and port to bind to, falling back to 127.0.0.1 and random port if not specified
- 2020-09-28 TUN-3427: Define a struct that only implements RegistrationServer in tunnelpogs
- 2020-09-29 TUN-3430: Copy flags to configure proxy to run subcommand, print relevant tunnel flags in help
- 2020-08-12 AUTH-2993 added workers updater logic

2020.9.3
- 2020-09-22 TRAFFIC-448: build cloudflare for junos and publish to s3
- 2020-09-22 TUN-3410: Request the v1 Tunnelstore API
- 2020-09-23 Release 2020.9.2
- 2020-09-17 updater service exit code should be 11
- 2020-09-18 AUTH-3109 upload the checksum to workers kv on github releases

2020.9.2
- 2020-09-22 TRAFFIC-448: build cloudflare for junos and publish to s3
- 2020-09-22 TUN-3410: Request the v1 Tunnelstore API
- 2020-09-17 AUTH-3103 CI build fixes
- 2020-09-18 AUTH-3110-use-cfsetup-precache
- 2020-09-17 TUN-3295: Show route command results
- 2020-09-16 TUN-3291: cloudflared tunnel run -h explains how to use flags from parent command
- 2020-09-18 AUTH-3109 upload the checksum to workers kv on github releases
- 2020-09-17 updater service exit code should be 11
- 2020-09-01 TUN-3216: UI improvements
- 2020-08-25 Rebased and passed TunnelEventChan to LogServerInfo in new ReconnectTunnel function
- 2020-08-25 TUN-3321: Add box around logs on UI
- 2020-08-26 TUN-3328: Filter out free tunnel has started log from UI
- 2020-08-27 TUN-3333: Add text to UI explaining how to exit
- 2020-08-27 TUN-3335: Dynamically set connection table size for UI
- 2020-08-10 TUN-3238: Update UI when connection re-connects
- 2020-08-17 TUN-3261: Display connections on UI for free classic tunnels
- 2020-07-24 TUN-3201: Create base cloudflared UI structure
- 2020-07-29 TUN-3200: Add connection information to UI
- 2020-07-24 TUN-3255: Update UI to display URL instead of hostname
- 2020-07-29 TUN-3198: Handle errors while running tunnel UI

2020.9.1
- 2020-09-14 TUN-3395: Unhide named tunnel subcommands, tweak help
- 2020-09-15 TUN-3395: Improve help for list command
- 2020-09-14 TUN-3294: Perform basic validation on arguments of route command; remove default pool name which wasn't valid
- 2020-09-15 TUN-3395: Improve help for list command
- 2020-09-16 Use Go 1.15.2

2020.9.0
- 2020-09-11 TUN-3293: Try to use error information from the body of a failed tunnelstore reresponse if available
- 2020-09-04 AUT
Download .txt
gitextract_x69hvzqa/

├── .ci/
│   ├── apt-internal.gitlab-ci.yml
│   ├── ci-image.gitlab-ci.yml
│   ├── commons.gitlab-ci.yml
│   ├── github.gitlab-ci.yml
│   ├── image/
│   │   ├── .docker-images
│   │   └── Dockerfile
│   ├── linux.gitlab-ci.yml
│   ├── mac.gitlab-ci.yml
│   ├── release.gitlab-ci.yml
│   ├── scripts/
│   │   ├── component-tests.sh
│   │   ├── fmt-check.sh
│   │   ├── github-push.sh
│   │   ├── linux/
│   │   │   ├── build-packages-fips.sh
│   │   │   └── build-packages.sh
│   │   ├── mac/
│   │   │   ├── build.sh
│   │   │   └── install-go.sh
│   │   ├── package-windows.sh
│   │   ├── release-target.sh
│   │   ├── vuln-check.sh
│   │   └── windows/
│   │       ├── builds.ps1
│   │       ├── component-test.ps1
│   │       ├── go-wrapper.ps1
│   │       └── sign-msi.ps1
│   └── windows.gitlab-ci.yml
├── .docker-images
├── .dockerignore
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── ---bug-report.md
│   │   ├── ---documentation.md
│   │   └── ---feature-request.md
│   └── workflows/
│       ├── check.yaml
│       └── semgrep.yml
├── .gitignore
├── .gitlab-ci.yml
├── .golangci.yaml
├── .mac_resources/
│   ├── scripts/
│   │   └── postinstall
│   └── uninstall.sh
├── .vulnignore
├── AGENTS.md
├── CHANGES.md
├── Dockerfile
├── Dockerfile.amd64
├── Dockerfile.arm64
├── LICENSE
├── Makefile
├── README.md
├── RELEASE_NOTES
├── carrier/
│   ├── carrier.go
│   ├── carrier_test.go
│   ├── websocket.go
│   └── websocket_test.go
├── catalog-info.yaml
├── cfapi/
│   ├── base_client.go
│   ├── client.go
│   ├── hostname.go
│   ├── hostname_test.go
│   ├── ip_route.go
│   ├── ip_route_filter.go
│   ├── ip_route_test.go
│   ├── tunnel.go
│   ├── tunnel_filter.go
│   ├── tunnel_test.go
│   ├── virtual_network.go
│   ├── virtual_network_filter.go
│   └── virtual_network_test.go
├── cfio/
│   └── copy.go
├── cfsetup.yaml
├── check-fips.sh
├── client/
│   ├── config.go
│   └── config_test.go
├── cloudflared.wxs
├── cloudflared_man_template
├── cmd/
│   └── cloudflared/
│       ├── access/
│       │   ├── carrier.go
│       │   ├── cmd.go
│       │   ├── validation.go
│       │   └── validation_test.go
│       ├── app_forward_service.go
│       ├── app_service.go
│       ├── cliutil/
│       │   ├── build_info.go
│       │   ├── deprecated.go
│       │   ├── errors.go
│       │   ├── handler.go
│       │   ├── logger.go
│       │   └── management.go
│       ├── common_service.go
│       ├── flags/
│       │   └── flags.go
│       ├── generic_service.go
│       ├── linux_service.go
│       ├── macos_service.go
│       ├── main.go
│       ├── management/
│       │   ├── cmd.go
│       │   └── cmd_test.go
│       ├── proxydns/
│       │   └── cmd.go
│       ├── service_template.go
│       ├── tail/
│       │   └── cmd.go
│       ├── tunnel/
│       │   ├── cmd.go
│       │   ├── cmd_test.go
│       │   ├── configuration.go
│       │   ├── configuration_test.go
│       │   ├── credential_finder.go
│       │   ├── filesystem.go
│       │   ├── info.go
│       │   ├── ingress_subcommands.go
│       │   ├── login.go
│       │   ├── quick_tunnel.go
│       │   ├── signal.go
│       │   ├── signal_test.go
│       │   ├── subcommand_context.go
│       │   ├── subcommand_context_teamnet.go
│       │   ├── subcommand_context_test.go
│       │   ├── subcommand_context_vnets.go
│       │   ├── subcommands.go
│       │   ├── subcommands_test.go
│       │   ├── tag.go
│       │   ├── tag_test.go
│       │   ├── teamnet_subcommands.go
│       │   └── vnets_subcommands.go
│       ├── updater/
│       │   ├── check.go
│       │   ├── service.go
│       │   ├── update.go
│       │   ├── update_test.go
│       │   ├── workers_service.go
│       │   ├── workers_service_test.go
│       │   └── workers_update.go
│       └── windows_service.go
├── component-tests/
│   ├── .gitignore
│   ├── README.md
│   ├── cli.py
│   ├── config.py
│   ├── config.yaml
│   ├── conftest.py
│   ├── constants.py
│   ├── requirements.txt
│   ├── setup.py
│   ├── test_config.py
│   ├── test_edge_discovery.py
│   ├── test_logging.py
│   ├── test_management.py
│   ├── test_pq.py
│   ├── test_quicktunnels.py
│   ├── test_reconnect.py
│   ├── test_service.py
│   ├── test_tail.py
│   ├── test_termination.py
│   ├── test_token.py
│   ├── test_tunnel.py
│   └── util.py
├── config/
│   ├── configuration.go
│   ├── configuration_test.go
│   ├── manager.go
│   ├── manager_test.go
│   └── model.go
├── connection/
│   ├── connection.go
│   ├── connection_test.go
│   ├── control.go
│   ├── errors.go
│   ├── event.go
│   ├── header.go
│   ├── header_test.go
│   ├── http2.go
│   ├── http2_test.go
│   ├── json.go
│   ├── metrics.go
│   ├── observer.go
│   ├── observer_test.go
│   ├── protocol.go
│   ├── protocol_test.go
│   ├── quic.go
│   ├── quic_connection.go
│   ├── quic_connection_test.go
│   ├── quic_datagram_v2.go
│   ├── quic_datagram_v2_test.go
│   ├── quic_datagram_v3.go
│   └── tunnelsforha.go
├── credentials/
│   ├── credentials.go
│   ├── credentials_test.go
│   ├── origin_cert.go
│   ├── origin_cert_test.go
│   ├── test-cert-no-token.pem
│   ├── test-cert-unknown-block.pem
│   └── test-cloudflare-tunnel-cert-json.pem
├── datagramsession/
│   ├── event.go
│   ├── manager.go
│   ├── manager_test.go
│   ├── metrics.go
│   ├── session.go
│   └── session_test.go
├── diagnostic/
│   ├── client.go
│   ├── consts.go
│   ├── diagnostic.go
│   ├── diagnostic_utils.go
│   ├── diagnostic_utils_test.go
│   ├── error.go
│   ├── handlers.go
│   ├── handlers_test.go
│   ├── log_collector.go
│   ├── log_collector_docker.go
│   ├── log_collector_host.go
│   ├── log_collector_kubernetes.go
│   ├── log_collector_utils.go
│   ├── network/
│   │   ├── collector.go
│   │   ├── collector_unix.go
│   │   ├── collector_unix_test.go
│   │   ├── collector_utils.go
│   │   ├── collector_windows.go
│   │   └── collector_windows_test.go
│   ├── system_collector.go
│   ├── system_collector_linux.go
│   ├── system_collector_macos.go
│   ├── system_collector_test.go
│   ├── system_collector_utils.go
│   └── system_collector_windows.go
├── edgediscovery/
│   ├── allregions/
│   │   ├── address.go
│   │   ├── address_test.go
│   │   ├── discovery.go
│   │   ├── discovery_test.go
│   │   ├── mocks_for_test.go
│   │   ├── region.go
│   │   ├── region_test.go
│   │   ├── regions.go
│   │   ├── regions_test.go
│   │   └── usedby.go
│   ├── dial.go
│   ├── edgediscovery.go
│   ├── edgediscovery_test.go
│   ├── mocks_for_test.go
│   ├── protocol.go
│   └── protocol_test.go
├── features/
│   ├── features.go
│   ├── selector.go
│   └── selector_test.go
├── fips/
│   ├── fips.go
│   └── nofips.go
├── flow/
│   ├── limiter.go
│   ├── limiter_test.go
│   └── metrics.go
├── github_message.py
├── github_release.py
├── go.mod
├── go.sum
├── hello/
│   ├── hello.go
│   └── hello_test.go
├── ingress/
│   ├── config.go
│   ├── config_test.go
│   ├── constants_test.go
│   ├── icmp_darwin.go
│   ├── icmp_darwin_test.go
│   ├── icmp_generic.go
│   ├── icmp_linux.go
│   ├── icmp_linux_test.go
│   ├── icmp_metrics.go
│   ├── icmp_posix.go
│   ├── icmp_posix_test.go
│   ├── icmp_windows.go
│   ├── icmp_windows_test.go
│   ├── ingress.go
│   ├── ingress_test.go
│   ├── middleware/
│   │   ├── jwtvalidator.go
│   │   ├── jwtvalidator_test.go
│   │   └── middleware.go
│   ├── origin_connection.go
│   ├── origin_connection_test.go
│   ├── origin_dialer.go
│   ├── origin_icmp_proxy.go
│   ├── origin_icmp_proxy_test.go
│   ├── origin_proxy.go
│   ├── origin_proxy_test.go
│   ├── origin_service.go
│   ├── origin_service_test.go
│   ├── origins/
│   │   ├── dns.go
│   │   ├── dns_test.go
│   │   ├── metrics.go
│   │   └── metrics_test.go
│   ├── packet_router.go
│   ├── packet_router_test.go
│   ├── rule.go
│   └── rule_test.go
├── internal/
│   └── test/
│       └── wstest.go
├── ipaccess/
│   ├── access.go
│   └── access_test.go
├── logger/
│   ├── configuration.go
│   ├── console.go
│   ├── console_test.go
│   ├── create.go
│   └── create_test.go
├── management/
│   ├── events.go
│   ├── events_test.go
│   ├── logger.go
│   ├── logger_test.go
│   ├── middleware.go
│   ├── middleware_test.go
│   ├── service.go
│   ├── service_test.go
│   ├── session.go
│   ├── session_test.go
│   ├── token.go
│   └── token_test.go
├── metrics/
│   ├── config.go
│   ├── metrics.go
│   ├── metrics_test.go
│   ├── readiness.go
│   └── readiness_test.go
├── mocks/
│   ├── mock_limiter.go
│   └── mockgen.go
├── orchestration/
│   ├── config.go
│   ├── config_test.go
│   ├── metrics.go
│   ├── orchestrator.go
│   └── orchestrator_test.go
├── overwatch/
│   ├── app_manager.go
│   ├── manager.go
│   └── manager_test.go
├── packet/
│   ├── decoder.go
│   ├── decoder_test.go
│   ├── encoder.go
│   ├── funnel.go
│   ├── funnel_test.go
│   ├── packet.go
│   ├── packet_test.go
│   └── session.go
├── postinst.sh
├── postrm.sh
├── proxy/
│   ├── logger.go
│   ├── metrics.go
│   ├── proxy.go
│   ├── proxy_posix_test.go
│   └── proxy_test.go
├── quic/
│   ├── constants.go
│   ├── conversion.go
│   ├── datagram.go
│   ├── datagram_test.go
│   ├── datagramv2.go
│   ├── metrics.go
│   ├── param_unix.go
│   ├── param_windows.go
│   ├── safe_stream.go
│   ├── safe_stream_test.go
│   ├── tracing.go
│   └── v3/
│       ├── datagram.go
│       ├── datagram_errors.go
│       ├── datagram_test.go
│       ├── icmp.go
│       ├── icmp_test.go
│       ├── manager.go
│       ├── manager_test.go
│       ├── metrics.go
│       ├── metrics_test.go
│       ├── muxer.go
│       ├── muxer_test.go
│       ├── request.go
│       ├── request_test.go
│       ├── session.go
│       ├── session_fuzz_test.go
│       └── session_test.go
├── release/
│   └── index.html
├── release_pkgs.py
├── retry/
│   ├── backoffhandler.go
│   └── backoffhandler_test.go
├── signal/
│   ├── safe_signal.go
│   └── safe_signal_test.go
├── socks/
│   ├── auth_handler.go
│   ├── authenticator.go
│   ├── connection_handler.go
│   ├── connection_handler_test.go
│   ├── dialer.go
│   ├── request.go
│   ├── request_handler.go
│   ├── request_handler_test.go
│   └── request_test.go
├── sshgen/
│   ├── sshgen.go
│   └── sshgen_test.go
├── stream/
│   ├── debug.go
│   ├── stream.go
│   └── stream_test.go
├── supervisor/
│   ├── conn_aware_logger.go
│   ├── external_control.go
│   ├── fuse.go
│   ├── metrics.go
│   ├── pqtunnels.go
│   ├── pqtunnels_test.go
│   ├── supervisor.go
│   ├── tunnel.go
│   ├── tunnel_test.go
│   └── tunnelsforha.go
├── tlsconfig/
│   ├── certreloader.go
│   ├── cloudflare_ca.go
│   ├── hello_ca.go
│   ├── testcert.pem
│   ├── testcert2.pem
│   ├── testkey.pem
│   ├── tlsconfig.go
│   └── tlsconfig_test.go
├── token/
│   ├── encrypt.go
│   ├── launch_browser_darwin.go
│   ├── launch_browser_other.go
│   ├── launch_browser_unix.go
│   ├── launch_browser_windows.go
│   ├── path.go
│   ├── shell.go
│   ├── signal_test.go
│   ├── token.go
│   ├── token_test.go
│   └── transfer.go
├── tracing/
│   ├── client.go
│   ├── client_test.go
│   ├── identity.go
│   ├── identity_test.go
│   ├── tracing.go
│   └── tracing_test.go
├── tunnelrpc/
│   ├── metrics/
│   │   └── metrics.go
│   ├── pogs/
│   │   ├── cloudflared_server.go
│   │   ├── configuration_manager.go
│   │   ├── errors.go
│   │   ├── quic_metadata_protocol.go
│   │   ├── registration_server.go
│   │   ├── registration_server_test.go
│   │   ├── session_manager.go
│   │   └── tag.go
│   ├── proto/
│   │   ├── go.capnp
│   │   ├── quic_metadata_protocol.capnp
│   │   ├── quic_metadata_protocol.capnp.go
│   │   ├── tunnelrpc.capnp
│   │   └── tunnelrpc.capnp.go
│   ├── quic/
│   │   ├── cloudflared_client.go
│   │   ├── cloudflared_server.go
│   │   ├── protocol.go
│   │   ├── request_client_stream.go
│   │   ├── request_server_stream.go
│   │   ├── request_server_stream_test.go
│   │   ├── session_client.go
│   │   └── session_server.go
│   ├── registration_client.go
│   ├── registration_server.go
│   └── utils.go
├── tunnelstate/
│   └── conntracker.go
├── validation/
│   ├── validation.go
│   └── validation_test.go
├── vendor/
│   ├── github.com/
│   │   ├── BurntSushi/
│   │   │   └── toml/
│   │   │       ├── .gitignore
│   │   │       ├── COPYING
│   │   │       ├── README.md
│   │   │       ├── decode.go
│   │   │       ├── decode_go116.go
│   │   │       ├── deprecated.go
│   │   │       ├── doc.go
│   │   │       ├── encode.go
│   │   │       ├── error.go
│   │   │       ├── internal/
│   │   │       │   └── tz.go
│   │   │       ├── lex.go
│   │   │       ├── meta.go
│   │   │       ├── parse.go
│   │   │       ├── type_fields.go
│   │   │       └── type_toml.go
│   │   ├── beorn7/
│   │   │   └── perks/
│   │   │       ├── LICENSE
│   │   │       └── quantile/
│   │   │           ├── exampledata.txt
│   │   │           └── stream.go
│   │   ├── cespare/
│   │   │   └── xxhash/
│   │   │       └── v2/
│   │   │           ├── LICENSE.txt
│   │   │           ├── README.md
│   │   │           ├── testall.sh
│   │   │           ├── xxhash.go
│   │   │           ├── xxhash_amd64.s
│   │   │           ├── xxhash_arm64.s
│   │   │           ├── xxhash_asm.go
│   │   │           ├── xxhash_other.go
│   │   │           ├── xxhash_safe.go
│   │   │           └── xxhash_unsafe.go
│   │   ├── coreos/
│   │   │   ├── go-oidc/
│   │   │   │   └── v3/
│   │   │   │       ├── LICENSE
│   │   │   │       ├── NOTICE
│   │   │   │       └── oidc/
│   │   │   │           ├── jose.go
│   │   │   │           ├── jwks.go
│   │   │   │           ├── oidc.go
│   │   │   │           └── verify.go
│   │   │   └── go-systemd/
│   │   │       └── v22/
│   │   │           ├── LICENSE
│   │   │           ├── NOTICE
│   │   │           └── daemon/
│   │   │               ├── sdnotify.go
│   │   │               └── watchdog.go
│   │   ├── cpuguy83/
│   │   │   └── go-md2man/
│   │   │       └── v2/
│   │   │           ├── LICENSE.md
│   │   │           └── md2man/
│   │   │               ├── md2man.go
│   │   │               └── roff.go
│   │   ├── davecgh/
│   │   │   └── go-spew/
│   │   │       ├── LICENSE
│   │   │       └── spew/
│   │   │           ├── bypass.go
│   │   │           ├── bypasssafe.go
│   │   │           ├── common.go
│   │   │           ├── config.go
│   │   │           ├── doc.go
│   │   │           ├── dump.go
│   │   │           ├── format.go
│   │   │           └── spew.go
│   │   ├── facebookgo/
│   │   │   └── grace/
│   │   │       └── gracenet/
│   │   │           └── net.go
│   │   ├── fortytw2/
│   │   │   └── leaktest/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       └── leaktest.go
│   │   ├── fsnotify/
│   │   │   └── fsnotify/
│   │   │       ├── .editorconfig
│   │   │       ├── .gitattributes
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── AUTHORS
│   │   │       ├── CHANGELOG.md
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── fen.go
│   │   │       ├── fsnotify.go
│   │   │       ├── inotify.go
│   │   │       ├── inotify_poller.go
│   │   │       ├── kqueue.go
│   │   │       ├── open_mode_bsd.go
│   │   │       ├── open_mode_darwin.go
│   │   │       └── windows.go
│   │   ├── getsentry/
│   │   │   └── sentry-go/
│   │   │       ├── .codecov.yml
│   │   │       ├── .craft.yml
│   │   │       ├── .gitattributes
│   │   │       ├── .gitignore
│   │   │       ├── .golangci.yml
│   │   │       ├── CHANGELOG.md
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── LICENSE
│   │   │       ├── MIGRATION.md
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── attribute/
│   │   │       │   ├── builder.go
│   │   │       │   ├── rawhelpers.go
│   │   │       │   └── value.go
│   │   │       ├── batch_processor.go
│   │   │       ├── check_in.go
│   │   │       ├── client.go
│   │   │       ├── doc.go
│   │   │       ├── dsn.go
│   │   │       ├── dynamic_sampling_context.go
│   │   │       ├── exception.go
│   │   │       ├── hub.go
│   │   │       ├── integrations.go
│   │   │       ├── interfaces.go
│   │   │       ├── internal/
│   │   │       │   ├── debug/
│   │   │       │   │   └── transport.go
│   │   │       │   ├── debuglog/
│   │   │       │   │   └── log.go
│   │   │       │   ├── http/
│   │   │       │   │   └── transport.go
│   │   │       │   ├── otel/
│   │   │       │   │   └── baggage/
│   │   │       │   │       ├── README.md
│   │   │       │   │       ├── baggage.go
│   │   │       │   │       └── internal/
│   │   │       │   │           └── baggage/
│   │   │       │   │               └── baggage.go
│   │   │       │   ├── protocol/
│   │   │       │   │   ├── dsn.go
│   │   │       │   │   ├── envelope.go
│   │   │       │   │   ├── interfaces.go
│   │   │       │   │   ├── log_batch.go
│   │   │       │   │   ├── metric_batch.go
│   │   │       │   │   ├── types.go
│   │   │       │   │   └── uuid.go
│   │   │       │   ├── ratelimit/
│   │   │       │   │   ├── category.go
│   │   │       │   │   ├── deadline.go
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── map.go
│   │   │       │   │   ├── rate_limits.go
│   │   │       │   │   └── retry_after.go
│   │   │       │   ├── telemetry/
│   │   │       │   │   ├── bucketed_buffer.go
│   │   │       │   │   ├── buffer.go
│   │   │       │   │   ├── processor.go
│   │   │       │   │   ├── ring_buffer.go
│   │   │       │   │   ├── scheduler.go
│   │   │       │   │   └── trace_aware.go
│   │   │       │   └── util/
│   │   │       │       ├── map.go
│   │   │       │       └── util.go
│   │   │       ├── log.go
│   │   │       ├── log_batch_processor.go
│   │   │       ├── log_fallback.go
│   │   │       ├── metric_batch_processor.go
│   │   │       ├── metrics.go
│   │   │       ├── mocks.go
│   │   │       ├── propagation_context.go
│   │   │       ├── scope.go
│   │   │       ├── sentry.go
│   │   │       ├── sourcereader.go
│   │   │       ├── span_recorder.go
│   │   │       ├── stacktrace.go
│   │   │       ├── traces_sampler.go
│   │   │       ├── tracing.go
│   │   │       ├── transport.go
│   │   │       └── util.go
│   │   ├── go-chi/
│   │   │   ├── chi/
│   │   │   │   └── v5/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── CHANGELOG.md
│   │   │   │       ├── CONTRIBUTING.md
│   │   │   │       ├── LICENSE
│   │   │   │       ├── Makefile
│   │   │   │       ├── README.md
│   │   │   │       ├── SECURITY.md
│   │   │   │       ├── chain.go
│   │   │   │       ├── chi.go
│   │   │   │       ├── context.go
│   │   │   │       ├── mux.go
│   │   │   │       ├── path_value.go
│   │   │   │       ├── path_value_fallback.go
│   │   │   │       └── tree.go
│   │   │   └── cors/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── cors.go
│   │   │       └── utils.go
│   │   ├── go-jose/
│   │   │   └── go-jose/
│   │   │       └── v4/
│   │   │           ├── .gitignore
│   │   │           ├── .golangci.yml
│   │   │           ├── .travis.yml
│   │   │           ├── CONTRIBUTING.md
│   │   │           ├── LICENSE
│   │   │           ├── README.md
│   │   │           ├── SECURITY.md
│   │   │           ├── asymmetric.go
│   │   │           ├── cipher/
│   │   │           │   ├── cbc_hmac.go
│   │   │           │   ├── concat_kdf.go
│   │   │           │   ├── ecdh_es.go
│   │   │           │   └── key_wrap.go
│   │   │           ├── crypter.go
│   │   │           ├── doc.go
│   │   │           ├── encoding.go
│   │   │           ├── json/
│   │   │           │   ├── LICENSE
│   │   │           │   ├── README.md
│   │   │           │   ├── decode.go
│   │   │           │   ├── encode.go
│   │   │           │   ├── indent.go
│   │   │           │   ├── scanner.go
│   │   │           │   ├── stream.go
│   │   │           │   └── tags.go
│   │   │           ├── jwe.go
│   │   │           ├── jwk.go
│   │   │           ├── jws.go
│   │   │           ├── jwt/
│   │   │           │   ├── builder.go
│   │   │           │   ├── claims.go
│   │   │           │   ├── doc.go
│   │   │           │   ├── errors.go
│   │   │           │   ├── jwt.go
│   │   │           │   └── validation.go
│   │   │           ├── opaque.go
│   │   │           ├── shared.go
│   │   │           ├── signing.go
│   │   │           └── symmetric.go
│   │   ├── go-logr/
│   │   │   ├── logr/
│   │   │   │   ├── .golangci.yaml
│   │   │   │   ├── CHANGELOG.md
│   │   │   │   ├── CONTRIBUTING.md
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── SECURITY.md
│   │   │   │   ├── context.go
│   │   │   │   ├── context_noslog.go
│   │   │   │   ├── context_slog.go
│   │   │   │   ├── discard.go
│   │   │   │   ├── funcr/
│   │   │   │   │   ├── funcr.go
│   │   │   │   │   └── slogsink.go
│   │   │   │   ├── logr.go
│   │   │   │   ├── sloghandler.go
│   │   │   │   ├── slogr.go
│   │   │   │   └── slogsink.go
│   │   │   └── stdr/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       └── stdr.go
│   │   ├── gobwas/
│   │   │   ├── httphead/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── cookie.go
│   │   │   │   ├── head.go
│   │   │   │   ├── httphead.go
│   │   │   │   ├── lexer.go
│   │   │   │   ├── octet.go
│   │   │   │   ├── option.go
│   │   │   │   └── writer.go
│   │   │   ├── pool/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── generic.go
│   │   │   │   ├── internal/
│   │   │   │   │   └── pmath/
│   │   │   │   │       └── pmath.go
│   │   │   │   ├── option.go
│   │   │   │   ├── pbufio/
│   │   │   │   │   ├── pbufio.go
│   │   │   │   │   ├── pbufio_go110.go
│   │   │   │   │   └── pbufio_go19.go
│   │   │   │   ├── pbytes/
│   │   │   │   │   ├── pbytes.go
│   │   │   │   │   ├── pool.go
│   │   │   │   │   └── pool_sanitize.go
│   │   │   │   └── pool.go
│   │   │   └── ws/
│   │   │       ├── .gitignore
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── check.go
│   │   │       ├── cipher.go
│   │   │       ├── dialer.go
│   │   │       ├── dialer_tls_go17.go
│   │   │       ├── dialer_tls_go18.go
│   │   │       ├── doc.go
│   │   │       ├── errors.go
│   │   │       ├── frame.go
│   │   │       ├── http.go
│   │   │       ├── nonce.go
│   │   │       ├── read.go
│   │   │       ├── server.go
│   │   │       ├── util.go
│   │   │       ├── util_purego.go
│   │   │       ├── util_unsafe.go
│   │   │       ├── write.go
│   │   │       └── wsutil/
│   │   │           ├── cipher.go
│   │   │           ├── dialer.go
│   │   │           ├── extenstion.go
│   │   │           ├── handler.go
│   │   │           ├── helper.go
│   │   │           ├── reader.go
│   │   │           ├── upgrader.go
│   │   │           ├── utf8.go
│   │   │           ├── writer.go
│   │   │           └── wsutil.go
│   │   ├── google/
│   │   │   ├── gopacket/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── .travis.gofmt.sh
│   │   │   │   ├── .travis.golint.sh
│   │   │   │   ├── .travis.govet.sh
│   │   │   │   ├── .travis.install.sh
│   │   │   │   ├── .travis.script.sh
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── AUTHORS
│   │   │   │   ├── CONTRIBUTING.md
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── base.go
│   │   │   │   ├── decode.go
│   │   │   │   ├── doc.go
│   │   │   │   ├── flows.go
│   │   │   │   ├── gc
│   │   │   │   ├── layerclass.go
│   │   │   │   ├── layers/
│   │   │   │   │   ├── .lint_blacklist
│   │   │   │   │   ├── arp.go
│   │   │   │   │   ├── asf.go
│   │   │   │   │   ├── asf_presencepong.go
│   │   │   │   │   ├── base.go
│   │   │   │   │   ├── bfd.go
│   │   │   │   │   ├── cdp.go
│   │   │   │   │   ├── ctp.go
│   │   │   │   │   ├── dhcpv4.go
│   │   │   │   │   ├── dhcpv6.go
│   │   │   │   │   ├── dhcpv6_options.go
│   │   │   │   │   ├── dns.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── dot11.go
│   │   │   │   │   ├── dot1q.go
│   │   │   │   │   ├── eap.go
│   │   │   │   │   ├── eapol.go
│   │   │   │   │   ├── endpoints.go
│   │   │   │   │   ├── enums.go
│   │   │   │   │   ├── enums_generated.go
│   │   │   │   │   ├── erspan2.go
│   │   │   │   │   ├── etherip.go
│   │   │   │   │   ├── ethernet.go
│   │   │   │   │   ├── fddi.go
│   │   │   │   │   ├── fuzz_layer.go
│   │   │   │   │   ├── gen_linted.sh
│   │   │   │   │   ├── geneve.go
│   │   │   │   │   ├── gre.go
│   │   │   │   │   ├── gtp.go
│   │   │   │   │   ├── iana_ports.go
│   │   │   │   │   ├── icmp4.go
│   │   │   │   │   ├── icmp6.go
│   │   │   │   │   ├── icmp6msg.go
│   │   │   │   │   ├── igmp.go
│   │   │   │   │   ├── ip4.go
│   │   │   │   │   ├── ip6.go
│   │   │   │   │   ├── ipsec.go
│   │   │   │   │   ├── layertypes.go
│   │   │   │   │   ├── lcm.go
│   │   │   │   │   ├── linux_sll.go
│   │   │   │   │   ├── llc.go
│   │   │   │   │   ├── lldp.go
│   │   │   │   │   ├── loopback.go
│   │   │   │   │   ├── mldv1.go
│   │   │   │   │   ├── mldv2.go
│   │   │   │   │   ├── modbustcp.go
│   │   │   │   │   ├── mpls.go
│   │   │   │   │   ├── ndp.go
│   │   │   │   │   ├── ntp.go
│   │   │   │   │   ├── ospf.go
│   │   │   │   │   ├── pflog.go
│   │   │   │   │   ├── ports.go
│   │   │   │   │   ├── ppp.go
│   │   │   │   │   ├── pppoe.go
│   │   │   │   │   ├── prism.go
│   │   │   │   │   ├── radiotap.go
│   │   │   │   │   ├── radius.go
│   │   │   │   │   ├── rmcp.go
│   │   │   │   │   ├── rudp.go
│   │   │   │   │   ├── sctp.go
│   │   │   │   │   ├── sflow.go
│   │   │   │   │   ├── sip.go
│   │   │   │   │   ├── stp.go
│   │   │   │   │   ├── tcp.go
│   │   │   │   │   ├── tcpip.go
│   │   │   │   │   ├── test_creator.py
│   │   │   │   │   ├── tls.go
│   │   │   │   │   ├── tls_alert.go
│   │   │   │   │   ├── tls_appdata.go
│   │   │   │   │   ├── tls_cipherspec.go
│   │   │   │   │   ├── tls_handshake.go
│   │   │   │   │   ├── udp.go
│   │   │   │   │   ├── udplite.go
│   │   │   │   │   ├── usb.go
│   │   │   │   │   ├── vrrp.go
│   │   │   │   │   └── vxlan.go
│   │   │   │   ├── layers_decoder.go
│   │   │   │   ├── layertype.go
│   │   │   │   ├── packet.go
│   │   │   │   ├── parser.go
│   │   │   │   ├── time.go
│   │   │   │   └── writer.go
│   │   │   ├── pprof/
│   │   │   │   ├── AUTHORS
│   │   │   │   ├── CONTRIBUTORS
│   │   │   │   ├── LICENSE
│   │   │   │   └── profile/
│   │   │   │       ├── encode.go
│   │   │   │       ├── filter.go
│   │   │   │       ├── index.go
│   │   │   │       ├── legacy_java_profile.go
│   │   │   │       ├── legacy_profile.go
│   │   │   │       ├── merge.go
│   │   │   │       ├── profile.go
│   │   │   │       ├── proto.go
│   │   │   │       └── prune.go
│   │   │   └── uuid/
│   │   │       ├── CHANGELOG.md
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── dce.go
│   │   │       ├── doc.go
│   │   │       ├── hash.go
│   │   │       ├── marshal.go
│   │   │       ├── node.go
│   │   │       ├── node_js.go
│   │   │       ├── node_net.go
│   │   │       ├── null.go
│   │   │       ├── sql.go
│   │   │       ├── time.go
│   │   │       ├── util.go
│   │   │       ├── uuid.go
│   │   │       ├── version1.go
│   │   │       ├── version4.go
│   │   │       ├── version6.go
│   │   │       └── version7.go
│   │   ├── gorilla/
│   │   │   └── websocket/
│   │   │       ├── .gitignore
│   │   │       ├── AUTHORS
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── client.go
│   │   │       ├── compression.go
│   │   │       ├── conn.go
│   │   │       ├── doc.go
│   │   │       ├── join.go
│   │   │       ├── json.go
│   │   │       ├── mask.go
│   │   │       ├── mask_safe.go
│   │   │       ├── prepared.go
│   │   │       ├── proxy.go
│   │   │       ├── server.go
│   │   │       ├── tls_handshake.go
│   │   │       ├── tls_handshake_116.go
│   │   │       ├── util.go
│   │   │       └── x_net_proxy.go
│   │   ├── grpc-ecosystem/
│   │   │   └── grpc-gateway/
│   │   │       └── v2/
│   │   │           ├── LICENSE
│   │   │           ├── internal/
│   │   │           │   └── httprule/
│   │   │           │       ├── BUILD.bazel
│   │   │           │       ├── compile.go
│   │   │           │       ├── fuzz.go
│   │   │           │       ├── parse.go
│   │   │           │       └── types.go
│   │   │           ├── runtime/
│   │   │           │   ├── BUILD.bazel
│   │   │           │   ├── context.go
│   │   │           │   ├── convert.go
│   │   │           │   ├── doc.go
│   │   │           │   ├── errors.go
│   │   │           │   ├── fieldmask.go
│   │   │           │   ├── handler.go
│   │   │           │   ├── marshal_httpbodyproto.go
│   │   │           │   ├── marshal_json.go
│   │   │           │   ├── marshal_jsonpb.go
│   │   │           │   ├── marshal_proto.go
│   │   │           │   ├── marshaler.go
│   │   │           │   ├── marshaler_registry.go
│   │   │           │   ├── mux.go
│   │   │           │   ├── pattern.go
│   │   │           │   ├── proto2_convert.go
│   │   │           │   └── query.go
│   │   │           └── utilities/
│   │   │               ├── BUILD.bazel
│   │   │               ├── doc.go
│   │   │               ├── pattern.go
│   │   │               ├── readerfactory.go
│   │   │               ├── string_array_flag.go
│   │   │               └── trie.go
│   │   ├── klauspost/
│   │   │   └── compress/
│   │   │       ├── LICENSE
│   │   │       ├── flate/
│   │   │       │   ├── deflate.go
│   │   │       │   ├── dict_decoder.go
│   │   │       │   ├── fast_encoder.go
│   │   │       │   ├── huffman_bit_writer.go
│   │   │       │   ├── huffman_code.go
│   │   │       │   ├── huffman_sortByFreq.go
│   │   │       │   ├── huffman_sortByLiteral.go
│   │   │       │   ├── inflate.go
│   │   │       │   ├── inflate_gen.go
│   │   │       │   ├── level1.go
│   │   │       │   ├── level2.go
│   │   │       │   ├── level3.go
│   │   │       │   ├── level4.go
│   │   │       │   ├── level5.go
│   │   │       │   ├── level6.go
│   │   │       │   ├── matchlen_generic.go
│   │   │       │   ├── regmask_amd64.go
│   │   │       │   ├── regmask_other.go
│   │   │       │   ├── stateless.go
│   │   │       │   └── token.go
│   │   │       └── internal/
│   │   │           └── le/
│   │   │               ├── le.go
│   │   │               ├── unsafe_disabled.go
│   │   │               └── unsafe_enabled.go
│   │   ├── mattn/
│   │   │   ├── go-colorable/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── colorable_appengine.go
│   │   │   │   ├── colorable_others.go
│   │   │   │   ├── colorable_windows.go
│   │   │   │   ├── go.test.sh
│   │   │   │   └── noncolorable.go
│   │   │   └── go-isatty/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── doc.go
│   │   │       ├── go.test.sh
│   │   │       ├── isatty_bsd.go
│   │   │       ├── isatty_others.go
│   │   │       ├── isatty_plan9.go
│   │   │       ├── isatty_solaris.go
│   │   │       ├── isatty_tcgets.go
│   │   │       └── isatty_windows.go
│   │   ├── mitchellh/
│   │   │   └── go-homedir/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       └── homedir.go
│   │   ├── modern-go/
│   │   │   └── concurrent/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── executor.go
│   │   │       ├── go_above_19.go
│   │   │       ├── go_below_19.go
│   │   │       ├── log.go
│   │   │       ├── test.sh
│   │   │       └── unbounded_executor.go
│   │   ├── munnerz/
│   │   │   └── goautoneg/
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.txt
│   │   │       └── autoneg.go
│   │   ├── onsi/
│   │   │   └── ginkgo/
│   │   │       └── v2/
│   │   │           ├── LICENSE
│   │   │           ├── config/
│   │   │           │   └── deprecated.go
│   │   │           ├── formatter/
│   │   │           │   ├── colorable_others.go
│   │   │           │   ├── colorable_windows.go
│   │   │           │   └── formatter.go
│   │   │           ├── ginkgo/
│   │   │           │   ├── build/
│   │   │           │   │   └── build_command.go
│   │   │           │   ├── command/
│   │   │           │   │   ├── abort.go
│   │   │           │   │   ├── command.go
│   │   │           │   │   └── program.go
│   │   │           │   ├── generators/
│   │   │           │   │   ├── boostrap_templates.go
│   │   │           │   │   ├── bootstrap_command.go
│   │   │           │   │   ├── generate_command.go
│   │   │           │   │   ├── generate_templates.go
│   │   │           │   │   └── generators_common.go
│   │   │           │   ├── internal/
│   │   │           │   │   ├── compile.go
│   │   │           │   │   ├── gocovmerge.go
│   │   │           │   │   ├── profiles_and_reports.go
│   │   │           │   │   ├── run.go
│   │   │           │   │   ├── test_suite.go
│   │   │           │   │   ├── utils.go
│   │   │           │   │   └── verify_version.go
│   │   │           │   ├── labels/
│   │   │           │   │   └── labels_command.go
│   │   │           │   ├── main.go
│   │   │           │   ├── outline/
│   │   │           │   │   ├── ginkgo.go
│   │   │           │   │   ├── import.go
│   │   │           │   │   ├── outline.go
│   │   │           │   │   └── outline_command.go
│   │   │           │   ├── run/
│   │   │           │   │   └── run_command.go
│   │   │           │   ├── unfocus/
│   │   │           │   │   └── unfocus_command.go
│   │   │           │   └── watch/
│   │   │           │       ├── delta.go
│   │   │           │       ├── delta_tracker.go
│   │   │           │       ├── dependencies.go
│   │   │           │       ├── package_hash.go
│   │   │           │       ├── package_hashes.go
│   │   │           │       ├── suite.go
│   │   │           │       └── watch_command.go
│   │   │           ├── internal/
│   │   │           │   ├── interrupt_handler/
│   │   │           │   │   ├── interrupt_handler.go
│   │   │           │   │   ├── sigquit_swallower_unix.go
│   │   │           │   │   └── sigquit_swallower_windows.go
│   │   │           │   └── parallel_support/
│   │   │           │       ├── client_server.go
│   │   │           │       ├── http_client.go
│   │   │           │       ├── http_server.go
│   │   │           │       ├── rpc_client.go
│   │   │           │       ├── rpc_server.go
│   │   │           │       └── server_handler.go
│   │   │           ├── reporters/
│   │   │           │   ├── default_reporter.go
│   │   │           │   ├── deprecated_reporter.go
│   │   │           │   ├── json_report.go
│   │   │           │   ├── junit_report.go
│   │   │           │   ├── reporter.go
│   │   │           │   └── teamcity_report.go
│   │   │           └── types/
│   │   │               ├── code_location.go
│   │   │               ├── config.go
│   │   │               ├── deprecated_types.go
│   │   │               ├── deprecation_support.go
│   │   │               ├── enum_support.go
│   │   │               ├── errors.go
│   │   │               ├── file_filter.go
│   │   │               ├── flags.go
│   │   │               ├── label_filter.go
│   │   │               ├── report_entry.go
│   │   │               ├── types.go
│   │   │               └── version.go
│   │   ├── pkg/
│   │   │   └── errors/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── appveyor.yml
│   │   │       ├── errors.go
│   │   │       ├── go113.go
│   │   │       └── stack.go
│   │   ├── pmezard/
│   │   │   └── go-difflib/
│   │   │       ├── LICENSE
│   │   │       └── difflib/
│   │   │           └── difflib.go
│   │   ├── prometheus/
│   │   │   ├── client_golang/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   ├── internal/
│   │   │   │   │   └── github.com/
│   │   │   │   │       └── golang/
│   │   │   │   │           └── gddo/
│   │   │   │   │               ├── LICENSE
│   │   │   │   │               └── httputil/
│   │   │   │   │                   ├── header/
│   │   │   │   │                   │   └── header.go
│   │   │   │   │                   └── negotiate.go
│   │   │   │   └── prometheus/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── README.md
│   │   │   │       ├── build_info_collector.go
│   │   │   │       ├── collector.go
│   │   │   │       ├── collectorfunc.go
│   │   │   │       ├── counter.go
│   │   │   │       ├── desc.go
│   │   │   │       ├── doc.go
│   │   │   │       ├── expvar_collector.go
│   │   │   │       ├── fnv.go
│   │   │   │       ├── gauge.go
│   │   │   │       ├── get_pid.go
│   │   │   │       ├── get_pid_gopherjs.go
│   │   │   │       ├── go_collector.go
│   │   │   │       ├── go_collector_go116.go
│   │   │   │       ├── go_collector_latest.go
│   │   │   │       ├── histogram.go
│   │   │   │       ├── internal/
│   │   │   │       │   ├── almost_equal.go
│   │   │   │       │   ├── difflib.go
│   │   │   │       │   ├── go_collector_options.go
│   │   │   │       │   ├── go_runtime_metrics.go
│   │   │   │       │   └── metric.go
│   │   │   │       ├── labels.go
│   │   │   │       ├── metric.go
│   │   │   │       ├── num_threads.go
│   │   │   │       ├── num_threads_gopherjs.go
│   │   │   │       ├── observer.go
│   │   │   │       ├── process_collector.go
│   │   │   │       ├── process_collector_darwin.go
│   │   │   │       ├── process_collector_mem_cgo_darwin.c
│   │   │   │       ├── process_collector_mem_cgo_darwin.go
│   │   │   │       ├── process_collector_mem_nocgo_darwin.go
│   │   │   │       ├── process_collector_not_supported.go
│   │   │   │       ├── process_collector_procfsenabled.go
│   │   │   │       ├── process_collector_windows.go
│   │   │   │       ├── promauto/
│   │   │   │       │   └── auto.go
│   │   │   │       ├── promhttp/
│   │   │   │       │   ├── delegator.go
│   │   │   │       │   ├── http.go
│   │   │   │       │   ├── instrument_client.go
│   │   │   │       │   ├── instrument_server.go
│   │   │   │       │   ├── internal/
│   │   │   │       │   │   └── compression.go
│   │   │   │       │   └── option.go
│   │   │   │       ├── registry.go
│   │   │   │       ├── summary.go
│   │   │   │       ├── timer.go
│   │   │   │       ├── untyped.go
│   │   │   │       ├── value.go
│   │   │   │       ├── vec.go
│   │   │   │       ├── vnext.go
│   │   │   │       └── wrap.go
│   │   │   ├── client_model/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   └── go/
│   │   │   │       └── metrics.pb.go
│   │   │   ├── common/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   ├── expfmt/
│   │   │   │   │   ├── decode.go
│   │   │   │   │   ├── encode.go
│   │   │   │   │   ├── expfmt.go
│   │   │   │   │   ├── fuzz.go
│   │   │   │   │   ├── openmetrics_create.go
│   │   │   │   │   ├── text_create.go
│   │   │   │   │   └── text_parse.go
│   │   │   │   └── model/
│   │   │   │       ├── alert.go
│   │   │   │       ├── fingerprinting.go
│   │   │   │       ├── fnv.go
│   │   │   │       ├── labels.go
│   │   │   │       ├── labelset.go
│   │   │   │       ├── labelset_string.go
│   │   │   │       ├── metadata.go
│   │   │   │       ├── metric.go
│   │   │   │       ├── model.go
│   │   │   │       ├── signature.go
│   │   │   │       ├── silence.go
│   │   │   │       ├── time.go
│   │   │   │       ├── value.go
│   │   │   │       ├── value_float.go
│   │   │   │       ├── value_histogram.go
│   │   │   │       └── value_type.go
│   │   │   └── procfs/
│   │   │       ├── .gitignore
│   │   │       ├── .golangci.yml
│   │   │       ├── CODE_OF_CONDUCT.md
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── LICENSE
│   │   │       ├── MAINTAINERS.md
│   │   │       ├── Makefile
│   │   │       ├── Makefile.common
│   │   │       ├── NOTICE
│   │   │       ├── README.md
│   │   │       ├── SECURITY.md
│   │   │       ├── arp.go
│   │   │       ├── buddyinfo.go
│   │   │       ├── cmdline.go
│   │   │       ├── cpuinfo.go
│   │   │       ├── cpuinfo_armx.go
│   │   │       ├── cpuinfo_loong64.go
│   │   │       ├── cpuinfo_mipsx.go
│   │   │       ├── cpuinfo_others.go
│   │   │       ├── cpuinfo_ppcx.go
│   │   │       ├── cpuinfo_riscvx.go
│   │   │       ├── cpuinfo_s390x.go
│   │   │       ├── cpuinfo_x86.go
│   │   │       ├── crypto.go
│   │   │       ├── doc.go
│   │   │       ├── fs.go
│   │   │       ├── fs_statfs_notype.go
│   │   │       ├── fs_statfs_type.go
│   │   │       ├── fscache.go
│   │   │       ├── internal/
│   │   │       │   ├── fs/
│   │   │       │   │   └── fs.go
│   │   │       │   └── util/
│   │   │       │       ├── parse.go
│   │   │       │       ├── readfile.go
│   │   │       │       ├── sysreadfile.go
│   │   │       │       ├── sysreadfile_compat.go
│   │   │       │       └── valueparser.go
│   │   │       ├── ipvs.go
│   │   │       ├── kernel_random.go
│   │   │       ├── loadavg.go
│   │   │       ├── mdstat.go
│   │   │       ├── meminfo.go
│   │   │       ├── mountinfo.go
│   │   │       ├── mountstats.go
│   │   │       ├── net_conntrackstat.go
│   │   │       ├── net_dev.go
│   │   │       ├── net_ip_socket.go
│   │   │       ├── net_protocols.go
│   │   │       ├── net_route.go
│   │   │       ├── net_sockstat.go
│   │   │       ├── net_softnet.go
│   │   │       ├── net_tcp.go
│   │   │       ├── net_tls_stat.go
│   │   │       ├── net_udp.go
│   │   │       ├── net_unix.go
│   │   │       ├── net_wireless.go
│   │   │       ├── net_xfrm.go
│   │   │       ├── netstat.go
│   │   │       ├── proc.go
│   │   │       ├── proc_cgroup.go
│   │   │       ├── proc_cgroups.go
│   │   │       ├── proc_environ.go
│   │   │       ├── proc_fdinfo.go
│   │   │       ├── proc_interrupts.go
│   │   │       ├── proc_io.go
│   │   │       ├── proc_limits.go
│   │   │       ├── proc_maps.go
│   │   │       ├── proc_netstat.go
│   │   │       ├── proc_ns.go
│   │   │       ├── proc_psi.go
│   │   │       ├── proc_smaps.go
│   │   │       ├── proc_snmp.go
│   │   │       ├── proc_snmp6.go
│   │   │       ├── proc_stat.go
│   │   │       ├── proc_status.go
│   │   │       ├── proc_sys.go
│   │   │       ├── schedstat.go
│   │   │       ├── slab.go
│   │   │       ├── softirqs.go
│   │   │       ├── stat.go
│   │   │       ├── swaps.go
│   │   │       ├── thread.go
│   │   │       ├── ttar
│   │   │       ├── vm.go
│   │   │       └── zoneinfo.go
│   │   ├── quic-go/
│   │   │   └── quic-go/
│   │   │       ├── .gitignore
│   │   │       ├── .golangci.yml
│   │   │       ├── Changelog.md
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── SECURITY.md
│   │   │       ├── buffer_pool.go
│   │   │       ├── client.go
│   │   │       ├── closed_conn.go
│   │   │       ├── codecov.yml
│   │   │       ├── config.go
│   │   │       ├── conn_id_generator.go
│   │   │       ├── conn_id_manager.go
│   │   │       ├── connection.go
│   │   │       ├── connection_logging.go
│   │   │       ├── connection_timer.go
│   │   │       ├── crypto_stream.go
│   │   │       ├── crypto_stream_manager.go
│   │   │       ├── datagram_queue.go
│   │   │       ├── errors.go
│   │   │       ├── frame_sorter.go
│   │   │       ├── framer.go
│   │   │       ├── interface.go
│   │   │       ├── internal/
│   │   │       │   ├── ackhandler/
│   │   │       │   │   ├── ack_eliciting.go
│   │   │       │   │   ├── ackhandler.go
│   │   │       │   │   ├── ecn.go
│   │   │       │   │   ├── frame.go
│   │   │       │   │   ├── interfaces.go
│   │   │       │   │   ├── mockgen.go
│   │   │       │   │   ├── packet.go
│   │   │       │   │   ├── packet_number_generator.go
│   │   │       │   │   ├── received_packet_handler.go
│   │   │       │   │   ├── received_packet_history.go
│   │   │       │   │   ├── received_packet_tracker.go
│   │   │       │   │   ├── send_mode.go
│   │   │       │   │   ├── sent_packet_handler.go
│   │   │       │   │   └── sent_packet_history.go
│   │   │       │   ├── congestion/
│   │   │       │   │   ├── bandwidth.go
│   │   │       │   │   ├── clock.go
│   │   │       │   │   ├── cubic.go
│   │   │       │   │   ├── cubic_sender.go
│   │   │       │   │   ├── hybrid_slow_start.go
│   │   │       │   │   ├── interface.go
│   │   │       │   │   └── pacer.go
│   │   │       │   ├── flowcontrol/
│   │   │       │   │   ├── base_flow_controller.go
│   │   │       │   │   ├── connection_flow_controller.go
│   │   │       │   │   ├── interface.go
│   │   │       │   │   └── stream_flow_controller.go
│   │   │       │   ├── handshake/
│   │   │       │   │   ├── aead.go
│   │   │       │   │   ├── cipher_suite.go
│   │   │       │   │   ├── crypto_setup.go
│   │   │       │   │   ├── fake_conn.go
│   │   │       │   │   ├── header_protector.go
│   │   │       │   │   ├── hkdf.go
│   │   │       │   │   ├── initial_aead.go
│   │   │       │   │   ├── interface.go
│   │   │       │   │   ├── retry.go
│   │   │       │   │   ├── session_ticket.go
│   │   │       │   │   ├── tls_config.go
│   │   │       │   │   ├── token_generator.go
│   │   │       │   │   ├── token_protector.go
│   │   │       │   │   ├── updatable_aead.go
│   │   │       │   │   ├── xor_nonce_aead_boring.go
│   │   │       │   │   └── xor_nonce_aead_noboring.go
│   │   │       │   ├── protocol/
│   │   │       │   │   ├── connection_id.go
│   │   │       │   │   ├── encryption_level.go
│   │   │       │   │   ├── key_phase.go
│   │   │       │   │   ├── packet_number.go
│   │   │       │   │   ├── params.go
│   │   │       │   │   ├── perspective.go
│   │   │       │   │   ├── protocol.go
│   │   │       │   │   ├── stream.go
│   │   │       │   │   └── version.go
│   │   │       │   ├── qerr/
│   │   │       │   │   ├── error_codes.go
│   │   │       │   │   └── errors.go
│   │   │       │   ├── utils/
│   │   │       │   │   ├── buffered_write_closer.go
│   │   │       │   │   ├── linkedlist/
│   │   │       │   │   │   ├── README.md
│   │   │       │   │   │   └── linkedlist.go
│   │   │       │   │   ├── log.go
│   │   │       │   │   ├── rand.go
│   │   │       │   │   ├── ringbuffer/
│   │   │       │   │   │   └── ringbuffer.go
│   │   │       │   │   ├── rtt_stats.go
│   │   │       │   │   └── timer.go
│   │   │       │   └── wire/
│   │   │       │       ├── ack_frame.go
│   │   │       │       ├── ack_range.go
│   │   │       │       ├── connection_close_frame.go
│   │   │       │       ├── crypto_frame.go
│   │   │       │       ├── data_blocked_frame.go
│   │   │       │       ├── datagram_frame.go
│   │   │       │       ├── extended_header.go
│   │   │       │       ├── frame.go
│   │   │       │       ├── frame_parser.go
│   │   │       │       ├── handshake_done_frame.go
│   │   │       │       ├── header.go
│   │   │       │       ├── log.go
│   │   │       │       ├── max_data_frame.go
│   │   │       │       ├── max_stream_data_frame.go
│   │   │       │       ├── max_streams_frame.go
│   │   │       │       ├── new_connection_id_frame.go
│   │   │       │       ├── new_token_frame.go
│   │   │       │       ├── path_challenge_frame.go
│   │   │       │       ├── path_response_frame.go
│   │   │       │       ├── ping_frame.go
│   │   │       │       ├── pool.go
│   │   │       │       ├── reset_stream_frame.go
│   │   │       │       ├── retire_connection_id_frame.go
│   │   │       │       ├── short_header.go
│   │   │       │       ├── stop_sending_frame.go
│   │   │       │       ├── stream_data_blocked_frame.go
│   │   │       │       ├── stream_frame.go
│   │   │       │       ├── streams_blocked_frame.go
│   │   │       │       ├── transport_parameters.go
│   │   │       │       └── version_negotiation.go
│   │   │       ├── logging/
│   │   │       │   ├── connection_tracer.go
│   │   │       │   ├── connection_tracer_multiplexer.go
│   │   │       │   ├── frame.go
│   │   │       │   ├── generate_multiplexer.go
│   │   │       │   ├── interface.go
│   │   │       │   ├── multiplexer.tmpl
│   │   │       │   ├── packet_header.go
│   │   │       │   ├── tracer.go
│   │   │       │   ├── tracer_multiplexer.go
│   │   │       │   └── types.go
│   │   │       ├── mockgen.go
│   │   │       ├── mtu_discoverer.go
│   │   │       ├── oss-fuzz.sh
│   │   │       ├── packet_handler_map.go
│   │   │       ├── packet_packer.go
│   │   │       ├── packet_unpacker.go
│   │   │       ├── path_manager.go
│   │   │       ├── path_manager_outgoing.go
│   │   │       ├── quicvarint/
│   │   │       │   ├── io.go
│   │   │       │   └── varint.go
│   │   │       ├── receive_stream.go
│   │   │       ├── retransmission_queue.go
│   │   │       ├── send_conn.go
│   │   │       ├── send_queue.go
│   │   │       ├── send_stream.go
│   │   │       ├── server.go
│   │   │       ├── stateless_reset.go
│   │   │       ├── stream.go
│   │   │       ├── streams_map.go
│   │   │       ├── streams_map_incoming.go
│   │   │       ├── streams_map_outgoing.go
│   │   │       ├── sys_conn.go
│   │   │       ├── sys_conn_buffers.go
│   │   │       ├── sys_conn_buffers_write.go
│   │   │       ├── sys_conn_df.go
│   │   │       ├── sys_conn_df_darwin.go
│   │   │       ├── sys_conn_df_linux.go
│   │   │       ├── sys_conn_df_windows.go
│   │   │       ├── sys_conn_helper_darwin.go
│   │   │       ├── sys_conn_helper_freebsd.go
│   │   │       ├── sys_conn_helper_linux.go
│   │   │       ├── sys_conn_helper_nonlinux.go
│   │   │       ├── sys_conn_no_oob.go
│   │   │       ├── sys_conn_oob.go
│   │   │       ├── sys_conn_windows.go
│   │   │       ├── token_store.go
│   │   │       ├── tools.go
│   │   │       └── transport.go
│   │   ├── rs/
│   │   │   └── zerolog/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── CNAME
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── _config.yml
│   │   │       ├── array.go
│   │   │       ├── console.go
│   │   │       ├── context.go
│   │   │       ├── ctx.go
│   │   │       ├── encoder.go
│   │   │       ├── encoder_cbor.go
│   │   │       ├── encoder_json.go
│   │   │       ├── event.go
│   │   │       ├── fields.go
│   │   │       ├── globals.go
│   │   │       ├── go112.go
│   │   │       ├── hook.go
│   │   │       ├── internal/
│   │   │       │   ├── cbor/
│   │   │       │   │   ├── README.md
│   │   │       │   │   ├── base.go
│   │   │       │   │   ├── cbor.go
│   │   │       │   │   ├── decode_stream.go
│   │   │       │   │   ├── string.go
│   │   │       │   │   ├── time.go
│   │   │       │   │   └── types.go
│   │   │       │   └── json/
│   │   │       │       ├── base.go
│   │   │       │       ├── bytes.go
│   │   │       │       ├── string.go
│   │   │       │       ├── time.go
│   │   │       │       └── types.go
│   │   │       ├── log/
│   │   │       │   └── log.go
│   │   │       ├── log.go
│   │   │       ├── not_go112.go
│   │   │       ├── sampler.go
│   │   │       ├── syslog.go
│   │   │       └── writer.go
│   │   ├── russross/
│   │   │   └── blackfriday/
│   │   │       └── v2/
│   │   │           ├── .gitignore
│   │   │           ├── .travis.yml
│   │   │           ├── LICENSE.txt
│   │   │           ├── README.md
│   │   │           ├── block.go
│   │   │           ├── doc.go
│   │   │           ├── entities.go
│   │   │           ├── esc.go
│   │   │           ├── html.go
│   │   │           ├── inline.go
│   │   │           ├── markdown.go
│   │   │           ├── node.go
│   │   │           └── smartypants.go
│   │   └── stretchr/
│   │       └── testify/
│   │           ├── LICENSE
│   │           ├── assert/
│   │           │   ├── assertion_compare.go
│   │           │   ├── assertion_format.go
│   │           │   ├── assertion_format.go.tmpl
│   │           │   ├── assertion_forward.go
│   │           │   ├── assertion_forward.go.tmpl
│   │           │   ├── assertion_order.go
│   │           │   ├── assertions.go
│   │           │   ├── doc.go
│   │           │   ├── errors.go
│   │           │   ├── forward_assertions.go
│   │           │   ├── http_assertions.go
│   │           │   └── yaml/
│   │           │       ├── yaml_custom.go
│   │           │       ├── yaml_default.go
│   │           │       └── yaml_fail.go
│   │           └── require/
│   │               ├── doc.go
│   │               ├── forward_requirements.go
│   │               ├── require.go
│   │               ├── require.go.tmpl
│   │               ├── require_forward.go
│   │               ├── require_forward.go.tmpl
│   │               └── requirements.go
│   ├── go.opentelemetry.io/
│   │   ├── auto/
│   │   │   └── sdk/
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── LICENSE
│   │   │       ├── VERSIONING.md
│   │   │       ├── doc.go
│   │   │       ├── internal/
│   │   │       │   └── telemetry/
│   │   │       │       ├── attr.go
│   │   │       │       ├── doc.go
│   │   │       │       ├── id.go
│   │   │       │       ├── number.go
│   │   │       │       ├── resource.go
│   │   │       │       ├── scope.go
│   │   │       │       ├── span.go
│   │   │       │       ├── status.go
│   │   │       │       ├── traces.go
│   │   │       │       └── value.go
│   │   │       ├── limit.go
│   │   │       ├── span.go
│   │   │       ├── tracer.go
│   │   │       └── tracer_provider.go
│   │   ├── contrib/
│   │   │   └── propagators/
│   │   │       ├── LICENSE
│   │   │       └── jaeger/
│   │   │           ├── context.go
│   │   │           ├── doc.go
│   │   │           └── jaeger_propagator.go
│   │   ├── otel/
│   │   │   ├── .clomonitor.yml
│   │   │   ├── .codespellignore
│   │   │   ├── .codespellrc
│   │   │   ├── .gitattributes
│   │   │   ├── .gitignore
│   │   │   ├── .golangci.yml
│   │   │   ├── .lycheeignore
│   │   │   ├── .markdownlint.yaml
│   │   │   ├── CHANGELOG.md
│   │   │   ├── CODEOWNERS
│   │   │   ├── CONTRIBUTING.md
│   │   │   ├── LICENSE
│   │   │   ├── Makefile
│   │   │   ├── README.md
│   │   │   ├── RELEASING.md
│   │   │   ├── SECURITY-INSIGHTS.yml
│   │   │   ├── VERSIONING.md
│   │   │   ├── attribute/
│   │   │   │   ├── README.md
│   │   │   │   ├── doc.go
│   │   │   │   ├── encoder.go
│   │   │   │   ├── filter.go
│   │   │   │   ├── hash.go
│   │   │   │   ├── internal/
│   │   │   │   │   ├── attribute.go
│   │   │   │   │   └── xxhash/
│   │   │   │   │       └── xxhash.go
│   │   │   │   ├── iterator.go
│   │   │   │   ├── key.go
│   │   │   │   ├── kv.go
│   │   │   │   ├── rawhelpers.go
│   │   │   │   ├── set.go
│   │   │   │   ├── type_string.go
│   │   │   │   └── value.go
│   │   │   ├── baggage/
│   │   │   │   ├── README.md
│   │   │   │   ├── baggage.go
│   │   │   │   ├── context.go
│   │   │   │   └── doc.go
│   │   │   ├── codes/
│   │   │   │   ├── README.md
│   │   │   │   ├── codes.go
│   │   │   │   └── doc.go
│   │   │   ├── dependencies.Dockerfile
│   │   │   ├── doc.go
│   │   │   ├── error_handler.go
│   │   │   ├── exporters/
│   │   │   │   └── otlp/
│   │   │   │       └── otlptrace/
│   │   │   │           ├── LICENSE
│   │   │   │           ├── README.md
│   │   │   │           ├── clients.go
│   │   │   │           ├── doc.go
│   │   │   │           ├── exporter.go
│   │   │   │           ├── internal/
│   │   │   │           │   └── tracetransform/
│   │   │   │           │       ├── attribute.go
│   │   │   │           │       ├── instrumentation.go
│   │   │   │           │       ├── resource.go
│   │   │   │           │       └── span.go
│   │   │   │           └── version.go
│   │   │   ├── handler.go
│   │   │   ├── internal/
│   │   │   │   ├── baggage/
│   │   │   │   │   ├── baggage.go
│   │   │   │   │   └── context.go
│   │   │   │   └── global/
│   │   │   │       ├── handler.go
│   │   │   │       ├── instruments.go
│   │   │   │       ├── internal_logging.go
│   │   │   │       ├── meter.go
│   │   │   │       ├── propagator.go
│   │   │   │       ├── state.go
│   │   │   │       └── trace.go
│   │   │   ├── internal_logging.go
│   │   │   ├── metric/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── asyncfloat64.go
│   │   │   │   ├── asyncint64.go
│   │   │   │   ├── config.go
│   │   │   │   ├── doc.go
│   │   │   │   ├── embedded/
│   │   │   │   │   ├── README.md
│   │   │   │   │   └── embedded.go
│   │   │   │   ├── instrument.go
│   │   │   │   ├── meter.go
│   │   │   │   ├── noop/
│   │   │   │   │   ├── README.md
│   │   │   │   │   └── noop.go
│   │   │   │   ├── syncfloat64.go
│   │   │   │   └── syncint64.go
│   │   │   ├── metric.go
│   │   │   ├── propagation/
│   │   │   │   ├── README.md
│   │   │   │   ├── baggage.go
│   │   │   │   ├── doc.go
│   │   │   │   ├── propagation.go
│   │   │   │   └── trace_context.go
│   │   │   ├── propagation.go
│   │   │   ├── renovate.json
│   │   │   ├── requirements.txt
│   │   │   ├── sdk/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── instrumentation/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── library.go
│   │   │   │   │   └── scope.go
│   │   │   │   ├── internal/
│   │   │   │   │   └── x/
│   │   │   │   │       ├── README.md
│   │   │   │   │       ├── features.go
│   │   │   │   │       └── x.go
│   │   │   │   ├── resource/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── auto.go
│   │   │   │   │   ├── builtin.go
│   │   │   │   │   ├── config.go
│   │   │   │   │   ├── container.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── env.go
│   │   │   │   │   ├── host_id.go
│   │   │   │   │   ├── host_id_bsd.go
│   │   │   │   │   ├── host_id_darwin.go
│   │   │   │   │   ├── host_id_exec.go
│   │   │   │   │   ├── host_id_linux.go
│   │   │   │   │   ├── host_id_readfile.go
│   │   │   │   │   ├── host_id_unsupported.go
│   │   │   │   │   ├── host_id_windows.go
│   │   │   │   │   ├── os.go
│   │   │   │   │   ├── os_release_darwin.go
│   │   │   │   │   ├── os_release_unix.go
│   │   │   │   │   ├── os_unix.go
│   │   │   │   │   ├── os_unsupported.go
│   │   │   │   │   ├── os_windows.go
│   │   │   │   │   ├── process.go
│   │   │   │   │   └── resource.go
│   │   │   │   ├── trace/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── batch_span_processor.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── event.go
│   │   │   │   │   ├── evictedqueue.go
│   │   │   │   │   ├── id_generator.go
│   │   │   │   │   ├── internal/
│   │   │   │   │   │   ├── env/
│   │   │   │   │   │   │   └── env.go
│   │   │   │   │   │   └── observ/
│   │   │   │   │   │       ├── batch_span_processor.go
│   │   │   │   │   │       ├── doc.go
│   │   │   │   │   │       ├── simple_span_processor.go
│   │   │   │   │   │       └── tracer.go
│   │   │   │   │   ├── link.go
│   │   │   │   │   ├── provider.go
│   │   │   │   │   ├── sampler_env.go
│   │   │   │   │   ├── sampling.go
│   │   │   │   │   ├── simple_span_processor.go
│   │   │   │   │   ├── snapshot.go
│   │   │   │   │   ├── span.go
│   │   │   │   │   ├── span_exporter.go
│   │   │   │   │   ├── span_limits.go
│   │   │   │   │   ├── span_processor.go
│   │   │   │   │   └── tracer.go
│   │   │   │   └── version.go
│   │   │   ├── semconv/
│   │   │   │   ├── internal/
│   │   │   │   │   └── http.go
│   │   │   │   ├── v1.37.0/
│   │   │   │   │   ├── MIGRATION.md
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── attribute_group.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── error_type.go
│   │   │   │   │   ├── exception.go
│   │   │   │   │   └── schema.go
│   │   │   │   ├── v1.39.0/
│   │   │   │   │   ├── MIGRATION.md
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── attribute_group.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── error_type.go
│   │   │   │   │   ├── exception.go
│   │   │   │   │   ├── otelconv/
│   │   │   │   │   │   └── metric.go
│   │   │   │   │   └── schema.go
│   │   │   │   └── v1.7.0/
│   │   │   │       ├── README.md
│   │   │   │       ├── doc.go
│   │   │   │       ├── exception.go
│   │   │   │       ├── http.go
│   │   │   │       ├── resource.go
│   │   │   │       ├── schema.go
│   │   │   │       └── trace.go
│   │   │   ├── trace/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── auto.go
│   │   │   │   ├── config.go
│   │   │   │   ├── context.go
│   │   │   │   ├── doc.go
│   │   │   │   ├── embedded/
│   │   │   │   │   ├── README.md
│   │   │   │   │   └── embedded.go
│   │   │   │   ├── hex.go
│   │   │   │   ├── internal/
│   │   │   │   │   └── telemetry/
│   │   │   │   │       ├── attr.go
│   │   │   │   │       ├── doc.go
│   │   │   │   │       ├── id.go
│   │   │   │   │       ├── number.go
│   │   │   │   │       ├── resource.go
│   │   │   │   │       ├── scope.go
│   │   │   │   │       ├── span.go
│   │   │   │   │       ├── status.go
│   │   │   │   │       ├── traces.go
│   │   │   │   │       └── value.go
│   │   │   │   ├── nonrecording.go
│   │   │   │   ├── noop/
│   │   │   │   │   ├── README.md
│   │   │   │   │   └── noop.go
│   │   │   │   ├── noop.go
│   │   │   │   ├── provider.go
│   │   │   │   ├── span.go
│   │   │   │   ├── trace.go
│   │   │   │   ├── tracer.go
│   │   │   │   └── tracestate.go
│   │   │   ├── trace.go
│   │   │   ├── verify_released_changelog.sh
│   │   │   ├── version.go
│   │   │   └── versions.yaml
│   │   └── proto/
│   │       └── otlp/
│   │           ├── LICENSE
│   │           ├── collector/
│   │           │   └── trace/
│   │           │       └── v1/
│   │           │           ├── trace_service.pb.go
│   │           │           ├── trace_service.pb.gw.go
│   │           │           └── trace_service_grpc.pb.go
│   │           ├── common/
│   │           │   └── v1/
│   │           │       └── common.pb.go
│   │           ├── resource/
│   │           │   └── v1/
│   │           │       └── resource.pb.go
│   │           └── trace/
│   │               └── v1/
│   │                   └── trace.pb.go
│   ├── go.uber.org/
│   │   └── mock/
│   │       ├── AUTHORS
│   │       ├── LICENSE
│   │       ├── gomock/
│   │       │   ├── call.go
│   │       │   ├── callset.go
│   │       │   ├── controller.go
│   │       │   ├── doc.go
│   │       │   ├── matchers.go
│   │       │   └── string.go
│   │       └── mockgen/
│   │           ├── deprecated.go
│   │           ├── generic.go
│   │           ├── gob.go
│   │           ├── mockgen.go
│   │           ├── model/
│   │           │   └── model.go
│   │           ├── package_mode.go
│   │           ├── parse.go
│   │           └── version.go
│   ├── golang.org/
│   │   └── x/
│   │       ├── crypto/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── blake2b/
│   │       │   │   ├── blake2b.go
│   │       │   │   ├── blake2bAVX2_amd64.go
│   │       │   │   ├── blake2bAVX2_amd64.s
│   │       │   │   ├── blake2b_amd64.s
│   │       │   │   ├── blake2b_generic.go
│   │       │   │   ├── blake2b_ref.go
│   │       │   │   ├── blake2x.go
│   │       │   │   └── register.go
│   │       │   ├── blowfish/
│   │       │   │   ├── block.go
│   │       │   │   ├── cipher.go
│   │       │   │   └── const.go
│   │       │   ├── chacha20/
│   │       │   │   ├── chacha_arm64.go
│   │       │   │   ├── chacha_arm64.s
│   │       │   │   ├── chacha_generic.go
│   │       │   │   ├── chacha_noasm.go
│   │       │   │   ├── chacha_ppc64x.go
│   │       │   │   ├── chacha_ppc64x.s
│   │       │   │   ├── chacha_s390x.go
│   │       │   │   ├── chacha_s390x.s
│   │       │   │   └── xor.go
│   │       │   ├── chacha20poly1305/
│   │       │   │   ├── chacha20poly1305.go
│   │       │   │   ├── chacha20poly1305_amd64.go
│   │       │   │   ├── chacha20poly1305_amd64.s
│   │       │   │   ├── chacha20poly1305_generic.go
│   │       │   │   ├── chacha20poly1305_noasm.go
│   │       │   │   └── xchacha20poly1305.go
│   │       │   ├── curve25519/
│   │       │   │   └── curve25519.go
│   │       │   ├── hkdf/
│   │       │   │   └── hkdf.go
│   │       │   ├── internal/
│   │       │   │   ├── alias/
│   │       │   │   │   ├── alias.go
│   │       │   │   │   └── alias_purego.go
│   │       │   │   └── poly1305/
│   │       │   │       ├── mac_noasm.go
│   │       │   │       ├── poly1305.go
│   │       │   │       ├── sum_amd64.s
│   │       │   │       ├── sum_asm.go
│   │       │   │       ├── sum_generic.go
│   │       │   │       ├── sum_loong64.s
│   │       │   │       ├── sum_ppc64x.s
│   │       │   │       ├── sum_s390x.go
│   │       │   │       └── sum_s390x.s
│   │       │   ├── nacl/
│   │       │   │   ├── box/
│   │       │   │   │   └── box.go
│   │       │   │   └── secretbox/
│   │       │   │       └── secretbox.go
│   │       │   ├── salsa20/
│   │       │   │   └── salsa/
│   │       │   │       ├── hsalsa20.go
│   │       │   │       ├── salsa208.go
│   │       │   │       ├── salsa20_amd64.go
│   │       │   │       ├── salsa20_amd64.s
│   │       │   │       ├── salsa20_noasm.go
│   │       │   │       └── salsa20_ref.go
│   │       │   └── ssh/
│   │       │       ├── buffer.go
│   │       │       ├── certs.go
│   │       │       ├── channel.go
│   │       │       ├── cipher.go
│   │       │       ├── client.go
│   │       │       ├── client_auth.go
│   │       │       ├── common.go
│   │       │       ├── connection.go
│   │       │       ├── doc.go
│   │       │       ├── handshake.go
│   │       │       ├── internal/
│   │       │       │   └── bcrypt_pbkdf/
│   │       │       │       └── bcrypt_pbkdf.go
│   │       │       ├── kex.go
│   │       │       ├── keys.go
│   │       │       ├── mac.go
│   │       │       ├── messages.go
│   │       │       ├── mlkem.go
│   │       │       ├── mux.go
│   │       │       ├── server.go
│   │       │       ├── session.go
│   │       │       ├── ssh_gss.go
│   │       │       ├── streamlocal.go
│   │       │       ├── tcpip.go
│   │       │       └── transport.go
│   │       ├── mod/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── internal/
│   │       │   │   └── lazyregexp/
│   │       │   │       └── lazyre.go
│   │       │   ├── modfile/
│   │       │   │   ├── print.go
│   │       │   │   ├── read.go
│   │       │   │   ├── rule.go
│   │       │   │   └── work.go
│   │       │   ├── module/
│   │       │   │   ├── module.go
│   │       │   │   └── pseudo.go
│   │       │   └── semver/
│   │       │       └── semver.go
│   │       ├── net/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── bpf/
│   │       │   │   ├── asm.go
│   │       │   │   ├── constants.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── instructions.go
│   │       │   │   ├── setter.go
│   │       │   │   ├── vm.go
│   │       │   │   └── vm_instructions.go
│   │       │   ├── context/
│   │       │   │   └── context.go
│   │       │   ├── http/
│   │       │   │   └── httpguts/
│   │       │   │       ├── guts.go
│   │       │   │       └── httplex.go
│   │       │   ├── http2/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── ascii.go
│   │       │   │   ├── ciphers.go
│   │       │   │   ├── client_conn_pool.go
│   │       │   │   ├── config.go
│   │       │   │   ├── config_go124.go
│   │       │   │   ├── config_pre_go124.go
│   │       │   │   ├── databuffer.go
│   │       │   │   ├── errors.go
│   │       │   │   ├── flow.go
│   │       │   │   ├── frame.go
│   │       │   │   ├── gotrack.go
│   │       │   │   ├── hpack/
│   │       │   │   │   ├── encode.go
│   │       │   │   │   ├── hpack.go
│   │       │   │   │   ├── huffman.go
│   │       │   │   │   ├── static_table.go
│   │       │   │   │   └── tables.go
│   │       │   │   ├── http2.go
│   │       │   │   ├── pipe.go
│   │       │   │   ├── server.go
│   │       │   │   ├── timer.go
│   │       │   │   ├── transport.go
│   │       │   │   ├── unencrypted.go
│   │       │   │   ├── write.go
│   │       │   │   ├── writesched.go
│   │       │   │   ├── writesched_priority.go
│   │       │   │   ├── writesched_random.go
│   │       │   │   └── writesched_roundrobin.go
│   │       │   ├── icmp/
│   │       │   │   ├── dstunreach.go
│   │       │   │   ├── echo.go
│   │       │   │   ├── endpoint.go
│   │       │   │   ├── extension.go
│   │       │   │   ├── helper_posix.go
│   │       │   │   ├── interface.go
│   │       │   │   ├── ipv4.go
│   │       │   │   ├── ipv6.go
│   │       │   │   ├── listen_posix.go
│   │       │   │   ├── listen_stub.go
│   │       │   │   ├── message.go
│   │       │   │   ├── messagebody.go
│   │       │   │   ├── mpls.go
│   │       │   │   ├── multipart.go
│   │       │   │   ├── packettoobig.go
│   │       │   │   ├── paramprob.go
│   │       │   │   ├── sys_freebsd.go
│   │       │   │   └── timeexceeded.go
│   │       │   ├── idna/
│   │       │   │   ├── go118.go
│   │       │   │   ├── idna10.0.0.go
│   │       │   │   ├── idna9.0.0.go
│   │       │   │   ├── pre_go118.go
│   │       │   │   ├── punycode.go
│   │       │   │   ├── tables10.0.0.go
│   │       │   │   ├── tables11.0.0.go
│   │       │   │   ├── tables12.0.0.go
│   │       │   │   ├── tables13.0.0.go
│   │       │   │   ├── tables15.0.0.go
│   │       │   │   ├── tables9.0.0.go
│   │       │   │   ├── trie.go
│   │       │   │   ├── trie12.0.0.go
│   │       │   │   ├── trie13.0.0.go
│   │       │   │   └── trieval.go
│   │       │   ├── internal/
│   │       │   │   ├── httpcommon/
│   │       │   │   │   ├── ascii.go
│   │       │   │   │   ├── headermap.go
│   │       │   │   │   └── request.go
│   │       │   │   ├── iana/
│   │       │   │   │   └── const.go
│   │       │   │   ├── socket/
│   │       │   │   │   ├── cmsghdr.go
│   │       │   │   │   ├── cmsghdr_bsd.go
│   │       │   │   │   ├── cmsghdr_linux_32bit.go
│   │       │   │   │   ├── cmsghdr_linux_64bit.go
│   │       │   │   │   ├── cmsghdr_solaris_64bit.go
│   │       │   │   │   ├── cmsghdr_stub.go
│   │       │   │   │   ├── cmsghdr_unix.go
│   │       │   │   │   ├── cmsghdr_zos_s390x.go
│   │       │   │   │   ├── complete_dontwait.go
│   │       │   │   │   ├── complete_nodontwait.go
│   │       │   │   │   ├── empty.s
│   │       │   │   │   ├── error_unix.go
│   │       │   │   │   ├── error_windows.go
│   │       │   │   │   ├── iovec_32bit.go
│   │       │   │   │   ├── iovec_64bit.go
│   │       │   │   │   ├── iovec_solaris_64bit.go
│   │       │   │   │   ├── iovec_stub.go
│   │       │   │   │   ├── mmsghdr_stub.go
│   │       │   │   │   ├── mmsghdr_unix.go
│   │       │   │   │   ├── msghdr_bsd.go
│   │       │   │   │   ├── msghdr_bsdvar.go
│   │       │   │   │   ├── msghdr_linux.go
│   │       │   │   │   ├── msghdr_linux_32bit.go
│   │       │   │   │   ├── msghdr_linux_64bit.go
│   │       │   │   │   ├── msghdr_openbsd.go
│   │       │   │   │   ├── msghdr_solaris_64bit.go
│   │       │   │   │   ├── msghdr_stub.go
│   │       │   │   │   ├── msghdr_zos_s390x.go
│   │       │   │   │   ├── norace.go
│   │       │   │   │   ├── race.go
│   │       │   │   │   ├── rawconn.go
│   │       │   │   │   ├── rawconn_mmsg.go
│   │       │   │   │   ├── rawconn_msg.go
│   │       │   │   │   ├── rawconn_nommsg.go
│   │       │   │   │   ├── rawconn_nomsg.go
│   │       │   │   │   ├── socket.go
│   │       │   │   │   ├── sys.go
│   │       │   │   │   ├── sys_bsd.go
│   │       │   │   │   ├── sys_const_unix.go
│   │       │   │   │   ├── sys_linux.go
│   │       │   │   │   ├── sys_linux_386.go
│   │       │   │   │   ├── sys_linux_386.s
│   │       │   │   │   ├── sys_linux_amd64.go
│   │       │   │   │   ├── sys_linux_arm.go
│   │       │   │   │   ├── sys_linux_arm64.go
│   │       │   │   │   ├── sys_linux_loong64.go
│   │       │   │   │   ├── sys_linux_mips.go
│   │       │   │   │   ├── sys_linux_mips64.go
│   │       │   │   │   ├── sys_linux_mips64le.go
│   │       │   │   │   ├── sys_linux_mipsle.go
│   │       │   │   │   ├── sys_linux_ppc.go
│   │       │   │   │   ├── sys_linux_ppc64.go
│   │       │   │   │   ├── sys_linux_ppc64le.go
│   │       │   │   │   ├── sys_linux_riscv64.go
│   │       │   │   │   ├── sys_linux_s390x.go
│   │       │   │   │   ├── sys_linux_s390x.s
│   │       │   │   │   ├── sys_netbsd.go
│   │       │   │   │   ├── sys_posix.go
│   │       │   │   │   ├── sys_stub.go
│   │       │   │   │   ├── sys_unix.go
│   │       │   │   │   ├── sys_windows.go
│   │       │   │   │   ├── sys_zos_s390x.go
│   │       │   │   │   ├── sys_zos_s390x.s
│   │       │   │   │   ├── zsys_aix_ppc64.go
│   │       │   │   │   ├── zsys_darwin_amd64.go
│   │       │   │   │   ├── zsys_darwin_arm64.go
│   │       │   │   │   ├── zsys_dragonfly_amd64.go
│   │       │   │   │   ├── zsys_freebsd_386.go
│   │       │   │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   │   ├── zsys_freebsd_arm.go
│   │       │   │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   │   ├── zsys_freebsd_riscv64.go
│   │       │   │   │   ├── zsys_linux_386.go
│   │       │   │   │   ├── zsys_linux_amd64.go
│   │       │   │   │   ├── zsys_linux_arm.go
│   │       │   │   │   ├── zsys_linux_arm64.go
│   │       │   │   │   ├── zsys_linux_loong64.go
│   │       │   │   │   ├── zsys_linux_mips.go
│   │       │   │   │   ├── zsys_linux_mips64.go
│   │       │   │   │   ├── zsys_linux_mips64le.go
│   │       │   │   │   ├── zsys_linux_mipsle.go
│   │       │   │   │   ├── zsys_linux_ppc.go
│   │       │   │   │   ├── zsys_linux_ppc64.go
│   │       │   │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   │   ├── zsys_linux_riscv64.go
│   │       │   │   │   ├── zsys_linux_s390x.go
│   │       │   │   │   ├── zsys_netbsd_386.go
│   │       │   │   │   ├── zsys_netbsd_amd64.go
│   │       │   │   │   ├── zsys_netbsd_arm.go
│   │       │   │   │   ├── zsys_netbsd_arm64.go
│   │       │   │   │   ├── zsys_openbsd_386.go
│   │       │   │   │   ├── zsys_openbsd_amd64.go
│   │       │   │   │   ├── zsys_openbsd_arm.go
│   │       │   │   │   ├── zsys_openbsd_arm64.go
│   │       │   │   │   ├── zsys_openbsd_mips64.go
│   │       │   │   │   ├── zsys_openbsd_ppc64.go
│   │       │   │   │   ├── zsys_openbsd_riscv64.go
│   │       │   │   │   ├── zsys_solaris_amd64.go
│   │       │   │   │   └── zsys_zos_s390x.go
│   │       │   │   ├── socks/
│   │       │   │   │   ├── client.go
│   │       │   │   │   └── socks.go
│   │       │   │   └── timeseries/
│   │       │   │       └── timeseries.go
│   │       │   ├── ipv4/
│   │       │   │   ├── batch.go
│   │       │   │   ├── control.go
│   │       │   │   ├── control_bsd.go
│   │       │   │   ├── control_pktinfo.go
│   │       │   │   ├── control_stub.go
│   │       │   │   ├── control_unix.go
│   │       │   │   ├── control_windows.go
│   │       │   │   ├── control_zos.go
│   │       │   │   ├── dgramopt.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── endpoint.go
│   │       │   │   ├── genericopt.go
│   │       │   │   ├── header.go
│   │       │   │   ├── helper.go
│   │       │   │   ├── iana.go
│   │       │   │   ├── icmp.go
│   │       │   │   ├── icmp_linux.go
│   │       │   │   ├── icmp_stub.go
│   │       │   │   ├── packet.go
│   │       │   │   ├── payload.go
│   │       │   │   ├── payload_cmsg.go
│   │       │   │   ├── payload_nocmsg.go
│   │       │   │   ├── sockopt.go
│   │       │   │   ├── sockopt_posix.go
│   │       │   │   ├── sockopt_stub.go
│   │       │   │   ├── sys_aix.go
│   │       │   │   ├── sys_asmreq.go
│   │       │   │   ├── sys_asmreq_stub.go
│   │       │   │   ├── sys_asmreqn.go
│   │       │   │   ├── sys_asmreqn_stub.go
│   │       │   │   ├── sys_bpf.go
│   │       │   │   ├── sys_bpf_stub.go
│   │       │   │   ├── sys_bsd.go
│   │       │   │   ├── sys_darwin.go
│   │       │   │   ├── sys_dragonfly.go
│   │       │   │   ├── sys_freebsd.go
│   │       │   │   ├── sys_linux.go
│   │       │   │   ├── sys_solaris.go
│   │       │   │   ├── sys_ssmreq.go
│   │       │   │   ├── sys_ssmreq_stub.go
│   │       │   │   ├── sys_stub.go
│   │       │   │   ├── sys_windows.go
│   │       │   │   ├── sys_zos.go
│   │       │   │   ├── zsys_aix_ppc64.go
│   │       │   │   ├── zsys_darwin.go
│   │       │   │   ├── zsys_dragonfly.go
│   │       │   │   ├── zsys_freebsd_386.go
│   │       │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   ├── zsys_freebsd_arm.go
│   │       │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   ├── zsys_freebsd_riscv64.go
│   │       │   │   ├── zsys_linux_386.go
│   │       │   │   ├── zsys_linux_amd64.go
│   │       │   │   ├── zsys_linux_arm.go
│   │       │   │   ├── zsys_linux_arm64.go
│   │       │   │   ├── zsys_linux_loong64.go
│   │       │   │   ├── zsys_linux_mips.go
│   │       │   │   ├── zsys_linux_mips64.go
│   │       │   │   ├── zsys_linux_mips64le.go
│   │       │   │   ├── zsys_linux_mipsle.go
│   │       │   │   ├── zsys_linux_ppc.go
│   │       │   │   ├── zsys_linux_ppc64.go
│   │       │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   ├── zsys_linux_riscv64.go
│   │       │   │   ├── zsys_linux_s390x.go
│   │       │   │   ├── zsys_netbsd.go
│   │       │   │   ├── zsys_openbsd.go
│   │       │   │   ├── zsys_solaris.go
│   │       │   │   └── zsys_zos_s390x.go
│   │       │   ├── ipv6/
│   │       │   │   ├── batch.go
│   │       │   │   ├── control.go
│   │       │   │   ├── control_rfc2292_unix.go
│   │       │   │   ├── control_rfc3542_unix.go
│   │       │   │   ├── control_stub.go
│   │       │   │   ├── control_unix.go
│   │       │   │   ├── control_windows.go
│   │       │   │   ├── dgramopt.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── endpoint.go
│   │       │   │   ├── genericopt.go
│   │       │   │   ├── header.go
│   │       │   │   ├── helper.go
│   │       │   │   ├── iana.go
│   │       │   │   ├── icmp.go
│   │       │   │   ├── icmp_bsd.go
│   │       │   │   ├── icmp_linux.go
│   │       │   │   ├── icmp_solaris.go
│   │       │   │   ├── icmp_stub.go
│   │       │   │   ├── icmp_windows.go
│   │       │   │   ├── icmp_zos.go
│   │       │   │   ├── payload.go
│   │       │   │   ├── payload_cmsg.go
│   │       │   │   ├── payload_nocmsg.go
│   │       │   │   ├── sockopt.go
│   │       │   │   ├── sockopt_posix.go
│   │       │   │   ├── sockopt_stub.go
│   │       │   │   ├── sys_aix.go
│   │       │   │   ├── sys_asmreq.go
│   │       │   │   ├── sys_asmreq_stub.go
│   │       │   │   ├── sys_bpf.go
│   │       │   │   ├── sys_bpf_stub.go
│   │       │   │   ├── sys_bsd.go
│   │       │   │   ├── sys_darwin.go
│   │       │   │   ├── sys_freebsd.go
│   │       │   │   ├── sys_linux.go
│   │       │   │   ├── sys_solaris.go
│   │       │   │   ├── sys_ssmreq.go
│   │       │   │   ├── sys_ssmreq_stub.go
│   │       │   │   ├── sys_stub.go
│   │       │   │   ├── sys_windows.go
│   │       │   │   ├── sys_zos.go
│   │       │   │   ├── zsys_aix_ppc64.go
│   │       │   │   ├── zsys_darwin.go
│   │       │   │   ├── zsys_dragonfly.go
│   │       │   │   ├── zsys_freebsd_386.go
│   │       │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   ├── zsys_freebsd_arm.go
│   │       │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   ├── zsys_freebsd_riscv64.go
│   │       │   │   ├── zsys_linux_386.go
│   │       │   │   ├── zsys_linux_amd64.go
│   │       │   │   ├── zsys_linux_arm.go
│   │       │   │   ├── zsys_linux_arm64.go
│   │       │   │   ├── zsys_linux_loong64.go
│   │       │   │   ├── zsys_linux_mips.go
│   │       │   │   ├── zsys_linux_mips64.go
│   │       │   │   ├── zsys_linux_mips64le.go
│   │       │   │   ├── zsys_linux_mipsle.go
│   │       │   │   ├── zsys_linux_ppc.go
│   │       │   │   ├── zsys_linux_ppc64.go
│   │       │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   ├── zsys_linux_riscv64.go
│   │       │   │   ├── zsys_linux_s390x.go
│   │       │   │   ├── zsys_netbsd.go
│   │       │   │   ├── zsys_openbsd.go
│   │       │   │   ├── zsys_solaris.go
│   │       │   │   └── zsys_zos_s390x.go
│   │       │   ├── nettest/
│   │       │   │   ├── conntest.go
│   │       │   │   ├── nettest.go
│   │       │   │   ├── nettest_stub.go
│   │       │   │   ├── nettest_unix.go
│   │       │   │   └── nettest_windows.go
│   │       │   ├── proxy/
│   │       │   │   ├── dial.go
│   │       │   │   ├── direct.go
│   │       │   │   ├── per_host.go
│   │       │   │   ├── proxy.go
│   │       │   │   └── socks5.go
│   │       │   ├── trace/
│   │       │   │   ├── events.go
│   │       │   │   ├── histogram.go
│   │       │   │   └── trace.go
│   │       │   └── websocket/
│   │       │       ├── client.go
│   │       │       ├── dial.go
│   │       │       ├── hybi.go
│   │       │       ├── server.go
│   │       │       └── websocket.go
│   │       ├── oauth2/
│   │       │   ├── .travis.yml
│   │       │   ├── CONTRIBUTING.md
│   │       │   ├── LICENSE
│   │       │   ├── README.md
│   │       │   ├── deviceauth.go
│   │       │   ├── internal/
│   │       │   │   ├── doc.go
│   │       │   │   ├── oauth2.go
│   │       │   │   ├── token.go
│   │       │   │   └── transport.go
│   │       │   ├── oauth2.go
│   │       │   ├── pkce.go
│   │       │   ├── token.go
│   │       │   └── transport.go
│   │       ├── sync/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   └── errgroup/
│   │       │       └── errgroup.go
│   │       ├── sys/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── cpu/
│   │       │   │   ├── asm_aix_ppc64.s
│   │       │   │   ├── asm_darwin_x86_gc.s
│   │       │   │   ├── byteorder.go
│   │       │   │   ├── cpu.go
│   │       │   │   ├── cpu_aix.go
│   │       │   │   ├── cpu_arm.go
│   │       │   │   ├── cpu_arm64.go
│   │       │   │   ├── cpu_arm64.s
│   │       │   │   ├── cpu_darwin_x86.go
│   │       │   │   ├── cpu_gc_arm64.go
│   │       │   │   ├── cpu_gc_s390x.go
│   │       │   │   ├── cpu_gc_x86.go
│   │       │   │   ├── cpu_gc_x86.s
│   │       │   │   ├── cpu_gccgo_arm64.go
│   │       │   │   ├── cpu_gccgo_s390x.go
│   │       │   │   ├── cpu_gccgo_x86.c
│   │       │   │   ├── cpu_gccgo_x86.go
│   │       │   │   ├── cpu_linux.go
│   │       │   │   ├── cpu_linux_arm.go
│   │       │   │   ├── cpu_linux_arm64.go
│   │       │   │   ├── cpu_linux_loong64.go
│   │       │   │   ├── cpu_linux_mips64x.go
│   │       │   │   ├── cpu_linux_noinit.go
│   │       │   │   ├── cpu_linux_ppc64x.go
│   │       │   │   ├── cpu_linux_riscv64.go
│   │       │   │   ├── cpu_linux_s390x.go
│   │       │   │   ├── cpu_loong64.go
│   │       │   │   ├── cpu_loong64.s
│   │       │   │   ├── cpu_mips64x.go
│   │       │   │   ├── cpu_mipsx.go
│   │       │   │   ├── cpu_netbsd_arm64.go
│   │       │   │   ├── cpu_openbsd_arm64.go
│   │       │   │   ├── cpu_openbsd_arm64.s
│   │       │   │   ├── cpu_other_arm.go
│   │       │   │   ├── cpu_other_arm64.go
│   │       │   │   ├── cpu_other_mips64x.go
│   │       │   │   ├── cpu_other_ppc64x.go
│   │       │   │   ├── cpu_other_riscv64.go
│   │       │   │   ├── cpu_other_x86.go
│   │       │   │   ├── cpu_ppc64x.go
│   │       │   │   ├── cpu_riscv64.go
│   │       │   │   ├── cpu_s390x.go
│   │       │   │   ├── cpu_s390x.s
│   │       │   │   ├── cpu_wasm.go
│   │       │   │   ├── cpu_x86.go
│   │       │   │   ├── cpu_zos.go
│   │       │   │   ├── cpu_zos_s390x.go
│   │       │   │   ├── endian_big.go
│   │       │   │   ├── endian_little.go
│   │       │   │   ├── hwcap_linux.go
│   │       │   │   ├── parse.go
│   │       │   │   ├── proc_cpuinfo_linux.go
│   │       │   │   ├── runtime_auxv.go
│   │       │   │   ├── runtime_auxv_go121.go
│   │       │   │   ├── syscall_aix_gccgo.go
│   │       │   │   ├── syscall_aix_ppc64_gc.go
│   │       │   │   └── syscall_darwin_x86_gc.go
│   │       │   ├── execabs/
│   │       │   │   ├── execabs.go
│   │       │   │   ├── execabs_go118.go
│   │       │   │   └── execabs_go119.go
│   │       │   ├── plan9/
│   │       │   │   ├── asm.s
│   │       │   │   ├── asm_plan9_386.s
│   │       │   │   ├── asm_plan9_amd64.s
│   │       │   │   ├── asm_plan9_arm.s
│   │       │   │   ├── const_plan9.go
│   │       │   │   ├── dir_plan9.go
│   │       │   │   ├── env_plan9.go
│   │       │   │   ├── errors_plan9.go
│   │       │   │   ├── mkall.sh
│   │       │   │   ├── mkerrors.sh
│   │       │   │   ├── mksysnum_plan9.sh
│   │       │   │   ├── pwd_plan9.go
│   │       │   │   ├── race.go
│   │       │   │   ├── race0.go
│   │       │   │   ├── str.go
│   │       │   │   ├── syscall.go
│   │       │   │   ├── syscall_plan9.go
│   │       │   │   ├── zsyscall_plan9_386.go
│   │       │   │   ├── zsyscall_plan9_amd64.go
│   │       │   │   ├── zsyscall_plan9_arm.go
│   │       │   │   └── zsysnum_plan9.go
│   │       │   ├── unix/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── README.md
│   │       │   │   ├── affinity_linux.go
│   │       │   │   ├── aliases.go
│   │       │   │   ├── asm_aix_ppc64.s
│   │       │   │   ├── asm_bsd_386.s
│   │       │   │   ├── asm_bsd_amd64.s
│   │       │   │   ├── asm_bsd_arm.s
│   │       │   │   ├── asm_bsd_arm64.s
│   │       │   │   ├── asm_bsd_ppc64.s
│   │       │   │   ├── asm_bsd_riscv64.s
│   │       │   │   ├── asm_linux_386.s
│   │       │   │   ├── asm_linux_amd64.s
│   │       │   │   ├── asm_linux_arm.s
│   │       │   │   ├── asm_linux_arm64.s
│   │       │   │   ├── asm_linux_loong64.s
│   │       │   │   ├── asm_linux_mips64x.s
│   │       │   │   ├── asm_linux_mipsx.s
│   │       │   │   ├── asm_linux_ppc64x.s
│   │       │   │   ├── asm_linux_riscv64.s
│   │       │   │   ├── asm_linux_s390x.s
│   │       │   │   ├── asm_openbsd_mips64.s
│   │       │   │   ├── asm_solaris_amd64.s
│   │       │   │   ├── asm_zos_s390x.s
│   │       │   │   ├── auxv.go
│   │       │   │   ├── auxv_unsupported.go
│   │       │   │   ├── bluetooth_linux.go
│   │       │   │   ├── bpxsvc_zos.go
│   │       │   │   ├── bpxsvc_zos.s
│   │       │   │   ├── cap_freebsd.go
│   │       │   │   ├── constants.go
│   │       │   │   ├── dev_aix_ppc.go
│   │       │   │   ├── dev_aix_ppc64.go
│   │       │   │   ├── dev_darwin.go
│   │       │   │   ├── dev_dragonfly.go
│   │       │   │   ├── dev_freebsd.go
│   │       │   │   ├── dev_linux.go
│   │       │   │   ├── dev_netbsd.go
│   │       │   │   ├── dev_openbsd.go
│   │       │   │   ├── dev_zos.go
│   │       │   │   ├── dirent.go
│   │       │   │   ├── endian_big.go
│   │       │   │   ├── endian_little.go
│   │       │   │   ├── env_unix.go
│   │       │   │   ├── fcntl.go
│   │       │   │   ├── fcntl_darwin.go
│   │       │   │   ├── fcntl_linux_32bit.go
│   │       │   │   ├── fdset.go
│   │       │   │   ├── gccgo.go
│   │       │   │   ├── gccgo_c.c
│   │       │   │   ├── gccgo_linux_amd64.go
│   │       │   │   ├── ifreq_linux.go
│   │       │   │   ├── ioctl_linux.go
│   │       │   │   ├── ioctl_signed.go
│   │       │   │   ├── ioctl_unsigned.go
│   │       │   │   ├── ioctl_zos.go
│   │       │   │   ├── mkall.sh
│   │       │   │   ├── mkerrors.sh
│   │       │   │   ├── mmap_nomremap.go
│   │       │   │   ├── mremap.go
│   │       │   │   ├── pagesize_unix.go
│   │       │   │   ├── pledge_openbsd.go
│   │       │   │   ├── ptrace_darwin.go
│   │       │   │   ├── ptrace_ios.go
│   │       │   │   ├── race.go
│   │       │   │   ├── race0.go
│   │       │   │   ├── readdirent_getdents.go
│   │       │   │   ├── readdirent_getdirentries.go
│   │       │   │   ├── sockcmsg_dragonfly.go
│   │       │   │   ├── sockcmsg_linux.go
│   │       │   │   ├── sockcmsg_unix.go
│   │       │   │   ├── sockcmsg_unix_other.go
│   │       │   │   ├── sockcmsg_zos.go
│   │       │   │   ├── symaddr_zos_s390x.s
│   │       │   │   ├── syscall.go
│   │       │   │   ├── syscall_aix.go
│   │       │   │   ├── syscall_aix_ppc.go
│   │       │   │   ├── syscall_aix_ppc64.go
│   │       │   │   ├── syscall_bsd.go
│   │       │   │   ├── syscall_darwin.go
│   │       │   │   ├── syscall_darwin_amd64.go
│   │       │   │   ├── syscall_darwin_arm64.go
│   │       │   │   ├── syscall_darwin_libSystem.go
│   │       │   │   ├── syscall_dragonfly.go
│   │       │   │   ├── syscall_dragonfly_amd64.go
│   │       │   │   ├── syscall_freebsd.go
│   │       │   │   ├── syscall_freebsd_386.go
│   │       │   │   ├── syscall_freebsd_amd64.go
│   │       │   │   ├── syscall_freebsd_arm.go
│   │       │   │   ├── syscall_freebsd_arm64.go
│   │       │   │   ├── syscall_freebsd_riscv64.go
│   │       │   │   ├── syscall_hurd.go
│   │       │   │   ├── syscall_hurd_386.go
│   │       │   │   ├── syscall_illumos.go
│   │       │   │   ├── syscall_linux.go
│   │       │   │   ├── syscall_linux_386.go
│   │       │   │   ├── syscall_linux_alarm.go
│   │       │   │   ├── syscall_linux_amd64.go
│   │       │   │   ├── syscall_linux_amd64_gc.go
│   │       │   │   ├── syscall_linux_arm.go
│   │       │   │   ├── syscall_linux_arm64.go
│   │       │   │   ├── syscall_linux_gc.go
│   │       │   │   ├── syscall_linux_gc_386.go
│   │       │   │   ├── syscall_linux_gc_arm.go
│   │       │   │   ├── syscall_linux_gccgo_386.go
│   │       │   │   ├── syscall_linux_gccgo_arm.go
│   │       │   │   ├── syscall_linux_loong64.go
│   │       │   │   ├── syscall_linux_mips64x.go
│   │       │   │   ├── syscall_linux_mipsx.go
│   │       │   │   ├── syscall_linux_ppc.go
│   │       │   │   ├── syscall_linux_ppc64x.go
│   │       │   │   ├── syscall_linux_riscv64.go
│   │       │   │   ├── syscall_linux_s390x.go
│   │       │   │   ├── syscall_linux_sparc64.go
│   │       │   │   ├── syscall_netbsd.go
│   │       │   │   ├── syscall_netbsd_386.go
│   │       │   │   ├── syscall_netbsd_amd64.go
│   │       │   │   ├── syscall_netbsd_arm.go
│   │       │   │   ├── syscall_netbsd_arm64.go
│   │       │   │   ├── syscall_openbsd.go
│   │       │   │   ├── syscall_openbsd_386.go
│   │       │   │   ├── syscall_openbsd_amd64.go
│   │       │   │   ├── syscall_openbsd_arm.go
│   │       │   │   ├── syscall_openbsd_arm64.go
│   │       │   │   ├── syscall_openbsd_libc.go
│   │       │   │   ├── syscall_openbsd_mips64.go
│   │       │   │   ├── syscall_openbsd_ppc64.go
│   │       │   │   ├── syscall_openbsd_riscv64.go
│   │       │   │   ├── syscall_solaris.go
│   │       │   │   ├── syscall_solaris_amd64.go
│   │       │   │   ├── syscall_unix.go
│   │       │   │   ├── syscall_unix_gc.go
│   │       │   │   ├── syscall_unix_gc_ppc64x.go
│   │       │   │   ├── syscall_zos_s390x.go
│   │       │   │   ├── sysvshm_linux.go
│   │       │   │   ├── sysvshm_unix.go
│   │       │   │   ├── sysvshm_unix_other.go
│   │       │   │   ├── timestruct.go
│   │       │   │   ├── unveil_openbsd.go
│   │       │   │   ├── vgetrandom_linux.go
│   │       │   │   ├── vgetrandom_unsupported.go
│   │       │   │   ├── xattr_bsd.go
│   │       │   │   ├── zerrors_aix_ppc.go
│   │       │   │   ├── zerrors_aix_ppc64.go
│   │       │   │   ├── zerrors_darwin_amd64.go
│   │       │   │   ├── zerrors_darwin_arm64.go
│   │       │   │   ├── zerrors_dragonfly_amd64.go
│   │       │   │   ├── zerrors_freebsd_386.go
│   │       │   │   ├── zerrors_freebsd_amd64.go
│   │       │   │   ├── zerrors_freebsd_arm.go
│   │       │   │   ├── zerrors_freebsd_arm64.go
│   │       │   │   ├── zerrors_freebsd_riscv64.go
│   │       │   │   ├── zerrors_linux.go
│   │       │   │   ├── zerrors_linux_386.go
│   │       │   │   ├── zerrors_linux_amd64.go
│   │       │   │   ├── zerrors_linux_arm.go
│   │       │   │   ├── zerrors_linux_arm64.go
│   │       │   │   ├── zerrors_linux_loong64.go
│   │       │   │   ├── zerrors_linux_mips.go
│   │       │   │   ├── zerrors_linux_mips64.go
│   │       │   │   ├── zerrors_linux_mips64le.go
│   │       │   │   ├── zerrors_linux_mipsle.go
│   │       │   │   ├── zerrors_linux_ppc.go
│   │       │   │   ├── zerrors_linux_ppc64.go
│   │       │   │   ├── zerrors_linux_ppc64le.go
│   │       │   │   ├── zerrors_linux_riscv64.go
│   │       │   │   ├── zerrors_linux_s390x.go
│   │       │   │   ├── zerrors_linux_sparc64.go
│   │       │   │   ├── zerrors_netbsd_386.go
│   │       │   │   ├── zerrors_netbsd_amd64.go
│   │       │   │   ├── zerrors_netbsd_arm.go
│   │       │   │   ├── zerrors_netbsd_arm64.go
│   │       │   │   ├── zerrors_openbsd_386.go
│   │       │   │   ├── zerrors_openbsd_amd64.go
│   │       │   │   ├── zerrors_openbsd_arm.go
│   │       │   │   ├── zerrors_openbsd_arm64.go
│   │       │   │   ├── zerrors_openbsd_mips64.go
│   │       │   │   ├── zerrors_openbsd_ppc64.go
│   │       │   │   ├── zerrors_openbsd_riscv64.go
│   │       │   │   ├── zerrors_solaris_amd64.go
│   │       │   │   ├── zerrors_zos_s390x.go
│   │       │   │   ├── zptrace_armnn_linux.go
│   │       │   │   ├── zptrace_linux_arm64.go
│   │       │   │   ├── zptrace_mipsnn_linux.go
│   │       │   │   ├── zptrace_mipsnnle_linux.go
│   │       │   │   ├── zptrace_x86_linux.go
│   │       │   │   ├── zsymaddr_zos_s390x.s
│   │       │   │   ├── zsyscall_aix_ppc.go
│   │       │   │   ├── zsyscall_aix_ppc64.go
│   │       │   │   ├── zsyscall_aix_ppc64_gc.go
│   │       │   │   ├── zsyscall_aix_ppc64_gccgo.go
│   │       │   │   ├── zsyscall_darwin_amd64.go
│   │       │   │   ├── zsyscall_darwin_amd64.s
│   │       │   │   ├── zsyscall_darwin_arm64.go
│   │       │   │   ├── zsyscall_darwin_arm64.s
│   │       │   │   ├── zsyscall_dragonfly_amd64.go
│   │       │   │   ├── zsyscall_freebsd_386.go
│   │       │   │   ├── zsyscall_freebsd_amd64.go
│   │       │   │   ├── zsyscall_freebsd_arm.go
│   │       │   │   ├── zsyscall_freebsd_arm64.go
│   │       │   │   ├── zsyscall_freebsd_riscv64.go
│   │       │   │   ├── zsyscall_illumos_amd64.go
│   │       │   │   ├── zsyscall_linux.go
│   │       │   │   ├── zsyscall_linux_386.go
│   │       │   │   ├── zsyscall_linux_amd64.go
│   │       │   │   ├── zsyscall_linux_arm.go
│   │       │   │   ├── zsyscall_linux_arm64.go
│   │       │   │   ├── zsyscall_linux_loong64.go
│   │       │   │   ├── zsyscall_linux_mips.go
│   │       │   │   ├── zsyscall_linux_mips64.go
│   │       │   │   ├── zsyscall_linux_mips64le.go
│   │       │   │   ├── zsyscall_linux_mipsle.go
│   │       │   │   ├── zsyscall_linux_ppc.go
│   │       │   │   ├── zsyscall_linux_ppc64.go
│   │       │   │   ├── zsyscall_linux_ppc64le.go
│   │       │   │   ├── zsyscall_linux_riscv64.go
│   │       │   │   ├── zsyscall_linux_s390x.go
│   │       │   │   ├── zsyscall_linux_sparc64.go
│   │       │   │   ├── zsyscall_netbsd_386.go
│   │       │   │   ├── zsyscall_netbsd_amd64.go
│   │       │   │   ├── zsyscall_netbsd_arm.go
│   │       │   │   ├── zsyscall_netbsd_arm64.go
│   │       │   │   ├── zsyscall_openbsd_386.go
│   │       │   │   ├── zsyscall_openbsd_386.s
│   │       │   │   ├── zsyscall_openbsd_amd64.go
│   │       │   │   ├── zsyscall_openbsd_amd64.s
│   │       │   │   ├── zsyscall_openbsd_arm.go
│   │       │   │   ├── zsyscall_openbsd_arm.s
│   │       │   │   ├── zsyscall_openbsd_arm64.go
│   │       │   │   ├── zsyscall_openbsd_arm64.s
│   │       │   │   ├── zsyscall_openbsd_mips64.go
│   │       │   │   ├── zsyscall_openbsd_mips64.s
│   │       │   │   ├── zsyscall_openbsd_ppc64.go
│   │       │   │   ├── zsyscall_openbsd_ppc64.s
│   │       │   │   ├── zsyscall_openbsd_riscv64.go
│   │       │   │   ├── zsyscall_openbsd_riscv64.s
│   │       │   │   ├── zsyscall_solaris_amd64.go
│   │       │   │   ├── zsyscall_zos_s390x.go
│   │       │   │   ├── zsysctl_openbsd_386.go
│   │       │   │   ├── zsysctl_openbsd_amd64.go
│   │       │   │   ├── zsysctl_openbsd_arm.go
│   │       │   │   ├── zsysctl_openbsd_arm64.go
│   │       │   │   ├── zsysctl_openbsd_mips64.go
│   │       │   │   ├── zsysctl_openbsd_ppc64.go
│   │       │   │   ├── zsysctl_openbsd_riscv64.go
│   │       │   │   ├── zsysnum_darwin_amd64.go
│   │       │   │   ├── zsysnum_darwin_arm64.go
│   │       │   │   ├── zsysnum_dragonfly_amd64.go
│   │       │   │   ├── zsysnum_freebsd_386.go
│   │       │   │   ├── zsysnum_freebsd_amd64.go
│   │       │   │   ├── zsysnum_freebsd_arm.go
│   │       │   │   ├── zsysnum_freebsd_arm64.go
│   │       │   │   ├── zsysnum_freebsd_riscv64.go
│   │       │   │   ├── zsysnum_linux_386.go
│   │       │   │   ├── zsysnum_linux_amd64.go
│   │       │   │   ├── zsysnum_linux_arm.go
│   │       │   │   ├── zsysnum_linux_arm64.go
│   │       │   │   ├── zsysnum_linux_loong64.go
│   │       │   │   ├── zsysnum_linux_mips.go
│   │       │   │   ├── zsysnum_linux_mips64.go
│   │       │   │   ├── zsysnum_linux_mips64le.go
│   │       │   │   ├── zsysnum_linux_mipsle.go
│   │       │   │   ├── zsysnum_linux_ppc.go
│   │       │   │   ├── zsysnum_linux_ppc64.go
│   │       │   │   ├── zsysnum_linux_ppc64le.go
│   │       │   │   ├── zsysnum_linux_riscv64.go
│   │       │   │   ├── zsysnum_linux_s390x.go
│   │       │   │   ├── zsysnum_linux_sparc64.go
│   │       │   │   ├── zsysnum_netbsd_386.go
│   │       │   │   ├── zsysnum_netbsd_amd64.go
│   │       │   │   ├── zsysnum_netbsd_arm.go
│   │       │   │   ├── zsysnum_netbsd_arm64.go
│   │       │   │   ├── zsysnum_openbsd_386.go
│   │       │   │   ├── zsysnum_openbsd_amd64.go
│   │       │   │   ├── zsysnum_openbsd_arm.go
│   │       │   │   ├── zsysnum_openbsd_arm64.go
│   │       │   │   ├── zsysnum_openbsd_mips64.go
│   │       │   │   ├── zsysnum_openbsd_ppc64.go
│   │       │   │   ├── zsysnum_openbsd_riscv64.go
│   │       │   │   ├── zsysnum_zos_s390x.go
│   │       │   │   ├── ztypes_aix_ppc.go
│   │       │   │   ├── ztypes_aix_ppc64.go
│   │       │   │   ├── ztypes_darwin_amd64.go
│   │       │   │   ├── ztypes_darwin_arm64.go
│   │       │   │   ├── ztypes_dragonfly_amd64.go
│   │       │   │   ├── ztypes_freebsd_386.go
│   │       │   │   ├── ztypes_freebsd_amd64.go
│   │       │   │   ├── ztypes_freebsd_arm.go
│   │       │   │   ├── ztypes_freebsd_arm64.go
│   │       │   │   ├── ztypes_freebsd_riscv64.go
│   │       │   │   ├── ztypes_linux.go
│   │       │   │   ├── ztypes_linux_386.go
│   │       │   │   ├── ztypes_linux_amd64.go
│   │       │   │   ├── ztypes_linux_arm.go
│   │       │   │   ├── ztypes_linux_arm64.go
│   │       │   │   ├── ztypes_linux_loong64.go
│   │       │   │   ├── ztypes_linux_mips.go
│   │       │   │   ├── ztypes_linux_mips64.go
│   │       │   │   ├── ztypes_linux_mips64le.go
│   │       │   │   ├── ztypes_linux_mipsle.go
│   │       │   │   ├── ztypes_linux_ppc.go
│   │       │   │   ├── ztypes_linux_ppc64.go
│   │       │   │   ├── ztypes_linux_ppc64le.go
│   │       │   │   ├── ztypes_linux_riscv64.go
│   │       │   │   ├── ztypes_linux_s390x.go
│   │       │   │   ├── ztypes_linux_sparc64.go
│   │       │   │   ├── ztypes_netbsd_386.go
│   │       │   │   ├── ztypes_netbsd_amd64.go
│   │       │   │   ├── ztypes_netbsd_arm.go
│   │       │   │   ├── ztypes_netbsd_arm64.go
│   │       │   │   ├── ztypes_openbsd_386.go
│   │       │   │   ├── ztypes_openbsd_amd64.go
│   │       │   │   ├── ztypes_openbsd_arm.go
│   │       │   │   ├── ztypes_openbsd_arm64.go
│   │       │   │   ├── ztypes_openbsd_mips64.go
│   │       │   │   ├── ztypes_openbsd_ppc64.go
│   │       │   │   ├── ztypes_openbsd_riscv64.go
│   │       │   │   ├── ztypes_solaris_amd64.go
│   │       │   │   └── ztypes_zos_s390x.go
│   │       │   └── windows/
│   │       │       ├── aliases.go
│   │       │       ├── dll_windows.go
│   │       │       ├── env_windows.go
│   │       │       ├── eventlog.go
│   │       │       ├── exec_windows.go
│   │       │       ├── memory_windows.go
│   │       │       ├── mkerrors.bash
│   │       │       ├── mkknownfolderids.bash
│   │       │       ├── mksyscall.go
│   │       │       ├── race.go
│   │       │       ├── race0.go
│   │       │       ├── registry/
│   │       │       │   ├── key.go
│   │       │       │   ├── mksyscall.go
│   │       │       │   ├── syscall.go
│   │       │       │   ├── value.go
│   │       │       │   └── zsyscall_windows.go
│   │       │       ├── security_windows.go
│   │       │       ├── service.go
│   │       │       ├── setupapi_windows.go
│   │       │       ├── str.go
│   │       │       ├── svc/
│   │       │       │   ├── eventlog/
│   │       │       │   │   ├── install.go
│   │       │       │   │   └── log.go
│   │       │       │   ├── mgr/
│   │       │       │   │   ├── config.go
│   │       │       │   │   ├── mgr.go
│   │       │       │   │   ├── recovery.go
│   │       │       │   │   └── service.go
│   │       │       │   ├── security.go
│   │       │       │   └── service.go
│   │       │       ├── syscall.go
│   │       │       ├── syscall_windows.go
│   │       │       ├── types_windows.go
│   │       │       ├── types_windows_386.go
│   │       │       ├── types_windows_amd64.go
│   │       │       ├── types_windows_arm.go
│   │       │       ├── types_windows_arm64.go
│   │       │       ├── zerrors_windows.go
│   │       │       ├── zknownfolderids_windows.go
│   │       │       └── zsyscall_windows.go
│   │       ├── term/
│   │       │   ├── CONTRIBUTING.md
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── README.md
│   │       │   ├── codereview.cfg
│   │       │   ├── term.go
│   │       │   ├── term_plan9.go
│   │       │   ├── term_unix.go
│   │       │   ├── term_unix_bsd.go
│   │       │   ├── term_unix_other.go
│   │       │   ├── term_unsupported.go
│   │       │   ├── term_windows.go
│   │       │   └── terminal.go
│   │       ├── text/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── cases/
│   │       │   │   ├── cases.go
│   │       │   │   ├── context.go
│   │       │   │   ├── fold.go
│   │       │   │   ├── icu.go
│   │       │   │   ├── info.go
│   │       │   │   ├── map.go
│   │       │   │   ├── tables10.0.0.go
│   │       │   │   ├── tables11.0.0.go
│   │       │   │   ├── tables12.0.0.go
│   │       │   │   ├── tables13.0.0.go
│   │       │   │   ├── tables15.0.0.go
│   │       │   │   ├── tables9.0.0.go
│   │       │   │   └── trieval.go
│   │       │   ├── internal/
│   │       │   │   ├── internal.go
│   │       │   │   ├── language/
│   │       │   │   │   ├── common.go
│   │       │   │   │   ├── compact/
│   │       │   │   │   │   ├── compact.go
│   │       │   │   │   │   ├── language.go
│   │       │   │   │   │   ├── parents.go
│   │       │   │   │   │   ├── tables.go
│   │       │   │   │   │   └── tags.go
│   │       │   │   │   ├── compact.go
│   │       │   │   │   ├── compose.go
│   │       │   │   │   ├── coverage.go
│   │       │   │   │   ├── language.go
│   │       │   │   │   ├── lookup.go
│   │       │   │   │   ├── match.go
│   │       │   │   │   ├── parse.go
│   │       │   │   │   ├── tables.go
│   │       │   │   │   └── tags.go
│   │       │   │   ├── match.go
│   │       │   │   └── tag/
│   │       │   │       └── tag.go
│   │       │   ├── language/
│   │       │   │   ├── coverage.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── language.go
│   │       │   │   ├── match.go
│   │       │   │   ├── parse.go
│   │       │   │   ├── tables.go
│   │       │   │   └── tags.go
│   │       │   ├── secure/
│   │       │   │   └── bidirule/
│   │       │   │       ├── bidirule.go
│   │       │   │       ├── bidirule10.0.0.go
│   │       │   │       └── bidirule9.0.0.go
│   │       │   ├── transform/
│   │       │   │   └── transform.go
│   │       │   └── unicode/
│   │       │       ├── bidi/
│   │       │       │   ├── bidi.go
│   │       │       │   ├── bracket.go
│   │       │       │   ├── core.go
│   │       │       │   ├── prop.go
│   │       │       │   ├── tables10.0.0.go
│   │       │       │   ├── tables11.0.0.go
│   │       │       │   ├── tables12.0.0.go
│   │       │       │   ├── tables13.0.0.go
│   │       │       │   ├── tables15.0.0.go
│   │       │       │   ├── tables9.0.0.go
│   │       │       │   └── trieval.go
│   │       │       └── norm/
│   │       │           ├── composition.go
│   │       │           ├── forminfo.go
│   │       │           ├── input.go
│   │       │           ├── iter.go
│   │       │           ├── normalize.go
│   │       │           ├── readwriter.go
│   │       │           ├── tables10.0.0.go
│   │       │           ├── tables11.0.0.go
│   │       │           ├── tables12.0.0.go
│   │       │           ├── tables13.0.0.go
│   │       │           ├── tables15.0.0.go
│   │       │           ├── tables9.0.0.go
│   │       │           ├── transform.go
│   │       │           └── trie.go
│   │       └── tools/
│   │           ├── LICENSE
│   │           ├── PATENTS
│   │           ├── cover/
│   │           │   └── profile.go
│   │           ├── go/
│   │           │   ├── ast/
│   │           │   │   ├── astutil/
│   │           │   │   │   ├── enclosing.go
│   │           │   │   │   ├── imports.go
│   │           │   │   │   ├── rewrite.go
│   │           │   │   │   └── util.go
│   │           │   │   └── inspector/
│   │           │   │       ├── inspector.go
│   │           │   │       ├── iter.go
│   │           │   │       ├── typeof.go
│   │           │   │       └── walk.go
│   │           │   ├── gcexportdata/
│   │           │   │   ├── gcexportdata.go
│   │           │   │   └── importer.go
│   │           │   ├── packages/
│   │           │   │   ├── doc.go
│   │           │   │   ├── external.go
│   │           │   │   ├── golist.go
│   │           │   │   ├── golist_overlay.go
│   │           │   │   ├── loadmode_string.go
│   │           │   │   ├── packages.go
│   │           │   │   └── visit.go
│   │           │   └── types/
│   │           │       ├── objectpath/
│   │           │       │   └── objectpath.go
│   │           │       └── typeutil/
│   │           │           ├── callee.go
│   │           │           ├── imports.go
│   │           │           ├── map.go
│   │           │           ├── methodsetcache.go
│   │           │           └── ui.go
│   │           ├── imports/
│   │           │   └── forward.go
│   │           └── internal/
│   │               ├── aliases/
│   │               │   ├── aliases.go
│   │               │   └── aliases_go122.go
│   │               ├── astutil/
│   │               │   └── edge/
│   │               │       └── edge.go
│   │               ├── event/
│   │               │   ├── core/
│   │               │   │   ├── event.go
│   │               │   │   ├── export.go
│   │               │   │   └── fast.go
│   │               │   ├── doc.go
│   │               │   ├── event.go
│   │               │   ├── keys/
│   │               │   │   ├── keys.go
│   │               │   │   ├── standard.go
│   │               │   │   └── util.go
│   │               │   └── label/
│   │               │       └── label.go
│   │               ├── gcimporter/
│   │               │   ├── bimport.go
│   │               │   ├── exportdata.go
│   │               │   ├── gcimporter.go
│   │               │   ├── iexport.go
│   │               │   ├── iimport.go
│   │               │   ├── iimport_go122.go
│   │               │   ├── predeclared.go
│   │               │   ├── support.go
│   │               │   └── ureader_yes.go
│   │               ├── gocommand/
│   │               │   ├── invoke.go
│   │               │   ├── invoke_notunix.go
│   │               │   ├── invoke_unix.go
│   │               │   ├── vendor.go
│   │               │   └── version.go
│   │               ├── gopathwalk/
│   │               │   └── walk.go
│   │               ├── imports/
│   │               │   ├── fix.go
│   │               │   ├── imports.go
│   │               │   ├── mod.go
│   │               │   ├── mod_cache.go
│   │               │   ├── sortimports.go
│   │               │   ├── source.go
│   │               │   ├── source_env.go
│   │               │   └── source_modindex.go
│   │               ├── modindex/
│   │               │   ├── directories.go
│   │               │   ├── index.go
│   │               │   ├── lookup.go
│   │               │   ├── modindex.go
│   │               │   ├── symbols.go
│   │               │   └── types.go
│   │               ├── packagesinternal/
│   │               │   └── packages.go
│   │               ├── pkgbits/
│   │               │   ├── codes.go
│   │               │   ├── decoder.go
│   │               │   ├── doc.go
│   │               │   ├── encoder.go
│   │               │   ├── flags.go
│   │               │   ├── reloc.go
│   │               │   ├── support.go
│   │               │   ├── sync.go
│   │               │   ├── syncmarker_string.go
│   │               │   └── version.go
│   │               ├── stdlib/
│   │               │   ├── deps.go
│   │               │   ├── import.go
│   │               │   ├── manifest.go
│   │               │   └── stdlib.go
│   │               ├── typeparams/
│   │               │   ├── common.go
│   │               │   ├── coretype.go
│   │               │   ├── free.go
│   │               │   ├── normalize.go
│   │               │   ├── termlist.go
│   │               │   └── typeterm.go
│   │               ├── typesinternal/
│   │               │   ├── classify_call.go
│   │               │   ├── element.go
│   │               │   ├── errorcode.go
│   │               │   ├── errorcode_string.go
│   │               │   ├── qualifier.go
│   │               │   ├── recv.go
│   │               │   ├── toonew.go
│   │               │   ├── types.go
│   │               │   ├── varkind.go
│   │               │   └── zerovalue.go
│   │               └── versions/
│   │                   ├── features.go
│   │                   ├── gover.go
│   │                   ├── types.go
│   │                   └── versions.go
│   ├── google.golang.org/
│   │   ├── genproto/
│   │   │   └── googleapis/
│   │   │       ├── api/
│   │   │       │   ├── LICENSE
│   │   │       │   └── httpbody/
│   │   │       │       └── httpbody.pb.go
│   │   │       └── rpc/
│   │   │           ├── LICENSE
│   │   │           └── status/
│   │   │               └── status.pb.go
│   │   ├── grpc/
│   │   │   ├── AUTHORS
│   │   │   ├── CODE-OF-CONDUCT.md
│   │   │   ├── CONTRIBUTING.md
│   │   │   ├── GOVERNANCE.md
│   │   │   ├── LICENSE
│   │   │   ├── MAINTAINERS.md
│   │   │   ├── Makefile
│   │   │   ├── NOTICE.txt
│   │   │   ├── README.md
│   │   │   ├── SECURITY.md
│   │   │   ├── attributes/
│   │   │   │   └── attributes.go
│   │   │   ├── backoff/
│   │   │   │   └── backoff.go
│   │   │   ├── backoff.go
│   │   │   ├── balancer/
│   │   │   │   ├── balancer.go
│   │   │   │   ├── base/
│   │   │   │   │   ├── balancer.go
│   │   │   │   │   └── base.go
│   │   │   │   ├── conn_state_evaluator.go
│   │   │   │   ├── endpointsharding/
│   │   │   │   │   └── endpointsharding.go
│   │   │   │   ├── grpclb/
│   │   │   │   │   └── state/
│   │   │   │   │       └── state.go
│   │   │   │   ├── pickfirst/
│   │   │   │   │   ├── internal/
│   │   │   │   │   │   └── internal.go
│   │   │   │   │   ├── pickfirst.go
│   │   │   │   │   └── pickfirstleaf/
│   │   │   │   │       └── pickfirstleaf.go
│   │   │   │   ├── roundrobin/
│   │   │   │   │   └── roundrobin.go
│   │   │   │   └── subconn.go
│   │   │   ├── balancer_wrapper.go
│   │   │   ├── binarylog/
│   │   │   │   └── grpc_binarylog_v1/
│   │   │   │       └── binarylog.pb.go
│   │   │   ├── call.go
│   │   │   ├── channelz/
│   │   │   │   └── channelz.go
│   │   │   ├── clientconn.go
│   │   │   ├── codec.go
│   │   │   ├── codes/
│   │   │   │   ├── code_string.go
│   │   │   │   └── codes.go
│   │   │   ├── connectivity/
│   │   │   │   └── connectivity.go
│   │   │   ├── credentials/
│   │   │   │   ├── credentials.go
│   │   │   │   ├── insecure/
│   │   │   │   │   └── insecure.go
│   │   │   │   └── tls.go
│   │   │   ├── dialoptions.go
│   │   │   ├── doc.go
│   │   │   ├── encoding/
│   │   │   │   ├── encoding.go
│   │   │   │   ├── encoding_v2.go
│   │   │   │   └── proto/
│   │   │   │       └── proto.go
│   │   │   ├── experimental/
│   │   │   │   └── stats/
│   │   │   │       ├── metricregistry.go
│   │   │   │       └── metrics.go
│   │   │   ├── grpclog/
│   │   │   │   ├── component.go
│   │   │   │   ├── grpclog.go
│   │   │   │   ├── internal/
│   │   │   │   │   ├── grpclog.go
│   │   │   │   │   ├── logger.go
│   │   │   │   │   └── loggerv2.go
│   │   │   │   ├── logger.go
│   │   │   │   └── loggerv2.go
│   │   │   ├── health/
│   │   │   │   └── grpc_health_v1/
│   │   │   │       ├── health.pb.go
│   │   │   │       └── health_grpc.pb.go
│   │   │   ├── interceptor.go
│   │   │   ├── internal/
│   │   │   │   ├── backoff/
│   │   │   │   │   └── backoff.go
│   │   │   │   ├── balancer/
│   │   │   │   │   └── gracefulswitch/
│   │   │   │   │       ├── config.go
│   │   │   │   │       └── gracefulswitch.go
│   │   │   │   ├── balancerload/
│   │   │   │   │   └── load.go
│   │   │   │   ├── binarylog/
│   │   │   │   │   ├── binarylog.go
│   │   │   │   │   ├── binarylog_testutil.go
│   │   │   │   │   ├── env_config.go
│   │   │   │   │   ├── method_logger.go
│   │   │   │   │   └── sink.go
│   │   │   │   ├── buffer/
│   │   │   │   │   └── unbounded.go
│   │   │   │   ├── channelz/
│   │   │   │   │   ├── channel.go
│   │   │   │   │   ├── channelmap.go
│   │   │   │   │   ├── funcs.go
│   │   │   │   │   ├── logging.go
│   │   │   │   │   ├── server.go
│   │   │   │   │   ├── socket.go
│   │   │   │   │   ├── subchannel.go
│   │   │   │   │   ├── syscall_linux.go
│   │   │   │   │   ├── syscall_nonlinux.go
│   │   │   │   │   └── trace.go
│   │   │   │   ├── credentials/
│   │   │   │   │   ├── credentials.go
│   │   │   │   │   ├── spiffe.go
│   │   │   │   │   ├── syscallconn.go
│   │   │   │   │   └── util.go
│   │   │   │   ├── envconfig/
│   │   │   │   │   ├── envconfig.go
│   │   │   │   │   ├── observability.go
│   │   │   │   │   └── xds.go
│   │   │   │   ├── experimental.go
│   │   │   │   ├── grpclog/
│   │   │   │   │   └── prefix_logger.go
│   │   │   │   ├── grpcsync/
│   │   │   │   │   ├── callback_serializer.go
│   │   │   │   │   ├── event.go
│   │   │   │   │   └── pubsub.go
│   │   │   │   ├── grpcutil/
│   │   │   │   │   ├── compressor.go
│   │   │   │   │   ├── encode_duration.go
│   │   │   │   │   ├── grpcutil.go
│   │   │   │   │   ├── metadata.go
│   │   │   │   │   ├── method.go
│   │   │   │   │   └── regex.go
│   │   │   │   ├── idle/
│   │   │   │   │   └── idle.go
│   │   │   │   ├── internal.go
│   │   │   │   ├── metadata/
│   │   │   │   │   └── metadata.go
│   │   │   │   ├── pretty/
│   │   │   │   │   └── pretty.go
│   │   │   │   ├── proxyattributes/
│   │   │   │   │   └── proxyattributes.go
│   │   │   │   ├── resolver/
│   │   │   │   │   ├── config_selector.go
│   │   │   │   │   ├── delegatingresolver/
│   │   │   │   │   │   └── delegatingresolver.go
│   │   │   │   │   ├── dns/
│   │   │   │   │   │   ├── dns_resolver.go
│   │   │   │   │   │   └── internal/
│   │   │   │   │   │       └── internal.go
│   │   │   │   │   ├── passthrough/
│   │   │   │   │   │   └── passthrough.go
│   │   │   │   │   └── unix/
│   │   │   │   │       └── unix.go
│   │   │   │   ├── serviceconfig/
│   │   │   │   │   ├── duration.go
│   │   │   │   │   └── serviceconfig.go
│   │   │   │   ├── stats/
│   │   │   │   │   ├── labels.go
│   │   │   │   │   └── metrics_recorder_list.go
│   │   │   │   ├── status/
│   │   │   │   │   └── status.go
│   │   │   │   ├── syscall/
│   │   │   │   │   ├── syscall_linux.go
│   │   │   │   │   └── syscall_nonlinux.go
│   │   │   │   ├── tcp_keepalive_others.go
│   │   │   │   ├── tcp_keepalive_unix.go
│   │   │   │   ├── tcp_keepalive_windows.go
│   │   │   │   └── transport/
│   │   │   │       ├── bdp_estimator.go
│   │   │   │       ├── client_stream.go
│   │   │   │       ├── controlbuf.go
│   │   │   │       ├── defaults.go
│   │   │   │       ├── flowcontrol.go
│   │   │   │       ├── handler_server.go
│   │   │   │       ├── http2_client.go
│   │   │   │       ├── http2_server.go
│   │   │   │       ├── http_util.go
│   │   │   │       ├── logging.go
│   │   │   │       ├── networktype/
│   │   │   │       │   └── networktype.go
│   │   │   │       ├── proxy.go
│   │   │   │       ├── server_stream.go
│   │   │   │       └── transport.go
│   │   │   ├── keepalive/
│   │   │   │   └── keepalive.go
│   │   │   ├── mem/
│   │   │   │   ├── buffer_pool.go
│   │   │   │   ├── buffer_slice.go
│   │   │   │   └── buffers.go
│   │   │   ├── metadata/
│   │   │   │   └── metadata.go
│   │   │   ├── peer/
│   │   │   │   └── peer.go
│   │   │   ├── picker_wrapper.go
│   │   │   ├── preloader.go
│   │   │   ├── resolver/
│   │   │   │   ├── dns/
│   │   │   │   │   └── dns_resolver.go
│   │   │   │   ├── map.go
│   │   │   │   └── resolver.go
│   │   │   ├── resolver_wrapper.go
│   │   │   ├── rpc_util.go
│   │   │   ├── server.go
│   │   │   ├── service_config.go
│   │   │   ├── serviceconfig/
│   │   │   │   └── serviceconfig.go
│   │   │   ├── stats/
│   │   │   │   ├── handlers.go
│   │   │   │   ├── metrics.go
│   │   │   │   └── stats.go
│   │   │   ├── status/
│   │   │   │   └── status.go
│   │   │   ├── stream.go
│   │   │   ├── stream_interfaces.go
│   │   │   ├── tap/
│   │   │   │   └── tap.go
│   │   │   ├── trace.go
│   │   │   ├── trace_notrace.go
│   │   │   ├── trace_withtrace.go
│   │   │   └── version.go
│   │   └── protobuf/
│   │       ├── LICENSE
│   │       ├── PATENTS
│   │       ├── encoding/
│   │       │   ├── protodelim/
│   │       │   │   └── protodelim.go
│   │       │   ├── protojson/
│   │       │   │   ├── decode.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── encode.go
│   │       │   │   └── well_known_types.go
│   │       │   ├── prototext/
│   │       │   │   ├── decode.go
│   │       │   │   ├── doc.go
│   │       │   │   └── encode.go
│   │       │   └── protowire/
│   │       │       └── wire.go
│   │       ├── internal/
│   │       │   ├── descfmt/
│   │       │   │   └── stringer.go
│   │       │   ├── descopts/
│   │       │   │   └── options.go
│   │       │   ├── detrand/
│   │       │   │   └── rand.go
│   │       │   ├── editiondefaults/
│   │       │   │   ├── defaults.go
│   │       │   │   └── editions_defaults.binpb
│   │       │   ├── encoding/
│   │       │   │   ├── defval/
│   │       │   │   │   └── default.go
│   │       │   │   ├── json/
│   │       │   │   │   ├── decode.go
│   │       │   │   │   ├── decode_number.go
│   │       │   │   │   ├── decode_string.go
│   │       │   │   │   ├── decode_token.go
│   │       │   │   │   └── encode.go
│   │       │   │   ├── messageset/
│   │       │   │   │   └── messageset.go
│   │       │   │   ├── tag/
│   │       │   │   │   └── tag.go
│   │       │   │   └── text/
│   │       │   │       ├── decode.go
│   │       │   │       ├── decode_number.go
│   │       │   │       ├── decode_string.go
│   │       │   │       ├── decode_token.go
│   │       │   │       ├── doc.go
│   │       │   │       └── encode.go
│   │       │   ├── errors/
│   │       │   │   └── errors.go
│   │       │   ├── filedesc/
│   │       │   │   ├── build.go
│   │       │   │   ├── desc.go
│   │       │   │   ├── desc_init.go
│   │       │   │   ├── desc_lazy.go
│   │       │   │   ├── desc_list.go
│   │       │   │   ├── desc_list_gen.go
│   │       │   │   ├── editions.go
│   │       │   │   └── placeholder.go
│   │       │   ├── filetype/
│   │       │   │   └── build.go
│   │       │   ├── flags/
│   │       │   │   ├── flags.go
│   │       │   │   ├── proto_legacy_disable.go
│   │       │   │   └── proto_legacy_enable.go
│   │       │   ├── genid/
│   │       │   │   ├── any_gen.go
│   │       │   │   ├── api_gen.go
│   │       │   │   ├── descriptor_gen.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── duration_gen.go
│   │       │   │   ├── empty_gen.go
│   │       │   │   ├── field_mask_gen.go
│   │       │   │   ├── go_features_gen.go
│   │       │   │   ├── goname.go
│   │       │   │   ├── map_entry.go
│   │       │   │   ├── name.go
│   │       │   │   ├── source_context_gen.go
│   │       │   │   ├── struct_gen.go
│   │       │   │   ├── timestamp_gen.go
│   │       │   │   ├── type_gen.go
│   │       │   │   ├── wrappers.go
│   │       │   │   └── wrappers_gen.go
│   │       │   ├── impl/
│   │       │   │   ├── api_export.go
│   │       │   │   ├── api_export_opaque.go
│   │       │   │   ├── bitmap.go
│   │       │   │   ├── bitmap_race.go
│   │       │   │   ├── checkinit.go
│   │       │   │   ├── codec_extension.go
│   │       │   │   ├── codec_field.go
│   │       │   │   ├── codec_field_opaque.go
│   │       │   │   ├── codec_gen.go
│   │       │   │   ├── codec_map.go
│   │       │   │   ├── codec_message.go
│   │       │   │   ├── codec_message_opaque.go
│   │       │   │   ├── codec_messageset.go
│   │       │   │   ├── codec_tables.go
│   │       │   │   ├── codec_unsafe.go
│   │       │   │   ├── convert.go
│   │       │   │   ├── convert_list.go
│   │       │   │   ├── convert_map.go
│   │       │   │   ├── decode.go
│   │       │   │   ├── encode.go
│   │       │   │   ├── enum.go
│   │       │   │   ├── equal.go
│   │       │   │   ├── extension.go
│   │       │   │   ├── lazy.go
│   │       │   │   ├── legacy_enum.go
│   │       │   │   ├── legacy_export.go
│   │       │   │   ├── legacy_extension.go
│   │       │   │   ├── legacy_file.go
│   │       │   │   ├── legacy_message.go
│   │       │   │   ├── merge.go
│   │       │   │   ├── merge_gen.go
│   │       │   │   ├── message.go
│   │       │   │   ├── message_opaque.go
│   │       │   │   ├── message_opaque_gen.go
│   │       │   │   ├── message_reflect.go
│   │       │   │   ├── message_reflect_field.go
│   │       │   │   ├── message_reflect_field_gen.go
│   │       │   │   ├── message_reflect_gen.go
│   │       │   │   ├── pointer_unsafe.go
│   │       │   │   ├── pointer_unsafe_opaque.go
│   │       │   │   ├── presence.go
│   │       │   │   └── validate.go
│   │       │   ├── order/
│   │       │   │   ├── order.go
│   │       │   │   └── range.go
│   │       │   ├── pragma/
│   │       │   │   └── pragma.go
│   │       │   ├── protolazy/
│   │       │   │   ├── bufferreader.go
│   │       │   │   ├── lazy.go
│   │       │   │   └── pointer_unsafe.go
│   │       │   ├── set/
│   │       │   │   └── ints.go
│   │       │   ├── strs/
│   │       │   │   ├── strings.go
│   │       │   │   └── strings_unsafe.go
│   │       │   └── version/
│   │       │       └── version.go
│   │       ├── proto/
│   │       │   ├── checkinit.go
│   │       │   ├── decode.go
│   │       │   ├── decode_gen.go
│   │       │   ├── doc.go
│   │       │   ├── encode.go
│   │       │   ├── encode_gen.go
│   │       │   ├── equal.go
│   │       │   ├── extension.go
│   │       │   ├── merge.go
│   │       │   ├── messageset.go
│   │       │   ├── proto.go
│   │       │   ├── proto_methods.go
│   │       │   ├── proto_reflect.go
│   │       │   ├── reset.go
│   │       │   ├── size.go
│   │       │   ├── size_gen.go
│   │       │   ├── wrapperopaque.go
│   │       │   └── wrappers.go
│   │       ├── protoadapt/
│   │       │   └── convert.go
│   │       ├── reflect/
│   │       │   ├── protoreflect/
│   │       │   │   ├── methods.go
│   │       │   │   ├── proto.go
│   │       │   │   ├── source.go
│   │       │   │   ├── source_gen.go
│   │       │   │   ├── type.go
│   │       │   │   ├── value.go
│   │       │   │   ├── value_equal.go
│   │       │   │   ├── value_union.go
│   │       │   │   └── value_unsafe.go
│   │       │   └── protoregistry/
│   │       │       └── registry.go
│   │       ├── runtime/
│   │       │   ├── protoiface/
│   │       │   │   ├── legacy.go
│   │       │   │   └── methods.go
│   │       │   └── protoimpl/
│   │       │       ├── impl.go
│   │       │       └── version.go
│   │       └── types/
│   │           └── known/
│   │               ├── anypb/
│   │               │   └── any.pb.go
│   │               ├── durationpb/
│   │               │   └── duration.pb.go
│   │               ├── fieldmaskpb/
│   │               │   └── field_mask.pb.go
│   │               ├── structpb/
│   │               │   └── struct.pb.go
│   │               ├── timestamppb/
│   │               │   └── timestamp.pb.go
│   │               └── wrapperspb/
│   │                   └── wrappers.pb.go
│   ├── gopkg.in/
│   │   ├── natefinch/
│   │   │   └── lumberjack.v2/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── chown.go
│   │   │       ├── chown_linux.go
│   │   │       └── lumberjack.go
│   │   ├── yaml.v2/
│   │   │   ├── .travis.yml
│   │   │   ├── LICENSE
│   │   │   ├── LICENSE.libyaml
│   │   │   ├── NOTICE
│   │   │   ├── README.md
│   │   │   ├── apic.go
│   │   │   ├── decode.go
│   │   │   ├── emitterc.go
│   │   │   ├── encode.go
│   │   │   ├── parserc.go
│   │   │   ├── readerc.go
│   │   │   ├── resolve.go
│   │   │   ├── scannerc.go
│   │   │   ├── sorter.go
│   │   │   ├── writerc.go
│   │   │   ├── yaml.go
│   │   │   ├── yamlh.go
│   │   │   └── yamlprivateh.go
│   │   └── yaml.v3/
│   │       ├── LICENSE
│   │       ├── NOTICE
│   │       ├── README.md
│   │       ├── apic.go
│   │       ├── decode.go
│   │       ├── emitterc.go
│   │       ├── encode.go
│   │       ├── parserc.go
│   │       ├── readerc.go
│   │       ├── resolve.go
│   │       ├── scannerc.go
│   │       ├── sorter.go
│   │       ├── writerc.go
│   │       ├── yaml.go
│   │       ├── yamlh.go
│   │       └── yamlprivateh.go
│   ├── modules.txt
│   ├── nhooyr.io/
│   │   └── websocket/
│   │       ├── .gitignore
│   │       ├── LICENSE.txt
│   │       ├── README.md
│   │       ├── accept.go
│   │       ├── accept_js.go
│   │       ├── close.go
│   │       ├── close_notjs.go
│   │       ├── compress.go
│   │       ├── compress_notjs.go
│   │       ├── conn.go
│   │       ├── conn_notjs.go
│   │       ├── dial.go
│   │       ├── doc.go
│   │       ├── frame.go
│   │       ├── internal/
│   │       │   ├── bpool/
│   │       │   │   └── bpool.go
│   │       │   ├── errd/
│   │       │   │   └── wrap.go
│   │       │   ├── wsjs/
│   │       │   │   └── wsjs_js.go
│   │       │   └── xsync/
│   │       │       ├── go.go
│   │       │       └── int64.go
│   │       ├── netconn.go
│   │       ├── read.go
│   │       ├── stringer.go
│   │       ├── write.go
│   │       └── ws_js.go
│   └── zombiezen.com/
│       └── go/
│           └── capnproto2/
│               ├── .gitignore
│               ├── .travis.yml
│               ├── AUTHORS
│               ├── BUILD.bazel
│               ├── CHANGELOG.md
│               ├── CONTRIBUTING.md
│               ├── CONTRIBUTORS
│               ├── LICENSE
│               ├── README.md
│               ├── WORKSPACE
│               ├── address.go
│               ├── canonical.go
│               ├── capability.go
│               ├── capn.go
│               ├── doc.go
│               ├── encoding/
│               │   └── text/
│               │       ├── BUILD.bazel
│               │       └── marshal.go
│               ├── go.capnp.go
│               ├── internal/
│               │   ├── fulfiller/
│               │   │   ├── BUILD.bazel
│               │   │   └── fulfiller.go
│               │   ├── nodemap/
│               │   │   ├── BUILD.bazel
│               │   │   └── nodemap.go
│               │   ├── packed/
│               │   │   ├── BUILD.bazel
│               │   │   ├── discard.go
│               │   │   ├── discard_go14.go
│               │   │   ├── fuzz.go
│               │   │   └── packed.go
│               │   ├── queue/
│               │   │   ├── BUILD.bazel
│               │   │   └── queue.go
│               │   ├── schema/
│               │   │   ├── BUILD.bazel
│               │   │   └── schema.capnp.go
│               │   └── strquote/
│               │       ├── BUILD.bazel
│               │       └── strquote.go
│               ├── list.go
│               ├── mem.go
│               ├── mem_18.go
│               ├── mem_other.go
│               ├── pogs/
│               │   ├── BUILD.bazel
│               │   ├── doc.go
│               │   ├── extract.go
│               │   ├── fields.go
│               │   └── insert.go
│               ├── pointer.go
│               ├── rawpointer.go
│               ├── readlimit.go
│               ├── regen.sh
│               ├── rpc/
│               │   ├── BUILD.bazel
│               │   ├── answer.go
│               │   ├── errors.go
│               │   ├── internal/
│               │   │   └── refcount/
│               │   │       ├── BUILD.bazel
│               │   │       └── refcount.go
│               │   ├── introspect.go
│               │   ├── log.go
│               │   ├── question.go
│               │   ├── rpc.go
│               │   ├── tables.go
│               │   └── transport.go
│               ├── schemas/
│               │   ├── BUILD.bazel
│               │   └── schemas.go
│               ├── server/
│               │   ├── BUILD.bazel
│               │   └── server.go
│               ├── std/
│               │   └── capnp/
│               │       └── rpc/
│               │           ├── BUILD.bazel
│               │           └── rpc.capnp.go
│               ├── strings.go
│               └── struct.go
├── watcher/
│   ├── file.go
│   ├── file_test.go
│   └── notify.go
├── websocket/
│   ├── connection.go
│   ├── websocket.go
│   └── websocket_test.go
└── wix.json
Download .txt
Showing preview only (2,747K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (30528 symbols across 1837 files)

FILE: carrier/carrier.go
  constant LogFieldOriginURL (line 23) | LogFieldOriginURL       = "originURL"
  constant CFAccessTokenHeader (line 24) | CFAccessTokenHeader     = "Cf-Access-Token"
  constant cfJumpDestinationHeader (line 25) | cfJumpDestinationHeader = "Cf-Access-Jump-Destination"
  type StartOptions (line 28) | type StartOptions struct
  type Connection (line 39) | type Connection interface
  type StdinoutStream (line 46) | type StdinoutStream struct
    method Read (line 49) | func (c *StdinoutStream) Read(p []byte) (int, error) {
    method Write (line 54) | func (c *StdinoutStream) Write(p []byte) (int, error) {
  function closeRespBody (line 59) | func closeRespBody(resp *http.Response) {
  function StartForwarder (line 67) | func StartForwarder(conn Connection, address string, shutdownC <-chan st...
  function StartClient (line 77) | func StartClient(conn Connection, stream io.ReadWriter, options *StartOp...
  function Serve (line 85) | func Serve(remoteConn Connection, listener net.Listener, shutdownC <-cha...
  function serveConnection (line 113) | func serveConnection(remoteConn Connection, c net.Conn, options *StartOp...
  function IsAccessResponse (line 120) | func IsAccessResponse(resp *http.Response) bool {
  function BuildAccessRequest (line 137) | func BuildAccessRequest(options *StartOptions, log *zerolog.Logger) (*ht...
  function SetBastionDest (line 165) | func SetBastionDest(header http.Header, destination string) {
  function ResolveBastionDest (line 171) | func ResolveBastionDest(r *http.Request) (string, error) {
  function removePath (line 184) | func removePath(dest string) string {

FILE: carrier/carrier_test.go
  constant testSecWebsocketKey (line 19) | testSecWebsocketKey = "dGhlIHNhbXBsZSBub25jZQ=="
  type testStreamer (line 22) | type testStreamer struct
    method Read (line 31) | func (s *testStreamer) Read(p []byte) (int, error) {
    method Write (line 38) | func (s *testStreamer) Write(p []byte) (int, error) {
  function newTestStream (line 27) | func newTestStream() *testStreamer {
  function TestStartClient (line 44) | func TestStartClient(t *testing.T) {
  function TestStartServer (line 65) | func TestStartServer(t *testing.T) {
  function TestIsAccessResponse (line 97) | func TestIsAccessResponse(t *testing.T) {
  function newTestWebSocketServer (line 122) | func newTestWebSocketServer() *httptest.Server {
  function testRequest (line 144) | func testRequest(t *testing.T, url string, stream io.ReadWriter) *http.R...
  function TestBastionDestination (line 160) | func TestBastionDestination(t *testing.T) {

FILE: carrier/websocket.go
  type Websocket (line 19) | type Websocket struct
    method ServeStream (line 33) | func (ws *Websocket) ServeStream(options *StartOptions, conn io.ReadWr...
  function NewWSConnection (line 25) | func NewWSConnection(log *zerolog.Logger) Connection {
  function createWebsocketStream (line 48) | func createWebsocketStream(options *StartOptions, log *zerolog.Logger) (...
  function websocketHeaders (line 106) | func websocketHeaders(req *http.Request) http.Header {
  function clientConnect (line 122) | func clientConnect(req *http.Request, dialler *websocket.Dialer) (*webso...
  function changeRequestScheme (line 139) | func changeRequestScheme(reqURL *url.URL) string {
  function createAccessAuthenticatedStream (line 157) | func createAccessAuthenticatedStream(options *StartOptions, log *zerolog...
  function createAccessWebSocketStream (line 182) | func createAccessWebSocketStream(options *StartOptions, log *zerolog.Log...

FILE: carrier/websocket_test.go
  function websocketClientTLSConfig (line 23) | func websocketClientTLSConfig(t *testing.T) *tls.Config {
  function TestWebsocketHeaders (line 32) | func TestWebsocketHeaders(t *testing.T) {
  function TestServe (line 41) | func TestServe(t *testing.T) {
  function TestWebsocketWrapper (line 81) | func TestWebsocketWrapper(t *testing.T) {

FILE: cfapi/base_client.go
  constant defaultTimeout (line 19) | defaultTimeout  = 15 * time.Second
  constant jsonContentType (line 20) | jsonContentType = "application/json"
  type RESTClient (line 30) | type RESTClient struct
    method sendRequest (line 87) | func (r *RESTClient) sendRequest(method string, url url.URL, body inte...
    method statusCodeToError (line 221) | func (r *RESTClient) statusCodeToError(op string, resp *http.Response)...
  type baseEndpoints (line 38) | type baseEndpoints struct
  function NewRESTClient (line 47) | func NewRESTClient(baseURL, accountTag, zoneTag, authToken, userAgent st...
  function parseResponseEnvelope (line 110) | func parseResponseEnvelope(reader io.Reader) (*response, error) {
  function parseResponse (line 128) | func parseResponse(reader io.Reader, data interface{}) error {
  function parseResponseBody (line 137) | func parseResponseBody(result *response, data interface{}) error {
  function fetchExhaustively (line 146) | func fetchExhaustively[T any](requestFn func(int) (*http.Response, error...
  function fetchPage (line 166) | func fetchPage[T any](requestFn func(int) (*http.Response, error), page ...
  type response (line 183) | type response struct
    method checkErrors (line 198) | func (r *response) checkErrors() error {
  type Pagination (line 191) | type Pagination struct
  type apiError (line 212) | type apiError struct
    method Error (line 217) | func (e apiError) Error() string {

FILE: cfapi/client.go
  type TunnelClient (line 7) | type TunnelClient interface
  type HostnameClient (line 18) | type HostnameClient interface
  type IPRouteClient (line 22) | type IPRouteClient interface
  type VnetClient (line 29) | type VnetClient interface
  type Client (line 36) | type Client interface

FILE: cfapi/hostname.go
  constant ChangeNew (line 17) | ChangeNew       = "new"
  constant ChangeUpdated (line 18) | ChangeUpdated   = "updated"
  constant ChangeUnchanged (line 19) | ChangeUnchanged = "unchanged"
  type HostnameRoute (line 23) | type HostnameRoute interface
  type HostnameRouteResult (line 30) | type HostnameRouteResult interface
  type DNSRoute (line 35) | type DNSRoute struct
    method MarshalJSON (line 53) | func (dr *DNSRoute) MarshalJSON() ([]byte, error) {
    method UnmarshalResult (line 66) | func (dr *DNSRoute) UnmarshalResult(body io.Reader) (HostnameRouteResu...
    method RecordType (line 73) | func (dr *DNSRoute) RecordType() string {
    method String (line 77) | func (dr *DNSRoute) String() string {
  type DNSRouteResult (line 40) | type DNSRouteResult struct
    method SuccessSummary (line 81) | func (res *DNSRouteResult) SuccessSummary() string {
    method hostname (line 96) | func (res *DNSRouteResult) hostname() string {
  function NewDNSRoute (line 46) | func NewDNSRoute(userHostname string, overwriteExisting bool) HostnameRo...
  type LBRoute (line 103) | type LBRoute struct
    method MarshalJSON (line 121) | func (lr *LBRoute) MarshalJSON() ([]byte, error) {
    method RecordType (line 134) | func (lr *LBRoute) RecordType() string {
    method String (line 138) | func (lb *LBRoute) String() string {
    method UnmarshalResult (line 142) | func (lr *LBRoute) UnmarshalResult(body io.Reader) (HostnameRouteResul...
  type LBRouteResult (line 108) | type LBRouteResult struct
    method SuccessSummary (line 149) | func (res *LBRouteResult) SuccessSummary() string {
  function NewLBRoute (line 114) | func NewLBRoute(lbName, lbPool string) HostnameRoute {
  method RouteTunnel (line 178) | func (r *RESTClient) RouteTunnel(tunnelID uuid.UUID, route HostnameRoute...

FILE: cfapi/hostname_test.go
  function TestDNSRouteUnmarshalResult (line 10) | func TestDNSRouteUnmarshalResult(t *testing.T) {
  function TestLBRouteUnmarshalResult (line 38) | func TestLBRouteUnmarshalResult(t *testing.T) {
  function TestLBRouteResultSuccessSummary (line 67) | func TestLBRouteResultSuccessSummary(t *testing.T) {

FILE: cfapi/ip_route.go
  type Route (line 22) | type Route struct
  type CIDR (line 33) | type CIDR
    method String (line 35) | func (c CIDR) String() string {
    method MarshalJSON (line 40) | func (c CIDR) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 50) | func (c *CIDR) UnmarshalJSON(data []byte) error {
  type NewRoute (line 67) | type NewRoute struct
    method MarshalJSON (line 76) | func (r NewRoute) MarshalJSON() ([]byte, error) {
  type DetailedRoute (line 91) | type DetailedRoute struct
    method IsZero (line 104) | func (r *DetailedRoute) IsZero() bool {
    method TableString (line 110) | func (r DetailedRoute) TableString() string {
  type GetRouteByIpParams (line 133) | type GetRouteByIpParams struct
  method ListRoutes (line 141) | func (r *RESTClient) ListRoutes(filter *IpRouteFilter) ([]*DetailedRoute...
  method AddRoute (line 161) | func (r *RESTClient) AddRoute(newRoute NewRoute) (Route, error) {
  method DeleteRoute (line 178) | func (r *RESTClient) DeleteRoute(id uuid.UUID) error {
  method GetByIP (line 197) | func (r *RESTClient) GetByIP(params GetRouteByIpParams) (DetailedRoute, ...
  function parseRoute (line 215) | func parseRoute(body io.ReadCloser) (Route, error) {
  function parseDetailedRoute (line 221) | func parseDetailedRoute(body io.ReadCloser) (DetailedRoute, error) {
  function setVnetParam (line 229) | func setVnetParam(endpoint *url.URL, vnetID *uuid.UUID) {

FILE: cfapi/ip_route_filter.go
  type IpRouteFilter (line 55) | type IpRouteFilter struct
    method CommentIs (line 134) | func (f *IpRouteFilter) CommentIs(comment string) {
    method NotDeleted (line 138) | func (f *IpRouteFilter) NotDeleted() {
    method Deleted (line 142) | func (f *IpRouteFilter) Deleted() {
    method NetworkIsSubsetOf (line 146) | func (f *IpRouteFilter) NetworkIsSubsetOf(superset net.IPNet) {
    method NetworkIsSupersetOf (line 150) | func (f *IpRouteFilter) NetworkIsSupersetOf(subset net.IPNet) {
    method ExistedAt (line 154) | func (f *IpRouteFilter) ExistedAt(existedAt time.Time) {
    method TunnelID (line 158) | func (f *IpRouteFilter) TunnelID(id uuid.UUID) {
    method VNetID (line 162) | func (f *IpRouteFilter) VNetID(id uuid.UUID) {
    method MaxFetchSize (line 166) | func (f *IpRouteFilter) MaxFetchSize(max uint) {
    method Page (line 170) | func (f *IpRouteFilter) Page(page int) {
    method Encode (line 174) | func (f IpRouteFilter) Encode() string {
  function NewIpRouteFilterFromCLI (line 60) | func NewIpRouteFilterFromCLI(c *cli.Context) (*IpRouteFilter, error) {
  function cidrFromFlag (line 110) | func cidrFromFlag(c *cli.Context, flag cli.StringFlag) (*net.IPNet, erro...
  function NewIPRouteFilter (line 125) | func NewIPRouteFilter() *IpRouteFilter {

FILE: cfapi/ip_route_test.go
  function TestUnmarshalRoute (line 14) | func TestUnmarshalRoute(t *testing.T) {
  function TestDetailedRouteJsonRoundtrip (line 65) | func TestDetailedRouteJsonRoundtrip(t *testing.T) {
  function TestMarshalNewRoute (line 128) | func TestMarshalNewRoute(t *testing.T) {
  function TestRouteTableString (line 167) | func TestRouteTableString(t *testing.T) {

FILE: cfapi/tunnel.go
  type ManagementResource (line 18) | type ManagementResource
    method String (line 26) | func (r ManagementResource) String() string {
  constant Logs (line 21) | Logs ManagementResource = iota
  constant Admin (line 22) | Admin
  constant HostDetails (line 23) | HostDetails
  type Tunnel (line 39) | type Tunnel struct
  type TunnelWithToken (line 47) | type TunnelWithToken struct
  type Connection (line 52) | type Connection struct
  type ActiveClient (line 60) | type ActiveClient struct
  type newTunnel (line 69) | type newTunnel struct
  type CleanupParams (line 74) | type CleanupParams struct
    method ForClient (line 84) | func (cp *CleanupParams) ForClient(clientID uuid.UUID) {
    method encode (line 88) | func (cp CleanupParams) encode() string {
  function NewCleanupParams (line 78) | func NewCleanupParams() *CleanupParams {
  method CreateTunnel (line 92) | func (r *RESTClient) CreateTunnel(name string, tunnelSecret []byte) (*Tu...
  method GetTunnel (line 124) | func (r *RESTClient) GetTunnel(tunnelID uuid.UUID) (*Tunnel, error) {
  method GetTunnelToken (line 140) | func (r *RESTClient) GetTunnelToken(tunnelID uuid.UUID) (token string, e...
  function managementEndpointPath (line 158) | func managementEndpointPath(tunnelID uuid.UUID, res ManagementResource) ...
  method GetManagementToken (line 162) | func (r *RESTClient) GetManagementToken(tunnelID uuid.UUID, res Manageme...
  method DeleteTunnel (line 180) | func (r *RESTClient) DeleteTunnel(tunnelID uuid.UUID, cascade bool) error {
  method ListTunnels (line 197) | func (r *RESTClient) ListTunnels(filter *TunnelFilter) ([]*Tunnel, error) {
  method ListActiveClients (line 216) | func (r *RESTClient) ListActiveClients(tunnelID uuid.UUID) ([]*ActiveCli...
  function parseConnectionsDetails (line 232) | func parseConnectionsDetails(reader io.Reader) ([]*ActiveClient, error) {
  method CleanupConnections (line 238) | func (r *RESTClient) CleanupConnections(tunnelID uuid.UUID, params *Clea...
  function unmarshalTunnel (line 251) | func unmarshalTunnel(reader io.Reader) (*Tunnel, error) {

FILE: cfapi/tunnel_filter.go
  constant TimeLayout (line 12) | TimeLayout = time.RFC3339
  type TunnelFilter (line 15) | type TunnelFilter struct
    method ByName (line 25) | func (f *TunnelFilter) ByName(name string) {
    method ByNamePrefix (line 29) | func (f *TunnelFilter) ByNamePrefix(namePrefix string) {
    method ExcludeNameWithPrefix (line 33) | func (f *TunnelFilter) ExcludeNameWithPrefix(excludePrefix string) {
    method NoDeleted (line 37) | func (f *TunnelFilter) NoDeleted() {
    method ByExistedAt (line 41) | func (f *TunnelFilter) ByExistedAt(existedAt time.Time) {
    method ByTunnelID (line 45) | func (f *TunnelFilter) ByTunnelID(tunnelID uuid.UUID) {
    method MaxFetchSize (line 49) | func (f *TunnelFilter) MaxFetchSize(max uint) {
    method Page (line 53) | func (f *TunnelFilter) Page(page int) {
    method encode (line 57) | func (f TunnelFilter) encode() string {
  function NewTunnelFilter (line 19) | func NewTunnelFilter() *TunnelFilter {

FILE: cfapi/tunnel_test.go
  function Test_unmarshalTunnel (line 18) | func Test_unmarshalTunnel(t *testing.T) {
  function TestUnmarshalTunnelOk (line 54) | func TestUnmarshalTunnelOk(t *testing.T) {
  function TestUnmarshalTunnelErr (line 67) | func TestUnmarshalTunnelErr(t *testing.T) {
  function TestManagementResource_String (line 81) | func TestManagementResource_String(t *testing.T) {
  function TestManagementResource_String_Unknown (line 110) | func TestManagementResource_String_Unknown(t *testing.T) {
  function TestManagementEndpointPath (line 115) | func TestManagementEndpointPath(t *testing.T) {
  function TestUnmarshalConnections (line 147) | func TestUnmarshalConnections(t *testing.T) {

FILE: cfapi/virtual_network.go
  type NewVirtualNetwork (line 16) | type NewVirtualNetwork struct
  type VirtualNetwork (line 22) | type VirtualNetwork struct
    method TableString (line 37) | func (virtualNetwork VirtualNetwork) TableString() string {
  type UpdateVirtualNetwork (line 31) | type UpdateVirtualNetwork struct
  method CreateVirtualNetwork (line 53) | func (r *RESTClient) CreateVirtualNetwork(newVnet NewVirtualNetwork) (Vi...
  method ListVirtualNetworks (line 67) | func (r *RESTClient) ListVirtualNetworks(filter *VnetFilter) ([]*Virtual...
  method DeleteVirtualNetwork (line 83) | func (r *RESTClient) DeleteVirtualNetwork(id uuid.UUID, force bool) error {
  method UpdateVirtualNetwork (line 107) | func (r *RESTClient) UpdateVirtualNetwork(id uuid.UUID, updates UpdateVi...
  function parseListVnets (line 124) | func parseListVnets(body io.ReadCloser) ([]*VirtualNetwork, error) {
  function parseVnet (line 130) | func parseVnet(body io.ReadCloser) (VirtualNetwork, error) {

FILE: cfapi/virtual_network_filter.go
  type VnetFilter (line 38) | type VnetFilter struct
    method ById (line 48) | func (f *VnetFilter) ById(vnetId uuid.UUID) {
    method ByName (line 52) | func (f *VnetFilter) ByName(name string) {
    method ByDefaultStatus (line 56) | func (f *VnetFilter) ByDefaultStatus(isDefault bool) {
    method WithDeleted (line 60) | func (f *VnetFilter) WithDeleted(isDeleted bool) {
    method MaxFetchSize (line 64) | func (f *VnetFilter) MaxFetchSize(max uint) {
    method Encode (line 68) | func (f VnetFilter) Encode() string {
  function NewVnetFilter (line 42) | func NewVnetFilter() *VnetFilter {
  function NewFromCLI (line 73) | func NewFromCLI(c *cli.Context) (*VnetFilter, error) {

FILE: cfapi/virtual_network_test.go
  function TestVirtualNetworkJsonRoundtrip (line 13) | func TestVirtualNetworkJsonRoundtrip(t *testing.T) {
  function TestMarshalNewVnet (line 39) | func TestMarshalNewVnet(t *testing.T) {
  function TestMarshalUpdateVnet (line 51) | func TestMarshalUpdateVnet(t *testing.T) {
  function TestVnetTableString (line 63) | func TestVnetTableString(t *testing.T) {

FILE: cfio/copy.go
  constant defaultBufferSize (line 8) | defaultBufferSize = 16 * 1024
  function Copy (line 16) | func Copy(dst io.Writer, src io.Reader) (written int64, err error) {

FILE: client/config.go
  type Config (line 15) | type Config struct
    method ConnectionOptionsSnapshot (line 47) | func (c *Config) ConnectionOptionsSnapshot(originIP net.IP, previousAt...
  function NewConfig (line 23) | func NewConfig(version string, arch string, featureSelector features.Fea...
  type ConnectionOptionsSnapshot (line 40) | type ConnectionOptionsSnapshot struct
    method ConnectionOptions (line 62) | func (c ConnectionOptionsSnapshot) ConnectionOptions() *pogs.Connectio...
    method LogFields (line 72) | func (c ConnectionOptionsSnapshot) LogFields(event *zerolog.Event) *ze...

FILE: client/config_test.go
  function TestGenerateConnectionOptions (line 12) | func TestGenerateConnectionOptions(t *testing.T) {
  type mockFeatureSelector (line 42) | type mockFeatureSelector struct
    method Snapshot (line 44) | func (m *mockFeatureSelector) Snapshot() features.FeatureSnapshot {

FILE: cmd/cloudflared/access/carrier.go
  constant LogFieldHost (line 22) | LogFieldHost               = "host"
  constant cfAccessClientIDHeader (line 23) | cfAccessClientIDHeader     = "Cf-Access-Client-Id"
  constant cfAccessClientSecretHeader (line 24) | cfAccessClientSecretHeader = "Cf-Access-Client-Secret"
  function StartForwarder (line 28) | func StartForwarder(forwarder config.Forwarder, shutdown <-chan struct{}...
  function ssh (line 64) | func ssh(c *cli.Context) error {

FILE: cmd/cloudflared/access/cmd.go
  constant appURLFlag (line 30) | appURLFlag         = "app"
  constant loginQuietFlag (line 31) | loginQuietFlag     = "quiet"
  constant sshHostnameFlag (line 32) | sshHostnameFlag    = "hostname"
  constant sshDestinationFlag (line 33) | sshDestinationFlag = "destination"
  constant sshURLFlag (line 34) | sshURLFlag         = "url"
  constant sshHeaderFlag (line 35) | sshHeaderFlag      = "header"
  constant sshTokenIDFlag (line 36) | sshTokenIDFlag     = "service-token-id"
  constant sshTokenSecretFlag (line 37) | sshTokenSecretFlag = "service-token-secret"
  constant sshGenCertFlag (line 38) | sshGenCertFlag     = "short-lived-cert"
  constant sshConnectTo (line 39) | sshConnectTo       = "connect-to"
  constant sshDebugStream (line 40) | sshDebugStream     = "debug-stream"
  constant sshConfigTemplate (line 41) | sshConfigTemplate  = `
  constant fedrampFlag (line 54) | fedrampFlag = "fedramp"
  constant sentryDSN (line 57) | sentryDSN = "https://56a9c9fa5c364ab28f34b14f35ea0f1b@sentry.io/189878"
  function Init (line 65) | func Init(shutdown chan struct{}, version string) {
  function Flags (line 71) | func Flags() []cli.Flag {
  function Commands (line 76) | func Commands() []*cli.Command {
  function login (line 243) | func login(c *cli.Context) error {
  function curl (line 295) | func curl(c *cli.Context) error {
  function run (line 347) | func run(cmd string, args ...string) error {
  function getAppURLFromArgs (line 368) | func getAppURLFromArgs(c *cli.Context) (*url.URL, error) {
  function generateToken (line 380) | func generateToken(c *cli.Context) error {
  function sshConfig (line 412) | func sshConfig(c *cli.Context) error {
  function sshGen (line 431) | func sshGen(c *cli.Context) error {
  function getAppURL (line 467) | func getAppURL(cmdArgs []string, log *zerolog.Logger) (*url.URL, error) {
  function parseAllowRequest (line 484) | func parseAllowRequest(cmdArgs []string) ([]string, bool) {
  function processURL (line 495) | func processURL(s string) (*url.URL, error) {
  function cloudflaredPath (line 519) | func cloudflaredPath() string {
  function isFileThere (line 535) | func isFileThere(candidate string) bool {
  function verifyTokenAtEdge (line 546) | func verifyTokenAtEdge(appUrl *url.URL, appInfo *token.AppInfo, c *cli.C...
  function isTokenValid (line 576) | func isTokenValid(options *carrier.StartOptions, log *zerolog.Logger) (b...

FILE: cmd/cloudflared/access/validation.go
  function parseRequestHeaders (line 15) | func parseRequestHeaders(values []string) http.Header {
  function parseURL (line 29) | func parseURL(input string) (*url.URL, error) {

FILE: cmd/cloudflared/access/validation_test.go
  function TestParseRequestHeaders (line 10) | func TestParseRequestHeaders(t *testing.T) {
  function TestParseURL (line 18) | func TestParseURL(t *testing.T) {

FILE: cmd/cloudflared/app_forward_service.go
  constant ForwardServiceType (line 11) | ForwardServiceType = "forward"
  type ForwarderService (line 16) | type ForwarderService struct
    method Name (line 29) | func (s *ForwarderService) Name() string {
    method Type (line 34) | func (s *ForwarderService) Type() string {
    method Hash (line 39) | func (s *ForwarderService) Hash() string {
    method Shutdown (line 44) | func (s *ForwarderService) Shutdown() {
    method Run (line 49) | func (s *ForwarderService) Run() error {
  function NewForwardService (line 23) | func NewForwardService(f config.Forwarder, log *zerolog.Logger) *Forward...

FILE: cmd/cloudflared/app_service.go
  type AppService (line 12) | type AppService struct
    method Run (line 32) | func (s *AppService) Run() error {
    method Shutdown (line 38) | func (s *AppService) Shutdown() error {
    method ConfigDidUpdate (line 48) | func (s *AppService) ConfigDidUpdate(c config.Root) {
    method actionLoop (line 53) | func (s *AppService) actionLoop() {
    method handleConfigUpdate (line 67) | func (s *AppService) handleConfigUpdate(c config.Root) {
  function NewAppService (line 21) | func NewAppService(configManager config.Manager, serviceManager overwatc...

FILE: cmd/cloudflared/cliutil/build_info.go
  type BuildInfo (line 13) | type BuildInfo struct
    method Log (line 33) | func (bi *BuildInfo) Log(log *zerolog.Logger) {
    method OSArch (line 41) | func (bi *BuildInfo) OSArch() string {
    method Version (line 45) | func (bi *BuildInfo) Version() string {
    method GetBuildTypeMsg (line 49) | func (bi *BuildInfo) GetBuildTypeMsg() string {
    method UserAgent (line 56) | func (bi *BuildInfo) UserAgent() string {
  function GetBuildInfo (line 22) | func GetBuildInfo(buildType, version string) *BuildInfo {
  function FileChecksum (line 61) | func FileChecksum(filePath string) (string, error) {
  function currentBinaryChecksum (line 76) | func currentBinaryChecksum() string {

FILE: cmd/cloudflared/cliutil/deprecated.go
  function RemovedCommand (line 9) | func RemovedCommand(name string) *cli.Command {

FILE: cmd/cloudflared/cliutil/errors.go
  type usageError (line 9) | type usageError
    method Error (line 11) | func (ue usageError) Error() string {
  function UsageError (line 15) | func UsageError(format string, args ...interface{}) error {
  function WithErrorHandler (line 25) | func WithErrorHandler(actionFunc cli.ActionFunc) cli.ActionFunc {

FILE: cmd/cloudflared/cliutil/handler.go
  function Action (line 11) | func Action(actionFunc cli.ActionFunc) cli.ActionFunc {
  function ConfiguredAction (line 15) | func ConfiguredAction(actionFunc cli.ActionFunc) cli.ActionFunc {
  function ConfiguredActionWithWarnings (line 25) | func ConfiguredActionWithWarnings(actionFunc func(*cli.Context, string) ...
  function setFlagsFromConfigFile (line 35) | func setFlagsFromConfigFile(c *cli.Context) (configWarnings string, err ...

FILE: cmd/cloudflared/cliutil/logger.go
  function ConfigureLoggingFlags (line 22) | func ConfigureLoggingFlags(shouldHide bool) []cli.Flag {

FILE: cmd/cloudflared/cliutil/management.go
  function GetManagementToken (line 27) | func GetManagementToken(c *cli.Context, log *zerolog.Logger, res cfapi.M...
  function CreateStderrLogger (line 63) | func CreateStderrLogger(c *cli.Context) *zerolog.Logger {

FILE: cmd/cloudflared/common_service.go
  function buildArgsForToken (line 11) | func buildArgsForToken(c *cli.Context, log *zerolog.Logger) ([]string, e...
  function getServiceExtraArgsFromCliArgs (line 22) | func getServiceExtraArgsFromCliArgs(c *cli.Context, log *zerolog.Logger)...

FILE: cmd/cloudflared/flags/flags.go
  constant HaConnections (line 5) | HaConnections = "ha-connections"
  constant SshPort (line 8) | SshPort = "local-ssh-port"
  constant SshIdleTimeout (line 11) | SshIdleTimeout = "ssh-idle-timeout"
  constant SshMaxTimeout (line 14) | SshMaxTimeout = "ssh-max-timeout"
  constant SshLogUploaderBucketName (line 17) | SshLogUploaderBucketName = "bucket-name"
  constant SshLogUploaderRegionName (line 20) | SshLogUploaderRegionName = "region-name"
  constant SshLogUploaderSecretID (line 23) | SshLogUploaderSecretID = "secret-id"
  constant SshLogUploaderAccessKeyID (line 26) | SshLogUploaderAccessKeyID = "access-key-id"
  constant SshLogUploaderSessionTokenID (line 29) | SshLogUploaderSessionTokenID = "session-token"
  constant SshLogUploaderS3URL (line 32) | SshLogUploaderS3URL = "s3-url-host"
  constant HostKeyPath (line 35) | HostKeyPath = "host-key-path"
  constant RpcTimeout (line 38) | RpcTimeout = "rpc-timeout"
  constant WriteStreamTimeout (line 41) | WriteStreamTimeout = "write-stream-timeout"
  constant QuicDisablePathMTUDiscovery (line 46) | QuicDisablePathMTUDiscovery = "quic-disable-pmtu-discovery"
  constant QuicConnLevelFlowControlLimit (line 51) | QuicConnLevelFlowControlLimit = "quic-connection-level-flow-control-limit"
  constant QuicStreamLevelFlowControlLimit (line 55) | QuicStreamLevelFlowControlLimit = "quic-stream-level-flow-control-limit"
  constant Ui (line 58) | Ui = "ui"
  constant ConnectorLabel (line 61) | ConnectorLabel = "label"
  constant MaxActiveFlows (line 64) | MaxActiveFlows = "max-active-flows"
  constant Tag (line 67) | Tag = "tag"
  constant Protocol (line 70) | Protocol = "protocol"
  constant PostQuantum (line 73) | PostQuantum = "post-quantum"
  constant Features (line 76) | Features = "features"
  constant EdgeIpVersion (line 79) | EdgeIpVersion = "edge-ip-version"
  constant EdgeBindAddress (line 82) | EdgeBindAddress = "edge-bind-address"
  constant Force (line 85) | Force = "force"
  constant Edge (line 88) | Edge = "edge"
  constant Region (line 91) | Region = "region"
  constant IsAutoUpdated (line 94) | IsAutoUpdated = "is-autoupdated"
  constant LBPool (line 97) | LBPool = "lb-pool"
  constant Retries (line 100) | Retries = "retries"
  constant MaxEdgeAddrRetries (line 103) | MaxEdgeAddrRetries = "max-edge-addr-retries"
  constant GracePeriod (line 106) | GracePeriod = "grace-period"
  constant ICMPV4Src (line 109) | ICMPV4Src = "icmpv4-src"
  constant ICMPV6Src (line 112) | ICMPV6Src = "icmpv6-src"
  constant Name (line 115) | Name = "name"
  constant AutoUpdateFreq (line 118) | AutoUpdateFreq = "autoupdate-freq"
  constant NoAutoUpdate (line 121) | NoAutoUpdate = "no-autoupdate"
  constant LogLevel (line 124) | LogLevel = "loglevel"
  constant LogLevelSSH (line 127) | LogLevelSSH = "log-level"
  constant TransportLogLevel (line 130) | TransportLogLevel = "transport-loglevel"
  constant LogFile (line 133) | LogFile = "logfile"
  constant LogDirectory (line 136) | LogDirectory = "log-directory"
  constant LogFormatOutput (line 139) | LogFormatOutput             = "output"
  constant LogFormatOutputValueDefault (line 140) | LogFormatOutputValueDefault = "default"
  constant LogFormatOutputValueJSON (line 141) | LogFormatOutputValueJSON    = "json"
  constant TraceOutput (line 144) | TraceOutput = "trace-output"
  constant OriginCert (line 147) | OriginCert = "origincert"
  constant Metrics (line 150) | Metrics = "metrics"
  constant MetricsUpdateFreq (line 153) | MetricsUpdateFreq = "metrics-update-freq"
  constant ApiURL (line 156) | ApiURL = "api-url"
  constant VirtualDNSServiceResolverAddresses (line 159) | VirtualDNSServiceResolverAddresses = "dns-resolver-addrs"
  constant ManagementHostname (line 162) | ManagementHostname = "management-hostname"
  constant AutoCloseInterstitial (line 165) | AutoCloseInterstitial = "auto-close"

FILE: cmd/cloudflared/generic_service.go
  function runApp (line 14) | func runApp(app *cli.App, graceShutdownC chan struct{}) {
  function installGenericService (line 34) | func installGenericService(c *cli.Context) error {
  function uninstallGenericService (line 38) | func uninstallGenericService(c *cli.Context) error {

FILE: cmd/cloudflared/linux_service.go
  function runApp (line 19) | func runApp(app *cli.App, _ chan struct{}) {
  constant serviceConfigDir (line 45) | serviceConfigDir         = "/etc/cloudflared"
  constant serviceConfigFile (line 46) | serviceConfigFile        = "config.yml"
  constant serviceCredentialFile (line 47) | serviceCredentialFile    = "cert.pem"
  constant serviceConfigPath (line 48) | serviceConfigPath        = serviceConfigDir + "/" + serviceConfigFile
  constant cloudflaredService (line 49) | cloudflaredService       = "cloudflared.service"
  constant cloudflaredUpdateService (line 50) | cloudflaredUpdateService = "cloudflared-update.service"
  constant cloudflaredUpdateTimer (line 51) | cloudflaredUpdateTimer   = "cloudflared-update.timer"
  function isSystemd (line 195) | func isSystemd() bool {
  function installLinuxService (line 202) | func installLinuxService(c *cli.Context) error {
  function buildArgsForConfig (line 245) | func buildArgsForConfig(c *cli.Context, log *zerolog.Logger) ([]string, ...
  function installSystemd (line 281) | func installSystemd(templateArgs *ServiceTemplateArgs, autoUpdate bool, ...
  function installSysv (line 321) | func installSysv(templateArgs *ServiceTemplateArgs, autoUpdate bool, log...
  function uninstallLinuxService (line 351) | func uninstallLinuxService(c *cli.Context) error {
  function uninstallSystemd (line 370) | func uninstallSystemd(log *zerolog.Logger) error {
  function uninstallSysv (line 412) | func uninstallSysv(log *zerolog.Logger) error {
  function ensureConfigDirExists (line 434) | func ensureConfigDirExists(configDir string) error {
  function copyFile (line 442) | func copyFile(src, dest string) error {

FILE: cmd/cloudflared/macos_service.go
  constant launchdIdentifier (line 18) | launchdIdentifier = "com.cloudflare.cloudflared"
  function runApp (line 21) | func runApp(app *cli.App, _ chan struct{}) {
  function newLaunchdTemplate (line 41) | func newLaunchdTemplate(installPath, stdoutPath, stderrPath string) *Ser...
  function isRootUser (line 75) | func isRootUser() bool {
  function installPath (line 79) | func installPath() (string, error) {
  function stdoutPath (line 91) | func stdoutPath() (string, error) {
  function stderrPath (line 102) | func stderrPath() (string, error) {
  function installLaunchd (line 113) | func installLaunchd(c *cli.Context) error {
  function uninstallLaunchd (line 173) | func uninstallLaunchd(c *cli.Context) error {
  function userHomeDir (line 212) | func userHomeDir() (string, error) {

FILE: cmd/cloudflared/main.go
  constant versionText (line 31) | versionText = "Print the version"
  function main (line 51) | func main() {
  function commands (line 99) | func commands(version func(c *cli.Context)) []*cli.Command {
  function flags (line 161) | func flags() []cli.Flag {
  function isEmptyInvocation (line 166) | func isEmptyInvocation(c *cli.Context) bool {
  function action (line 170) | func action(graceShutdownC chan struct{}) cli.ActionFunc {
  function captureError (line 187) | func captureError(err error) {
  function handleServiceMode (line 198) | func handleServiceMode(c *cli.Context, shutdownC chan struct{}) error {

FILE: cmd/cloudflared/management/cmd.go
  function Init (line 19) | func Init(bi *cliutil.BuildInfo) {
  function Command (line 24) | func Command() *cli.Command {
  function buildTokenSubcommand (line 37) | func buildTokenSubcommand() *cli.Command {
  function tokenCommand (line 69) | func tokenCommand(c *cli.Context) error {
  function parseResource (line 94) | func parseResource(resource string) (cfapi.ManagementResource, error) {

FILE: cmd/cloudflared/management/cmd_test.go
  function TestParseResource_ValidResources (line 12) | func TestParseResource_ValidResources(t *testing.T) {
  function TestParseResource_InvalidResource (line 34) | func TestParseResource_InvalidResource(t *testing.T) {
  function TestCommandStructure (line 49) | func TestCommandStructure(t *testing.T) {

FILE: cmd/cloudflared/proxydns/cmd.go
  constant removedMessage (line 13) | removedMessage = "dns-proxy feature is no longer supported"
  function Command (line 15) | func Command() *cli.Command {
  function Run (line 24) | func Run(c *cli.Context) error {
  function ConfigureProxyDNSFlags (line 33) | func ConfigureProxyDNSFlags(shouldHide bool) []cli.Flag {

FILE: cmd/cloudflared/service_template.go
  type ServiceTemplate (line 16) | type ServiceTemplate struct
    method ResolvePath (line 27) | func (st *ServiceTemplate) ResolvePath() (string, error) {
    method Generate (line 35) | func (st *ServiceTemplate) Generate(args *ServiceTemplateArgs) error {
    method Remove (line 71) | func (st *ServiceTemplate) Remove() error {
  type ServiceTemplateArgs (line 22) | type ServiceTemplateArgs struct
  function serviceAlreadyExistsWarn (line 83) | func serviceAlreadyExistsWarn(service string) string {
  function runCommand (line 92) | func runCommand(command string, args ...string) error {

FILE: cmd/cloudflared/tail/cmd.go
  function Init (line 28) | func Init(bi *cliutil.BuildInfo) {
  function Command (line 32) | func Command() *cli.Command {
  function buildTailManagementTokenSubcommand (line 40) | func buildTailManagementTokenSubcommand() *cli.Command {
  function managementTokenCommand (line 51) | func managementTokenCommand(c *cli.Context) error {
  function buildTailCommand (line 65) | func buildTailCommand(subcommands []*cli.Command) *cli.Command {
  type managementError (line 133) | type managementError struct
  type managementErrorResponse (line 139) | type managementErrorResponse struct
  function handleValidationError (line 144) | func handleValidationError(resp *http.Response, log *zerolog.Logger) {
  function parseFilters (line 164) | func parseFilters(c *cli.Context) (*management.StreamingFilters, error) {
  function buildURL (line 208) | func buildURL(c *cli.Context, log *zerolog.Logger, res cfapi.ManagementR...
  function printLine (line 244) | func printLine(log *management.Log, logger *zerolog.Logger) {
  function printJSON (line 253) | func printJSON(log *management.Log, logger *zerolog.Logger) {
  function Run (line 263) | func Run(c *cli.Context) error {

FILE: cmd/cloudflared/tunnel/cmd.go
  constant sentryDSN (line 47) | sentryDSN = "https://56a9c9fa5c364ab28f34b14f35ea0f1b:3e8827f6f9f740738e...
  constant LogFieldCommand (line 49) | LogFieldCommand             = "command"
  constant LogFieldExpandedPath (line 50) | LogFieldExpandedPath        = "expandedPath"
  constant LogFieldPIDPathname (line 51) | LogFieldPIDPathname         = "pidPathname"
  constant LogFieldTmpTraceFilename (line 52) | LogFieldTmpTraceFilename    = "tmpTraceFilename"
  constant LogFieldTraceOutputFilepath (line 53) | LogFieldTraceOutputFilepath = "traceOutputFilepath"
  constant tunnelCmdErrorMessage (line 55) | tunnelCmdErrorMessage = `You did not specify any valid additional argume...
  function Flags (line 158) | func Flags() []cli.Flag {
  function Commands (line 162) | func Commands() []*cli.Command {
  function buildTunnelCommand (line 189) | func buildTunnelCommand(subcommands []*cli.Command) *cli.Command {
  function TunnelCommand (line 227) | func TunnelCommand(c *cli.Context) error {
  function Init (line 271) | func Init(info *cliutil.BuildInfo, gracefulShutdown chan struct{}) {
  function runAdhocNamedTunnel (line 276) | func runAdhocNamedTunnel(sc *subcommandContext, name, credentialsOutputP...
  function routeFromFlag (line 303) | func routeFromFlag(c *cli.Context) (route cfapi.HostnameRoute, ok bool) {
  function StartServer (line 313) | func StartServer(
  function waitToShutdown (line 512) | func waitToShutdown(wg *sync.WaitGroup,
  function notifySystemd (line 556) | func notifySystemd(waitForSignal *signal.Signal) {
  function writePidFile (line 561) | func writePidFile(waitForSignal *signal.Signal, pidPathname string, log ...
  function hostnameFromURI (line 577) | func hostnameFromURI(uri string) string {
  function addPortIfMissing (line 595) | func addPortIfMissing(uri *url.URL, port int) string {
  function tunnelFlags (line 602) | func tunnelFlags(shouldHide bool) []cli.Flag {
  function configureCloudflaredFlags (line 852) | func configureCloudflaredFlags(shouldHide bool) []cli.Flag {
  function configureProxyFlags (line 902) | func configureProxyFlags(shouldHide bool) []cli.Flag {
  function legacyTunnelFlag (line 1033) | func legacyTunnelFlag(msg string) string {
  function sshFlags (line 1042) | func sshFlags(shouldHide bool) []cli.Flag {
  function stdinControl (line 1137) | func stdinControl(reconnectCh chan supervisor.ReconnectSignal, log *zero...
  function nonSecretCliFlags (line 1170) | func nonSecretCliFlags(log *zerolog.Logger, cli *cli.Context, flagInclus...
  function isFlagIncluded (line 1203) | func isFlagIncluded(flagInclusionList []string, flag string) bool {

FILE: cmd/cloudflared/tunnel/cmd_test.go
  function TestHostnameFromURI (line 9) | func TestHostnameFromURI(t *testing.T) {

FILE: cmd/cloudflared/tunnel/configuration.go
  constant secretValue (line 37) | secretValue       = "*****"
  constant icmpFunnelTimeout (line 38) | icmpFunnelTimeout = time.Second * 10
  function logClientOptions (line 60) | func logClientOptions(c *cli.Context, log *zerolog.Logger) {
  function isSecretFlag (line 94) | func isSecretFlag(key string) bool {
  function isSecretEnvVar (line 103) | func isSecretEnvVar(key string) bool {
  function prepareTunnelConfig (line 114) | func prepareTunnelConfig(
  function parseConfigFlags (line 282) | func parseConfigFlags(c *cli.Context) map[string]string {
  function gracePeriod (line 294) | func gracePeriod(c *cli.Context) (time.Duration, error) {
  function isRunningFromTerminal (line 302) | func isRunningFromTerminal() bool {
  function parseConfigIPVersion (line 307) | func parseConfigIPVersion(version string) (v allregions.ConfigIPVersion,...
  function parseConfigBindAddress (line 321) | func parseConfigBindAddress(ipstr string) (net.IP, error) {
  function testIPBindable (line 333) | func testIPBindable(ip net.IP) error {
  function adjustIPVersionByBindAddress (line 348) | func adjustIPVersionByBindAddress(ipVersion allregions.ConfigIPVersion, ...
  function newICMPRouter (line 366) | func newICMPRouter(c *cli.Context, logger *zerolog.Logger) (ingress.ICMP...
  function determineICMPSources (line 379) | func determineICMPSources(c *cli.Context, logger *zerolog.Logger) (netip...
  function determineICMPv4Src (line 401) | func determineICMPv4Src(userDefinedSrc string, logger *zerolog.Logger) (...
  type interfaceIP (line 421) | type interfaceIP struct
  function determineICMPv6Src (line 426) | func determineICMPv6Src(userDefinedSrc string, logger *zerolog.Logger, i...
  function findLocalAddr (line 498) | func findLocalAddr(dst net.IP, port int) (netip.Addr, error) {
  function parseResolverAddrPorts (line 515) | func parseResolverAddrPorts(input []string) ([]netip.AddrPort, error) {

FILE: cmd/cloudflared/tunnel/configuration_test.go
  type certificateFixture (line 50) | type certificateFixture struct
  function TestMain (line 55) | func TestMain(m *testing.M) {
  function TestLoadOriginCertPoolJustSystemPool (line 74) | func TestLoadOriginCertPoolJustSystemPool(t *testing.T) {
  function TestLoadOriginCertPoolCFCertificates (line 101) | func TestLoadOriginCertPoolCFCertificates(t *testing.T) {
  function TestLoadOriginCertPoolWithExtraPEMs (line 116) | func TestLoadOriginCertPoolWithExtraPEMs(t *testing.T) {
  function loadCertPoolSubjects (line 132) | func loadCertPoolSubjects(t *testing.T, originCAPoolPEM []byte) []*pkix....
  function assertFixturesMatchSubjects (line 146) | func assertFixturesMatchSubjects(t *testing.T, fixtures []*certificateFi...
  function fixtureMatchesSubjectPredicate (line 161) | func fixtureMatchesSubjectPredicate(fixture *certificateFixture, subject...
  function subjectSubtract (line 175) | func subjectSubtract(left []*pkix.Name, right []*pkix.Name) []*pkix.Name {
  function getCertPoolSubjects (line 195) | func getCertPoolSubjects(certPool *x509.CertPool) ([]*pkix.Name, error) {
  function isUnrecoverableError (line 214) | func isUnrecoverableError(err error) bool {
  function TestTestIPBindable (line 218) | func TestTestIPBindable(t *testing.T) {

FILE: cmd/cloudflared/tunnel/credential_finder.go
  type CredFinder (line 17) | type CredFinder interface
  type staticPath (line 23) | type staticPath struct
    method Path (line 35) | func (a staticPath) Path() (string, error) {
  function newStaticPath (line 28) | func newStaticPath(filePath string, fs fileSystem) CredFinder {
  type searchByID (line 44) | type searchByID struct
    method Path (line 60) | func (s searchByID) Path() (string, error) {
  function newSearchByID (line 51) | func newSearchByID(id uuid.UUID, c *cli.Context, log *zerolog.Logger, fs...

FILE: cmd/cloudflared/tunnel/filesystem.go
  type fileSystem (line 9) | type fileSystem interface
  type realFileSystem (line 14) | type realFileSystem struct
    method validFilePath (line 16) | func (fs realFileSystem) validFilePath(path string) bool {
    method readFile (line 24) | func (fs realFileSystem) readFile(filePath string) ([]byte, error) {

FILE: cmd/cloudflared/tunnel/info.go
  type Info (line 11) | type Info struct

FILE: cmd/cloudflared/tunnel/ingress_subcommands.go
  constant ingressDataJSONFlagName (line 16) | ingressDataJSONFlagName = "json"
  function buildIngressSubcommand (line 25) | func buildIngressSubcommand() *cli.Command {
  function buildValidateIngressCommand (line 55) | func buildValidateIngressCommand() *cli.Command {
  function buildTestURLCommand (line 66) | func buildTestURLCommand() *cli.Command {
  function validateIngressCommand (line 82) | func validateIngressCommand(c *cli.Context, warnings string) error {
  function getConfiguration (line 103) | func getConfiguration(c *cli.Context) (*config.Configuration, error) {
  function testURLCommand (line 120) | func testURLCommand(c *cli.Context) error {

FILE: cmd/cloudflared/tunnel/login.go
  constant baseLoginURL (line 23) | baseLoginURL         = "https://dash.cloudflare.com/argotunnel"
  constant callbackURL (line 24) | callbackURL          = "https://login.cloudflareaccess.org/"
  constant fedBaseLoginURL (line 25) | fedBaseLoginURL      = "https://dash.fed.cloudflare.com/argotunnel"
  constant fedCallbackStoreURL (line 26) | fedCallbackStoreURL  = "https://login.fed.cloudflareaccess.org/"
  constant fedRAMPParamName (line 27) | fedRAMPParamName     = "fedramp"
  constant loginURLParamName (line 28) | loginURLParamName    = "loginURL"
  constant callbackURLParamName (line 29) | callbackURLParamName = "callbackURL"
  function buildLoginSubcommand (line 50) | func buildLoginSubcommand(hidden bool) *cli.Command {
  function login (line 65) | func login(c *cli.Context) error {
  function checkForExistingCert (line 133) | func checkForExistingCert() (string, bool, error) {

FILE: cmd/cloudflared/tunnel/quick_tunnel.go
  constant httpTimeout (line 18) | httpTimeout = 15 * time.Second
  constant disclaimer (line 20) | disclaimer = "Thank you for trying Cloudflare Tunnel. Doing so, without ...
  function RunQuickTunnel (line 25) | func RunQuickTunnel(sc *subcommandContext) error {
  type QuickTunnelResponse (line 101) | type QuickTunnelResponse struct
  type QuickTunnelError (line 107) | type QuickTunnelError struct
  type QuickTunnel (line 112) | type QuickTunnel struct
  function AsciiBox (line 121) | func AsciiBox(lines []string, padding int) (box []string) {
  function maxLen (line 133) | func maxLen(lines []string) int {

FILE: cmd/cloudflared/tunnel/signal.go
  function waitForSignal (line 12) | func waitForSignal(graceShutdownC chan struct{}, logger *zerolog.Logger) {

FILE: cmd/cloudflared/tunnel/signal_test.go
  constant tick (line 16) | tick = 100 * time.Millisecond
  function channelClosed (line 24) | func channelClosed(c chan struct{}) bool {
  function TestSignalShutdown (line 33) | func TestSignalShutdown(t *testing.T) {
  function TestWaitForShutdown (line 60) | func TestWaitForShutdown(t *testing.T) {

FILE: cmd/cloudflared/tunnel/subcommand_context.go
  constant fedRampBaseApiURL (line 24) | fedRampBaseApiURL = "https://api.fed.cloudflare.com/client/v4"
  type invalidJSONCredentialError (line 26) | type invalidJSONCredentialError struct
    method Error (line 31) | func (e invalidJSONCredentialError) Error() string {
  type subcommandContext (line 37) | type subcommandContext struct
    method credentialFinder (line 56) | func (sc *subcommandContext) credentialFinder(tunnelID uuid.UUID) Cred...
    method client (line 68) | func (sc *subcommandContext) client() (cfapi.Client, error) {
    method credential (line 92) | func (sc *subcommandContext) credential() (*credentials.User, error) {
    method readTunnelCredentials (line 103) | func (sc *subcommandContext) readTunnelCredentials(credFinder CredFind...
    method create (line 126) | func (sc *subcommandContext) create(name string, credentialsFilePath s...
    method list (line 203) | func (sc *subcommandContext) list(filter *cfapi.TunnelFilter) ([]*cfap...
    method delete (line 211) | func (sc *subcommandContext) delete(tunnelIDs []uuid.UUID) error {
    method findCredentials (line 247) | func (sc *subcommandContext) findCredentials(tunnelID uuid.UUID) (conn...
    method run (line 265) | func (sc *subcommandContext) run(tunnelID uuid.UUID) error {
    method runWithCredentials (line 278) | func (sc *subcommandContext) runWithCredentials(credentials connection...
    method cleanupConnections (line 289) | func (sc *subcommandContext) cleanupConnections(tunnelIDs []uuid.UUID)...
    method getTunnelTokenCredentials (line 314) | func (sc *subcommandContext) getTunnelTokenCredentials(tunnelID uuid.U...
    method route (line 329) | func (sc *subcommandContext) route(tunnelID uuid.UUID, r cfapi.Hostnam...
    method tunnelActive (line 339) | func (sc *subcommandContext) tunnelActive(name string) (*cfapi.Tunnel,...
    method findID (line 356) | func (sc *subcommandContext) findID(input string) (uuid.UUID, error) {
    method findIDs (line 381) | func (sc *subcommandContext) findIDs(inputs []string) ([]uuid.UUID, er...
  function newSubcommandContext (line 47) | func newSubcommandContext(c *cli.Context) (*subcommandContext, error) {
  function splitUuids (line 404) | func splitUuids(inputs []string) ([]uuid.UUID, []string) {

FILE: cmd/cloudflared/tunnel/subcommand_context_teamnet.go
  constant noClientMsg (line 12) | noClientMsg = "error while creating backend client"
  method listRoutes (line 14) | func (sc *subcommandContext) listRoutes(filter *cfapi.IpRouteFilter) ([]...
  method addRoute (line 22) | func (sc *subcommandContext) addRoute(newRoute cfapi.NewRoute) (cfapi.Ro...
  method deleteRoute (line 30) | func (sc *subcommandContext) deleteRoute(id uuid.UUID) error {
  method getRouteByIP (line 38) | func (sc *subcommandContext) getRouteByIP(params cfapi.GetRouteByIpParam...
  method getRouteId (line 46) | func (sc *subcommandContext) getRouteId(network net.IPNet, vnetId *uuid....

FILE: cmd/cloudflared/tunnel/subcommand_context_test.go
  type mockFileSystem (line 22) | type mockFileSystem struct
    method validFilePath (line 27) | func (fs mockFileSystem) validFilePath(path string) bool {
    method readFile (line 31) | func (fs mockFileSystem) readFile(filePath string) ([]byte, error) {
  function Test_subcommandContext_findCredentials (line 35) | func Test_subcommandContext_findCredentials(t *testing.T) {
  type deleteMockTunnelStore (line 187) | type deleteMockTunnelStore struct
    method GetTunnel (line 210) | func (d *deleteMockTunnelStore) GetTunnel(tunnelID uuid.UUID) (*cfapi....
    method GetTunnelToken (line 218) | func (d *deleteMockTunnelStore) GetTunnelToken(tunnelID uuid.UUID) (st...
    method DeleteTunnel (line 222) | func (d *deleteMockTunnelStore) DeleteTunnel(tunnelID uuid.UUID, casca...
    method CleanupConnections (line 238) | func (d *deleteMockTunnelStore) CleanupConnections(tunnelID uuid.UUID,...
  type mockTunnelBehaviour (line 193) | type mockTunnelBehaviour struct
  function newDeleteMockTunnelStore (line 199) | func newDeleteMockTunnelStore(tunnels ...mockTunnelBehaviour) *deleteMoc...
  function Test_subcommandContext_Delete (line 246) | func Test_subcommandContext_Delete(t *testing.T) {
  function Test_subcommandContext_ValidateIngressCommand (line 327) | func Test_subcommandContext_ValidateIngressCommand(t *testing.T) {

FILE: cmd/cloudflared/tunnel/subcommand_context_vnets.go
  method addVirtualNetwork (line 10) | func (sc *subcommandContext) addVirtualNetwork(newVnet cfapi.NewVirtualN...
  method listVirtualNetworks (line 18) | func (sc *subcommandContext) listVirtualNetworks(filter *cfapi.VnetFilte...
  method deleteVirtualNetwork (line 26) | func (sc *subcommandContext) deleteVirtualNetwork(vnetId uuid.UUID, forc...
  method updateVirtualNetwork (line 34) | func (sc *subcommandContext) updateVirtualNetwork(vnetId uuid.UUID, upda...

FILE: cmd/cloudflared/tunnel/subcommands.go
  constant allSortByOptions (line 38) | allSortByOptions        = "name, id, createdAt, deletedAt, numConnections"
  constant connsSortByOptions (line 39) | connsSortByOptions      = "id, startedAt, numConnections, version"
  constant CredFileFlagAlias (line 40) | CredFileFlagAlias       = "cred-file"
  constant CredFileFlag (line 41) | CredFileFlag            = "credentials-file"
  constant CredContentsFlag (line 42) | CredContentsFlag        = "credentials-contents"
  constant TunnelTokenFlag (line 43) | TunnelTokenFlag         = "token"
  constant TunnelTokenFileFlag (line 44) | TunnelTokenFileFlag     = "token-file"
  constant overwriteDNSFlagName (line 45) | overwriteDNSFlagName    = "overwrite-dns"
  constant noDiagLogsFlagName (line 46) | noDiagLogsFlagName      = "no-diag-logs"
  constant noDiagMetricsFlagName (line 47) | noDiagMetricsFlagName   = "no-diag-metrics"
  constant noDiagSystemFlagName (line 48) | noDiagSystemFlagName    = "no-diag-system"
  constant noDiagRuntimeFlagName (line 49) | noDiagRuntimeFlagName   = "no-diag-runtime"
  constant noDiagNetworkFlagName (line 50) | noDiagNetworkFlagName   = "no-diag-network"
  constant diagContainerIDFlagName (line 51) | diagContainerIDFlagName = "diag-container-id"
  constant diagPodFlagName (line 52) | diagPodFlagName         = "diag-pod-id"
  constant LogFieldTunnelID (line 54) | LogFieldTunnelID = "tunnelID"
  function buildCreateCommand (line 251) | func buildCreateCommand() *cli.Command {
  function generateTunnelSecret (line 269) | func generateTunnelSecret() ([]byte, error) {
  function createCommand (line 275) | func createCommand(c *cli.Context) error {
  function tunnelFilePath (line 293) | func tunnelFilePath(tunnelID uuid.UUID, directory string) (string, error) {
  function writeTunnelCredentials (line 301) | func writeTunnelCredentials(filePath string, credentials *connection.Cre...
  function buildListCommand (line 315) | func buildListCommand() *cli.Command {
  function listCommand (line 338) | func listCommand(c *cli.Context) error {
  function formatAndPrintTunnelList (line 422) | func formatAndPrintTunnelList(tunnels []*cfapi.Tunnel, showRecentlyDisco...
  function fmtConnections (line 444) | func fmtConnections(connections []cfapi.Connection, showRecentlyDisconne...
  function buildReadyCommand (line 468) | func buildReadyCommand() *cli.Command {
  function readyCommand (line 480) | func readyCommand(c *cli.Context) error {
  function buildInfoCommand (line 506) | func buildInfoCommand() *cli.Command {
  function tunnelInfo (line 523) | func tunnelInfo(c *cli.Context) error {
  function getTunnel (line 601) | func getTunnel(sc *subcommandContext, tunnelID uuid.UUID) (*cfapi.Tunnel...
  function formatAndPrintConnectionsList (line 614) | func formatAndPrintConnectionsList(tunnelInfo Info, showRecentlyDisconne...
  function tabWriter (line 655) | func tabWriter() *tabwriter.Writer {
  function buildDeleteCommand (line 668) | func buildDeleteCommand() *cli.Command {
  function deleteCommand (line 680) | func deleteCommand(c *cli.Context) error {
  function renderOutput (line 701) | func renderOutput(format string, v interface{}) error {
  function buildRunCommand (line 714) | func buildRunCommand() *cli.Command {
  function runCommand (line 748) | func runCommand(c *cli.Context) error {
  function ParseToken (line 795) | func ParseToken(tokenStr string) (*connection.TunnelToken, error) {
  function runNamedTunnel (line 808) | func runNamedTunnel(sc *subcommandContext, tunnelRef string) error {
  function buildCleanupCommand (line 816) | func buildCleanupCommand() *cli.Command {
  function cleanupCommand (line 828) | func cleanupCommand(c *cli.Context) error {
  function buildTokenCommand (line 846) | func buildTokenCommand() *cli.Command {
  function tokenCommand (line 858) | func tokenCommand(c *cli.Context) error {
  function buildRouteCommand (line 899) | func buildRouteCommand() *cli.Command {
  function dnsRouteFromArg (line 941) | func dnsRouteFromArg(c *cli.Context, overwriteExisting bool) (cfapi.Host...
  function lbRouteFromArg (line 958) | func lbRouteFromArg(c *cli.Context) (cfapi.HostnameRoute, error) {
  function validateName (line 989) | func validateName(s string, allowWildcardSubdomain bool) bool {
  function validateHostname (line 996) | func validateHostname(s string, allowWildcardSubdomain bool) bool {
  function routeDnsCommand (line 1006) | func routeDnsCommand(c *cli.Context) error {
  function routeLbCommand (line 1013) | func routeLbCommand(c *cli.Context) error {
  function routeCommand (line 1020) | func routeCommand(c *cli.Context, routeType string) error {
  function commandHelpTemplate (line 1050) | func commandHelpTemplate() string {
  function buildDiagCommand (line 1076) | func buildDiagCommand() *cli.Command {
  function diagCommand (line 1097) | func diagCommand(ctx *cli.Context) error {

FILE: cmd/cloudflared/tunnel/subcommands_test.go
  function Test_fmtConnections (line 18) | func Test_fmtConnections(t *testing.T) {
  function TestTunnelfilePath (line 93) | func TestTunnelfilePath(t *testing.T) {
  function TestValidateName (line 105) | func TestValidateName(t *testing.T) {
  function Test_validateHostname (line 129) | func Test_validateHostname(t *testing.T) {
  function Test_TunnelToken (line 185) | func Test_TunnelToken(t *testing.T) {

FILE: cmd/cloudflared/tunnel/tag.go
  function NewTagFromCLI (line 14) | func NewTagFromCLI(compoundTag string) (pogs.Tag, bool) {
  function NewTagSliceFromCLI (line 22) | func NewTagSliceFromCLI(tags []string) ([]pogs.Tag, error) {

FILE: cmd/cloudflared/tunnel/tag_test.go
  function TestSingleTag (line 11) | func TestSingleTag(t *testing.T) {
  function TestTagSlice (line 33) | func TestTagSlice(t *testing.T) {

FILE: cmd/cloudflared/tunnel/teamnet_subcommands.go
  function buildRouteIPSubcommand (line 28) | func buildRouteIPSubcommand() *cli.Command {
  function showRoutesFlags (line 92) | func showRoutesFlags() []cli.Flag {
  function showRoutesCommand (line 99) | func showRoutesCommand(c *cli.Context) error {
  function addRouteCommand (line 131) | func addRouteCommand(c *cli.Context) error {
  function deleteRouteCommand (line 183) | func deleteRouteCommand(c *cli.Context) error {
  function getRouteByIPCommand (line 223) | func getRouteByIPCommand(c *cli.Context) error {
  function formatAndPrintRouteList (line 262) | func formatAndPrintRouteList(routes []*cfapi.DetailedRoute) {

FILE: cmd/cloudflared/tunnel/vnets_subcommands.go
  function buildVirtualNetworkSubcommand (line 44) | func buildVirtualNetworkSubcommand(hidden bool) *cli.Command {
  function listVirtualNetworksFlags (line 110) | func listVirtualNetworksFlags() []cli.Flag {
  function addVirtualNetworkCommand (line 117) | func addVirtualNetworkCommand(c *cli.Context) error {
  function listVirtualNetworksCommand (line 161) | func listVirtualNetworksCommand(c *cli.Context) error {
  function deleteVirtualNetworkCommand (line 193) | func deleteVirtualNetworkCommand(c *cli.Context) error {
  function updateVirtualNetworkCommand (line 220) | func updateVirtualNetworkCommand(c *cli.Context) error {
  function getVnetId (line 257) | func getVnetId(sc *subcommandContext, input string) (uuid.UUID, error) {
  function formatAndPrintVnetsList (line 279) | func formatAndPrintVnetsList(vnets []*cfapi.VirtualNetwork) {

FILE: cmd/cloudflared/updater/check.go
  type VersionWarningChecker (line 8) | type VersionWarningChecker struct
    method getWarning (line 35) | func (checker VersionWarningChecker) getWarning() string {
    method LogWarningIfAny (line 45) | func (checker VersionWarningChecker) LogWarningIfAny(log *zerolog.Logg...
  function StartWarningCheck (line 12) | func StartWarningCheck(c *cli.Context) VersionWarningChecker {

FILE: cmd/cloudflared/updater/service.go
  type CheckResult (line 4) | type CheckResult interface
  type Service (line 11) | type Service interface
  constant OSKeyName (line 17) | OSKeyName = "os"
  constant ArchitectureKeyName (line 20) | ArchitectureKeyName = "arch"
  constant BetaKeyName (line 23) | BetaKeyName = "beta"
  constant VersionKeyName (line 26) | VersionKeyName = "version"
  constant ClientVersionName (line 29) | ClientVersionName = "clientVersion"

FILE: cmd/cloudflared/updater/update.go
  constant DefaultCheckUpdateFreq (line 24) | DefaultCheckUpdateFreq        = time.Hour * 24
  constant noUpdateInShellMessage (line 25) | noUpdateInShellMessage        = "cloudflared will not automatically upda...
  constant noUpdateOnWindowsMessage (line 26) | noUpdateOnWindowsMessage      = "cloudflared will not automatically upda...
  constant noUpdateManagedPackageMessage (line 27) | noUpdateManagedPackageMessage = "cloudflared will not automatically upda...
  constant isManagedInstallFile (line 28) | isManagedInstallFile          = ".installedFromPackageManager"
  constant UpdateURL (line 29) | UpdateURL                     = "https://update.argotunnel.com"
  constant StagingUpdateURL (line 30) | StagingUpdateURL              = "https://staging-update.argotunnel.com"
  constant LogFieldVersion (line 32) | LogFieldVersion = "version"
  type statusSuccess (line 43) | type statusSuccess struct
    method Error (line 47) | func (u *statusSuccess) Error() string {
    method ExitCode (line 51) | func (u *statusSuccess) ExitCode() int {
  type statusError (line 56) | type statusError struct
    method Error (line 60) | func (e *statusError) Error() string {
    method ExitCode (line 64) | func (e *statusError) ExitCode() int {
  type updateOptions (line 68) | type updateOptions struct
  type UpdateOutcome (line 76) | type UpdateOutcome struct
    method noUpdate (line 83) | func (uo *UpdateOutcome) noUpdate() bool {
  function Init (line 87) | func Init(info *cliutil.BuildInfo) {
  function CheckForUpdate (line 91) | func CheckForUpdate(options updateOptions) (CheckResult, error) {
  function encodeWindowsPath (line 112) | func encodeWindowsPath(path string) string {
  function applyUpdate (line 122) | func applyUpdate(options updateOptions, update CheckResult) UpdateOutcome {
  function Update (line 136) | func Update(c *cli.Context) error {
  function loggedUpdate (line 183) | func loggedUpdate(log *zerolog.Logger, options updateOptions) UpdateOutc...
  type AutoUpdater (line 202) | type AutoUpdater struct
    method Run (line 240) | func (a *AutoUpdater) Run(ctx context.Context) error {
  type configurable (line 209) | type configurable struct
  function NewAutoUpdater (line 214) | func NewAutoUpdater(updateDisabled bool, freq time.Duration, listeners *...
  function createUpdateConfig (line 222) | func createUpdateConfig(updateDisabled bool, freq time.Duration, log *ze...
  function isAutoupdateEnabled (line 270) | func isAutoupdateEnabled(log *zerolog.Logger, updateDisabled bool, updat...
  function supportAutoUpdate (line 277) | func supportAutoUpdate(log *zerolog.Logger) bool {
  function wasInstalledFromPackageManager (line 295) | func wasInstalledFromPackageManager() bool {
  function isRunningFromTerminal (line 300) | func isRunningFromTerminal() bool {
  function IsSysV (line 304) | func IsSysV() bool {

FILE: cmd/cloudflared/updater/update_test.go
  function init (line 16) | func init() {
  function TestDisabledAutoUpdater (line 20) | func TestDisabledAutoUpdater(t *testing.T) {
  function TestCheckInWithUpdater (line 38) | func TestCheckInWithUpdater(t *testing.T) {

FILE: cmd/cloudflared/updater/workers_service.go
  type Options (line 12) | type Options struct
  type VersionResponse (line 24) | type VersionResponse struct
  type WorkersService (line 36) | type WorkersService struct
    method Check (line 54) | func (s *WorkersService) Check() (CheckResult, error) {
  function NewWorkersService (line 44) | func NewWorkersService(currentVersion, url, targetPath string, opts Opti...

FILE: cmd/cloudflared/updater/workers_service_test.go
  function respondWithJSON (line 28) | func respondWithJSON(w http.ResponseWriter, v interface{}, status int) {
  function respondWithData (line 36) | func respondWithData(w http.ResponseWriter, b []byte, status int) {
  constant mostRecentVersion (line 42) | mostRecentVersion = "2021.2.5"
  constant mostRecentBetaVersion (line 43) | mostRecentBetaVersion = "2021.3.0"
  constant knownBuggyVersion (line 44) | knownBuggyVersion = "2020.12.0"
  constant expectedUserMsg (line 45) | expectedUserMsg = "This message is expected when running a known buggy v...
  function updateHandler (line 47) | func updateHandler(w http.ResponseWriter, r *http.Request) {
  function gzipUpdateHandler (line 86) | func gzipUpdateHandler(w http.ResponseWriter, r *http.Request) {
  function compressedDownloadHandler (line 98) | func compressedDownloadHandler(w http.ResponseWriter, r *http.Request) {
  function downloadHandler (line 118) | func downloadHandler(w http.ResponseWriter, r *http.Request) {
  function betaHandler (line 127) | func betaHandler(w http.ResponseWriter, r *http.Request) {
  function failureHandler (line 131) | func failureHandler(w http.ResponseWriter, r *http.Request) {
  function IsNewerVersion (line 135) | func IsNewerVersion(current string, check string) bool {
  function SemanticParts (line 167) | func SemanticParts(version string) (major int, minor int, patch int, err...
  function createServer (line 193) | func createServer() *httptest.Server {
  function createTestFile (line 204) | func createTestFile(t *testing.T, path string) {
  function TestUpdateService (line 211) | func TestUpdateService(t *testing.T) {
  function TestBetaUpdateService (line 231) | func TestBetaUpdateService(t *testing.T) {
  function TestFailUpdateService (line 250) | func TestFailUpdateService(t *testing.T) {
  function TestNoUpdateService (line 263) | func TestNoUpdateService(t *testing.T) {
  function TestForcedUpdateService (line 277) | func TestForcedUpdateService(t *testing.T) {
  function TestUpdateSpecificVersionService (line 296) | func TestUpdateSpecificVersionService(t *testing.T) {
  function TestCompressedUpdateService (line 316) | func TestCompressedUpdateService(t *testing.T) {
  function TestUpdateWhenRunningKnownBuggyVersion (line 335) | func TestUpdateWhenRunningKnownBuggyVersion(t *testing.T) {

FILE: cmd/cloudflared/updater/workers_update.go
  constant clientTimeout (line 25) | clientTimeout = time.Second * 60
  constant windowsUpdateCommandTemplate (line 32) | windowsUpdateCommandTemplate = `sc stop cloudflared >nul 2>&1
  constant batchFileName (line 38) | batchFileName = "cfd_update.bat"
  type batchData (line 42) | type batchData struct
  type WorkersVersion (line 53) | type WorkersVersion struct
    method Apply (line 83) | func (v *WorkersVersion) Apply() error {
    method Version (line 146) | func (v *WorkersVersion) Version() string {
    method UserMessage (line 152) | func (v *WorkersVersion) UserMessage() string {
  function NewWorkersVersion (line 69) | func NewWorkersVersion(url, version, checksum, targetPath, userMessage s...
  function download (line 157) | func download(url, filepath string, isCompressed bool) error {
  function isCompressedFile (line 200) | func isCompressedFile(urlstring string) bool {
  function writeBatchFile (line 214) | func writeBatchFile(targetPath string, newPath string, oldPath string) e...
  function runWindowsBatch (line 242) | func runWindowsBatch(batchFile string) error {

FILE: cmd/cloudflared/windows_service.go
  constant windowsServiceName (line 27) | windowsServiceName        = "Cloudflared"
  constant windowsServiceDescription (line 28) | windowsServiceDescription = "Cloudflared agent"
  constant windowsServiceUrl (line 29) | windowsServiceUrl         = "https://developers.cloudflare.com/cloudflar...
  constant recoverActionDelay (line 31) | recoverActionDelay      = time.Second * 20
  constant failureCountResetPeriod (line 32) | failureCountResetPeriod = time.Hour * 24
  constant serviceConfigFailureActionsFlag (line 36) | serviceConfigFailureActionsFlag = 4
  constant serviceControllerConnectionFailure (line 40) | serviceControllerConnectionFailure = 1063
  constant LogFieldWindowsServiceName (line 42) | LogFieldWindowsServiceName = "windowsServiceName"
  function runApp (line 45) | func runApp(app *cli.App, graceShutdownC chan struct{}) {
  type windowsService (line 99) | type windowsService struct
    method Execute (line 106) | func (s *windowsService) Execute(serviceArgs []string, r <-chan svc.Ch...
  function installWindowsService (line 176) | func installWindowsService(c *cli.Context) error {
  function uninstallWindowsService (line 228) | func uninstallWindowsService(c *cli.Context) error {
  type scAction (line 265) | type scAction
  constant scActionNone (line 269) | scActionNone scAction = iota
  constant scActionRestart (line 270) | scActionRestart
  constant scActionReboot (line 271) | scActionReboot
  constant scActionRunCommand (line 272) | scActionRunCommand
  type serviceFailureActions (line 276) | type serviceFailureActions struct
  type serviceFailureActionsFlag (line 289) | type serviceFailureActionsFlag struct
  type recoveryAction (line 295) | type recoveryAction struct
  function configRecoveryOption (line 303) | func configRecoveryOption(handle windows.Handle) error {

FILE: component-tests/cli.py
  class CloudflaredCli (line 11) | class CloudflaredCli:
    method __init__ (line 12) | def __init__(self, config, config_path, logger):
    method _run_command (line 21) | def _run_command(self, subcmd, subcmd_name, needs_to_pass=True):
    method list_tunnels (line 28) | def list_tunnels(self):
    method get_management_token (line 33) | def get_management_token(self, config, config_path, resource):
    method get_tail_token (line 46) | def get_tail_token(self, config, config_path):
    method get_management_url (line 63) | def get_management_url(self, path, config, config_path, resource):
    method get_management_wsurl (line 68) | def get_management_wsurl(self, path, config, config_path, resource):
    method get_connector_id (line 73) | def get_connector_id(self, config):
    method get_tunnel_info (line 80) | def get_tunnel_info(self, tunnel_id):
    method __enter__ (line 84) | def __enter__(self):
    method __exit__ (line 90) | def __exit__(self, exc_type, exc_value, exc_traceback):
  function terminate_gracefully (line 95) | def terminate_gracefully(process, logger, cmd):
  function wait_for_terminate (line 104) | def wait_for_terminate(opened_subprocess, attempts=10, poll_interval=1):
  function _is_process_stopped (line 116) | def _is_process_stopped(process):
  function cert_path (line 120) | def cert_path():
  class SubprocessError (line 124) | class SubprocessError(Exception):
    method __init__ (line 125) | def __init__(self, program, exit_code, cause):
  function run_subprocess (line 131) | def run_subprocess(cmd, cmd_name, logger, timeout=SINGLE_CASE_TIMEOUT, *...

FILE: component-tests/config.py
  class BaseConfig (line 14) | class BaseConfig:
    method merge_config (line 19) | def merge_config(self, additional):
  class NamedTunnelBaseConfig (line 27) | class NamedTunnelBaseConfig(BaseConfig):
    method __post_init__ (line 35) | def __post_init__(self):
    method merge_config (line 43) | def merge_config(self, additional):
  class NamedTunnelConfig (line 56) | class NamedTunnelConfig(NamedTunnelBaseConfig):
    method __post_init__ (line 60) | def __post_init__(self, additional_config):
    method get_url (line 66) | def get_url(self):
    method base_config (line 69) | def base_config(self):
    method get_tunnel_id (line 78) | def get_tunnel_id(self):
    method get_token (line 81) | def get_token(self):
    method get_credentials_json (line 87) | def get_credentials_json(self):
  class QuickTunnelConfig (line 92) | class QuickTunnelConfig(BaseConfig):
    method __post_init__ (line 96) | def __post_init__(self, additional_config):

FILE: component-tests/conftest.py
  class CfdModes (line 13) | class CfdModes(Enum):
  function component_tests_config (line 19) | def component_tests_config():
  function wait_previous_cloudflared (line 54) | def wait_previous_cloudflared():

FILE: component-tests/constants.py
  function protocols (line 9) | def protocols():

FILE: component-tests/setup.py
  function get_config_from_env (line 17) | def get_config_from_env():
  function get_config_from_file (line 22) | def get_config_from_file():
  function persist_config (line 28) | def persist_config(config):
  function persist_origin_cert (line 34) | def persist_origin_cert(config):
  function create_tunnel (line 43) | def create_tunnel(config, origincert_path, random_uuid):
  function delete_tunnel (line 67) | def delete_tunnel(config):
  function create_dns (line 76) | def create_dns(config, hostname, type, content):
  function create_named_dns (line 84) | def create_named_dns(config, random_uuid):
  function delete_dns (line 91) | def delete_dns(config, hostname):
  function write_file (line 99) | def write_file(content, path):
  function get_env (line 104) | def get_env(env_name):
  function create (line 111) | def create():
  function cleanup (line 138) | def cleanup():

FILE: component-tests/test_config.py
  class TestConfig (line 5) | class TestConfig:
    method test_validate_ingress_rules (line 7) | def test_validate_ingress_rules(self, tmp_path, component_tests_config):
    method match_rule (line 53) | def match_rule(self, tmp_path, config, url, rule_num):

FILE: component-tests/test_edge_discovery.py
  class TestEdgeDiscovery (line 11) | class TestEdgeDiscovery:
    method _extra_config (line 12) | def _extra_config(self, protocol, edge_ip_version):
    method test_default_only (line 21) | def test_default_only(self, tmp_path, component_tests_config, protocol):
    method test_ipv4_only (line 31) | def test_ipv4_only(self, tmp_path, component_tests_config, protocol):
    method test_ipv6_only (line 41) | def test_ipv6_only(self, tmp_path, component_tests_config, protocol):
    method test_auto_ip64 (line 51) | def test_auto_ip64(self, tmp_path, component_tests_config, protocol):
    method test_auto_ip46 (line 63) | def test_auto_ip46(self, tmp_path, component_tests_config, protocol):
    method expect_address_connections (line 74) | def expect_address_connections(self, tmp_path, component_tests_config,...
    method expect_ipv4_address (line 97) | def expect_ipv4_address(self, address):
    method expect_ipv6_address (line 101) | def expect_ipv6_address(self, address):
    method get_addresses (line 105) | def get_addresses(self):
    method has_dual_stack (line 115) | def has_dual_stack(self, address_family_preference=None):
    method has_ipv6_only (line 127) | def has_ipv6_only(self):
    method has_ipv4_only (line 133) | def has_ipv4_only(self):
    method attempt_connection (line 139) | def attempt_connection(self, address_family):

FILE: component-tests/test_logging.py
  function assert_log_to_terminal (line 14) | def assert_log_to_terminal(cloudflared):
  function assert_log_in_file (line 24) | def assert_log_in_file(file):
  function assert_json_log (line 35) | def assert_json_log(file):
  function assert_log_to_dir (line 47) | def assert_log_to_dir(config, log_dir):
  class TestLogging (line 74) | class TestLogging:
    method test_logging_to_terminal (line 75) | def test_logging_to_terminal(self, tmp_path, component_tests_config):
    method test_logging_to_file (line 81) | def test_logging_to_file(self, tmp_path, component_tests_config):
    method test_logging_to_dir (line 93) | def test_logging_to_dir(self, tmp_path, component_tests_config):

FILE: component-tests/test_management.py
  class TestManagement (line 16) | class TestManagement:
    method test_get_host_details (line 24) | def test_get_host_details(self, tmp_path, component_tests_config):
    method test_get_metrics (line 51) | def test_get_metrics(self, tmp_path, component_tests_config):
    method test_get_pprof_heap (line 72) | def test_get_pprof_heap(self, tmp_path, component_tests_config):
    method test_get_metrics_when_disabled (line 93) | def test_get_metrics_when_disabled(self, tmp_path, component_tests_con...
    method test_tail_token_command (line 110) | def test_tail_token_command(self, tmp_path, component_tests_config):
  function send_request (line 147) | def send_request(url, headers={}):

FILE: component-tests/test_pq.py
  class TestPostQuantum (line 4) | class TestPostQuantum:
    method _extra_config (line 5) | def _extra_config(self):
    method test_post_quantum (line 11) | def test_post_quantum(self, tmp_path, component_tests_config):

FILE: component-tests/test_quicktunnels.py
  class TestQuickTunnels (line 7) | class TestQuickTunnels:
    method test_quick_tunnel (line 8) | def test_quick_tunnel(self, tmp_path, component_tests_config):
    method test_quick_tunnel_url (line 17) | def test_quick_tunnel_url(self, tmp_path, component_tests_config):

FILE: component-tests/test_reconnect.py
  class TestReconnect (line 15) | class TestReconnect:
    method _extra_config (line 22) | def _extra_config(self, protocol):
    method test_named_reconnect (line 30) | def test_named_reconnect(self, tmp_path, component_tests_config, proto...
    method send_reconnect (line 36) | def send_reconnect(self, cloudflared, secs):
    method assert_reconnect (line 42) | def assert_reconnect(self, config, cloudflared, repeat):

FILE: component-tests/test_service.py
  function default_config_dir (line 15) | def default_config_dir():
  function default_config_file (line 19) | def default_config_file():
  class TestServiceMode (line 23) | class TestServiceMode:
    method test_launchd_service_log_to_file (line 26) | def test_launchd_service_log_to_file(self, tmp_path, component_tests_c...
    method test_launchd_service_with_token (line 43) | def test_launchd_service_with_token(self, tmp_path, component_tests_co...
    method test_launchd_service_rotating_log (line 58) | def test_launchd_service_rotating_log(self, tmp_path, component_tests_...
    method launchd_service_scenario (line 73) | def launchd_service_scenario(self, config, extra_assertions=None, use_...
    method test_sysv_service_log_to_file (line 89) | def test_sysv_service_log_to_file(self, tmp_path, component_tests_conf...
    method test_sysv_service_rotating_log (line 106) | def test_sysv_service_rotating_log(self, tmp_path, component_tests_con...
    method test_sysv_service_with_token (line 125) | def test_sysv_service_with_token(self, tmp_path, component_tests_config):
    method sysv_service_scenario (line 139) | def sysv_service_scenario(self, config, tmp_path, extra_assertions=Non...
    method run_service (line 151) | def run_service(self, tmp_path, config, root=False, use_token=False):
    method launchctl_cmd (line 165) | def launchctl_cmd(self, action, success=True):
    method sysv_cmd (line 171) | def sysv_cmd(self, action, success=True):

FILE: component-tests/test_tail.py
  class TestTail (line 14) | class TestTail:
    method test_start_stop_streaming (line 16) | async def test_start_stop_streaming(self, tmp_path, component_tests_co...
    method test_streaming_logs (line 36) | async def test_streaming_logs(self, tmp_path, component_tests_config):
    method test_streaming_logs_filters (line 62) | async def test_streaming_logs_filters(self, tmp_path, component_tests_...
    method test_streaming_logs_sampling (line 90) | async def test_streaming_logs_sampling(self, tmp_path, component_tests...
    method test_streaming_logs_actor_override (line 118) | async def test_streaming_logs_actor_override(self, tmp_path, component...
  function start_streaming_to_be_remotely_closed (line 136) | async def start_streaming_to_be_remotely_closed(url):
  function start_streaming_override (line 146) | async def start_streaming_override(url):
  function generate_and_validate_http_events (line 156) | async def generate_and_validate_http_events(websocket: WebSocketClientPr...
  function generate_and_validate_no_log_event (line 174) | async def generate_and_validate_no_log_event(websocket: WebSocketClientP...
  function send_request (line 184) | def send_request(url, headers={}):

FILE: component-tests/test_termination.py
  function supported_signals (line 15) | def supported_signals():
  class TestTermination (line 21) | class TestTermination:
    method _extra_config (line 26) | def _extra_config(self, protocol):
    method test_graceful_shutdown (line 34) | def test_graceful_shutdown(self, tmp_path, component_tests_config, sig...
    method test_shutdown_once_no_connection (line 57) | def test_shutdown_once_no_connection(self, tmp_path, component_tests_c...
    method test_no_connection_shutdown (line 77) | def test_no_connection_shutdown(self, tmp_path, component_tests_config...
    method terminate_by_signal (line 85) | def terminate_by_signal(self, cloudflared, sig):
    method wait_eyeball_thread (line 90) | def wait_eyeball_thread(self, thread, timeout):
    method within_grace_period (line 96) | def within_grace_period(self, has_connection=True):
    method stream_request (line 112) | def stream_request(self, config, connected, early_terminate):

FILE: component-tests/test_token.py
  class TestToken (line 8) | class TestToken:
    method test_get_token (line 9) | def test_get_token(self, tmp_path, component_tests_config):
    method test_get_credentials_file (line 18) | def test_get_credentials_file(self, tmp_path, component_tests_config):
  function cert_path (line 30) | def cert_path():
  function parse_token (line 34) | def parse_token(token):

FILE: component-tests/test_tunnel.py
  class TestTunnel (line 10) | class TestTunnel:
    method test_tunnel_hello_world (line 13) | def test_tunnel_hello_world(self, tmp_path, component_tests_config):
    method test_tunnel_url (line 20) | def test_tunnel_url(self, tmp_path, component_tests_config):
    method test_tunnel_no_ingress (line 27) | def test_tunnel_no_ingress(self, tmp_path, component_tests_config):
  function retry_if_result_none (line 42) | def retry_if_result_none(result):
  function send_request (line 49) | def send_request(url, expected_status_code=200):

FILE: component-tests/util.py
  function configure_logger (line 17) | def configure_logger():
  function select_platform (line 26) | def select_platform(plat):
  function fips_enabled (line 30) | def fips_enabled():
  function skip_on_ci (line 37) | def skip_on_ci(reason):
  function write_config (line 43) | def write_config(directory, config):
  function start_cloudflared (line 50) | def start_cloudflared(directory, config, cfd_args=["run"], cfd_pre_args=...
  function cloudflared_cmd (line 64) | def cloudflared_cmd(config, config_path, cfd_args, cfd_pre_args, root):
  function run_cloudflared_background (line 80) | def run_cloudflared_background(cmd, allow_input, capture_output):
  function get_quicktunnel_url (line 94) | def get_quicktunnel_url():
  function wait_tunnel_ready (line 105) | def wait_tunnel_ready(tunnel_url=None, require_min_connections=1, cfd_lo...
  function inner_wait_tunnel_ready (line 115) | def inner_wait_tunnel_ready(tunnel_url=None, require_min_connections=1):
  function _log_cloudflared_logs (line 130) | def _log_cloudflared_logs(cfd_logs):
  function check_tunnel_not_connected (line 144) | def check_tunnel_not_connected():
  function get_tunnel_connector_id (line 157) | def get_tunnel_connector_id():
  function send_requests (line 169) | def send_requests(url, count, require_ok=True):
  function send_request (line 183) | def send_request(session, url, require_ok):
  function decode_jwt_payload (line 190) | def decode_jwt_payload(token):

FILE: config/configuration.go
  constant BastionFlag (line 43) | BastionFlag = "bastion"
  function DefaultConfigDirectory (line 47) | func DefaultConfigDirectory() string {
  function DefaultLogDirectory (line 62) | func DefaultLogDirectory() string {
  function DefaultConfigPath (line 70) | func DefaultConfigPath() string {
  function DefaultConfigSearchDirectories (line 79) | func DefaultConfigSearchDirectories() []string {
  function FileExists (line 89) | func FileExists(path string) (bool, error) {
  function FindDefaultConfigPath (line 105) | func FindDefaultConfigPath() string {
  function FindOrCreateConfigPath (line 123) | func FindOrCreateConfigPath() string {
  function ValidateUnixSocket (line 156) | func ValidateUnixSocket(c *cli.Context) (string, error) {
  function ValidateUrl (line 165) | func ValidateUrl(c *cli.Context, allowURLFromArgs bool) (*url.URL, error) {
  type UnvalidatedIngressRule (line 177) | type UnvalidatedIngressRule struct
  type OriginRequestConfig (line 191) | type OriginRequestConfig struct
  type AccessConfig (line 236) | type AccessConfig struct
  type IngressIPRule (line 249) | type IngressIPRule struct
  type Configuration (line 255) | type Configuration struct
    method Source (line 275) | func (c *Configuration) Source() string {
  type WarpRoutingConfig (line 263) | type WarpRoutingConfig struct
  type configFileSettings (line 269) | type configFileSettings struct
    method Int (line 279) | func (c *configFileSettings) Int(name string) (int, error) {
    method Duration (line 289) | func (c *configFileSettings) Duration(name string) (time.Duration, err...
    method Float64 (line 302) | func (c *configFileSettings) Float64(name string) (float64, error) {
    method String (line 312) | func (c *configFileSettings) String(name string) (string, error) {
    method StringSlice (line 322) | func (c *configFileSettings) StringSlice(name string) ([]string, error) {
    method IntSlice (line 340) | func (c *configFileSettings) IntSlice(name string) ([]int, error) {
    method Generic (line 361) | func (c *configFileSettings) Generic(name string) (cli.Generic, error) {
    method Bool (line 365) | func (c *configFileSettings) Bool(name string) (bool, error) {
  function GetConfiguration (line 377) | func GetConfiguration() *Configuration {
  function ReadConfigFile (line 384) | func ReadConfigFile(c *cli.Context, log *zerolog.Logger) (settings *conf...
  type CustomDuration (line 430) | type CustomDuration struct
    method MarshalJSON (line 434) | func (s CustomDuration) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 438) | func (s *CustomDuration) UnmarshalJSON(data []byte) error {
    method MarshalYAML (line 448) | func (s *CustomDuration) MarshalYAML() (interface{}, error) {
    method UnmarshalYAML (line 452) | func (s *CustomDuration) UnmarshalYAML(unmarshal func(interface{}) err...

FILE: config/configuration_test.go
  function TestConfigFileSettings (line 13) | func TestConfigFileSettings(t *testing.T) {
  function TestMarshalUnmarshalOriginRequest (line 151) | func TestMarshalUnmarshalOriginRequest(t *testing.T) {
  function assertConfig (line 168) | func assertConfig(

FILE: config/manager.go
  type Notifier (line 15) | type Notifier interface
  type Manager (line 20) | type Manager interface
  type FileManager (line 27) | type FileManager struct
    method Start (line 48) | func (m *FileManager) Start(notifier Notifier) error {
    method GetConfig (line 63) | func (m *FileManager) GetConfig() (Root, error) {
    method Shutdown (line 68) | func (m *FileManager) Shutdown() {
    method WatcherItemDidChange (line 99) | func (m *FileManager) WatcherItemDidChange(filepath string) {
    method WatcherDidError (line 110) | func (m *FileManager) WatcherDidError(err error) {
  function NewFileManager (line 36) | func NewFileManager(watcher watcher.Notifier, configPath string, log *ze...
  function readConfigFromPath (line 72) | func readConfigFromPath(configPath string, log *zerolog.Logger) (Root, e...

FILE: config/manager_test.go
  type mockNotifier (line 13) | type mockNotifier struct
    method ConfigDidUpdate (line 17) | func (n *mockNotifier) ConfigDidUpdate(c Root) {
  type mockFileWatcher (line 21) | type mockFileWatcher struct
    method Start (line 27) | func (w *mockFileWatcher) Start(n watcher.Notification) {
    method Add (line 32) | func (w *mockFileWatcher) Add(string) error {
    method Shutdown (line 36) | func (w *mockFileWatcher) Shutdown() {
    method TriggerChange (line 40) | func (w *mockFileWatcher) TriggerChange() {
  function TestConfigChanged (line 44) | func TestConfigChanged(t *testing.T) {

FILE: config/model.go
  type Forwarder (line 10) | type Forwarder struct
    method Hash (line 36) | func (f *Forwarder) Hash() string {
  type Tunnel (line 20) | type Tunnel struct
  type Root (line 27) | type Root struct

FILE: connection/connection.go
  constant lbProbeUserAgentPrefix (line 24) | lbProbeUserAgentPrefix = "Mozilla/5.0 (compatible; Cloudflare-Traffic-Ma...
  constant LogFieldConnIndex (line 25) | LogFieldConnIndex      = "connIndex"
  constant MaxGracePeriod (line 26) | MaxGracePeriod         = time.Minute * 3
  constant MaxConcurrentStreams (line 27) | MaxConcurrentStreams   = math.MaxUint32
  constant contentTypeHeader (line 29) | contentTypeHeader      = "content-type"
  constant contentLengthHeader (line 30) | contentLengthHeader    = "content-length"
  constant transferEncodingHeader (line 31) | transferEncodingHeader = "transfer-encoding"
  constant sseContentType (line 33) | sseContentType     = "text/event-stream"
  constant grpcContentType (line 34) | grpcContentType    = "application/grpc"
  constant sseJsonContentType (line 35) | sseJsonContentType = "application/x-ndjson"
  constant chunkTransferEncoding (line 37) | chunkTransferEncoding = "chunked"
  type TunnelConnection (line 48) | type TunnelConnection interface
  type Orchestrator (line 52) | type Orchestrator interface
  type TunnelProperties (line 58) | type TunnelProperties struct
  type Credentials (line 64) | type Credentials struct
    method Auth (line 71) | func (c *Credentials) Auth() pogs.TunnelAuth {
  type TunnelToken (line 79) | type TunnelToken struct
    method Credentials (line 86) | func (t TunnelToken) Credentials() Credentials {
    method Encode (line 96) | func (t TunnelToken) Encode() (string, error) {
  type ClassicTunnelProperties (line 105) | type ClassicTunnelProperties struct
  type Type (line 113) | type Type
    method shouldFlush (line 124) | func (t Type) shouldFlush() bool {
    method String (line 133) | func (t Type) String() string {
  constant TypeWebsocket (line 116) | TypeWebsocket Type = iota
  constant TypeTCP (line 117) | TypeTCP
  constant TypeControlStream (line 118) | TypeControlStream
  constant TypeHTTP (line 119) | TypeHTTP
  constant TypeConfiguration (line 120) | TypeConfiguration
  type OriginProxy (line 149) | type OriginProxy interface
  type TCPRequest (line 155) | type TCPRequest struct
  type ReadWriteAcker (line 166) | type ReadWriteAcker interface
  type HTTPResponseReadWriteAcker (line 172) | type HTTPResponseReadWriteAcker struct
    method Read (line 189) | func (h *HTTPResponseReadWriteAcker) Read(p []byte) (int, error) {
    method Write (line 193) | func (h *HTTPResponseReadWriteAcker) Write(p []byte) (int, error) {
    method AckConnection (line 203) | func (h *HTTPResponseReadWriteAcker) AckConnection(tracePropagation st...
  function NewHTTPResponseReadWriterAcker (line 180) | func NewHTTPResponseReadWriterAcker(w ResponseWriter, flusher http.Flush...
  type localProxyConnection (line 224) | type localProxyConnection struct
    method Read (line 228) | func (c *localProxyConnection) Read(b []byte) (int, error) {
    method Write (line 232) | func (c *localProxyConnection) Write(b []byte) (int, error) {
    method Close (line 236) | func (c *localProxyConnection) Close() error {
    method LocalAddr (line 240) | func (c *localProxyConnection) LocalAddr() net.Addr {
    method RemoteAddr (line 245) | func (c *localProxyConnection) RemoteAddr() net.Addr {
    method SetDeadline (line 250) | func (c *localProxyConnection) SetDeadline(t time.Time) error {
    method SetReadDeadline (line 255) | func (c *localProxyConnection) SetReadDeadline(t time.Time) error {
    method SetWriteDeadline (line 260) | func (c *localProxyConnection) SetWriteDeadline(t time.Time) error {
  type ResponseWriter (line 266) | type ResponseWriter interface
  type ConnectedFuse (line 274) | type ConnectedFuse interface
  function shouldFlush (line 281) | func shouldFlush(headers http.Header) bool {
  function uint8ToString (line 309) | func uint8ToString(input uint8) string {
  function FindCfRayHeader (line 313) | func FindCfRayHeader(req *http.Request) string {
  function IsLBProbeRequest (line 317) | func IsLBProbeRequest(req *http.Request) bool {

FILE: connection/connection_test.go
  constant largeFileSize (line 26) | largeFileSize   = 2 * 1024 * 1024
  constant testGracePeriod (line 27) | testGracePeriod = time.Millisecond * 100
  type testRequest (line 40) | type testRequest struct
  type mockOrchestrator (line 48) | type mockOrchestrator struct
    method GetConfigJSON (line 52) | func (mcr *mockOrchestrator) GetConfigJSON() ([]byte, error) {
    method UpdateConfig (line 56) | func (*mockOrchestrator) UpdateConfig(version int32, config []byte) *t...
    method GetOriginProxy (line 62) | func (mcr *mockOrchestrator) GetOriginProxy() (OriginProxy, error) {
    method WarpRoutingEnabled (line 66) | func (mcr *mockOrchestrator) WarpRoutingEnabled() (enabled bool) {
  type mockOriginProxy (line 70) | type mockOriginProxy struct
    method ProxyHTTP (line 72) | func (moc *mockOriginProxy) ProxyHTTP(
    method ProxyTCP (line 106) | func (moc *mockOriginProxy) ProxyTCP(
  type echoPipe (line 118) | type echoPipe struct
    method Read (line 123) | func (ep *echoPipe) Read(p []byte) (int, error) {
    method Write (line 127) | func (ep *echoPipe) Write(p []byte) (int, error) {
  function wsEchoEndpoint (line 133) | func wsEchoEndpoint(w ResponseWriter, r *http.Request) error {
  type flakyConn (line 160) | type flakyConn struct
    method Read (line 164) | func (fc *flakyConn) Read(p []byte) (int, error) {
    method Write (line 172) | func (fc *flakyConn) Write(p []byte) (int, error) {
  function wsFlakyEndpoint (line 179) | func wsFlakyEndpoint(w ResponseWriter, r *http.Request) error {
  function originRespEndpoint (line 199) | func originRespEndpoint(w ResponseWriter, status int, data []byte) {
  type mockConnectedFuse (line 207) | type mockConnectedFuse struct
    method Connected (line 209) | func (mcf mockConnectedFuse) Connected() {}
    method IsConnected (line 211) | func (mcf mockConnectedFuse) IsConnected() bool {
  function TestShouldFlushHeaders (line 215) | func TestShouldFlushHeaders(t *testing.T) {

FILE: connection/control.go
  type registerClientFunc (line 17) | type registerClientFunc
  type controlStream (line 19) | type controlStream struct
    method ServeControlStream (line 78) | func (c *controlStream) ServeControlStream(
    method waitForUnregister (line 124) | func (c *controlStream) waitForUnregister(ctx context.Context, registr...
    method IsStopped (line 149) | func (c *controlStream) IsStopped() bool {
  type ControlStreamHandler (line 37) | type ControlStreamHandler interface
  type TunnelConfigJSONGetter (line 44) | type TunnelConfigJSONGetter interface
  function NewControlStream (line 49) | func NewControlStream(

FILE: connection/errors.go
  constant DuplicateConnectionError (line 8) | DuplicateConnectionError = "EDUPCONN"
  type DupConnRegisterTunnelError (line 11) | type DupConnRegisterTunnelError struct
    method Error (line 15) | func (e DupConnRegisterTunnelError) Error() string {
  type EdgeQuicDialError (line 20) | type EdgeQuicDialError struct
    method Error (line 24) | func (e *EdgeQuicDialError) Error() string {
    method Unwrap (line 28) | func (e *EdgeQuicDialError) Unwrap() error {
  type ServerRegisterTunnelError (line 33) | type ServerRegisterTunnelError struct
    method Error (line 38) | func (e ServerRegisterTunnelError) Error() string {
  function serverRegistrationErrorFromRPC (line 42) | func serverRegistrationErrorFromRPC(err error) ServerRegisterTunnelError {
  type ControlStreamError (line 55) | type ControlStreamError struct
    method Error (line 59) | func (e *ControlStreamError) Error() string {
  type StreamListenerError (line 63) | type StreamListenerError struct
    method Error (line 67) | func (e *StreamListenerError) Error() string {
  type DatagramManagerError (line 71) | type DatagramManagerError struct
    method Error (line 75) | func (e *DatagramManagerError) Error() string {

FILE: connection/event.go
  type Event (line 6) | type Event struct
  type Status (line 16) | type Status
  constant Disconnected (line 20) | Disconnected Status = iota
  constant Connected (line 22) | Connected
  constant Reconnecting (line 24) | Reconnecting
  constant SetURL (line 26) | SetURL
  constant RegisteringTunnel (line 28) | RegisteringTunnel
  constant Unregistering (line 30) | Unregistering

FILE: connection/header.go
  type HTTPHeader (line 32) | type HTTPHeader struct
  type responseMetaHeader (line 37) | type responseMetaHeader struct
  function mustInitRespMetaHeader (line 42) | func mustInitRespMetaHeader(src string, flowRateLimited bool) string {
  function IsControlResponseHeader (line 53) | func IsControlResponseHeader(headerName string) bool {
  function IsWebsocketClientHeader (line 61) | func IsWebsocketClientHeader(headerName string) bool {
  function SerializeHeaders (line 69) | func SerializeHeaders(h1Headers http.Header) string {
  function DeserializeHeaders (line 115) | func DeserializeHeaders(serializedHeaders string) ([]HTTPHeader, error) {

FILE: connection/header_test.go
  function TestSerializeHeaders (line 12) | func TestSerializeHeaders(t *testing.T) {
  type ByName (line 60) | type ByName
    method Len (line 62) | func (a ByName) Len() int      { return len(a) }
    method Swap (line 63) | func (a ByName) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
    method Less (line 64) | func (a ByName) Less(i, j int) bool {
  function headerToReqHeader (line 72) | func headerToReqHeader(headers http.Header) (reqHeaders []HTTPHeader) {
  function TestSerializeNoHeaders (line 82) | func TestSerializeNoHeaders(t *testing.T) {
  function TestDeserializeMalformed (line 92) | func TestDeserializeMalformed(t *testing.T) {
  function TestIsControlResponseHeader (line 108) | func TestIsControlResponseHeader(t *testing.T) {
  function TestIsNotControlResponseHeader (line 123) | func TestIsNotControlResponseHeader(t *testing.T) {

FILE: connection/http2.go
  constant InternalUpgradeHeader (line 27) | InternalUpgradeHeader     = "Cf-Cloudflared-Proxy-Connection-Upgrade"
  constant InternalTCPProxySrcHeader (line 28) | InternalTCPProxySrcHeader = "Cf-Cloudflared-Proxy-Src"
  constant WebsocketUpgrade (line 29) | WebsocketUpgrade          = "websocket"
  constant ControlStreamUpgrade (line 30) | ControlStreamUpgrade      = "control-stream"
  constant ConfigurationUpdate (line 31) | ConfigurationUpdate       = "update-configuration"
  type HTTP2Connection (line 38) | type HTTP2Connection struct
    method Serve (line 78) | func (c *HTTP2Connection) Serve(ctx context.Context) error {
    method ServeHTTP (line 99) | func (c *HTTP2Connection) ServeHTTP(w http.ResponseWriter, r *http.Req...
    method handleConfigurationUpdate (line 174) | func (c *HTTP2Connection) handleConfigurationUpdate(respWriter *http2R...
    method close (line 188) | func (c *HTTP2Connection) close() {
  function NewHTTP2Connection (line 54) | func NewHTTP2Connection(
  type ConfigurationUpdateBody (line 169) | type ConfigurationUpdateBody struct
  type http2RespWriter (line 194) | type http2RespWriter struct
    method AddTrailer (line 229) | func (rp *http2RespWriter) AddTrailer(trailerName, trailerValue string) {
    method WriteRespHeaders (line 238) | func (rp *http2RespWriter) WriteRespHeaders(status int, header http.He...
    method Header (line 288) | func (rp *http2RespWriter) Header() http.Header {
    method Flush (line 292) | func (rp *http2RespWriter) Flush() {
    method WriteHeader (line 296) | func (rp *http2RespWriter) WriteHeader(status int) {
    method hijacked (line 304) | func (rp *http2RespWriter) hijacked() bool {
    method Hijack (line 310) | func (rp *http2RespWriter) Hijack() (net.Conn, *bufio.ReadWriter, erro...
    method WriteErrorResponse (line 334) | func (rp *http2RespWriter) WriteErrorResponse(err error) bool {
    method setResponseMetaHeader (line 350) | func (rp *http2RespWriter) setResponseMetaHeader(value string) {
    method Read (line 354) | func (rp *http2RespWriter) Read(p []byte) (n int, err error) {
    method Write (line 358) | func (rp *http2RespWriter) Write(p []byte) (n int, err error) {
    method Close (line 373) | func (rp *http2RespWriter) Close() error {
  function NewHTTP2RespWriter (line 206) | func NewHTTP2RespWriter(r *http.Request, w http.ResponseWriter, connType...
  function determineHTTP2Type (line 377) | func determineHTTP2Type(r *http.Request) Type {
  function handleMissingRequestParts (line 392) | func handleMissingRequestParts(connType Type, r *http.Request) {
  function isControlStreamUpgrade (line 405) | func isControlStreamUpgrade(r *http.Request) bool {
  function isWebsocketUpgrade (line 409) | func isWebsocketUpgrade(r *http.Request) bool {
  function isConfigurationUpdate (line 413) | func isConfigurationUpdate(r *http.Request) bool {
  function IsTCPStream (line 418) | func IsTCPStream(r *http.Request) bool {
  function stripWebsocketUpgradeHeader (line 422) | func stripWebsocketUpgradeHeader(r *http.Request) {
  function getRequestHost (line 427) | func getRequestHost(r *http.Request) (string, error) {

FILE: connection/http2_test.go
  function newTestHTTP2Connection (line 32) | func newTestHTTP2Connection() (*HTTP2Connection, net.Conn) {
  function TestHTTP2ConfigurationSet (line 61) | func TestHTTP2ConfigurationSet(t *testing.T) {
  function TestServeHTTP (line 95) | func TestServeHTTP(t *testing.T) {
  type mockNamedTunnelRPCClient (line 167) | type mockNamedTunnelRPCClient struct
    method SendLocalConfiguration (line 173) | func (mc mockNamedTunnelRPCClient) SendLocalConfiguration(c context.Co...
    method RegisterConnection (line 177) | func (mc mockNamedTunnelRPCClient) RegisterConnection(
    method GracefulShutdown (line 196) | func (mc mockNamedTunnelRPCClient) GracefulShutdown(ctx context.Contex...
    method Close (line 201) | func (mockNamedTunnelRPCClient) Close() {}
  type mockRPCClientFactory (line 203) | type mockRPCClientFactory struct
    method newMockRPCClient (line 209) | func (mf *mockRPCClientFactory) newMockRPCClient(context.Context, io.R...
  type wsRespWriter (line 217) | type wsRespWriter struct
    method RespBody (line 244) | func (w *wsRespWriter) RespBody() io.ReadWriter {
    method Write (line 248) | func (w *wsRespWriter) Write(data []byte) (n int, err error) {
    method close (line 256) | func (w *wsRespWriter) close() {
  function newWSRespWriter (line 225) | func newWSRespWriter() *wsRespWriter {
  type nowriter (line 236) | type nowriter struct
    method Write (line 240) | func (nowriter) Write(_ []byte) (int, error) {
  function TestServeWS (line 260) | func TestServeWS(t *testing.T) {
  function TestNoWriteAfterServeHTTPReturns (line 300) | func TestNoWriteAfterServeHTTPReturns(t *testing.T) {
  function TestServeControlStream (line 358) | func TestServeControlStream(t *testing.T) {
  function TestFailRegistration (line 411) | func TestFailRegistration(t *testing.T) {
  function TestGracefulShutdownHTTP2 (line 459) | func TestGracefulShutdownHTTP2(t *testing.T) {
  function TestServeTCP_RateLimited (line 535) | func TestServeTCP_RateLimited(t *testing.T) {
  function benchmarkServeHTTP (line 565) | func benchmarkServeHTTP(b *testing.B, test testRequest) {
  function BenchmarkServeHTTPSimple (line 602) | func BenchmarkServeHTTPSimple(b *testing.B) {
  function BenchmarkServeHTTPLargeFile (line 613) | func BenchmarkServeHTTPLargeFile(b *testing.B) {

FILE: connection/metrics.go
  constant MetricsNamespace (line 10) | MetricsNamespace = "cloudflared"
  constant TunnelSubsystem (line 11) | TunnelSubsystem  = "tunnel"
  constant muxerSubsystem (line 12) | muxerSubsystem   = "muxer"
  constant configSubsystem (line 13) | configSubsystem  = "config"
  type localConfigMetrics (line 16) | type localConfigMetrics struct
  type tunnelMetrics (line 21) | type tunnelMetrics struct
    method registerServerLocation (line 149) | func (t *tunnelMetrics) registerServerLocation(connectionID, loc strin...
  function newLocalConfigMetrics (line 38) | func newLocalConfigMetrics() *localConfigMetrics {
  function initTunnelMetrics (line 70) | func initTunnelMetrics() *tunnelMetrics {
  function newTunnelMetrics (line 166) | func newTunnelMetrics() *tunnelMetrics {

FILE: connection/observer.go
  constant LogFieldConnectionID (line 14) | LogFieldConnectionID      = "connection"
  constant LogFieldLocation (line 15) | LogFieldLocation          = "location"
  constant LogFieldIPAddress (line 16) | LogFieldIPAddress         = "ip"
  constant LogFieldProtocol (line 17) | LogFieldProtocol          = "protocol"
  constant observerChannelBufferSize (line 18) | observerChannelBufferSize = 16
  type Observer (line 21) | type Observer struct
    method RegisterSink (line 45) | func (o *Observer) RegisterSink(sink EventSink) {
    method logConnecting (line 49) | func (o *Observer) logConnecting(connIndex uint8, address net.IP, prot...
    method logConnected (line 58) | func (o *Observer) logConnected(connectionID uuid.UUID, connIndex uint...
    method sendRegisteringEvent (line 70) | func (o *Observer) sendRegisteringEvent(connIndex uint8) {
    method sendConnectedEvent (line 74) | func (o *Observer) sendConnectedEvent(connIndex uint8, protocol Protoc...
    method SendURL (line 78) | func (o *Observer) SendURL(url string) {
    method SendReconnect (line 89) | func (o *Observer) SendReconnect(connIndex uint8) {
    method sendUnregisteringEvent (line 93) | func (o *Observer) sendUnregisteringEvent(connIndex uint8) {
    method SendDisconnect (line 97) | func (o *Observer) SendDisconnect(connIndex uint8) {
    method sendEvent (line 101) | func (o *Observer) sendEvent(e Event) {
    method dispatchEvents (line 110) | func (o *Observer) dispatchEvents() {
  type EventSink (line 29) | type EventSink interface
  function NewObserver (line 33) | func NewObserver(log, logTransport *zerolog.Logger) *Observer {
  type EventSinkFunc (line 124) | type EventSinkFunc
    method OnTunnelEvent (line 126) | func (f EventSinkFunc) OnTunnelEvent(event Event) {

FILE: connection/observer_test.go
  function TestSendUrl (line 14) | func TestSendUrl(t *testing.T) {
  function getCounterValue (line 24) | func getCounterValue(t *testing.T, metric *prometheus.CounterVec, val st...
  function TestRegisterServerLocation (line 31) | func TestRegisterServerLocation(t *testing.T) {
  function TestObserverEventsDontBlock (line 65) | func TestObserverEventsDontBlock(t *testing.T) {
  type eventCollectorSink (line 89) | type eventCollectorSink struct
    method OnTunnelEvent (line 94) | func (s *eventCollectorSink) OnTunnelEvent(event Event) {
    method assertSawEvent (line 100) | func (s *eventCollectorSink) assertSawEvent(t *testing.T, event Event) {

FILE: connection/protocol.go
  constant AvailableProtocolFlagMessage (line 15) | AvailableProtocolFlagMessage = "Available protocols: 'auto' - automatica...
  constant _ (line 17) | _ = "cftunnel.com"
  constant edgeH2TLSServerName (line 19) | edgeH2TLSServerName = "h2.cftunnel.com"
  constant edgeQUICServerName (line 21) | edgeQUICServerName = "quic.cftunnel.com"
  constant AutoSelectFlag (line 22) | AutoSelectFlag     = "auto"
  constant ResolveTTL (line 24) | ResolveTTL = time.Hour
  type Protocol (line 31) | type Protocol
    method fallback (line 41) | func (p Protocol) fallback() (Protocol, bool) {
    method String (line 52) | func (p Protocol) String() string {
    method TLSSettings (line 63) | func (p Protocol) TLSSettings() *TLSSettings {
  constant HTTP2 (line 35) | HTTP2 Protocol = iota
  constant QUIC (line 37) | QUIC
  type TLSSettings (line 79) | type TLSSettings struct
  type ProtocolSelector (line 84) | type ProtocolSelector interface
  type staticProtocolSelector (line 90) | type staticProtocolSelector struct
    method Current (line 94) | func (s *staticProtocolSelector) Current() Protocol {
    method Fallback (line 98) | func (s *staticProtocolSelector) Fallback() (Protocol, bool) {
  type remoteProtocolSelector (line 103) | type remoteProtocolSelector struct
    method Current (line 137) | func (s *remoteProtocolSelector) Current() Protocol {
    method Fallback (line 155) | func (s *remoteProtocolSelector) Fallback() (Protocol, bool) {
  function newRemoteProtocolSelector (line 118) | func newRemoteProtocolSelector(
  function getProtocol (line 161) | func getProtocol(protocolPool []Protocol, fetchFunc edgediscovery.Percen...
  type defaultProtocolSelector (line 178) | type defaultProtocolSelector struct
    method Current (line 191) | func (s *defaultProtocolSelector) Current() Protocol {
    method Fallback (line 197) | func (s *defaultProtocolSelector) Fallback() (Protocol, bool) {
  function newDefaultProtocolSelector (line 183) | func newDefaultProtocolSelector(
  function NewProtocolSelector (line 203) | func NewProtocolSelector(
  function switchThreshold (line 250) | func switchThreshold(accountTag string) int32 {

FILE: connection/protocol_test.go
  constant testNoTTL (line 13) | testNoTTL      = 0
  constant testAccountTag (line 14) | testAccountTag = "testAccountTag"
  function mockFetcher (line 17) | func mockFetcher(getError bool, protocolPercent ...edgediscovery.Protoco...
  type dynamicMockFetcher (line 26) | type dynamicMockFetcher struct
    method fetch (line 31) | func (dmf *dynamicMockFetcher) fetch() edgediscovery.PercentageFetcher {
  function TestNewProtocolSelector (line 37) | func TestNewProtocolSelector(t *testing.T) {
  function TestAutoProtocolSelectorRefresh (line 106) | func TestAutoProtocolSelectorRefresh(t *testing.T) {
  function TestHTTP2ProtocolSelectorRefresh (line 135) | func TestHTTP2ProtocolSelectorRefresh(t *testing.T) {
  function TestAutoProtocolSelectorNoRefreshWithToken (line 165) | func TestAutoProtocolSelectorNoRefreshWithToken(t *testing.T) {

FILE: connection/quic.go
  function DialQuic (line 21) | func DialQuic(
  function createUDPConnForConnIndex (line 50) | func createUDPConnForConnIndex(connIndex uint8, localIP net.IP, edgeIP n...
  type wrapCloseableConnQuicConnection (line 91) | type wrapCloseableConnQuicConnection struct
    method CloseWithError (line 96) | func (w *wrapCloseableConnQuicConnection) CloseWithError(errorCode qui...

FILE: connection/quic_connection.go
  constant HTTPHeaderKey (line 31) | HTTPHeaderKey = "HttpHeader"
  constant HTTPMethodKey (line 33) | HTTPMethodKey = "HttpMethod"
  constant HTTPHostKey (line 35) | HTTPHostKey = "HttpHost"
  constant HTTPStatus (line 37) | HTTPStatus = "HttpStatus"
  constant QUICMetadataFlowID (line 39) | QUICMetadataFlowID = "FlowID"
  type quicConnection (line 43) | type quicConnection struct
    method Serve (line 87) | func (q *quicConnection) Serve(ctx context.Context) error {
    method serveControlStream (line 146) | func (q *quicConnection) serveControlStream(ctx context.Context, contr...
    method Close (line 151) | func (q *quicConnection) Close() {
    method acceptStream (line 155) | func (q *quicConnection) acceptStream(ctx context.Context) error {
    method runStream (line 169) | func (q *quicConnection) runStream(quicStream quic.Stream) {
    method handleDataStream (line 189) | func (q *quicConnection) handleDataStream(ctx context.Context, stream ...
    method dispatchRequest (line 220) | func (q *quicConnection) dispatchRequest(ctx context.Context, stream *...
    method UpdateConfiguration (line 250) | func (q *quicConnection) UpdateConfiguration(ctx context.Context, vers...
  function NewTunnelConnection (line 58) | func NewTunnelConnection(
  type streamReadWriteAcker (line 256) | type streamReadWriteAcker struct
    method AckConnection (line 262) | func (s *streamReadWriteAcker) AckConnection(tracePropagation string) ...
  type httpResponseAdapter (line 276) | type httpResponseAdapter struct
    method AddTrailer (line 286) | func (hrw *httpResponseAdapter) AddTrailer(trailerName, trailerValue s...
    method WriteRespHeaders (line 290) | func (hrw *httpResponseAdapter) WriteRespHeaders(status int, header ht...
    method Write (line 303) | func (hrw *httpResponseAdapter) Write(p []byte) (int, error) {
    method Header (line 311) | func (hrw *httpResponseAdapter) Header() http.Header {
    method Flush (line 316) | func (hrw *httpResponseAdapter) Flush() {}
    method WriteHeader (line 318) | func (hrw *httpResponseAdapter) WriteHeader(status int) {
    method Hijack (line 322) | func (hrw *httpResponseAdapter) Hijack() (net.Conn, *bufio.ReadWriter,...
    method WriteErrorResponse (line 331) | func (hrw *httpResponseAdapter) WriteErrorResponse(err error) {
    method WriteConnectResponseData (line 335) | func (hrw *httpResponseAdapter) WriteConnectResponseData(respErr error...
  function newHTTPResponseAdapter (line 282) | func newHTTPResponseAdapter(s *rpcquic.RequestServerStream) httpResponse...
  function buildHTTPRequest (line 340) | func buildHTTPRequest(
  function setContentLength (line 392) | func setContentLength(req *http.Request) error {
  function isTransferEncodingChunked (line 400) | func isTransferEncodingChunked(req *http.Request) bool {
  type nopCloserReadWriter (line 408) | type nopCloserReadWriter struct
    method Read (line 421) | func (np *nopCloserReadWriter) Read(p []byte) (n int, err error) {
    method Close (line 438) | func (np *nopCloserReadWriter) Close() error {

FILE: connection/quic_connection_test.go
  function TestQUICServer (line 58) | func TestQUICServer(t *testing.T) {
  type fakeControlStream (line 189) | type fakeControlStream struct
    method ServeControlStream (line 193) | func (fakeControlStream) ServeControlStream(ctx context.Context, rw io...
    method IsStopped (line 198) | func (fakeControlStream) IsStopped() bool {
  function quicServer (line 202) | func quicServer(
  type mockOriginProxyWithRequest (line 242) | type mockOriginProxyWithRequest struct
    method ProxyHTTP (line 244) | func (moc *mockOriginProxyWithRequest) ProxyHTTP(w ResponseWriter, tr ...
    method ProxyTCP (line 510) | func (moc *mockOriginProxyWithRequest) ProxyTCP(ctx context.Context, r...
  function TestBuildHTTPRequest (line 281) | func TestBuildHTTPRequest(t *testing.T) {
  function TestServeUDPSession (line 520) | func TestServeUDPSession(t *testing.T) {
  function TestNopCloserReadWriterCloseBeforeEOF (line 556) | func TestNopCloserReadWriterCloseBeforeEOF(t *testing.T) {
  function TestNopCloserReadWriterCloseAfterEOF (line 573) | func TestNopCloserReadWriterCloseAfterEOF(t *testing.T) {
  function TestCreateUDPConnReuseSourcePort (line 594) | func TestCreateUDPConnReuseSourcePort(t *testing.T) {
  function TestTCPProxy_FlowRateLimited (line 608) | func TestTCPProxy_FlowRateLimited(t *testing.T) {
  function testCreateUDPConnReuseSourcePortForEdgeIP (line 659) | func testCreateUDPConnReuseSourcePortForEdgeIP(t *testing.T, edgeIP neti...
  function serveSession (line 690) | func serveSession(ctx context.Context, datagramConn *datagramV2Connectio...
  type closeReason (line 746) | type closeReason
  constant closedByOrigin (line 749) | closedByOrigin closeReason = iota
  constant closedByRemote (line 750) | closedByRemote
  constant closedByTimeout (line 751) | closedByTimeout
  function runRPCServer (line 754) | func runRPCServer(ctx context.Context, session quic.Connection, sessionR...
  type mockSessionRPCServer (line 775) | type mockSessionRPCServer struct
    method RegisterUdpSession (line 781) | func (s mockSessionRPCServer) RegisterUdpSession(ctx context.Context, ...
    method UnregisterUdpSession (line 785) | func (s mockSessionRPCServer) UnregisterUdpSession(ctx context.Context...
  function testTunnelConnection (line 796) | func testTunnelConnection(t *testing.T, serverAddr netip.AddrPort, index...
  type mockReaderNoopWriter (line 864) | type mockReaderNoopWriter struct
    method Write (line 868) | func (m *mockReaderNoopWriter) Write(p []byte) (n int, err error) {
    method Close (line 872) | func (m *mockReaderNoopWriter) Close() error {
  function GenerateTLSConfig (line 877) | func GenerateTLSConfig() *tls.Config {

FILE: connection/quic_datagram_v2.go
  constant demuxChanCapacity (line 34) | demuxChanCapacity = 16
  type DatagramSessionHandler (line 43) | type DatagramSessionHandler interface
  type datagramV2Connection (line 49) | type datagramV2Connection struct
    method Serve (line 100) | func (d *datagramV2Connection) Serve(ctx context.Context) error {
    method RegisterUdpSession (line 119) | func (q *datagramV2Connection) RegisterUdpSession(ctx context.Context,...
    method UnregisterUdpSession (line 196) | func (q *datagramV2Connection) UnregisterUdpSession(ctx context.Contex...
    method serveUDPSession (line 200) | func (q *datagramV2Connection) serveUDPSession(session *datagramsessio...
    method closeUDPSession (line 218) | func (q *datagramV2Connection) closeUDPSession(ctx context.Context, se...
  function NewDatagramV2Connection (line 71) | func NewDatagramV2Connection(ctx context.Context,

FILE: connection/quic_datagram_v2_test.go
  type mockQuicConnection (line 19) | type mockQuicConnection struct
    method AcceptStream (line 21) | func (m *mockQuicConnection) AcceptStream(_ context.Context) (quic.Str...
    method AcceptUniStream (line 25) | func (m *mockQuicConnection) AcceptUniStream(_ context.Context) (quic....
    method OpenStream (line 29) | func (m *mockQuicConnection) OpenStream() (quic.Stream, error) {
    method OpenStreamSync (line 33) | func (m *mockQuicConnection) OpenStreamSync(_ context.Context) (quic.S...
    method OpenUniStream (line 37) | func (m *mockQuicConnection) OpenUniStream() (quic.SendStream, error) {
    method OpenUniStreamSync (line 41) | func (m *mockQuicConnection) OpenUniStreamSync(_ context.Context) (qui...
    method LocalAddr (line 45) | func (m *mockQuicConnection) LocalAddr() net.Addr {
    method RemoteAddr (line 49) | func (m *mockQuicConnection) RemoteAddr() net.Addr {
    method CloseWithError (line 53) | func (m *mockQuicConnection) CloseWithError(_ quic.ApplicationErrorCod...
    method Context (line 57) | func (m *mockQuicConnection) Context() context.Context {
    method ConnectionState (line 61) | func (m *mockQuicConnection) ConnectionState() quic.ConnectionState {
    method SendDatagram (line 65) | func (m *mockQuicConnection) SendDatagram(_ []byte) error {
    method ReceiveDatagram (line 69) | func (m *mockQuicConnection) ReceiveDatagram(_ context.Context) ([]byt...
    method AddPath (line 73) | func (m *mockQuicConnection) AddPath(*quic.Transport) (*quic.Path, err...
  function TestRateLimitOnNewDatagramV2UDPSession (line 77) | func TestRateLimitOnNewDatagramV2UDPSession(t *testing.T) {

FILE: connection/quic_datagram_v3.go
  type datagramV3Connection (line 24) | type datagramV3Connection struct
    method Serve (line 57) | func (d *datagramV3Connection) Serve(ctx context.Context) error {
    method RegisterUdpSession (line 61) | func (d *datagramV3Connection) RegisterUdpSession(ctx context.Context,...
    method UnregisterUdpSession (line 66) | func (d *datagramV3Connection) UnregisterUdpSession(ctx context.Contex...
  function NewDatagramV3Connection (line 33) | func NewDatagramV3Connection(ctx context.Context,

FILE: connection/tunnelsforha.go
  type tunnelsForHA (line 11) | type tunnelsForHA struct
    method AddTunnelID (line 35) | func (t *tunnelsForHA) AddTunnelID(haConn uint8, tunnelID string) {
    method String (line 46) | func (t *tunnelsForHA) String() string {
  function newTunnelsForHA (line 18) | func newTunnelsForHA() tunnelsForHA {

FILE: credentials/credentials.go
  constant logFieldOriginCertPath (line 11) | logFieldOriginCertPath = "originCertPath"
  constant FedEndpoint (line 12) | FedEndpoint            = "fed"
  constant FedRampBaseApiURL (line 13) | FedRampBaseApiURL      = "https://api.fed.cloudflare.com/client/v4"
  constant FedRampHostname (line 14) | FedRampHostname        = "management.fed.argotunnel.com"
  type User (line 17) | type User struct
    method AccountID (line 22) | func (c User) AccountID() string {
    method Endpoint (line 26) | func (c User) Endpoint() string {
    method ZoneID (line 30) | func (c User) ZoneID() string {
    method APIToken (line 34) | func (c User) APIToken() string {
    method CertPath (line 38) | func (c User) CertPath() string {
    method IsFEDEndpoint (line 42) | func (c User) IsFEDEndpoint() bool {
    method Client (line 47) | func (c *User) Client(apiURL string, userAgent string, log *zerolog.Lo...
  function Read (line 66) | func Read(originCertPath string, log *zerolog.Logger) (*User, error) {

FILE: credentials/credentials_test.go
  function TestCredentialsRead (line 12) | func TestCredentialsRead(t *testing.T) {
  function TestCredentialsClient (line 26) | func TestCredentialsClient(t *testing.T) {

FILE: credentials/origin_cert.go
  constant DefaultCredentialFile (line 19) | DefaultCredentialFile = "cert.pem"
  type OriginCert (line 22) | type OriginCert struct
    method UnmarshalJSON (line 29) | func (oc *OriginCert) UnmarshalJSON(data []byte) error {
    method EncodeOriginCert (line 62) | func (cert *OriginCert) EncodeOriginCert() ([]byte, error) {
  function FindDefaultOriginCertPath (line 48) | func FindDefaultOriginCertPath() string {
  function DecodeOriginCert (line 58) | func DecodeOriginCert(blocks []byte) (*OriginCert, error) {
  function decodeOriginCert (line 83) | func decodeOriginCert(blocks []byte) (*OriginCert, error) {
  function readOriginCert (line 113) | func readOriginCert(originCertPath string) ([]byte, error) {
  function FindOriginCert (line 123) | func FindOriginCert(originCertPath string, log *zerolog.Logger) (string,...
  function fileExists (line 153) | func fileExists(path string) bool {

FILE: credentials/origin_cert_test.go
  constant originCertFile (line 16) | originCertFile = "cert.pem"
  function TestLoadOriginCert (line 21) | func TestLoadOriginCert(t *testing.T) {
  function TestJSONArgoTunnelTokenEmpty (line 33) | func TestJSONArgoTunnelTokenEmpty(t *testing.T) {
  function TestJSONArgoTunnelToken (line 41) | func TestJSONArgoTunnelToken(t *testing.T) {
  function CloudflareTunnelTokenTest (line 51) | func CloudflareTunnelTokenTest(t *testing.T, path string) {
  function TestFindOriginCert_Valid (line 62) | func TestFindOriginCert_Valid(t *testing.T) {
  function TestFindOriginCert_Missing (line 73) | func TestFindOriginCert_Missing(t *testing.T) {
  function TestEncodeDecodeOriginCert (line 80) | func TestEncodeDecodeOriginCert(t *testing.T) {
  function TestEncodeDecodeNilOriginCert (line 98) | func TestEncodeDecodeNilOriginCert(t *testing.T) {

FILE: datagramsession/event.go
  type registerSessionEvent (line 11) | type registerSessionEvent struct
  function newRegisterSessionEvent (line 17) | func newRegisterSessionEvent(sessionID uuid.UUID, originProxy io.ReadWri...
  type unregisterSessionEvent (line 26) | type unregisterSessionEvent struct
  type errClosedSession (line 33) | type errClosedSession struct
    method Error (line 38) | func (sc *errClosedSession) Error() string {

FILE: datagramsession/manager.go
  constant requestChanCapacity (line 18) | requestChanCapacity = 16
  constant defaultReqTimeout (line 19) | defaultReqTimeout   = time.Second * 5
  function FormatSessionID (line 27) | func FormatSessionID(sessionID uuid.UUID) string {
  type Manager (line 34) | type Manager interface
  type manager (line 45) | type manager struct
    method UpdateLogger (line 70) | func (m *manager) UpdateLogger(log *zerolog.Logger) {
    method Serve (line 75) | func (m *manager) Serve(ctx context.Context) error {
    method shutdownSessions (line 93) | func (m *manager) shutdownSessions(err error) {
    method RegisterSession (line 110) | func (m *manager) RegisterSession(ctx context.Context, sessionID uuid....
    method registerSession (line 128) | func (m *manager) registerSession(ctx context.Context, registration *r...
    method newSession (line 135) | func (m *manager) newSession(id uuid.UUID, dstConn io.ReadWriteCloser)...
    method UnregisterSession (line 152) | func (m *manager) UnregisterSession(ctx context.Context, sessionID uui...
    method unregisterSession (line 173) | func (m *manager) unregisterSession(unregistration *unregisterSessionE...
    method sendToSession (line 182) | func (m *manager) sendToSession(datagram *packet.Session) {
  function NewManager (line 57) | func NewManager(log *zerolog.Logger, sendF transportSender, receiveChan ...

FILE: datagramsession/manager_test.go
  function TestManagerServe (line 25) | func TestManagerServe(t *testing.T) {
  function TestTimeout (line 111) | func TestTimeout(t *testing.T) {
  function TestUnregisterSessionCloseSession (line 129) | func TestUnregisterSessionCloseSession(t *testing.T) {
  function TestManagerCtxDoneCloseSessions (line 168) | func TestManagerCtxDoneCloseSessions(t *testing.T) {
  type mockOrigin (line 203) | type mockOrigin struct
    method serve (line 210) | func (mo *mockOrigin) serve() error {
  function testPayload (line 232) | func testPayload(sessionID uuid.UUID) []byte {
  function testResponse (line 236) | func testResponse(msg []byte) []byte {
  type mockQUICTransport (line 240) | type mockQUICTransport struct
    method MuxSession (line 244) | func (me *mockQUICTransport) MuxSession(session *packet.Session) error {
  type mockEyeballSession (line 250) | type mockEyeballSession struct
    method serve (line 258) | func (me *mockEyeballSession) serve(ctx context.Context, requestChan c...

FILE: datagramsession/metrics.go
  constant namespace (line 8) | namespace = "cloudflared"
  function init (line 26) | func init() {
  function incrementUDPSessions (line 33) | func incrementUDPSessions() {
  function decrementUDPActiveSessions (line 38) | func decrementUDPActiveSessions() {

FILE: datagramsession/session.go
  constant defaultCloseIdleAfter (line 18) | defaultCloseIdleAfter = time.Second * 210
  function SessionIdleErr (line 21) | func SessionIdleErr(timeout time.Duration) error {
  type transportSender (line 25) | type transportSender
  type ErrVithVariableSeverity (line 28) | type ErrVithVariableSeverity interface
  type Session (line 42) | type Session struct
    method Serve (line 52) | func (s *Session) Serve(ctx context.Context, closeAfterIdle time.Durat...
    method waitForCloseCondition (line 83) | func (s *Session) waitForCloseCondition(ctx context.Context, closeAfte...
    method dstToTransport (line 113) | func (s *Session) dstToTransport(buffer []byte) (closeSession bool, er...
    method transportToDst (line 129) | func (s *Session) transportToDst(payload []byte) (int, error) {
    method markActive (line 140) | func (s *Session) markActive() {
    method close (line 147) | func (s *Session) close(err *errClosedSession) {

FILE: datagramsession/session_test.go
  function TestSessionCtxDone (line 23) | func TestSessionCtxDone(t *testing.T) {
  function TestCloseSession (line 28) | func TestCloseSession(t *testing.T) {
  function TestCloseIdle (line 33) | func TestCloseIdle(t *testing.T) {
  function testSessionReturns (line 37) | func testSessionReturns(t *testing.T, closeBy closeMethod, closeAfterIdl...
  type closeMethod (line 98) | type closeMethod
  constant closeByContext (line 101) | closeByContext closeMethod = iota
  constant closeByCallingClose (line 102) | closeByCallingClose
  constant closeByTimeout (line 103) | closeByTimeout
  function TestWriteToDstSessionPreventClosed (line 106) | func TestWriteToDstSessionPreventClosed(t *testing.T) {
  function TestReadFromDstSessionPreventClosed (line 110) | func TestReadFromDstSessionPreventClosed(t *testing.T) {
  function testActiveSessionNotClosed (line 114) | func testActiveSessionNotClosed(t *testing.T, readFromDst bool, writeToD...
  function TestMarkActiveNotBlocking (line 185) | func TestMarkActiveNotBlocking(t *testing.T) {
  function TestZeroBytePayload (line 201) | func TestZeroBytePayload(t *testing.T) {
  type mockTransportSender (line 235) | type mockTransportSender struct
    method muxSession (line 247) | func (mts *mockTransportSender) muxSession(session *packet.Session) er...
  function newMockTransportSender (line 240) | func newMockTransportSender(expectedSessionID uuid.UUID, expectedPayload...
  type sendOnceTransportSender (line 257) | type sendOnceTransportSender struct
    method muxSession (line 262) | func (sots *sendOnceTransportSender) muxSession(session *packet.Sessio...

FILE: diagnostic/client.go
  type httpClient (line 15) | type httpClient struct
    method SetBaseURL (line 35) | func (client *httpClient) SetBaseURL(baseURL *url.URL) {
    method GET (line 39) | func (client *httpClient) GET(ctx context.Context, endpoint string) (*...
    method GetLogConfiguration (line 66) | func (client *httpClient) GetLogConfiguration(ctx context.Context) (*L...
    method GetMemoryDump (line 104) | func (client *httpClient) GetMemoryDump(ctx context.Context, writer io...
    method GetGoroutineDump (line 113) | func (client *httpClient) GetGoroutineDump(ctx context.Context, writer...
    method GetTunnelState (line 122) | func (client *httpClient) GetTunnelState(ctx context.Context) (*Tunnel...
    method GetSystemInformation (line 138) | func (client *httpClient) GetSystemInformation(ctx context.Context, wr...
    method GetMetrics (line 147) | func (client *httpClient) GetMetrics(ctx context.Context, writer io.Wr...
    method GetTunnelConfiguration (line 156) | func (client *httpClient) GetTunnelConfiguration(ctx context.Context, ...
    method GetCliConfiguration (line 165) | func (client *httpClient) GetCliConfiguration(ctx context.Context, wri...
  function NewHTTPClient (line 20) | func NewHTTPClient() *httpClient {
  type LogConfiguration (line 60) | type LogConfiguration struct
  function copyToWriter (line 174) | func copyToWriter(response *http.Response, writer io.Writer) error {
  function copyJSONToWriter (line 185) | func copyJSONToWriter(response *http.Response, writer io.Writer) error {
  type HTTPClient (line 207) | type HTTPClient interface

FILE: diagnostic/consts.go
  constant defaultCollectorTimeout (line 6) | defaultCollectorTimeout    = time.Second * 10
  constant collectorField (line 7) | collectorField             = "collector"
  constant systemCollectorName (line 8) | systemCollectorName        = "system"
  constant tunnelStateCollectorName (line 9) | tunnelStateCollectorName   = "tunnelState"
  constant configurationCollectorName (line 10) | configurationCollectorName = "configuration"
  constant defaultTimeout (line 11) | defaultTimeout             = 15 * time.Second
  constant twoWeeksOffset (line 12) | twoWeeksOffset             = -14 * 24 * time.Hour
  constant logFilename (line 13) | logFilename                = "cloudflared_logs.txt"
  constant configurationKeyUID (line 14) | configurationKeyUID        = "uid"
  constant tailMaxNumberOfLines (line 15) | tailMaxNumberOfLines       = "10000"
  constant cliConfigurationEndpoint (line 18) | cliConfigurationEndpoint    = "/diag/configuration"
  constant tunnelStateEndpoint (line 19) | tunnelStateEndpoint         = "/diag/tunnel"
  constant systemInformationEndpoint (line 20) | systemInformationEndpoint   = "/diag/system"
  constant memoryDumpEndpoint (line 21) | memoryDumpEndpoint          = "debug/pprof/heap"
  constant goroutineDumpEndpoint (line 22) | goroutineDumpEndpoint       = "debug/pprof/goroutine"
  constant metricsEndpoint (line 23) | metricsEndpoint             = "metrics"
  constant tunnelConfigurationEndpoint (line 24) | tunnelConfigurationEndpoint = "/config"
  constant systemInformationBaseName (line 26) | systemInformationBaseName = "systeminformation.json"
  constant metricsBaseName (line 27) | metricsBaseName           = "metrics.txt"
  constant zipName (line 28) | zipName                   = "cloudflared-diag"
  constant heapPprofBaseName (line 29) | heapPprofBaseName         = "heap.pprof"
  constant goroutinePprofBaseName (line 30) | goroutinePprofBaseName    = "goroutine.pprof"
  constant networkBaseName (line 31) | networkBaseName           = "network.json"
  constant rawNetworkBaseName (line 32) | rawNetworkBaseName        = "raw-network.txt"
  constant tunnelStateBaseName (line 33) | tunnelStateBaseName       = "tunnelstate.json"
  constant cliConfigurationBaseName (line 34) | cliConfigurationBaseName  = "cli-configuration.json"
  constant configurationBaseName (line 35) | configurationBaseName     = "configuration.json"
  constant taskResultBaseName (line 36) | taskResultBaseName        = "task-result.json"

FILE: diagnostic/diagnostic.go
  constant taskSuccess (line 22) | taskSuccess                  = "success"
  constant taskFailure (line 23) | taskFailure                  = "failure"
  constant jobReportName (line 24) | jobReportName                = "job report"
  constant tunnelStateJobName (line 25) | tunnelStateJobName           = "tunnel state"
  constant systemInformationJobName (line 26) | systemInformationJobName     = "system information"
  constant goroutineJobName (line 27) | goroutineJobName             = "goroutine profile"
  constant heapJobName (line 28) | heapJobName                  = "heap profile"
  constant metricsJobName (line 29) | metricsJobName               = "metrics"
  constant logInformationJobName (line 30) | logInformationJobName        = "log information"
  constant rawNetworkInformationJobName (line 31) | rawNetworkInformationJobName = "raw network information"
  constant networkInformationJobName (line 32) | networkInformationJobName    = "network information"
  constant cliConfigurationJobName (line 33) | cliConfigurationJobName      = "cli configuration"
  constant configurationJobName (line 34) | configurationJobName         = "configuration"
  type taskResult (line 38) | type taskResult struct
    method MarshalJSON (line 44) | func (result taskResult) MarshalJSON() ([]byte, error) {
  type networkCollectionResult (line 56) | type networkCollectionResult struct
  type collectToWriterFunc (line 65) | type collectToWriterFunc
  type collectFunc (line 68) | type collectFunc
  type collectJob (line 72) | type collectJob struct
  type Toggles (line 80) | type Toggles struct
  type Options (line 90) | type Options struct
  function collectLogs (line 98) | func collectLogs(
  function collectNetworkResultRoutine (line 145) | func collectNetworkResultRoutine(
  function gatherNetworkInformation (line 169) | func gatherNetworkInformation(ctx context.Context) map[string]networkCol...
  function networkInformationCollectors (line 209) | func networkInformationCollectors() (rawNetworkCollector, jsonNetworkCol...
  function rawNetworkInformationWriter (line 231) | func rawNetworkInformationWriter(resultMap map[string]networkCollectionR...
  function jsonNetworkInformationWriter (line 262) | func jsonNetworkInformationWriter(resultMap map[string]networkCollection...
  function collectFromEndpointAdapter (line 291) | func collectFromEndpointAdapter(collect collectToWriterFunc, fileName st...
  function tunnelStateCollectEndpointAdapter (line 308) | func tunnelStateCollectEndpointAdapter(client HTTPClient, tunnel *Tunnel...
  function resolveInstanceBaseURL (line 342) | func resolveInstanceBaseURL(
  function createJobs (line 368) | func createJobs(
  function createTaskReport (line 438) | func createTaskReport(taskReport map[string]taskResult) (string, error) {
  function runJobs (line 455) | func runJobs(ctx context.Context, jobs []collectJob, log *zerolog.Logger...
  function RunDiagnostic (line 503) | func RunDiagnostic(

FILE: diagnostic/diagnostic_utils.go
  function CreateDiagnosticZipFile (line 23) | func CreateDiagnosticZipFile(base string, paths []string) (zipFileName s...
  type AddressableTunnelState (line 77) | type AddressableTunnelState struct
  function findMetricsServerPredicate (line 82) | func findMetricsServerPredicate(tunnelID, connectorID uuid.UUID) func(st...
  function FindMetricsServer (line 107) | func FindMetricsServer(
  function newFormattedEncoder (line 144) | func newFormattedEncoder(w io.Writer) *json.Encoder {

FILE: diagnostic/diagnostic_utils_test.go
  function helperCreateServer (line 22) | func helperCreateServer(t *testing.T, listeners *gracenet.Net, tunnelID ...
  function TestFindMetricsServer_WhenSingleServerIsRunning_ReturnState (line 59) | func TestFindMetricsServer_WhenSingleServerIsRunning_ReturnState(t *test...
  function TestFindMetricsServer_WhenMultipleServerAreRunning_ReturnError (line 91) | func TestFindMetricsServer_WhenMultipleServerAreRunning_ReturnError(t *t...
  function TestFindMetricsServer_WhenNoInstanceIsRuning_ReturnError (line 137) | func TestFindMetricsServer_WhenNoInstanceIsRuning_ReturnError(t *testing...

FILE: diagnostic/handlers.go
  type Handler (line 17) | type Handler struct
    method InstallEndpoints (line 56) | func (handler *Handler) InstallEndpoints(router *http.ServeMux) {
    method SystemHandler (line 67) | func (handler *Handler) SystemHandler(writer http.ResponseWriter, requ...
    method TunnelStateHandler (line 99) | func (handler *Handler) TunnelStateHandler(writer http.ResponseWriter,...
    method ConfigurationHandler (line 120) | func (handler *Handler) ConfigurationHandler(writer http.ResponseWrite...
  function NewDiagnosticHandler (line 28) | func NewDiagnosticHandler(
  type SystemInformationResponse (line 62) | type SystemInformationResponse struct
  type TunnelState (line 92) | type TunnelState struct
  function writeResponse (line 137) | func writeResponse(w http.ResponseWriter, bytes []byte, logger *zerolog....

FILE: diagnostic/handlers_test.go
  type SystemCollectorMock (line 23) | type SystemCollectorMock struct
    method Collect (line 51) | func (collector *SystemCollectorMock) Collect(context.Context) (*diagn...
  constant systemInformationKey (line 29) | systemInformationKey = "sikey"
  constant errorKey (line 30) | errorKey             = "errkey"
  function newTrackerFromConns (line 33) | func newTrackerFromConns(t *testing.T, connections []tunnelstate.Indexed...
  function TestSystemHandler (line 55) | func TestSystemHandler(t *testing.T) {
  function TestTunnelStateHandler (line 108) | func TestTunnelStateHandler(t *testing.T) {
  function TestConfigurationHandler (line 170) | func TestConfigurationHandler(t *testing.T) {

FILE: diagnostic/log_collector.go
  type LogInformation (line 10) | type LogInformation struct
  function NewLogInformation (line 16) | func NewLogInformation(
  type LogCollector (line 28) | type LogCollector interface

FILE: diagnostic/log_collector_docker.go
  type DockerLogCollector (line 12) | type DockerLogCollector struct
    method Collect (line 22) | func (collector *DockerLogCollector) Collect(ctx context.Context) (*Lo...
  function NewDockerLogCollector (line 16) | func NewDockerLogCollector(containerID string) *DockerLogCollector {

FILE: diagnostic/log_collector_host.go
  constant linuxManagedLogsPath (line 13) | linuxManagedLogsPath          = "/var/log/cloudflared.err"
  constant darwinManagedLogsPath (line 14) | darwinManagedLogsPath         = "/Library/Logs/com.cloudflare.cloudflare...
  constant linuxServiceConfigurationPath (line 15) | linuxServiceConfigurationPath = "/etc/systemd/system/cloudflared.service"
  constant linuxSystemdPath (line 16) | linuxSystemdPath              = "/run/systemd/system"
  type HostLogCollector (line 19) | type HostLogCollector struct
    method Collect (line 76) | func (collector *HostLogCollector) Collect(ctx context.Context) (*LogI...
  function NewHostLogCollector (line 23) | func NewHostLogCollector(client HTTPClient) *HostLogCollector {
  function extractLogsFromJournalCtl (line 29) | func extractLogsFromJournalCtl(ctx context.Context) (*LogInformation, er...
  function getServiceLogPath (line 51) | func getServiceLogPath() (string, error) {

FILE: diagnostic/log_collector_kubernetes.go
  type KubernetesLogCollector (line 12) | type KubernetesLogCollector struct
    method Collect (line 24) | func (collector *KubernetesLogCollector) Collect(ctx context.Context) ...
  function NewKubernetesLogCollector (line 17) | func NewKubernetesLogCollector(containerID, pod string) *KubernetesLogCo...

FILE: diagnostic/log_collector_utils.go
  function PipeCommandOutputToFile (line 11) | func PipeCommandOutputToFile(command *exec.Cmd, outputHandle *os.File) (...
  function CopyFilesFromDirectory (line 69) | func CopyFilesFromDirectory(path string) (string, error) {

FILE: diagnostic/network/collector.go
  constant MicrosecondsFactor (line 9) | MicrosecondsFactor = 1000.0
  type IPVersion (line 14) | type IPVersion
  constant V4 (line 17) | V4 IPVersion = iota
  constant V6 (line 18) | V6 IPVersion = iota
  type Hop (line 21) | type Hop struct
  type TraceOptions (line 27) | type TraceOptions struct
  function NewTimeoutHop (line 34) | func NewTimeoutHop(
  function NewHop (line 47) | func NewHop(hop uint8, domain string, rtts []time.Duration) *Hop {
  function NewTraceOptions (line 55) | func NewTraceOptions(
  type NetworkCollector (line 69) | type NetworkCollector interface

FILE: diagnostic/network/collector_unix.go
  type NetworkCollectorImpl (line 14) | type NetworkCollectorImpl struct
    method Collect (line 16) | func (tracer *NetworkCollectorImpl) Collect(ctx context.Context, optio...
  function DecodeLine (line 40) | func DecodeLine(text string) (*Hop, error) {

FILE: diagnostic/network/collector_unix_test.go
  function TestDecode (line 16) | func TestDecode(t *testing.T) {

FILE: diagnostic/network/collector_utils.go
  type DecodeLineFunc (line 11) | type DecodeLineFunc
  function decodeNetworkOutputToFile (line 13) | func decodeNetworkOutputToFile(command *exec.Cmd, decodeLine DecodeLineF...
  function Decode (line 45) | func Decode(reader io.Reader, decodeLine DecodeLineFunc) ([]*Hop, error) {

FILE: diagnostic/network/collector_windows.go
  type NetworkCollectorImpl (line 14) | type NetworkCollectorImpl struct
    method Collect (line 16) | func (tracer *NetworkCollectorImpl) Collect(ctx context.Context, optio...
  function DecodeLine (line 37) | func DecodeLine(text string) (*Hop, error) {

FILE: diagnostic/network/collector_windows_test.go
  function TestDecode (line 16) | func TestDecode(t *testing.T) {

FILE: diagnostic/system_collector.go
  type SystemInformationError (line 10) | type SystemInformationError struct
    method Error (line 15) | func (err SystemInformationError) Error() string {
    method MarshalJSON (line 19) | func (err SystemInformationError) MarshalJSON() ([]byte, error) {
  type SystemInformationGeneralError (line 28) | type SystemInformationGeneralError struct
    method Error (line 35) | func (err SystemInformationGeneralError) Error() string {
    method MarshalJSON (line 58) | func (err SystemInformationGeneralError) MarshalJSON() ([]byte, error) {
  type DiskVolumeInformation (line 81) | type DiskVolumeInformation struct
  function NewDiskVolumeInformation (line 87) | func NewDiskVolumeInformation(name string, maximum, current uint64) *Dis...
  type SystemInformation (line 95) | type SystemInformation struct
  function NewSystemInformation (line 111) | func NewSystemInformation(
  type SystemCollector (line 143) | type SystemCollector interface

FILE: diagnostic/system_collector_linux.go
  type SystemCollectorImpl (line 14) | type SystemCollectorImpl struct
    method Collect (line 26) | func (collector *SystemCollectorImpl) Collect(ctx context.Context) (*S...
  function NewSystemCollectorImpl (line 18) | func NewSystemCollectorImpl(
  function collectMemoryInformation (line 96) | func collectMemoryInformation(ctx context.Context) (*MemoryInformation, ...
  function collectFileDescriptorInformation (line 130) | func collectFileDescriptorInformation(ctx context.Context) (*FileDescrip...

FILE: diagnostic/system_collector_macos.go
  type SystemCollectorImpl (line 13) | type SystemCollectorImpl struct
    method Collect (line 25) | func (collector *SystemCollectorImpl) Collect(ctx context.Context) (*S...
  function NewSystemCollectorImpl (line 17) | func NewSystemCollectorImpl(
  function collectFileDescriptorInformation (line 101) | func collectFileDescriptorInformation(ctx context.Context) (
  function collectMemoryInformation (line 134) | func collectMemoryInformation(ctx context.Context) (

FILE: diagnostic/system_collector_test.go
  function TestParseMemoryInformationFromKV (line 14) | func TestParseMemoryInformationFromKV(t *testing.T) {
  function TestParseUnameOutput (line 123) | func TestParseUnameOutput(t *testing.T) {
  function TestParseFileDescriptorInformationFromKV (line 186) | func TestParseFileDescriptorInformationFromKV(t *testing.T) {
  function TestParseSysctlFileDescriptorInformation (line 240) | func TestParseSysctlFileDescriptorInformation(t *testing.T) {
  function TestParseWinOperatingSystemInfo (line 283) | func TestParseWinOperatingSystemInfo(t *testing.T) {
  function TestParseDiskVolumeInformationOutput (line 357) | func TestParseDiskVolumeInformationOutput(t *testing.T) {

FILE: diagnostic/system_collector_utils.go
  function findColonSeparatedPairs (line 13) | func findColonSeparatedPairs[V any](output string, keys []string, mapper...
  function ParseDiskVolumeInformationOutput (line 64) | func ParseDiskVolumeInformationOutput(output string, skipLines int, scal...
  type OsInfo (line 117) | type OsInfo struct
  function ParseUnameOutput (line 125) | func ParseUnameOutput(output string, system string) (*OsInfo, error) {
  function ParseWinOperatingSystemInfo (line 163) | func ParseWinOperatingSystemInfo(
  type FileDescriptorInformation (line 208) | type FileDescriptorInformation struct
  function ParseSysctlFileDescriptorInformation (line 213) | func ParseSysctlFileDescriptorInformation(output string) (*FileDescripto...
  function ParseFileDescriptorInformationFromKV (line 249) | func ParseFileDescriptorInformationFromKV(
  type MemoryInformation (line 281) | type MemoryInformation struct
  function ParseMemoryInformationFromKV (line 286) | func ParseMemoryInformationFromKV(
  function RawSystemInformation (line 309) | func RawSystemInformation(osInfoRaw string, memoryInfoRaw string, fdInfo...
  function collectDiskVolumeInformationUnix (line 339) | func collectDiskVolumeInformationUnix(ctx context.Context) ([]*DiskVolum...
  function collectOSInformationUnix (line 359) | func collectOSInformationUnix(ctx context.Context) (*OsInfo, string, err...

FILE: diagnostic/system_collector_windows.go
  constant kiloBytesScale (line 13) | kiloBytesScale = 1.0 / 1024
  type SystemCollectorImpl (line 15) | type SystemCollectorImpl struct
    method Collect (line 27) | func (collector *SystemCollectorImpl) Collect(ctx context.Context) (*S...
  function NewSystemCollectorImpl (line 19) | func NewSystemCollectorImpl(
  function collectMemoryInformation (line 92) | func collectMemoryInformation(ctx context.Context) (*MemoryInformation, ...
  function collectDiskVolumeInformation (line 129) | func collectDiskVolumeInformation(ctx context.Context) ([]*DiskVolumeInf...
  function collectOSInformation (line 152) | func collectOSInformation(ctx context.Context) (*OsInfo, string, error) {

FILE: edgediscovery/allregions/address.go
  type AddrSet (line 5) | type AddrSet
    method AddrUsedBy (line 9) | func (a AddrSet) AddrUsedBy(connID int) *EdgeAddr {
    method AvailableAddrs (line 19) | func (a AddrSet) AvailableAddrs() int {
    method GetUnusedIP (line 31) | func (a AddrSet) GetUnusedIP(excluding *EdgeAddr) *EdgeAddr {
    method Use (line 41) | func (a AddrSet) Use(addr *EdgeAddr, connID int) {
    method GetAnyAddress (line 49) | func (a AddrSet) GetAnyAddress() *EdgeAddr {
    method GiveBack (line 58) | func (a AddrSet) GiveBack(addr *EdgeAddr) (ok bool) {

FILE: edgediscovery/allregions/address_test.go
  function TestAddrSet_AddrUsedBy (line 8) | func TestAddrSet_AddrUsedBy(t *testing.T) {
  function TestAddrSet_AvailableAddrs (line 64) | func TestAddrSet_AvailableAddrs(t *testing.T) {
  function TestAddrSet_GetUnusedIP (line 112) | func TestAddrSet_GetUnusedIP(t *testing.T) {
  function TestAddrSet_GiveBack (line 172) | func TestAddrSet_GiveBack(t *testing.T) {
  function TestAddrSet_GetAnyAddress (line 214) | func TestAddrSet_GetAnyAddress(t *testing.T) {

FILE: edgediscovery/allregions/discovery.go
  constant srvService (line 18) | srvService = "v2-origintunneld"
  constant srvProto (line 19) | srvProto   = "tcp"
  constant srvName (line 20) | srvName    = "argotunnel.com"
  constant dotServerName (line 24) | dotServerName = "cloudflare-dns.com"
  constant dotServerAddr (line 25) | dotServerAddr = "1.1.1.1:853"
  constant dotTimeout (line 26) | dotTimeout    = 15 * time.Second
  constant logFieldAddress (line 28) | logFieldAddress = "address"
  type ConfigIPVersion (line 38) | type ConfigIPVersion
    method String (line 46) | func (c ConfigIPVersion) String() string {
  constant Auto (line 41) | Auto     ConfigIPVersion = 2
  constant IPv4Only (line 42) | IPv4Only ConfigIPVersion = 4
  constant IPv6Only (line 43) | IPv6Only ConfigIPVersion = 6
  type EdgeIPVersion (line 60) | type EdgeIPVersion
    method String (line 68) | func (c EdgeIPVersion) String() string {
  constant V4 (line 63) | V4 EdgeIPVersion = 4
  constant V6 (line 64) | V6 EdgeIPVersion = 6
  type EdgeAddr (line 80) | type EdgeAddr struct
  function edgeDiscovery (line 112) | func edgeDiscovery(log *zerolog.Logger, srvService string) ([][]*EdgeAdd...
  function lookupSRVWithDOT (line 153) | func lookupSRVWithDOT(srvService string, srvProto string, srvName string...
  function resolveSRV (line 172) | func resolveSRV(srv *net.SRV) ([]*EdgeAddr, error) {
  function ResolveAddrs (line 197) | func ResolveAddrs(addrs []string, log *zerolog.Logger) (resolved []*Edge...

FILE: edgediscovery/allregions/discovery_test.go
  method String (line 11) | func (ea *EdgeAddr) String() string {
  function TestEdgeDiscovery (line 15) | func TestEdgeDiscovery(t *testing.T) {

FILE: edgediscovery/allregions/mocks_for_test.go
  type mockAddrs (line 121) | type mockAddrs struct
    method Generate (line 158) | func (mockAddrs) Generate(rand *rand.Rand, size int) reflect.Value {
  function newMockAddrs (line 130) | func newMockAddrs(port uint16, numRegions uint8, numAddrsPerRegion uint8...
  function mockNetLookupSRV (line 168) | func mockNetLookupSRV(
  function mockNetLookupIP (line 187) | func mockNetLookupIP(

FILE: edgediscovery/allregions/region.go
  constant timeoutDuration (line 6) | timeoutDuration = 10 * time.Minute
  type Region (line 11) | type Region struct
    method AddrUsedBy (line 77) | func (r *Region) AddrUsedBy(connID int) *EdgeAddr {
    method AvailableAddrs (line 86) | func (r Region) AvailableAddrs() int {
    method AssignAnyAddress (line 93) | func (r Region) AssignAnyAddress(connID int, excluding *EdgeAddr) *Edg...
    method GetAnyAddress (line 102) | func (r Region) GetAnyAddress() *EdgeAddr {
    method GiveBack (line 108) | func (r *Region) GiveBack(addr *EdgeAddr, hasConnectivityError bool) (...
  function NewRegion (line 21) | func NewRegion(addrs []*EdgeAddr, overrideIPVersion ConfigIPVersion) Reg...
  function activatePrimary (line 151) | func activatePrimary(r *Region) {

FILE: edgediscovery/allregions/region_test.go
  function makeAddrSet (line 11) | func makeAddrSet(addrs []*EdgeAddr) AddrSet {
  function TestRegion_New (line 19) | func TestRegion_New(t *testing.T) {
  function TestRegion_AnyAddress_EmptyActiveSet (line 103) | func TestRegion_AnyAddress_EmptyActiveSet(t *testing.T) {
  function TestRegion_AssignAnyAddress_FullyUsedActiveSet (line 131) | func TestRegion_AssignAnyAddress_FullyUsedActiveSet(t *testing.T) {
  function TestRegion_GiveBack_NoConnectivityError (line 227) | func TestRegion_GiveBack_NoConnectivityError(t *testing.T) {
  function TestRegion_GiveBack_ForeignAddr (line 238) | func TestRegion_GiveBack_ForeignAddr(t *testing.T) {
  function TestRegion_GiveBack_SwapPrimary (line 261) | func TestRegion_GiveBack_SwapPrimary(t *testing.T) {
  function TestRegion_GiveBack_IPv4_ResetPrimary (line 280) | func TestRegion_GiveBack_IPv4_ResetPrimary(t *testing.T) {
  function TestRegion_GiveBack_Timeout (line 327) | func TestRegion_GiveBack_Timeout(t *testing.T) {

FILE: edgediscovery/allregions/regions.go
  type Regions (line 12) | type Regions struct
    method GetAnyAddress (line 70) | func (rs *Regions) GetAnyAddress() *EdgeAddr {
    method AddrUsedBy (line 79) | func (rs *Regions) AddrUsedBy(connID int) *EdgeAddr {
    method GetUnusedAddr (line 88) | func (rs *Regions) GetUnusedAddr(excluding *EdgeAddr, connID int) *Edg...
    method AvailableAddrs (line 121) | func (rs *Regions) AvailableAddrs() int {
    method GiveBack (line 127) | func (rs *Regions) GiveBack(addr *EdgeAddr, hasConnectivityError bool)...
  function ResolveEdge (line 22) | func ResolveEdge(log *zerolog.Logger, region string, overrideIPVersion C...
  function StaticEdge (line 38) | func StaticEdge(hostnames []string, log *zerolog.Logger) (*Regions, erro...
  function NewNoResolve (line 48) | func NewNoResolve(addrs []*EdgeAddr) *Regions {
  function getAddrs (line 107) | func getAddrs(excluding *EdgeAddr, connID int, first *Region, second *Re...
  function getRegionalServiceName (line 135) | func getRegionalServiceName(region string) string {

FILE: edgediscovery/allregions/regions_test.go
  function makeRegions (line 9) | func makeRegions(addrs []*EdgeAddr, mode ConfigIPVersion) Regions {
  function TestRegions_AddrUsedBy (line 24) | func TestRegions_AddrUsedBy(t *testing.T) {
  function TestRegions_Giveback_Region1 (line 54) | func TestRegions_Giveback_Region1(t *testing.T) {
  function TestRegions_Giveback_Region2 (line 87) | func TestRegions_Giveback_Region2(t *testing.T) {
  function TestRegions_GetUnusedAddr_OneAddrLeft (line 120) | func TestRegions_GetUnusedAddr_OneAddrLeft(t *testing.T) {
  function TestRegions_GetUnusedAddr_Excluding_Region1 (line 151) | func TestRegions_GetUnusedAddr_Excluding_Region1(t *testing.T) {
  function TestRegions_GetUnusedAddr_Excluding_Region2 (line 183) | func TestRegions_GetUnusedAddr_Excluding_Region2(t *testing.T) {
  function TestNewNoResolveBalancesRegions (line 215) | func TestNewNoResolveBalancesRegions(t *testing.T) {
  function TestGetRegionalServiceName (line 240) | func TestGetRegionalServiceName(t *testing.T) {
  function RegionsIsBalanced (line 252) | func RegionsIsBalanced(t *testing.T, rs *Regions) {
  function abs (line 257) | func abs(x int) int {

FILE: edgediscovery/allregions/usedby.go
  type UsedBy (line 3) | type UsedBy struct
  function InUse (line 8) | func InUse(connID int) UsedBy {
  function Unused (line 12) | func Unused() UsedBy {

FILE: edgediscovery/dial.go
  function DialEdge (line 13) | func DialEdge(
  type DialError (line 45) | type DialError struct
    method Error (line 53) | func (e DialError) Error() string {
    method Cause (line 57) | func (e DialError) Cause() error {
  function newDialError (line 49) | func newDialError(err error, message string) error {

FILE: edgediscovery/edgediscovery.go
  constant LogFieldConnIndex (line 13) | LogFieldConnIndex = "connIndex"
  constant LogFieldIPAddress (line 14) | LogFieldIPAddress = "ip"
  type ErrNoAddressesLeft (line 19) | type ErrNoAddressesLeft struct
    method Error (line 21) | func (e ErrNoAddressesLeft) Error() string {
  type Edge (line 26) | type Edge struct
    method GetAddrForRPC (line 66) | func (ed *Edge) GetAddrForRPC() (*allregions.EdgeAddr, error) {
    method GetAddr (line 77) | func (ed *Edge) GetAddr(connIndex int) (*allregions.EdgeAddr, error) {
    method GetDifferentAddr (line 102) | func (ed *Edge) GetDifferentAddr(connIndex int, hasConnectivityError b...
    method AvailableAddrs (line 128) | func (ed *Edge) AvailableAddrs() int {
    method GiveBack (line 136) | func (ed *Edge) GiveBack(addr *allregions.EdgeAddr, hasConnectivityErr...
  function ResolveEdge (line 38) | func ResolveEdge(log *zerolog.Logger, region string, edgeIpVersion allre...
  function StaticEdge (line 50) | func StaticEdge(log *zerolog.Logger, hostnames []string) (*Edge, error) {

FILE: edgediscovery/edgediscovery_test.go
  function TestGiveBack (line 123) | func TestGiveBack(t *testing.T) {
  function TestRPCAndProxyShareSingleEdgeIP (line 139) | func TestRPCAndProxyShareSingleEdgeIP(t *testing.T) {
  function TestGetAddrForRPC (line 154) | func TestGetAddrForRPC(t *testing.T) {
  function TestOnePerRegion (line 171) | func TestOnePerRegion(t *testing.T) {
  function TestOnlyOneAddrLeft (line 193) | func TestOnlyOneAddrLeft(t *testing.T) {
  function TestNoAddrsLeft (line 213) | func TestNoAddrsLeft(t *testing.T) {
  function TestGetAddr (line 223) | func TestGetAddr(t *testing.T) {
  function TestGetDifferentAddr (line 238) | func TestGetDifferentAddr(t *testing.T) {
  function MockEdge (line 257) | func MockEdge(log *zerolog.Logger, addrs []*allregions.EdgeAddr) *Edge {

FILE: edgediscovery/mocks_for_test.go
  type mockAddrs (line 12) | type mockAddrs struct
    method Generate (line 44) | func (mockAddrs) Generate(rand *rand.Rand, size int) reflect.Value {
  function newMockAddrs (line 21) | func newMockAddrs(port uint16, numRegions uint8, numAddrsPerRegion uint8...
  function mockNetLookupSRV (line 54) | func mockNetLookupSRV(
  function mockNetLookupIP (line 73) | func mockNetLookupIP(
  type mockEdgeServiceDiscoverer (line 91) | type mockEdgeServiceDiscoverer struct
    method Addr (line 94) | func (mr *mockEdgeServiceDiscoverer) Addr() (*net.TCPAddr, error) {
    method AnyAddr (line 101) | func (mr *mockEdgeServiceDiscoverer) AnyAddr() (*net.TCPAddr, error) {
    method ReplaceAddr (line 108) | func (mr *mockEdgeServiceDiscoverer) ReplaceAddr(addr *net.TCPAddr) {}
    method MarkAddrBad (line 110) | func (mr *mockEdgeServiceDiscoverer) MarkAddrBad(addr *net.TCPAddr) {}
    method AvailableAddrs (line 112) | func (mr *mockEdgeServiceDiscoverer) AvailableAddrs() int {
    method Refresh (line 116) | func (mr *mockEdgeServiceDiscoverer) Refresh() error {

FILE: edgediscovery/protocol.go
  constant protocolRecord (line 11) | protocolRecord = "protocol-v2.argotunnel.com"
  type PercentageFetcher (line 18) | type PercentageFetcher
  type ProtocolPercent (line 21) | type ProtocolPercent struct
  type ProtocolPercents (line 27) | type ProtocolPercents
    method GetPercentage (line 30) | func (p ProtocolPercents) GetPercentage(protocol string) int32 {
  function ProtocolPercentage (line 40) | func ProtocolPercentage() (ProtocolPercents, error) {

FILE: edgediscovery/protocol_test.go
  function TestProtocolPercentage (line 9) | func TestProtocolPercentage(t *testing.T) {

FILE: features/features.go
  constant FeatureSerializedHeaders (line 6) | FeatureSerializedHeaders = "serialized_headers"
  constant FeatureQuickReconnects (line 7) | FeatureQuickReconnects   = "quick_reconnects"
  constant FeatureAllowRemoteConfig (line 8) | FeatureAllowRemoteConfig = "allow_remote_config"
  constant FeatureDatagramV2 (line 9) | FeatureDatagramV2        = "support_datagram_v2"
  constant FeaturePostQuantum (line 10) | FeaturePostQuantum       = "postquantum"
  constant FeatureQUICSupportEOF (line 11) | FeatureQUICSupportEOF    = "support_quic_eof"
  constant FeatureManagementLogs (line 12) | FeatureManagementLogs    = "management_logs"
  constant FeatureDatagramV3_2 (line 13) | FeatureDatagramV3_2      = "support_datagram_v3_2"
  constant DeprecatedFeatureDatagramV3 (line 15) | DeprecatedFeatureDatagramV3   = "support_datagram_v3"
  constant DeprecatedFeatureDatagramV3_1 (line 16) | DeprecatedFeatureDatagramV3_1 = "support_datagram_v3_1"
  type staticFeatures (line 34) | type staticFeatures struct
  type FeatureSnapshot (line 38) | type FeatureSnapshot struct
  type PostQuantumMode (line 47) | type PostQuantumMode
  constant PostQuantumPrefer (line 51) | PostQuantumPrefer PostQuantumMode = iota
  constant PostQuantumStrict (line 54) | PostQuantumStrict
  type DatagramVersion (line 57) | type DatagramVersion
  constant DatagramV2 (line 61) | DatagramV2 DatagramVersion = FeatureDatagramV2
  constant DatagramV3 (line 63) | DatagramV3 DatagramVersion = FeatureDatagramV3_2
  function dedupAndRemoveFeatures (line 67) | func dedupAndRemoveFeatures(features []string) []string {

FILE: features/selector.go
  constant featureSelectorHostname (line 17) | featureSelectorHostname = "cfd-features.argotunnel.com"
  constant lookupTimeout (line 18) | lookupTimeout           = time.Second * 10
  constant defaultLookupFreq (line 19) | defaultLookupFreq       = time.Hour
  type featuresRecord (line 25) | type featuresRecord struct
  function NewFeatureSelector (line 33) | func NewFeatureSelector(ctx context.Context, accountTag string, cliFeatu...
  type FeatureSelector (line 37) | type FeatureSelector interface
  type featureSelector (line 42) | type featureSelector struct
    method Snapshot (line 85) | func (fs *featureSelector) Snapshot() FeatureSnapshot {
    method accountEnabled (line 95) | func (fs *featureSelector) accountEnabled(percentage uint32) bool {
    method postQuantumMode (line 99) | func (fs *featureSelector) postQuantumMode() PostQuantumMode {
    method datagramVersion (line 107) | func (fs *featureSelector) datagramVersion() DatagramVersion {
    method clientFeatures (line 125) | func (fs *featureSelector) clientFeatures() []string {
    method refresh (line 130) | func (fs *featureSelector) refresh(ctx context.Context) error {
    method refreshLoop (line 149) | func (fs *featureSelector) refreshLoop(ctx context.Context, refreshFre...
  function newFeatureSelector (line 55) | func newFeatureSelector(ctx context.Context, accountTag string, logger *...
  type resolver (line 165) | type resolver interface
  type dnsResolver (line 169) | type dnsResolver struct
    method lookupRecord (line 179) | func (dr *dnsResolver) lookupRecord(ctx context.Context) ([]byte, erro...
  function newDNSResolver (line 173) | func newDNSResolver() *dnsResolver {
  function switchThreshold (line 195) | func switchThreshold(accountTag string) uint32 {

FILE: features/selector_test.go
  constant testAccountTag (line 15) | testAccountTag  = "123456"
  constant testAccountHash (line 16) | testAccountHash = 74
  function TestUnmarshalFeaturesRecord (line 19) | func TestUnmarshalFeaturesRecord(t *testing.T) {
  function TestFeaturePrecedenceEvaluationPostQuantum (line 55) | func TestFeaturePrecedenceEvaluationPostQuantum(t *testing.T) {
  function TestFeaturePrecedenceEvaluationDatagramVersion (line 89) | func TestFeaturePrecedenceEvaluationDatagramVersion(t *testing.T) {
  function TestDeprecatedFeaturesRemoved (line 133) | func TestDeprecatedFeaturesRemoved(t *testing.T) {
  function TestRefreshFeaturesRecord (line 172) | func TestRefreshFeaturesRecord(t *testing.T) {
  function TestSnapshotIsolation (line 197) | func TestSnapshotIsolation(t *testing.T) {
  function TestStaticFeatures (line 213) | func TestStaticFeatures(t *testing.T) {
  function newTestSelector (line 226) | func newTestSelector(t *testing.T, percentages []uint32, pq bool, refres...
  type mockResolver (line 239) | type mockResolver struct
    method lookupRecord (line 244) | func (mr *mockResolver) lookupRecord(ctx context.Context) ([]byte, err...
  type staticResolver (line 257) | type staticResolver struct
    method lookupRecord (line 261) | func (r *staticResolver) lookupRecord(ctx context.Context) ([]byte, er...

FILE: fips/fips.go
  function IsFipsEnabled (line 9) | func IsFipsEnabled() bool {

FILE: fips/nofips.go
  function IsFipsEnabled (line 5) | func IsFipsEnabled() bool {

FILE: flow/limiter.go
  constant unlimitedActiveFlows (line 9) | unlimitedActiveFlows = 0
  type Limiter (line 16) | type Limiter interface
  type flowLimiter (line 26) | type flowLimiter struct
    method Acquire (line 42) | func (s *flowLimiter) Acquire(flowType string) error {
    method Release (line 55) | func (s *flowLimiter) Release() {
    method SetLimit (line 66) | func (s *flowLimiter) SetLimit(newMaxActiveFlows uint64) {
  function NewLimiter (line 33) | func NewLimiter(maxActiveFlows uint64) Limiter {
  function isUnlimited (line 75) | func isUnlimited(value uint64) bool {

FILE: flow/limiter_test.go
  function TestFlowLimiter_Unlimited (line 11) | func TestFlowLimiter_Unlimited(t *testing.T) {
  function TestFlowLimiter_Limited (line 20) | func TestFlowLimiter_Limited(t *testing.T) {
  function TestFlowLimiter_AcquireAndReleaseFlow (line 33) | func TestFlowLimiter_AcquireAndReleaseFlow(t *testing.T) {
  function TestFlowLimiter_SetLimit (line 70) | func TestFlowLimiter_SetLimit(t *testing.T) {

FILE: flow/metrics.go
  constant namespace (line 9) | namespace = "flow"

FILE: github_message.py
  function kv_get_keys (line 21) | def kv_get_keys(prefix, account, namespace, api_token):
  function kv_get_value (line 39) | def kv_get_value(key, account, namespace, api_token):
  function update_or_add_message (line 56) | def update_or_add_message(msg, name, sha):
  function get_release (line 73) | def get_release(repo, version):
  function parse_args (line 83) | def parse_args():
  function main (line 139) | def main():

FILE: github_release.py
  function get_sha256 (line 28) | def get_sha256(filename):
  function send_hash (line 36) | def send_hash(pkg_hash, name, version, account, namespace, api_token):
  function assert_tag_exists (line 57) | def assert_tag_exists(repo, version):
  function get_or_create_release (line 64) | def get_or_create_release(repo, version, dry_run=False, is_draft=False):
  function parse_args (line 102) | def parse_args():
  function upload_asset (line 175) | def upload_asset(release, filepath, filename, release_version, kv_accoun...
  function move_asset (line 208) | def move_asset(filepath, filename):
  function get_binary_version (line 221) | def get_binary_version(binary_path):
  function assert_asset_version (line 249) | def assert_asset_version(binary_path, release_version):
  function main (line 276) | def main():

FILE: hello/hello.go
  constant UptimeRoute (line 22) | UptimeRoute    = "/uptime"
  constant WSRoute (line 23) | WSRoute        = "/ws"
  constant SSERoute (line 24) | SSERoute       = "/sse"
  constant HealthRoute (line 25) | HealthRoute    = "/_health"
  constant defaultSSEFreq (line 26) | defaultSSEFreq = time.Second * 10
  type templateData (line 29) | type templateData struct
  type OriginUpTime (line 35) | type OriginUpTime struct
  constant defaultServerName (line 40) | defaultServerName = "the Cloudflare Tunnel test server"
  constant indexTemplate (line 41) | indexTemplate = `
  function StartHelloWorldServer (line 102) | func StartHelloWorldServer(log *zerolog.Logger, listener net.Listener, s...
  function CreateTLSListener (line 130) | func CreateTLSListener(address string) (net.Listener, error) {
  function uptimeHandler (line 145) | func uptimeHandler(startTime time.Time) http.HandlerFunc {
  function websocketHandler (line 161) | func websocketHandler(log *zerolog.Logger, upgrader websocket.Upgrader) ...
  function sseHandler (line 190) | func sseHandler(log *zerolog.Logger) http.HandlerFunc {
  function healthHandler (line 226) | func healthHandler() http.HandlerFunc {
  function rootHandler (line 232) | func rootHandler(serverName string) http.HandlerFunc {

FILE: hello/hello_test.go
  function TestCreateTLSListenerHostAndPortSuccess (line 7) | func TestCreateTLSListenerHostAndPortSuccess(t *testing.T) {
  function TestCreateTLSListenerOnlyHostSuccess (line 18) | func TestCreateTLSListenerOnlyHostSuccess(t *testing.T) {
  function TestCreateTLSListenerOnlyPortSuccess (line 29) | func TestCreateTLSListenerOnlyPortSuccess(t *testing.T) {

FILE: ingress/config.go
  constant defaultProxyAddress (line 23) | defaultProxyAddress           = "127.0.0.1"
  constant defaultKeepAliveConnections (line 24) | defaultKeepAliveConnections   = 100
  constant defaultMaxActiveFlows (line 25) | defaultMaxActiveFlows         = 0
  constant SSHServerFlag (line 26) | SSHServerFlag                 = "ssh-server"
  constant Socks5Flag (line 27) | Socks5Flag                    = "socks5"
  constant ProxyConnectTimeoutFlag (line 28) | ProxyConnectTimeoutFlag       = "proxy-connect-timeout"
  constant ProxyTLSTimeoutFlag (line 29) | ProxyTLSTimeoutFlag           = "proxy-tls-timeout"
  constant ProxyTCPKeepAliveFlag (line 30) | ProxyTCPKeepAliveFlag         = "proxy-tcp-keepalive"
  constant ProxyNoHappyEyeballsFlag (line 31) | ProxyNoHappyEyeballsFlag      = "proxy-no-happy-eyeballs"
  constant ProxyKeepAliveConnectionsFlag (line 32) | ProxyKeepAliveConnectionsFlag = "proxy-keepalive-connections"
  constant ProxyKeepAliveTimeoutFlag (line 33) | ProxyKeepAliveTimeoutFlag     = "proxy-keepalive-timeout"
  constant HTTPHostHeaderFlag (line 34) | HTTPHostHeaderFlag            = "http-host-header"
  constant OriginServerNameFlag (line 35) | OriginServerNameFlag          = "origin-server-name"
  constant MatchSNIToHostFlag (line 36) | MatchSNIToHostFlag            = "match-sni-to-host"
  constant NoTLSVerifyFlag (line 37) | NoTLSVerifyFlag               = "no-tls-verify"
  constant NoChunkedEncodingFlag (line 38) | NoChunkedEncodingFlag         = "no-chunked-encoding"
  constant ProxyAddressFlag (line 39) | ProxyAddressFlag              = "proxy-address"
  constant ProxyPortFlag (line 40) | ProxyPortFlag                 = "proxy-port"
  constant Http2OriginFlag (line 41) | Http2OriginFlag               = "http2-origin"
  constant socksProxy (line 45) | socksProxy = "socks"
  type WarpRoutingConfig (line 48) | type WarpRoutingConfig struct
    method RawConfig (line 72) | func (c *WarpRoutingConfig) RawConfig() config.WarpRoutingConfig {
  function NewWarpRoutingConfig (line 54) | func NewWarpRoutingConfig(raw *config.WarpRoutingConfig) WarpRoutingConf...
  type RemoteConfig (line 87) | type RemoteConfig struct
    method UnmarshalJSON (line 98) | func (rc *RemoteConfig) UnmarshalJSON(b []byte) error {
  type RemoteConfigJSON (line 92) | type RemoteConfigJSON struct
  function originRequestFromSingleRule (line 122) | func originRequestFromSingleRule(c *cli.Context) OriginRequestConfig {
  function originRequestFromConfig (line 215) | func originRequestFromConfig(c config.OriginRequestConfig) OriginRequest...
  type OriginRequestConfig (line 292) | type OriginRequestConfig struct
    method setConnectTimeout (line 338) | func (defaults *OriginRequestConfig) setConnectTimeout(overrides confi...
    method setTLSTimeout (line 344) | func (defaults *OriginRequestConfig) setTLSTimeout(overrides config.Or...
    method setNoHappyEyeballs (line 350) | func (defaults *OriginRequestConfig) setNoHappyEyeballs(overrides conf...
    method setKeepAliveConnections (line 356) | func (defaults *OriginRequestConfig) setKeepAliveConnections(overrides...
    method setKeepAliveTimeout (line 362) | func (defaults *OriginRequestConfig) setKeepAliveTimeout(overrides con...
    method setTCPKeepAlive (line 368) | func (defaults *OriginRequestConfig) setTCPKeepAlive(overrides config....
    method setHTTPHostHeader (line 374) | func (defaults *OriginRequestConfig) setHTTPHostHeader(overrides confi...
    method setOriginServerName (line 380) | func (defaults *OriginRequestConfig) setOriginServerName(overrides con...
    method setMatchSNIToHost (line 386) | func (defaults *OriginRequestConfig) setMatchSNIToHost(overrides confi...
    method setCAPool (line 392) | func (defaults *OriginRequestConfig) setCAPool(overrides config.Origin...
    method setNoTLSVerify (line 398) | func (defaults *OriginRequestConfig) setNoTLSVerify(overrides config.O...
    method setDisableChunkedEncoding (line 404) | func (defaults *OriginRequestConfig) setDisableChunkedEncoding(overrid...
    method setBastionMode (line 410) | func (defaults *OriginRequestConfig) setBastionMode(overrides config.O...
    method setProxyPort (line 416) | func (defaults *OriginRequestConfig) setProxyPort(overrides config.Ori...
    method setProxyAddress (line 422) | func (defaults *OriginRequestConfig) setProxyAddress(overrides config....
    method setProxyType (line 428) | func (defaults *OriginRequestConfig) setProxyType(overrides config.Ori...
    method setIPRules (line 434) | func (defaults *OriginRequestConfig) setIPRules(overrides config.Origi...
    method setHttp2Origin (line 447) | func (defaults *OriginRequestConfig) setHttp2Origin(overrides config.O...
    method setAccess (line 453) | func (defaults *OriginRequestConfig) setAccess(overrides config.Origin...
  function setConfig (line 467) | func setConfig(defaults OriginRequestConfig, overrides config.OriginRequ...
  function ConvertToRawOriginConfig (line 492) | func ConvertToRawOriginConfig(c OriginRequestConfig) config.OriginReques...
  function convertToRawIPRules (line 546) | func convertToRawIPRules(ipRules []ipaccess.Rule) []config.IngressIPRule {
  function defaultBoolToNil (line 563) | func defaultBoolToNil(b bool) *bool {
  function emptyStringToNil (line 571) | func emptyStringToNil(s string) *string {
  function zeroUIntToNil (line 579) | func zeroUIntToNil(v uint) *uint {

FILE: ingress/config_test.go
  function TestCorrespondingFields (line 22) | func TestCorrespondingFields(t *testing.T) {
  function CountFields (line 30) | func CountFields(t *testing.T, val interface{}) int {
  function TestUnmarshalRemoteConfigOverridesGlobal (line 39) | func TestUnmarshalRemoteConfigOverridesGlobal(t *testing.T) {
  function TestOriginRequestConfigOverrides (line 71) | func TestOriginRequestConfigOverrides(t *testing.T) {
  function TestOriginRequestConfigDefaults (line 272) | func TestOriginRequestConfigDefaults(t *testing.T) {
  function TestDefaultConfigFromCLI (line 402) | func TestDefaultConfigFromCLI(t *testing.T) {
  function newIPRule (line 418) | func newIPRule(t *testing.T, prefix string, ports []int, allow bool) ipa...

FILE: ingress/icmp_darwin.go
  type icmpProxy (line 27) | type icmpProxy struct
    method Request (line 130) | func (ip *icmpProxy) Request(ctx context.Context, pk *packet.ICMP, res...
    method Serve (line 198) | func (ip *icmpProxy) Serve(ctx context.Context) error {
    method handleFullPacket (line 234) | func (ip *icmpProxy) handleFullPacket(ctx context.Context, decoder *pa...
    method sendReply (line 254) | func (ip *icmpProxy) sendReply(ctx context.Context, reply *echoReply) ...
  type echoIDTracker (line 38) | type echoIDTracker struct
    method getOrAssign (line 56) | func (eit *echoIDTracker) getOrAssign(key flow3Tuple) (id uint16, succ...
    method set (line 86) | func (eit *echoIDTracker) set(key flow3Tuple, assignedEchoID uint16) {
    method release (line 92) | func (eit *echoIDTracker) release(key flow3Tuple, assigned uint16) bool {
  function newEchoIDTracker (line 49) | func newEchoIDTracker() *echoIDTracker {
  type echoFunnelID (line 105) | type echoFunnelID
    method Type (line 107) | func (snf echoFunnelID) Type() string {
    method String (line 111) | func (snf echoFunnelID) String() string {
  function newICMPProxy (line 115) | func newICMPProxy(listenIP netip.Addr, logger *zerolog.Logger, idleTimeo...

FILE: ingress/icmp_darwin_test.go
  function TestSingleEchoIDTracker (line 15) | func TestSingleEchoIDTracker(t *testing.T) {
  function TestFullEchoIDTracker (line 47) | func TestFullEchoIDTracker(t *testing.T) {
  method get (line 118) | func (eit *echoIDTracker) get(key flow3Tuple) (id uint16, exist bool) {
  function getFunnel (line 125) | func getFunnel(t *testing.T, proxy *icmpProxy, tuple flow3Tuple) (packet...

FILE: ingress/icmp_generic.go
  type icmpProxy (line 19) | type icmpProxy struct
    method Request (line 21) | func (ip icmpProxy) Request(ctx context.Context, pk *packet.ICMP, resp...
    method Serve (line 25) | func (ip *icmpProxy) Serve(ctx context.Context) error {
  function newICMPProxy (line 29) | func newICMPProxy(listenIP netip.Addr, logger *zerolog.Logger, idleTimeo...

FILE: ingress/icmp_linux.go
  constant pingGroupPath (line 30) | pingGroupPath = "/proc/sys/net/ipv4/ping_group_range"
  type icmpProxy (line 37) | type icmpProxy struct
    method Request (line 99) | func (ip *icmpProxy) Request(ctx context.Context, pk *packet.ICMP, res...
    method Serve (line 166) | func (ip *icmpProxy) Serve(ctx context.Context) error {
    method listenResponse (line 171) | func (ip *icmpProxy) listenResponse(ctx context.Context, flow *icmpEch...
    method handleResponse (line 181) | func (ip *icmpProxy) handleResponse(ctx context.Context, flow *icmpEch...
  function newICMPProxy (line 44) | func newICMPProxy(listenIP netip.Addr, logger *zerolog.Logger, idleTimeo...
  function testPermission (line 56) | func testPermission(listenIP netip.Addr, logger *zerolog.Logger) error {
  function checkInPingGroup (line 74) | func checkInPingGroup() error {
  method Type (line 224) | func (ft flow3Tuple) Type() string {
  method String (line 228) | func (ft flow3Tuple) String() string {

FILE: ingress/icmp_linux_test.go
  function getFunnel (line 11) | func getFunnel(t *testing.T, proxy *icmpProxy, tuple flow3Tuple) (packet...

FILE: ingress/icmp_metrics.go
  constant namespace (line 8) | namespace = "cloudflared"
  function init (line 26) | func init() {
  function incrementICMPRequest (line 33) | func incrementICMPRequest() {
  function incrementICMPReply (line 37) | func incrementICMPReply() {

FILE: ingress/icmp_posix.go
  function newICMPConn (line 21) | func newICMPConn(listenIP netip.Addr) (*icmp.PacketConn, error) {
  function netipAddr (line 28) | func netipAddr(addr net.Addr) (netip.Addr, bool) {
  type flow3Tuple (line 37) | type flow3Tuple struct
  type icmpEchoFlow (line 44) | type icmpEchoFlow struct
    method Equal (line 68) | func (ief *icmpEchoFlow) Equal(other packet.Funnel) bool {
    method Close (line 85) | func (ief *icmpEchoFlow) Close() error {
    method IsClosed (line 90) | func (ief *icmpEchoFlow) IsClosed() bool {
    method sendToDst (line 95) | func (ief *icmpEchoFlow) sendToDst(dst netip.Addr, msg *icmp.Message) ...
    method returnToSrc (line 123) | func (ief *icmpEchoFlow) returnToSrc(reply *echoReply) error {
  function newICMPEchoFlow (line 55) | func newICMPEchoFlow(src netip.Addr, closeCallback func() error, originC...
  type echoReply (line 139) | type echoReply struct
  function parseReply (line 145) | func parseReply(from net.Addr, rawMsg []byte) (*echoReply, error) {
  function toICMPEchoFlow (line 169) | func toICMPEchoFlow(funnel packet.Funnel) (*icmpEchoFlow, error) {
  function createShouldReplaceFunnelFunc (line 177) | func createShouldReplaceFunnelFunc(logger *zerolog.Logger, responder ICM...

FILE: ingress/icmp_posix_test.go
  function TestFunnelIdleTimeout (line 21) | func TestFunnelIdleTimeout(t *testing.T) {
  function TestReuseFunnel (line 79) | func TestReuseFunnel(t *testing.T) {

FILE: ingress/icmp_windows.go
  constant AF_INET6 (line 34) | AF_INET6          = 23
  constant icmpEchoReplyCode (line 35) | icmpEchoReplyCode = 0
  constant nullParameter (line 36) | nullParameter     = uintptr(0)
  type ipStatus (line 54) | type ipStatus
    method String (line 90) | func (is ipStatus) String() string {
  constant success (line 57) | success     ipStatus = 0
  constant bufTooSmall (line 58) | bufTooSmall          = iota + 11000
  constant destNetUnreachable (line 59) | destNetUnreachable
  constant destHostUnreachable (line 60) | destHostUnreachable
  constant destProtocolUnreachable (line 61) | destProtocolUnreachable
  constant destPortUnreachable (line 62) | destPortUnreachable
  constant noResources (line 63) | noResources
  constant badOption (line 64) | badOption
  constant hwError (line 65) | hwError
  constant packetTooBig (line 66) | packetTooBig
  constant reqTimedOut (line 67) | reqTimedOut
  constant badReq (line 68) | badReq
  constant badRoute (line 69) | badRoute
  constant ttlExpiredTransit (line 70) | ttlExpiredTransit
  constant ttlExpiredReassembly (line 71) | ttlExpiredReassembly
  constant paramProblem (line 72) | paramProblem
  constant sourceQuench (line 73) | sourceQuench
  constant optionTooBig (line 74) | optionTooBig
  constant badDestination (line 75) | badDestination
  constant generalFailure (line 77) | generalFailure = 11050
  constant ipv6DestUnreachable (line 82) | ipv6DestUnreachable ipStatus = iota + 11040
  constant ipv6TimeExceeded (line 83) | ipv6TimeExceeded
  constant ipv6BadHeader (line 84) | ipv6BadHeader
  constant ipv6UnrecognizedNextHeader (line 85) | ipv6UnrecognizedNextHeader
  constant ipv6ICMPError (line 86) | ipv6ICMPError
  constant ipv6DestScopeMismatch (line 87) | ipv6DestScopeMismatch
  type ipOption (line 150) | type ipOption struct
  type echoReply (line 159) | type echoReply struct
  type echoV6Reply (line 170) | type echoV6Reply struct
  type ipv6AddrEx (line 178) | type ipv6AddrEx struct
  type sockAddrIn6 (line 189) | type sockAddrIn6 struct
  function newSockAddrIn6 (line 198) | func newSockAddrIn6(addr netip.Addr) (*sockAddrIn6, error) {
  type ioStatusBlock (line 210) | type ioStatusBlock struct
  type icmpProxy (line 218) | type icmpProxy struct
    method Serve (line 253) | func (ip *icmpProxy) Serve(ctx context.Context) error {
    method Request (line 262) | func (ip *icmpProxy) Request(ctx context.Context, pk *packet.ICMP, res...
    method handleEchoReply (line 303) | func (ip *icmpProxy) handleEchoReply(request *packet.ICMP, echoReq *ic...
    method icmpEchoRoundtrip (line 331) | func (ip *icmpProxy) icmpEchoRoundtrip(dst netip.Addr, echo *icmp.Echo...
    method icmpSendEcho (line 369) | func (ip *icmpProxy) icmpSendEcho(dst netip.Addr, echo *icmp.Echo) (*e...
    method icmp6SendEcho (line 473) | func (ip *icmpProxy) icmp6SendEcho(dst netip.Addr, echo *icmp.Echo) (*...
  function newICMPProxy (line 226) | func newICMPProxy(listenIP netip.Addr, logger *zerolog.Logger, idleTimeo...
  function inAddrV4 (line 401) | func inAddrV4(ip netip.Addr) (uint32, error) {
  type echoResp (line 409) | type echoResp interface
  type echoV4Resp (line 415) | type echoV4Resp struct
    method status (line 420) | func (r *echoV4Resp) status() ipStatus {
    method rtt (line 424) | func (r *echoV4Resp) rtt() uint32 {
    method payload (line 428) | func (r *echoV4Resp) payload() []byte {
  function newEchoV4Resp (line 432) | func newEchoV4Resp(replyBuf []byte) (*echoV4Resp, error) {
  type echoV6Resp (line 513) | type echoV6Resp struct
    method status (line 518) | func (r *echoV6Resp) status() ipStatus {
    method rtt (line 522) | func (r *echoV6Resp) rtt() uint32 {
    method payload (line 526) | func (r *echoV6Resp) payload() []byte {
  function newEchoV6Resp (line 530) | func newEchoV6Resp(replyBuf []byte, dataSize int) (*echoV6Resp, error) {
  function unmarshalIPStatus (line 547) | func unmarshalIPStatus(replyBuf []byte) (ipStatus, error) {

FILE: ingress/icmp_windows_test.go
  function TestParseEchoReply (line 21) | func TestParseEchoReply(t *testing.T) {
  function TestParseEchoV6Reply (line 75) | func TestParseEchoV6Reply(t *testing.T) {
  function TestSendEchoErrors (line 129) | func TestSendEchoErrors(t *testing.T) {
  function testSendEchoErrors (line 134) | func testSendEchoErrors(t *testing.T, listenIP netip.Addr) {
  method marshal (line 152) | func (er *echoReply) marshal(t *testing.T, data []byte) []byte {
  function marshalPointer (line 191) | func marshalPointer(buf io.Writer, ptr uintptr) error {
  method marshal (line 203) | func (er *echoV6Reply) marshal(t *testing.T, data []byte) []byte {

FILE: ingress/ingress.go
  constant ServiceBastion (line 31) | ServiceBastion     = "bastion"
  constant ServiceSocksProxy (line 32) | ServiceSocksProxy  = "socks-proxy"
  constant ServiceWarpRouting (line 33) | ServiceWarpRouting = "warp-routing"
  function matchHost (line 64) | func matchHost(ruleHost, reqHost string) bool {
  type Ingress (line 78) | type Ingress struct
    method FindMatchingRule (line 41) | func (ing Ingress) FindMatchingRule(hostname, path string) (*Rule, int) {
    method IsEmpty (line 193) | func (ing Ingress) IsEmpty() bool {
    method IsSingleRule (line 198) | func (ing Ingress) IsSingleRule() bool {
    method StartOrigins (line 203) | func (ing Ingress) StartOrigins(
    method CatchAll (line 216) | func (ing Ingress) CatchAll() *Rule {
  function ParseIngress (line 87) | func ParseIngress(conf *config.Configuration) (Ingress, error) {
  function ParseIngressFromConfigAndCLI (line 98) | func ParseIngressFromConfigAndCLI(conf *config.Configuration, c *cli.Con...
  function parseCLIIngress (line 130) | func parseCLIIngress(c *cli.Context, allowURLFromArgs bool) (Ingress, er...
  function newDefaultOrigin (line 152) | func newDefaultOrigin(c *cli.Context, log *zerolog.Logger) Ingress {
  function parseSingleOriginService (line 163) | func parseSingleOriginService(c *cli.Context, allowURLFromArgs bool) (Or...
  function GetDefaultIngressRules (line 222) | func GetDefaultIngressRules(log *zerolog.Logger) []Rule {
  function validateAccessConfiguration (line 231) | func validateAccessConfiguration(cfg *config.AccessConfig) error {
  function validateIngress (line 245) | func validateIngress(ingress []config.UnvalidatedIngressRule, defaults O...
  function validateHostname (line 361) | func validateHostname(r config.UnvalidatedIngressRule, ruleIndex, totalR...
  type ruleShouldNotBeCatchAllError (line 386) | type ruleShouldNotBeCatchAllError struct
    method Error (line 391) | func (e ruleShouldNotBeCatchAllError) Error() string {
  function isHTTPService (line 397) | func isHTTPService(url *url.URL) bool {

FILE: ingress/ingress_test.go
  function TestParseUnixSocket (line 22) | func TestParseUnixSocket(t *testing.T) {
  function TestParseUnixSocketTLS (line 34) | func TestParseUnixSocketTLS(t *testing.T) {
  function TestParseIngressNilConfig (line 46) | func TestParseIngressNilConfig(t *testing.T) {
  function TestParseIngress (line 51) | func TestParseIngress(t *testing.T) {
  function ipRulePrefix (line 466) | func ipRulePrefix(s string) *string {
  function TestSingleOriginSetsConfig (line 470) | func TestSingleOriginSetsConfig(t *testing.T) {
  function TestSingleOriginServices (line 545) | func TestSingleOriginServices(t *testing.T) {
  function urlMustParse (line 615) | func urlMustParse(s string) *url.URL {
  function TestSingleOriginServices_URL (line 623) | func TestSingleOriginServices_URL(t *testing.T) {
  function TestFindMatchingRule (line 658) | func TestFindMatchingRule(t *testing.T) {
  function TestIsHTTPService (line 719) | func TestIsHTTPService(t *testing.T) {
  function MustParsePath (line 750) | func MustParsePath(t *testing.T, path string) *Regexp {
  function MustParseURL (line 756) | func MustParseURL(t *testing.T, rawURL string) *url.URL {
  function accessPolicy (line 762) | func accessPolicy() *ipaccess.Policy {
  function BenchmarkFindMatch (line 772) | func BenchmarkFindMatch(b *testing.B) {
  function TestParseAccessConfig (line 795) | func TestParseAccessConfig(t *testing.T) {
  function MustReadIngress (line 835) | func MustReadIngress(s string) *config.Configuration {

FILE: ingress/middleware/jwtvalidator.go
  constant headerKeyAccessJWTAssertion (line 14) | headerKeyAccessJWTAssertion = "Cf-Access-Jwt-Assertion"
  type JWTValidator (line 23) | type JWTValidator struct
    method Name (line 51) | func (v *JWTValidator) Name() string {
    method Handle (line 55) | func (v *JWTValidator) Handle(ctx context.Context, r *http.Request) (*...
  function NewJWTValidator (line 28) | func NewJWTValidator(teamName string, environment string, audTags []stri...

FILE: ingress/middleware/jwtvalidator_test.go
  type accessTokenClaims (line 26) | type accessTokenClaims struct
  function TestJWTValidator (line 32) | func TestJWTValidator(t *testing.T) {
  function signToken (line 116) | func signToken(t *testing.T, token accessTokenClaims, key *ecdsa.Private...

FILE: ingress/middleware/middleware.go
  type HandleResult (line 8) | type HandleResult struct
  type Handler (line 16) | type Handler interface

FILE: ingress/origin_connection.go
  type OriginConnection (line 19) | type OriginConnection interface
  type streamHandlerFunc (line 25) | type streamHandlerFunc
  function DefaultStreamHandler (line 29) | func DefaultStreamHandler(originConn io.ReadWriter, remoteConn net.Conn,...
  type tcpConnection (line 34) | type tcpConnection struct
    method Stream (line 40) | func (tc *tcpConnection) Stream(_ context.Context, tunnelConn io.ReadW...
    method Write (line 44) | func (tc *tcpConnection) Write(b []byte) (int, error) {
  type tcpOverWSConnection (line 55) | type tcpOverWSConnection struct
    method Stream (line 60) | func (wc *tcpOverWSConnection) Stream(ctx context.Context, tunnelConn ...
    method Close (line 69) | func (wc *tcpOverWSConnection) Close() error {
  type socksProxyOverWSConnection (line 76) | type socksProxyOverWSConnection struct
    method Stream (line 80) | func (sp *socksProxyOverWSConnection) Stream(ctx context.Context, tunn...
    method Close (line 89) | func (sp *socksProxyOverWSConnection) Close() error {

FILE: ingress/origin_connection_test.go
  constant testStreamTimeout (line 28) | testStreamTimeout = time.Second * 3
  constant echoHeaderName (line 29) | echoHeaderName    = "Test-Cloudflared-Echo"
  function TestStreamTCPConnection (line 37) | func TestStreamTCPConnection(t *testing.T) {
  function TestDefaultStreamWSOverTCPConnection (line 72) | func TestDefaultStreamWSOverTCPConnection(t *testing.T) {
  function TestSocksStreamWSOverTCPConnection (line 103) | func TestSocksStreamWSOverTCPConnection(t *testing.T) {
  function TestWsConnReturnsBeforeStreamReturns (line 193) | func TestWsConnReturnsBeforeStreamReturns(t *testing.T) {
  type wsEyeball (line 242) | type wsEyeball struct
    method Read (line 246) | func (wse *wsEyeball) Read(p []byte) (int, error) {
    method Write (line 254) | func (wse *wsEyeball) Write(p []byte) (int, error) {
  function echoWSEyeball (line 259) | func echoWSEyeball(t *testing.T, conn net.Conn) {
  function echoWSOrigin (line 276) | func echoWSOrigin(t *testing.T, expectMessages bool) *httptest.Server {
  function echoTCPOrigin (line 314) | func echoTCPOrigin(t *testing.T, conn net.Conn) {
  type readWriter (line 325) | type readWriter struct
    method Read (line 330) | func (r *readWriter) Read(p []byte) (n int, err error) {
    method Write (line 334) | func (r *readWriter) Write(p []byte) (n int, err error) {

FILE: ingress/origin_dialer.go
  constant writeDeadlineUDP (line 14) | writeDeadlineUDP = 200 * time.Millisecond
  type OriginTCPDialer (line 17) | type OriginTCPDialer interface
  type OriginUDPDialer (line 22) | type OriginUDPDialer interface
  type OriginDialer (line 27) | type OriginDialer interface
  type OriginConfig (line 32) | type OriginConfig struct
  type OriginDialerService (line 42) | type OriginDialerService struct
    method AddReservedService (line 68) | func (d *OriginDialerService) AddReservedService(service OriginDialer,...
    method UpdateDefaultDialer (line 76) | func (d *OriginDialerService) UpdateDefaultDialer(dialer *Dialer) {
    method DialTCP (line 83) | func (d *OriginDialerService) DialTCP(ctx context.Context, addr netip....
    method dialTCP (line 96) | func (d *OriginDialerService) dialTCP(ctx context.Context, addr netip....
    method DialUDP (line 108) | func (d *OriginDialerService) DialUDP(addr netip.AddrPort) (net.Conn, ...
  function NewOriginDialer (line 56) | func NewOriginDialer(config OriginConfig, logger *zerolog.Logger) *Origi...
  type Dialer (line 119) | type Dialer struct
    method DialTCP (line 132) | func (d *Dialer) DialTCP(ctx context.Context, dest netip.AddrPort) (ne...
    method DialUDP (line 141) | func (d *Dialer) DialUDP(dest netip.AddrPort) (net.Conn, error) {
  function NewDialer (line 123) | func NewDialer(config WarpRoutingConfig) *Dialer {
  type writeDeadlineConn (line 154) | type writeDeadlineConn struct
    method Write (line 158) | func (w *writeDeadlineConn) Write(b []byte) (int, error) {

FILE: ingress/origin_icmp_proxy.go
  constant mtu (line 21) | mtu = 1500
  constant icmpRequestTimeoutMs (line 23) | icmpRequestTimeoutMs = 1000
  type ICMPRouterServer (line 31) | type ICMPRouterServer interface
  type ICMPRouter (line 38) | type ICMPRouter interface
  type ICMPResponder (line 48) | type ICMPResponder interface
  type icmpRouter (line 57) | type icmpRouter struct
    method Serve (line 91) | func (ir *icmpRouter) Serve(ctx context.Context) error {
    method Request (line 111) | func (ir *icmpRouter) Request(ctx context.Context, pk *packet.ICMP, re...
    method ConvertToTTLExceeded (line 127) | func (ir *icmpRouter) ConvertToTTLExceeded(pk *packet.ICMP, rawPacket ...
  function NewICMPRouter (line 67) | func NewICMPRouter(ipv4Addr, ipv6Addr netip.Addr, logger *zerolog.Logger...
  function getICMPEcho (line 137) | func getICMPEcho(msg *icmp.Message) (*icmp.Echo, error) {
  function isEchoReply (line 145) | func isEchoReply(msg *icmp.Message) bool {
  function observeICMPRequest (line 149) | func observeICMPRequest(logger *zerolog.Logger, span trace.Span, src str...
  function observeICMPReply (line 163) | func observeICMPReply(logger *zerolog.Logger, span trace.Span, dst strin...

FILE: ingress/origin_icmp_proxy_test.go
  function TestICMPRouterEcho (line 40) | func TestICMPRouterEcho(t *testing.T) {
  function testICMPRouterEcho (line 45) | func testICMPRouterEcho(t *testing.T, sendIPv4 bool) {
  function TestTraceICMPRouterEcho (line 110) | func TestTraceICMPRouterEcho(t *testing.T) {
  function TestConcurrentRequestsToSameDst (line 209) | func TestConcurrentRequestsToSameDst(t *testing.T) {
  function TestICMPRouterRejectNotEcho (line 294) | func TestICMPRouterRejectNotEcho(t *testing.T) {
  function testICMPRouterRejectNotEcho (line 349) | func testICMPRouterRejectNotEcho(t *testing.T, srcDstIP netip.Addr, msgs...
  function validateEchoFlow (line 373) | func validateEchoFlow(t *testing.T, pk quicpogs.Packet, echoReq *packet....
  function getLocalIPs (line 392) | func getLocalIPs(t *testing.T, ipv4 bool) []netip.Addr {

FILE: ingress/origin_proxy.go
  type HTTPOriginProxy (line 14) | type HTTPOriginProxy interface
  type StreamBasedOriginProxy (line 20) | type StreamBasedOriginProxy interface
  type HTTPLocalProxy (line 25) | type HTTPLocalProxy interface
  method RoundTrip (line 30) | func (o *unixSocketPath) RoundTrip(req *http.Request) (*http.Response, e...
  method RoundTrip (line 35) | func (o *httpService) RoundTrip(req *http.Request) (*http.Response, erro...
  method SetOriginServerName (line 61) | func (o *httpService) SetOriginServerName(req *http.Request) {
  method RoundTrip (line 75) | func (o *statusCode) RoundTrip(_ *http.Request) (*http.Response, error) {
  method EstablishConnection (line 88) | func (o *rawTCPService) EstablishConnection(ctx context.Context, dest st...
  method EstablishConnection (line 102) | func (o *tcpOverWSService) EstablishConnection(ctx context.Context, dest...
  method EstablishConnection (line 119) | func (o *socksProxyOverWSService) EstablishConnection(_ context.Context,...

FILE: ingress/origin_proxy_test.go
  function TestRawTCPServiceEstablishConnection (line 20) | func TestRawTCPServiceEstablishConnection(t *testing.T) {
  function TestTCPOverWSServiceEstablishConnection (line 43) | func TestTCPOverWSServiceEstablishConnection(t *testing.T) {
  function TestHTTPServiceHostHeaderOverride (line 107) | func TestHTTPServiceHostHeaderOverride(t *testing.T) {
  function TestHTTPServiceUsesIngressRuleScheme (line 150) | func TestHTTPServiceUsesIngressRuleScheme(t *testing.T) {
  function tcpListenRoutine (line 189) | func tcpListenRoutine(listener net.Listener, closeChan chan struct{}) {

FILE: ingress/origin_service.go
  constant HelloWorldService (line 26) | HelloWorldService = "hello_world"
  constant HelloWorldFlag (line 27) | HelloWorldFlag    = "hello-world"
  constant HttpStatusService (line 28) | HttpStatusService = "http_status"
  type OriginService (line 32) | type OriginService interface
  type unixSocketPath (line 43) | type unixSocketPath struct
    method String (line 49) | func (o *unixSocketPath) String() string {
    method start (line 57) | func (o *unixSocketPath) start(log *zerolog.Logger, _ <-chan struct{},...
    method MarshalJSON (line 66) | func (o unixSocketPath) MarshalJSON() ([]byte, error) {
  type httpService (line 70) | type httpService struct
    method start (line 77) | func (o *httpService) start(log *zerolog.Logger, _ <-chan struct{}, cf...
    method String (line 88) | func (o *httpService) String() string {
    method MarshalJSON (line 92) | func (o httpService) MarshalJSON() ([]byte, error) {
  type rawTCPService (line 98) | type rawTCPService struct
    method String (line 105) | func (o *rawTCPService) String() string {
    method start (line 109) | func (o *rawTCPService) start(_ *zerolog.Logger, _ <-chan struct{}, _ ...
    method MarshalJSON (line 113) | func (o rawTCPService) MarshalJSON() ([]byte, error) {
  type tcpOverWSService (line 119) | type tcpOverWSService struct
    method String (line 172) | func (o *tcpOverWSService) String() string {
    method start (line 184) | func (o *tcpOverWSService) start(log *zerolog.Logger, _ <-chan struct{...
    method MarshalJSON (line 195) | func (o tcpOverWSService) MarshalJSON() ([]byte, error) {
  type socksProxyOverWSService (line 127) | type socksProxyOverWSService struct
    method start (line 199) | func (o *socksProxyOverWSService) start(log *zerolog.Logger, _ <-chan ...
    method String (line 203) | func (o *socksProxyOverWSService) String() string {
    method MarshalJSON (line 207) | func (o socksProxyOverWSService) MarshalJSON() ([]byte, error) {
  function newTCPOverWSService (line 131) | func newTCPOverWSService(url *url.URL) *tcpOverWSService {
  function newBastionService (line 148) | func newBastionService() *tcpOverWSService {
  function newSocksProxyOverWSService (line 154) | func newSocksProxyOverWSService(accessPolicy *ipaccess.Policy) *socksPro...
  function addPortIfMissing (line 164) | func addPortIfMissing(uri *url.URL, port int) {
  type helloWorld (line 213) | type helloWorld struct
    method String (line 218) | func (o *helloWorld) String() string {
    method start (line 223) | func (o *helloWorld) start(
    method MarshalJSON (line 247) | func (o helloWorld) MarshalJSON() ([]byte, error) {
  type statusCode (line 253) | type statusCode struct
    method String (line 270) | func (o *statusCode) String() string {
    method start (line 274) | func (o *statusCode) start(
    method MarshalJSON (line 282) | func (o statusCode) MarshalJSON() ([]byte, error) {
  function newStatusCode (line 261) | func newStatusCode(status int) statusCode {
  function newDefaultStatusCode (line 266) | func newDefaultStatusCode(log *zerolog.Logger) statusCode {
  type WarpRoutingService (line 288) | type WarpRoutingService struct
  function NewWarpRoutingService (line 292) | func NewWarpRoutingService(config WarpRoutingConfig, writeTimeout time.D...
  type ManagementService (line 306) | type ManagementService struct
    method start (line 316) | func (o *ManagementService) start(log *zerolog.Logger, _ <-chan struct...
    method String (line 320) | func (o *ManagementService) String() string {
    method MarshalJSON (line 324) | func (o ManagementService) MarshalJSON() ([]byte, error) {
  function newManagementService (line 310) | func newManagementService(managementProxy HTTPLocalProxy) *ManagementSer...
  function NewManagementRule (line 328) | func NewManagementRule(management *management.ManagementService) Rule {
  type NopReadCloser (line 335) | type NopReadCloser struct
    method Read (line 338) | func (nrc *NopReadCloser) Read(buf []byte) (int, error) {
    method Close (line 342) | func (nrc *NopReadCloser) Close() error {
  function newHTTPTransport (line 346) | func newHTTPTransport(service OriginService, cfg OriginRequestConfig, lo...
  type MockOriginHTTPService (line 393) | type MockOriginHTTPService struct
    method RoundTrip (line 397) | func (mos MockOriginHTTPService) RoundTrip(req *http.Request) (*http.R...
    method String (line 401) | func (mos MockOriginHTTPService) String() string {
    method start (line 405) | func (mos MockOriginHTTPService) start(log *zerolog.Logger, _ <-chan s...
    method MarshalJSON (line 409) | func (mos MockOriginHTTPService) MarshalJSON() ([]byte, error) {

FILE: ingress/origin_service_test.go
  function TestAddPortIfMissing (line 10) | func TestAddPortIfMissing(t *testing.T) {

FILE: ingress/origins/dns.go
  constant defaultLookupHost (line 28) | defaultLookupHost          = "region1.v2.argotunnel.com"
  constant defaultResolverPort (line 29) | defaultResolverPort uint16 = 53
  constant refreshFreq (line 33) | refreshFreq    = 5 * time.Minute
  constant refreshTimeout (line 34) | refreshTimeout = 5 * time.Second
  type netDial (line 44) | type netDial
  type DNSResolverService (line 47) | type DNSResolverService struct
    method DialTCP (line 74) | func (s *DNSResolverS
Copy disabled (too large) Download .json
Condensed preview — 3152 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (17,083K chars).
[
  {
    "path": ".ci/apt-internal.gitlab-ci.yml",
    "chars": 4302,
    "preview": ".register_inputs: &register_inputs\n  stage: release-internal\n  runOnBranches: \"^master$\"\n  COMPONENT: \"common\"\n\n.registe"
  },
  {
    "path": ".ci/ci-image.gitlab-ci.yml",
    "chars": 1128,
    "preview": "# Builds a custom CI Image when necessary\n\ninclude:\n  #####################################################\n  ##########"
  },
  {
    "path": ".ci/commons.gitlab-ci.yml",
    "chars": 1641,
    "preview": "## A set of predefined rules to use on the different jobs\n.default-rules:\n  # Rules to run the job only on the master br"
  },
  {
    "path": ".ci/github.gitlab-ci.yml",
    "chars": 460,
    "preview": "include:\n  - local: .ci/commons.gitlab-ci.yml\n\n######################################\n### Sync master branch with Github"
  },
  {
    "path": ".ci/image/.docker-images",
    "chars": 27,
    "preview": "images:\n  - name: ci-image\n"
  },
  {
    "path": ".ci/image/Dockerfile",
    "chars": 1086,
    "preview": "ARG CLOUDFLARE_DOCKER_REGISTRY_HOST\n\nFROM ${CLOUDFLARE_DOCKER_REGISTRY_HOST:-registry.cfdata.org}/stash/cf/debian-images"
  },
  {
    "path": ".ci/linux.gitlab-ci.yml",
    "chars": 3362,
    "preview": ".golang-inputs: &golang_inputs\n  runOnMR: true\n  runOnBranches: \"^master$\"\n  outputDir: artifacts\n  runner: linux-x86-8c"
  },
  {
    "path": ".ci/mac.gitlab-ci.yml",
    "chars": 2243,
    "preview": "include:\n  - local: .ci/commons.gitlab-ci.yml\n\n###############################\n### Defaults for Mac Builds ###\n#########"
  },
  {
    "path": ".ci/release.gitlab-ci.yml",
    "chars": 4592,
    "preview": "include:\n  - local: .ci/commons.gitlab-ci.yml\n\n  ######################################\n  ### Build and Push DockerHub I"
  },
  {
    "path": ".ci/scripts/component-tests.sh",
    "chars": 691,
    "preview": "#!/bin/bash\nset -e -u -o pipefail\n\n# Fetch cloudflared from the artifacts folder\nmv ./artifacts/cloudflared ./cloudflare"
  },
  {
    "path": ".ci/scripts/fmt-check.sh",
    "chars": 410,
    "preview": "#!/bin/bash\nset -e -u -o pipefail\n\nOUTPUT=$(go run -mod=readonly golang.org/x/tools/cmd/goimports@v0.30.0 -l -d -local g"
  },
  {
    "path": ".ci/scripts/github-push.sh",
    "chars": 997,
    "preview": "#!/bin/bash\nset -e -u -o pipefail\n\nBRANCH=\"master\"\nTMP_PATH=\"$PWD/tmp\"\nPRIVATE_KEY_PATH=\"$TMP_PATH/github-deploy-key\"\nPU"
  },
  {
    "path": ".ci/scripts/linux/build-packages-fips.sh",
    "chars": 878,
    "preview": "#!/bin/bash\nset -e -u -o pipefail\nVERSION=$(git describe --tags --always --match \"[0-9][0-9][0-9][0-9].*.*\")\necho $VERSI"
  },
  {
    "path": ".ci/scripts/linux/build-packages.sh",
    "chars": 1399,
    "preview": "#!/bin/bash\nset -e -u -o pipefail\n\n# Check if architecture argument is provided\nif [ $# -eq 0 ]; then\n    echo \"Error: A"
  },
  {
    "path": ".ci/scripts/mac/build.sh",
    "chars": 8526,
    "preview": "#!/bin/bash\n\nset -exo pipefail\n\nif [[ \"$(uname)\" != \"Darwin\" ]] ; then\n    echo \"This should be run on macOS\"\n    exit 1"
  },
  {
    "path": ".ci/scripts/mac/install-go.sh",
    "chars": 166,
    "preview": "rm -rf /tmp/go\nexport GOCACHE=/tmp/gocache\nrm -rf $GOCACHE\n\nif [ -z \"$1\" ]\n  then\n    echo \"No go version supplied\"\nfi\n\n"
  },
  {
    "path": ".ci/scripts/package-windows.sh",
    "chars": 784,
    "preview": "#!/bin/bash\nset -e -u -o pipefail\n\npython3 -m venv env\n. env/bin/activate\npip install pynacl==1.4.0 pygithub==1.55\n\nVERS"
  },
  {
    "path": ".ci/scripts/release-target.sh",
    "chars": 457,
    "preview": "#!/bin/bash\nset -e -u -o pipefail\n\n# Check if a make target is provided as an argument\nif [ $# -eq 0 ]; then\n    echo \"E"
  },
  {
    "path": ".ci/scripts/vuln-check.sh",
    "chars": 2033,
    "preview": "#!/bin/bash\nset -e -u\n\n# Define the file to store the list of vulnerabilities to ignore.\nIGNORE_FILE=\".vulnignore\"\n\ngo v"
  },
  {
    "path": ".ci/scripts/windows/builds.ps1",
    "chars": 1308,
    "preview": "Set-StrictMode -Version Latest\n$ErrorActionPreference = \"Stop\"\n$ProgressPreference = \"SilentlyContinue\"\n\n$env:TARGET_OS "
  },
  {
    "path": ".ci/scripts/windows/component-test.ps1",
    "chars": 1379,
    "preview": "Set-StrictMode -Version Latest\n$ErrorActionPreference = \"Stop\"\n$ProgressPreference = \"SilentlyContinue\"\n\n$env:TARGET_OS "
  },
  {
    "path": ".ci/scripts/windows/go-wrapper.ps1",
    "chars": 2395,
    "preview": "Param(\n    [string]$GoVersion,\n    [string]$ScriptToExecute\n)\n\n# The script is a wrapper that downloads a specific versi"
  },
  {
    "path": ".ci/scripts/windows/sign-msi.ps1",
    "chars": 1004,
    "preview": "# Sign Windows artifacts using azuretool\n# This script processes MSI files from the artifacts directory\n\n$ErrorActionPre"
  },
  {
    "path": ".ci/windows.gitlab-ci.yml",
    "chars": 4252,
    "preview": "include:\n  - local: .ci/commons.gitlab-ci.yml\n\n###################################\n### Defaults for Windows Builds ###\n#"
  },
  {
    "path": ".docker-images",
    "chars": 261,
    "preview": "images:\n  - name: cloudflared\n    dockerfile: Dockerfile.$ARCH\n    context: .\n    version_file: versions\n    registries:"
  },
  {
    "path": ".dockerignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".github/ISSUE_TEMPLATE/---bug-report.md",
    "chars": 758,
    "preview": "---\nname: \"\\U0001F41B Bug report\"\nabout: Create a report to help us improve cloudflared\ntitle: \"\\U0001F41B\"\nlabels: 'Pri"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/---documentation.md",
    "chars": 515,
    "preview": "---\nname: \"\\U0001F4DD Documentation\"\nabout: Request new or updated documentation for cloudflared\ntitle: \"\\U0001F4DD\"\nlab"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/---feature-request.md",
    "chars": 524,
    "preview": "---\nname: \"\\U0001F4A1 Feature request\"\nabout: Suggest a feature or enhancement for cloudflared\ntitle: \"\\U0001F4A1\"\nlabel"
  },
  {
    "path": ".github/workflows/check.yaml",
    "chars": 416,
    "preview": "on: [push, pull_request]\nname: Check\njobs:\n  check:\n    strategy:\n      matrix:\n        go-version: [1.22.x]\n        os:"
  },
  {
    "path": ".github/workflows/semgrep.yml",
    "chars": 586,
    "preview": "on:\n  pull_request: {}\n  workflow_dispatch: {}\n  push: \n    branches:\n      - main\n      - master\n  schedule:\n    - cron"
  },
  {
    "path": ".gitignore",
    "chars": 261,
    "preview": "/tmp\n/bin\n.idea\n.build\n.vscode\n\\#*\\#\ncscope.*\n/cloudflared\n/cloudflared.pkg\n/cloudflared.exe\n/cloudflared.msi\n/cloudflar"
  },
  {
    "path": ".gitlab-ci.yml",
    "chars": 2223,
    "preview": "variables:\n  GO_VERSION: \"1.24.13\"\n  MAC_GO_VERSION: \"go@$GO_VERSION\"\n  WIN_GO_VERSION: \"go$GO_VERSION\"\n  GIT_DEPTH: \"0\""
  },
  {
    "path": ".golangci.yaml",
    "chars": 5218,
    "preview": "linters:\n  enable:\n    # Some of the linters below are commented out. We should uncomment and start running them, but th"
  },
  {
    "path": ".mac_resources/scripts/postinstall",
    "chars": 188,
    "preview": "#!/bin/bash\n\n# uninstall first in case this is an upgrade\n/usr/local/bin/cloudflared service uninstall\n\n# install the ne"
  },
  {
    "path": ".mac_resources/uninstall.sh",
    "chars": 131,
    "preview": "#!/bin/bash\n\n/usr/local/bin/cloudflared service uninstall\nrm /usr/local/bin/cloudflared\npkgutil --forget com.cloudflare."
  },
  {
    "path": ".vulnignore",
    "chars": 129,
    "preview": "# Add vulnerability IDs (e.g., GO-2022-0450) to ignore, one per line.\n# You can also add comments on the same line after"
  },
  {
    "path": "AGENTS.md",
    "chars": 6496,
    "preview": "# Cloudflared\n\nCloudflare's command-line tool and networking daemon written in Go.\nProduction-grade tunneling and networ"
  },
  {
    "path": "CHANGES.md",
    "chars": 18897,
    "preview": "## 2026.2.0\n### Breaking Change\n- Removes the `proxy-dns` feature from cloudflared. This feature allowed running a local"
  },
  {
    "path": "Dockerfile",
    "chars": 1308,
    "preview": "# use a builder image for building cloudflare\nARG TARGET_GOOS\nARG TARGET_GOARCH\nFROM golang:1.24.13 AS builder\nENV GO111"
  },
  {
    "path": "Dockerfile.amd64",
    "chars": 1232,
    "preview": "# use a builder image for building cloudflare\nFROM golang:1.24.13 AS builder\nENV GO111MODULE=on \\\n  CGO_ENABLED=0 \\\n  # "
  },
  {
    "path": "Dockerfile.arm64",
    "chars": 1237,
    "preview": "# use a builder image for building cloudflare\nFROM golang:1.24.13 AS builder\nENV GO111MODULE=on \\\n  CGO_ENABLED=0 \\\n  # "
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "Makefile",
    "chars": 9079,
    "preview": "# The targets cannot be run in parallel\n.NOTPARALLEL:\n\nVERSION       := $(shell git describe --tags --always --match \"[0"
  },
  {
    "path": "README.md",
    "chars": 5506,
    "preview": "# Cloudflare Tunnel client\n\nContains the command-line client for Cloudflare Tunnel, a tunneling daemon that proxies traf"
  },
  {
    "path": "RELEASE_NOTES",
    "chars": 111391,
    "preview": "2026.3.0\n- 2026-03-05 TUN-10292: Add cloudflared management token command\n- 2026-03-03 chore: Addressing small fixes and"
  },
  {
    "path": "carrier/carrier.go",
    "chars": 5328,
    "preview": "// Package carrier provides a WebSocket proxy to carry or proxy a connection\n// from the local client to the edge. See i"
  },
  {
    "path": "carrier/carrier_test.go",
    "chars": 6397,
    "preview": "package carrier\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"sync\"\n\t\"testing\"\n\n\tws \"github.com/gor"
  },
  {
    "path": "carrier/websocket.go",
    "chars": 5977,
    "preview": "package carrier\n\nimport (\n\t\"io\"\n\t\"net/http\"\n\t\"net/http/httputil\"\n\t\"net/url\"\n\n\t\"github.com/gorilla/websocket\"\n\t\"github.co"
  },
  {
    "path": "carrier/websocket_test.go",
    "chars": 3554,
    "preview": "package carrier\n\nimport (\n\t\"context\"\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"testing\"\n\t\"time\"\n\n\tgws \"github.c"
  },
  {
    "path": "catalog-info.yaml",
    "chars": 510,
    "preview": "apiVersion: backstage.io/v1alpha1\nkind: Component\nmetadata:\n  name: cloudflared\n  description: Client for Cloudflare Tun"
  },
  {
    "path": "cfapi/base_client.go",
    "chars": 7071,
    "preview": "package cfapi\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/p"
  },
  {
    "path": "cfapi/client.go",
    "chars": 1316,
    "preview": "package cfapi\n\nimport (\n\t\"github.com/google/uuid\"\n)\n\ntype TunnelClient interface {\n\tCreateTunnel(name string, tunnelSecr"
  },
  {
    "path": "cfapi/hostname.go",
    "chars": 5244,
    "preview": "package cfapi\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"path\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/pkg/er"
  },
  {
    "path": "cfapi/hostname_test.go",
    "chars": 4143,
    "preview": "package cfapi\n\nimport (\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc TestDNSRouteUnmarshalResult"
  },
  {
    "path": "cfapi/ip_route.go",
    "chars": 6814,
    "preview": "package cfapi\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"path\"\n\t\"time\"\n\n\t\"github.com/google"
  },
  {
    "path": "cfapi/ip_route_filter.go",
    "chars": 4465,
    "preview": "package cfapi\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/pkg/errors\"\n"
  },
  {
    "path": "cfapi/ip_route_test.go",
    "chars": 4376,
    "preview": "package cfapi\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/str"
  },
  {
    "path": "cfapi/tunnel.go",
    "chars": 6819,
    "preview": "package cfapi\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"path\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"github.c"
  },
  {
    "path": "cfapi/tunnel_filter.go",
    "chars": 1164,
    "preview": "package cfapi\n\nimport (\n\t\"net/url\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n)\n\nconst (\n\tTimeLayout = time.RFC3339\n)"
  },
  {
    "path": "cfapi/tunnel_test.go",
    "chars": 5136,
    "preview": "package cfapi\n\nimport (\n\t\"bytes\"\n\t\"net\"\n\t\"reflect\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com"
  },
  {
    "path": "cfapi/virtual_network.go",
    "chars": 3510,
    "preview": "package cfapi\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"path\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"gith"
  },
  {
    "path": "cfapi/virtual_network_filter.go",
    "chars": 2364,
    "preview": "package cfapi\n\nimport (\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/pkg/errors\"\n\t\"github.com/urfave/cl"
  },
  {
    "path": "cfapi/virtual_network_test.go",
    "chars": 2053,
    "preview": "package cfapi\n\nimport (\n\t\"encoding/json\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/stretchr/"
  },
  {
    "path": "cfio/copy.go",
    "chars": 495,
    "preview": "package cfio\n\nimport (\n\t\"io\"\n\t\"sync\"\n)\n\nconst defaultBufferSize = 16 * 1024\n\nvar bufferPool = sync.Pool{\n\tNew: func() in"
  },
  {
    "path": "cfsetup.yaml",
    "chars": 95,
    "preview": "# A valid cfsetup.yaml is required but we dont have any real config to specify\ndummy_key: true\n"
  },
  {
    "path": "check-fips.sh",
    "chars": 524,
    "preview": "# Pass the path to the executable to check for FIPS compliance\nexe=$1\n\nif [ \"$(go tool nm \"${exe}\" | grep -c '_Cfunc__go"
  },
  {
    "path": "client/config.go",
    "chars": 2117,
    "preview": "package client\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/rs/zerolog\"\n\n\t\"github.com/cloudflare/clou"
  },
  {
    "path": "client/config_test.go",
    "chars": 1716,
    "preview": "package client\n\nimport (\n\t\"net\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n\n\t\"github.com/cloudflare/cloudflared/"
  },
  {
    "path": "cloudflared.wxs",
    "chars": 2533,
    "preview": "<?xml version=\"1.0\"?>\n\n<?if $(var.Platform)=\"x64\" ?>\n    <?define Program_Files=\"ProgramFiles64Folder\"?>\n<?else ?>\n    <"
  },
  {
    "path": "cloudflared_man_template",
    "chars": 414,
    "preview": ".\\\" Manpage for cloudflared.\n.TH man 1 ${DATE} \"${VERSION}\" \"cloudflared man page\"\n.SH NAME\ncloudflared \\- creates a con"
  },
  {
    "path": "cmd/cloudflared/access/carrier.go",
    "chars": 4684,
    "preview": "package access\n\nimport (\n\t\"crypto/tls\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/pkg/errors\"\n\t\"github.com/rs/zer"
  },
  {
    "path": "cmd/cloudflared/access/cmd.go",
    "chars": 17582,
    "preview": "package access\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"text/template\"\n\t\"time\"\n\n\t\"git"
  },
  {
    "path": "cmd/cloudflared/access/validation.go",
    "chars": 1452,
    "preview": "package access\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\n\t\"golang.org/x/net/http/httpguts\"\n)\n\n// par"
  },
  {
    "path": "cmd/cloudflared/access/validation_test.go",
    "chars": 2135,
    "preview": "package access\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc TestParseRequestHeaders(t *tes"
  },
  {
    "path": "cmd/cloudflared/app_forward_service.go",
    "chars": 1662,
    "preview": "package main\n\nimport (\n\t\"github.com/rs/zerolog\"\n\n\t\"github.com/cloudflare/cloudflared/cmd/cloudflared/access\"\n\t\"github.co"
  },
  {
    "path": "cmd/cloudflared/app_service.go",
    "chars": 2359,
    "preview": "package main\n\nimport (\n\t\"github.com/rs/zerolog\"\n\n\t\"github.com/cloudflare/cloudflared/config\"\n\t\"github.com/cloudflare/clo"
  },
  {
    "path": "cmd/cloudflared/cliutil/build_info.go",
    "chars": 1913,
    "preview": "package cliutil\n\nimport (\n\t\"crypto/sha256\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\"\n\n\t\"github.com/rs/zerolog\"\n)\n\ntype BuildInfo str"
  },
  {
    "path": "cmd/cloudflared/cliutil/deprecated.go",
    "chars": 464,
    "preview": "package cliutil\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/urfave/cli/v2\"\n)\n\nfunc RemovedCommand(name string) *cli.Command {\n\treturn"
  },
  {
    "path": "cmd/cloudflared/cliutil/errors.go",
    "chars": 821,
    "preview": "package cliutil\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/urfave/cli/v2\"\n)\n\ntype usageError string\n\nfunc (ue usageError) Error() st"
  },
  {
    "path": "cmd/cloudflared/cliutil/handler.go",
    "chars": 1407,
    "preview": "package cliutil\n\nimport (\n\t\"github.com/urfave/cli/v2\"\n\t\"github.com/urfave/cli/v2/altsrc\"\n\n\t\"github.com/cloudflare/cloudf"
  },
  {
    "path": "cmd/cloudflared/cliutil/logger.go",
    "chars": 2029,
    "preview": "package cliutil\n\nimport (\n\t\"github.com/urfave/cli/v2\"\n\t\"github.com/urfave/cli/v2/altsrc\"\n\n\t\"github.com/cloudflare/cloudf"
  },
  {
    "path": "cmd/cloudflared/cliutil/management.go",
    "chars": 2243,
    "preview": "package cliutil\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/mattn/go-colorabl"
  },
  {
    "path": "cmd/cloudflared/common_service.go",
    "chars": 782,
    "preview": "package main\n\nimport (\n\t\"github.com/rs/zerolog\"\n\t\"github.com/urfave/cli/v2\"\n\n\t\"github.com/cloudflare/cloudflared/cmd/clo"
  },
  {
    "path": "cmd/cloudflared/flags/flags.go",
    "chars": 7345,
    "preview": "package flags\n\nconst (\n\t// HaConnections specifies how many connections to make to the edge\n\tHaConnections = \"ha-connect"
  },
  {
    "path": "cmd/cloudflared/generic_service.go",
    "chars": 1119,
    "preview": "//go:build !windows && !darwin && !linux\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\tcli \"github.com/urfave/cli/v2\"\n\n\t\"github"
  },
  {
    "path": "cmd/cloudflared/linux_service.go",
    "chars": 12299,
    "preview": "//go:build linux\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\n\t\"github.com/rs/zerolog\"\n\t\"github.com/urfave/cli/v2\"\n\n\t\"git"
  },
  {
    "path": "cmd/cloudflared/macos_service.go",
    "chars": 6515,
    "preview": "//go:build darwin\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\thomedir \"github.com/mitchellh/go-homedir\"\n\t\"github.com/pkg/erro"
  },
  {
    "path": "cmd/cloudflared/main.go",
    "chars": 7212,
    "preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/getsentry/sentry-go\"\n\t\"github.com/urfave/cli/v2\"\n\t\""
  },
  {
    "path": "cmd/cloudflared/management/cmd.go",
    "chars": 2940,
    "preview": "package management\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/urfave/cli/v2\"\n\n\t\"github.com/cloudflare/cloudfl"
  },
  {
    "path": "cmd/cloudflared/management/cmd_test.go",
    "chars": 1512,
    "preview": "package management\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretchr/testify/require\"\n\n\t"
  },
  {
    "path": "cmd/cloudflared/proxydns/cmd.go",
    "chars": 1568,
    "preview": "package proxydns\n\nimport (\n\t\"errors\"\n\n\t\"github.com/urfave/cli/v2\"\n\t\"github.com/urfave/cli/v2/altsrc\"\n\n\t\"github.com/cloud"
  },
  {
    "path": "cmd/cloudflared/service_template.go",
    "chars": 2691,
    "preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"text/template\"\n\n\thomedir \"git"
  },
  {
    "path": "cmd/cloudflared/tail/cmd.go",
    "chars": 11631,
    "preview": "package tail\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n\t\"time\"\n\n\t"
  },
  {
    "path": "cmd/cloudflared/tunnel/cmd.go",
    "chars": 39996,
    "preview": "package tunnel\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime/trace\"\n\t\"strings\"\n\t\"sync"
  },
  {
    "path": "cmd/cloudflared/tunnel/cmd_test.go",
    "chars": 694,
    "preview": "package tunnel\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc TestHostnameFromURI(t *testing.T) {\n\t"
  },
  {
    "path": "cmd/cloudflared/tunnel/configuration.go",
    "chars": 16334,
    "preview": "package tunnel\n\nimport (\n\t\"context\"\n\t\"crypto/tls\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/netip\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/pkg/"
  },
  {
    "path": "cmd/cloudflared/tunnel/configuration_test.go",
    "chars": 6406,
    "preview": "//go:build ignore\n\n// TODO: Remove the above build tag and include this test when we start compiling with Golang 1.10.0+"
  },
  {
    "path": "cmd/cloudflared/tunnel/credential_finder.go",
    "chars": 2228,
    "preview": "package tunnel\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\n\tcfdflags \"github.com/cloudflare/cloudflared/cmd/cloudflared/flags\"\n\t\""
  },
  {
    "path": "cmd/cloudflared/tunnel/filesystem.go",
    "chars": 578,
    "preview": "package tunnel\n\nimport (\n\t\"os\"\n)\n\n// Abstract away details of reading files, so that SubcommandContext can read\n// from "
  },
  {
    "path": "cmd/cloudflared/tunnel/info.go",
    "chars": 324,
    "preview": "package tunnel\n\nimport (\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\n\t\"github.com/cloudflare/cloudflared/cfapi\"\n)\n\ntype Info str"
  },
  {
    "path": "cmd/cloudflared/tunnel/ingress_subcommands.go",
    "chars": 5123,
    "preview": "package tunnel\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/url\"\n\n\t\"github.com/cloudflare/cloudflared/cmd/cloudflared/cliutil"
  },
  {
    "path": "cmd/cloudflared/tunnel/login.go",
    "chars": 4149,
    "preview": "package tunnel\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"syscall\"\n\n\thomedir \"github.com/mitchellh/go-homedir\""
  },
  {
    "path": "cmd/cloudflared/tunnel/quick_tunnel.go",
    "chars": 4280,
    "preview": "package tunnel\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"githu"
  },
  {
    "path": "cmd/cloudflared/tunnel/signal.go",
    "chars": 543,
    "preview": "package tunnel\n\nimport (\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n\n\t\"github.com/rs/zerolog\"\n)\n\n// waitForSignal closes graceShutdow"
  },
  {
    "path": "cmd/cloudflared/tunnel/signal_test.go",
    "chars": 2542,
    "preview": "//go:build !windows\n\npackage tunnel\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"syscall\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/rs/zerolog\"\n\t\"g"
  },
  {
    "path": "cmd/cloudflared/tunnel/subcommand_context.go",
    "chars": 13383,
    "preview": "package tunnel\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/goog"
  },
  {
    "path": "cmd/cloudflared/tunnel/subcommand_context_teamnet.go",
    "chars": 1586,
    "preview": "package tunnel\n\nimport (\n\t\"net\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/pkg/errors\"\n\n\t\"github.com/cloudflare/cloudflared"
  },
  {
    "path": "cmd/cloudflared/tunnel/subcommand_context_test.go",
    "chars": 10517,
    "preview": "package tunnel\n\nimport (\n\t\"encoding/base64\"\n\t\"flag\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"gi"
  },
  {
    "path": "cmd/cloudflared/tunnel/subcommand_context_vnets.go",
    "chars": 1125,
    "preview": "package tunnel\n\nimport (\n\t\"github.com/google/uuid\"\n\t\"github.com/pkg/errors\"\n\n\t\"github.com/cloudflare/cloudflared/cfapi\"\n"
  },
  {
    "path": "cmd/cloudflared/tunnel/subcommands.go",
    "chars": 38239,
    "preview": "package tunnel\n\nimport (\n\t\"crypto/rand\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepa"
  },
  {
    "path": "cmd/cloudflared/tunnel/subcommands_test.go",
    "chars": 4448,
    "preview": "package tunnel\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/google/uuid\"\n\thom"
  },
  {
    "path": "cmd/cloudflared/tunnel/tag.go",
    "chars": 901,
    "preview": "package tunnel\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\n\t\"github.com/cloudflare/cloudflared/tunnelrpc/pogs\"\n)\n\n// Restrict key names "
  },
  {
    "path": "cmd/cloudflared/tunnel/tag_test.go",
    "chars": 1410,
    "preview": "package tunnel\n\nimport (\n\t\"testing\"\n\n\t\"github.com/cloudflare/cloudflared/tunnelrpc/pogs\"\n\n\t\"github.com/stretchr/testify/"
  },
  {
    "path": "cmd/cloudflared/tunnel/teamnet_subcommands.go",
    "chars": 8459,
    "preview": "package tunnel\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"text/tabwriter\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/pkg/errors\"\n\t\"git"
  },
  {
    "path": "cmd/cloudflared/tunnel/vnets_subcommands.go",
    "chars": 9902,
    "preview": "package tunnel\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"text/tabwriter\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/pkg/errors\"\n\t\"github.com"
  },
  {
    "path": "cmd/cloudflared/updater/check.go",
    "chars": 1042,
    "preview": "package updater\n\nimport (\n\t\"github.com/rs/zerolog\"\n\t\"github.com/urfave/cli/v2\"\n)\n\ntype VersionWarningChecker struct {\n\tw"
  },
  {
    "path": "cmd/cloudflared/updater/service.go",
    "chars": 1099,
    "preview": "package updater\n\n// CheckResult is the behaviour resulting from checking in with the Update Service\ntype CheckResult int"
  },
  {
    "path": "cmd/cloudflared/updater/update.go",
    "chars": 9012,
    "preview": "package updater\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/facebookg"
  },
  {
    "path": "cmd/cloudflared/updater/update_test.go",
    "chars": 1241,
    "preview": "package updater\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"testing\"\n\n\t\"github.com/facebookgo/grace/gracenet\"\n\t\"github.com/rs/zerolog"
  },
  {
    "path": "cmd/cloudflared/updater/workers_service.go",
    "chars": 2522,
    "preview": "package updater\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"runtime\"\n)\n\n// Options are the update options "
  },
  {
    "path": "cmd/cloudflared/updater/workers_service_test.go",
    "chars": 8592,
    "preview": "//go:build !windows\n\npackage updater\n\nimport (\n\t\"archive/tar\"\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"crypto/sha256\"\n\t\"encoding/json"
  },
  {
    "path": "cmd/cloudflared/updater/workers_update.go",
    "chars": 7293,
    "preview": "package updater\n\nimport (\n\t\"archive/tar\"\n\t\"compress/gzip\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/exec\""
  },
  {
    "path": "cmd/cloudflared/windows_service.go",
    "chars": 10696,
    "preview": "//go:build windows\n\npackage main\n\n// Copypasta from the example files:\n// https://github.com/golang/sys/blob/master/wind"
  },
  {
    "path": "component-tests/.gitignore",
    "chars": 26,
    "preview": "__pycache__\n.pytest_cache\n"
  },
  {
    "path": "component-tests/README.md",
    "chars": 1995,
    "preview": "# Requirements\n1. Python 3.10 or later with packages in the given `requirements.txt`\n   - E.g. with venv:\n   - `python3 "
  },
  {
    "path": "component-tests/cli.py",
    "chars": 5916,
    "preview": "import json\nimport subprocess\nfrom time import sleep\n\nfrom constants import MANAGEMENT_HOST_NAME\nfrom setup import get_c"
  },
  {
    "path": "component-tests/config.py",
    "chars": 3451,
    "preview": "#!/usr/bin/env python\nimport copy\nimport json\nimport base64\n\nfrom dataclasses import dataclass, InitVar\n\nfrom constants "
  },
  {
    "path": "component-tests/config.yaml",
    "chars": 336,
    "preview": "cloudflared_binary: \"cloudflared\"\ntunnel: \"ae21a96c-24d1-4ce8-a6ba-962cba5976d3\"\ncredentials_file: \"/Users/sudarsan/.clo"
  },
  {
    "path": "component-tests/conftest.py",
    "chars": 2107,
    "preview": "import os\nfrom enum import Enum, auto\nfrom time import sleep\n\nimport pytest\nimport yaml\n\nfrom config import NamedTunnelC"
  },
  {
    "path": "component-tests/constants.py",
    "chars": 173,
    "preview": "METRICS_PORT = 51000\nMAX_RETRIES = 5\nBACKOFF_SECS = 7\nMAX_LOG_LINES = 50\n\nMANAGEMENT_HOST_NAME = \"management.argotunnel."
  },
  {
    "path": "component-tests/requirements.txt",
    "chars": 135,
    "preview": "cloudflare==2.14.3\nflaky==3.7.0\npytest==7.3.1\npytest-asyncio==0.21.0\npyyaml==6.0.1\nrequests==2.28.2\nretrying==1.3.4\nwebs"
  },
  {
    "path": "component-tests/setup.py",
    "chars": 5126,
    "preview": "#!/usr/bin/env python\nimport argparse\nimport base64\nimport json\nimport os\nimport subprocess\nimport uuid\n\nimport CloudFla"
  },
  {
    "path": "component-tests/test_config.py",
    "chars": 2300,
    "preview": "#!/usr/bin/env python\nfrom util import start_cloudflared\n\n\nclass TestConfig:\n    # tmp_path is a fixture provides a temp"
  },
  {
    "path": "component-tests/test_edge_discovery.py",
    "chars": 7076,
    "preview": "import ipaddress\nimport socket\n\nimport pytest\n\nfrom constants import protocols\nfrom cli import CloudflaredCli\nfrom util "
  },
  {
    "path": "component-tests/test_logging.py",
    "chars": 3872,
    "preview": "#!/usr/bin/env python\nimport json\nimport os\n\nfrom constants import MAX_LOG_LINES\nfrom util import start_cloudflared, wai"
  },
  {
    "path": "component-tests/test_management.py",
    "chars": 8111,
    "preview": "#!/usr/bin/env python\nimport json\nimport requests\nfrom conftest import CfdModes\nfrom constants import METRICS_PORT, MAX_"
  },
  {
    "path": "component-tests/test_pq.py",
    "chars": 669,
    "preview": "from util import LOGGER, start_cloudflared, wait_tunnel_ready\n\n\nclass TestPostQuantum:\n    def _extra_config(self):\n    "
  },
  {
    "path": "component-tests/test_quicktunnels.py",
    "chars": 1211,
    "preview": "#!/usr/bin/env python\nfrom conftest import CfdModes\nfrom constants import METRICS_PORT\nimport time\nfrom util import LOGG"
  },
  {
    "path": "component-tests/test_reconnect.py",
    "chars": 2102,
    "preview": "#!/usr/bin/env python\nimport copy\nimport platform\nfrom time import sleep\n\nimport pytest\nfrom flaky import flaky\n\nfrom co"
  },
  {
    "path": "component-tests/test_service.py",
    "chars": 7554,
    "preview": "#!/usr/bin/env python\nimport os\nimport pathlib\nimport subprocess\nfrom contextlib import contextmanager\nfrom pathlib impo"
  },
  {
    "path": "component-tests/test_tail.py",
    "chars": 9483,
    "preview": "#!/usr/bin/env python\nimport asyncio\nimport json\nimport pytest\nimport requests\nimport websockets\nfrom websockets.client "
  },
  {
    "path": "component-tests/test_termination.py",
    "chars": 5537,
    "preview": "#!/usr/bin/env python\nfrom contextlib import contextmanager\nimport platform\nimport signal\nimport threading\nimport time\n\n"
  },
  {
    "path": "component-tests/test_token.py",
    "chars": 1120,
    "preview": "import base64\nimport json\n\nfrom setup import get_config_from_file\nfrom util import start_cloudflared\n\n\nclass TestToken:\n"
  },
  {
    "path": "component-tests/test_tunnel.py",
    "chars": 2877,
    "preview": "#!/usr/bin/env python\nimport requests\nfrom conftest import CfdModes\nfrom constants import METRICS_PORT, MAX_RETRIES, BAC"
  },
  {
    "path": "component-tests/util.py",
    "chars": 7774,
    "preview": "import logging\nimport os\nimport platform\nimport subprocess\nfrom contextlib import contextmanager\nfrom time import sleep\n"
  },
  {
    "path": "config/configuration.go",
    "chars": 15214,
    "preview": "package config\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"time\"\n\n"
  },
  {
    "path": "config/configuration_test.go",
    "chars": 5320,
    "preview": "package config\n\nimport (\n\t\"encoding/json\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretch"
  },
  {
    "path": "config/manager.go",
    "chars": 2733,
    "preview": "package config\n\nimport (\n\t\"io\"\n\t\"os\"\n\n\t\"github.com/pkg/errors\"\n\t\"github.com/rs/zerolog\"\n\tyaml \"gopkg.in/yaml.v3\"\n\n\t\"gith"
  },
  {
    "path": "config/manager_test.go",
    "chars": 2068,
    "preview": "package config\n\nimport (\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/rs/zerolog\"\n\t\"github.com/stretchr/testify/assert\"\n\n\t\"github.com/"
  },
  {
    "path": "config/model.go",
    "chars": 1508,
    "preview": "package config\n\nimport (\n\t\"crypto/sha256\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// Forwarder represents a client side listener to forward traf"
  },
  {
    "path": "connection/connection.go",
    "chars": 8904,
    "preview": "package connection\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\""
  },
  {
    "path": "connection/connection_test.go",
    "chars": 6435,
    "preview": "package connection\n\nimport (\n\t\"context\"\n\t\"crypto/rand\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/big\"\n\t\"net/http\"\n\t\"testing\"\n\t\"time\"\n\n\tpkgerro"
  },
  {
    "path": "connection/control.go",
    "chars": 5027,
    "preview": "package connection\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/pkg/errors\"\n\n\t\"github.com/cloudflare/cloudfla"
  },
  {
    "path": "connection/errors.go",
    "chars": 1697,
    "preview": "package connection\n\nimport (\n\ttunnelpogs \"github.com/cloudflare/cloudflared/tunnelrpc/pogs\"\n)\n\nconst (\n\tDuplicateConnect"
  },
  {
    "path": "connection/event.go",
    "chars": 896,
    "preview": "package connection\n\nimport \"net\"\n\n// Event is something that happened to a connection, e.g. disconnection or registratio"
  },
  {
    "path": "connection/header.go",
    "chars": 4595,
    "preview": "package connection\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/pkg/errors\"\n)\n\nvar (\n\t// int"
  },
  {
    "path": "connection/header_test.go",
    "chars": 3720,
    "preview": "package connection\n\nimport (\n\t\"net/http\"\n\t\"reflect\"\n\t\"sort\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc T"
  },
  {
    "path": "connection/http2.go",
    "chars": 12037,
    "preview": "package connection\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\tgojson \"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"runtime/debug"
  },
  {
    "path": "connection/http2_test.go",
    "chars": 14943,
    "preview": "package connection\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"sync\"\n"
  },
  {
    "path": "connection/json.go",
    "chars": 106,
    "preview": "package connection\n\nimport (\n\tjsoniter \"github.com/json-iterator/go\"\n)\n\nvar json = jsoniter.ConfigFastest\n"
  },
  {
    "path": "connection/metrics.go",
    "chars": 4626,
    "preview": "package connection\n\nimport (\n\t\"sync\"\n\n\t\"github.com/prometheus/client_golang/prometheus\"\n)\n\nconst (\n\tMetricsNamespace = \""
  },
  {
    "path": "connection/observer.go",
    "chars": 3528,
    "preview": "package connection\n\nimport (\n\t\"net\"\n\t\"strings\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/rs/zerolog\"\n\n\t\"github.com/cloudfl"
  },
  {
    "path": "connection/observer_test.go",
    "chars": 2467,
    "preview": "package connection\n\nimport (\n\t\"strconv\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/prometheus/client_golang/prometheus\"\n\td"
  },
  {
    "path": "connection/protocol.go",
    "chars": 6816,
    "preview": "package connection\n\nimport (\n\t\"fmt\"\n\t\"hash/fnv\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/rs/zerolog\"\n\n\t\"github.com/cloudflare/cloud"
  },
  {
    "path": "connection/protocol_test.go",
    "chars": 6098,
    "preview": "package connection\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\n\t\"github.com/cloudflare/cloudflar"
  },
  {
    "path": "connection/quic.go",
    "chars": 2744,
    "preview": "package connection\n\nimport (\n\t\"context\"\n\t\"crypto/tls\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/netip\"\n\t\"runtime\"\n\t\"sync\"\n\n\t\"github.com/quic-g"
  },
  {
    "path": "connection/quic_connection.go",
    "chars": 15589,
    "preview": "package connection\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync/"
  },
  {
    "path": "connection/quic_connection_test.go",
    "chars": 24076,
    "preview": "package connection\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"encoding/pe"
  },
  {
    "path": "connection/quic_datagram_v2.go",
    "chars": 9266,
    "preview": "package connection\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/netip\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/pkg/e"
  },
  {
    "path": "connection/quic_datagram_v2_test.go",
    "chars": 2292,
    "preview": "package connection\n\nimport (\n\t\"context\"\n\t\"net\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/quic-go/quic-g"
  },
  {
    "path": "connection/quic_datagram_v3.go",
    "chars": 2044,
    "preview": "package connection\n\nimport (\n\t\"context\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/pkg/errors\"\n\t\"github.com/"
  },
  {
    "path": "connection/tunnelsforha.go",
    "chars": 1287,
    "preview": "package connection\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/prometheus/client_golang/prometheus\"\n)\n\n// tunnelsForHA maps t"
  },
  {
    "path": "credentials/credentials.go",
    "chars": 2182,
    "preview": "package credentials\n\nimport (\n\t\"github.com/pkg/errors\"\n\t\"github.com/rs/zerolog\"\n\n\t\"github.com/cloudflare/cloudflared/cfa"
  },
  {
    "path": "credentials/credentials_test.go",
    "chars": 1046,
    "preview": "package credentials\n\nimport (\n\t\"io/fs\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc"
  },
  {
    "path": "credentials/origin_cert.go",
    "chars": 4674,
    "preview": "package credentials\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"encoding/pem\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"gith"
  },
  {
    "path": "credentials/origin_cert_test.go",
    "chars": 2895,
    "preview": "package credentials\n\nimport (\n\t\"fmt\"\n\t\"io/fs\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/rs/zerolog\"\n\t\"github.com/s"
  },
  {
    "path": "credentials/test-cert-no-token.pem",
    "chars": 3344,
    "preview": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCfGswL16Fz9Ei3\nsAg5AmBizoN2nZdyXHP8T57UxUM"
  },
  {
    "path": "credentials/test-cert-unknown-block.pem",
    "chars": 5334,
    "preview": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCfGswL16Fz9Ei3\nsAg5AmBizoN2nZdyXHP8T57UxUM"
  },
  {
    "path": "credentials/test-cloudflare-tunnel-cert-json.pem",
    "chars": 3389,
    "preview": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCfGswL16Fz9Ei3\nsAg5AmBizoN2nZdyXHP8T57UxUM"
  },
  {
    "path": "datagramsession/event.go",
    "chars": 1126,
    "preview": "package datagramsession\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/google/uuid\"\n)\n\n// registerSessionEvent is an event to star"
  },
  {
    "path": "datagramsession/manager.go",
    "chars": 6070,
    "preview": "package datagramsession\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/rs/"
  },
  {
    "path": "datagramsession/manager_test.go",
    "chars": 6556,
    "preview": "package datagramsession\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/googl"
  },
  {
    "path": "datagramsession/metrics.go",
    "chars": 821,
    "preview": "package datagramsession\n\nimport (\n\t\"github.com/prometheus/client_golang/prometheus\"\n)\n\nconst (\n\tnamespace = \"cloudflared"
  },
  {
    "path": "datagramsession/session.go",
    "chars": 4644,
    "preview": "package datagramsession\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"github.c"
  },
  {
    "path": "datagramsession/session_test.go",
    "chars": 6751,
    "preview": "package datagramsession\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/googl"
  },
  {
    "path": "diagnostic/client.go",
    "chars": 5273,
    "preview": "package diagnostic\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\n\tcfdflags \"gith"
  },
  {
    "path": "diagnostic/consts.go",
    "chars": 1952,
    "preview": "package diagnostic\n\nimport \"time\"\n\nconst (\n\tdefaultCollectorTimeout    = time.Second * 10       // This const define the"
  },
  {
    "path": "diagnostic/diagnostic.go",
    "chars": 14385,
    "preview": "package diagnostic\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"stri"
  },
  {
    "path": "diagnostic/diagnostic_utils.go",
    "chars": 3801,
    "preview": "package diagnostic\n\nimport (\n\t\"archive/zip\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t"
  },
  {
    "path": "diagnostic/diagnostic_utils_test.go",
    "chars": 3754,
    "preview": "package diagnostic_test\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/facebookgo/"
  },
  {
    "path": "diagnostic/error.go",
    "chars": 1518,
    "preview": "package diagnostic\n\nimport (\n\t\"errors\"\n)\n\nvar (\n\t// Error used when there is no log directory available.\n\tErrManagedLogN"
  },
  {
    "path": "diagnostic/handlers.go",
    "chars": 4060,
    "preview": "package diagnostic\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/http\"\n\t\"os\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/google/uuid\""
  },
  {
    "path": "diagnostic/handlers_test.go",
    "chars": 5368,
    "preview": "package diagnostic_test\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"runtim"
  },
  {
    "path": "diagnostic/log_collector.go",
    "chars": 879,
    "preview": "package diagnostic\n\nimport (\n\t\"context\"\n)\n\n// Represents the path of the log file or log directory.\n// This struct is me"
  },
  {
    "path": "diagnostic/log_collector_docker.go",
    "chars": 917,
    "preview": "package diagnostic\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"time\"\n)\n\ntype DockerLogCollector stru"
  },
  {
    "path": "diagnostic/log_collector_host.go",
    "chars": 2470,
    "preview": "package diagnostic\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n)\n\nconst (\n\tlinuxManagedLogs"
  },
  {
    "path": "diagnostic/log_collector_kubernetes.go",
    "chars": 1300,
    "preview": "package diagnostic\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"time\"\n)\n\ntype KubernetesLogCollector "
  },
  {
    "path": "diagnostic/log_collector_utils.go",
    "chars": 2511,
    "preview": "package diagnostic\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n)\n\nfunc PipeCommandOutputToFile(command *exe"
  },
  {
    "path": "diagnostic/network/collector.go",
    "chars": 1699,
    "preview": "package diagnostic\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"time\"\n)\n\nconst MicrosecondsFactor = 1000.0\n\nvar ErrEmptyDomain = err"
  }
]

// ... and 2952 more files (download for full content)

About this extraction

This page contains the full source code of the cloudflare/cloudflared GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3152 files (31.3 MB), approximately 4.1M tokens, and a symbol index with 30528 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!