pairling 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -1
- package/payload/mac/SOURCE_BRANCH +1 -0
- package/payload/mac/SOURCE_DIRTY +1 -0
- package/payload/mac/SOURCE_REVISION +1 -0
- package/payload/mac/VERSION +1 -0
- package/payload/mac/companiond/integrations/__init__.py +1 -0
- package/payload/mac/companiond/integrations/aperture_cli/__init__.py +23 -0
- package/payload/mac/companiond/integrations/aperture_cli/launch.py +456 -0
- package/payload/mac/companiond/integrations/aperture_cli/status.py +393 -0
- package/payload/mac/companiond/live_activity_publisher.py +380 -0
- package/payload/mac/companiond/llm_route.py +108 -0
- package/payload/mac/companiond/local_mcp_bridge.py +156 -0
- package/payload/mac/companiond/model_status_contract.py +101 -0
- package/payload/mac/companiond/pairdrop_store.py +920 -0
- package/payload/mac/companiond/pairling_connectd_status.py +149 -0
- package/payload/mac/companiond/pairling_devices.py +459 -0
- package/payload/mac/companiond/pairling_pairing.py +404 -0
- package/payload/mac/companiond/pairling_relay_claims.py +232 -0
- package/payload/mac/companiond/pairling_tools.py +706 -0
- package/payload/mac/companiond/pairlingd.py +18438 -0
- package/payload/mac/companiond/providers/__init__.py +1 -0
- package/payload/mac/companiond/providers/base.py +255 -0
- package/payload/mac/companiond/providers/claude.py +127 -0
- package/payload/mac/companiond/providers/codex.py +124 -0
- package/payload/mac/companiond/providers/external.py +46 -0
- package/payload/mac/companiond/providers/registry.py +70 -0
- package/payload/mac/companiond/pty_broker.py +887 -0
- package/payload/mac/companiond/push_dispatcher.py +1990 -0
- package/payload/mac/companiond/push_event_catalog.py +566 -0
- package/payload/mac/companiond/request_proof.py +142 -0
- package/payload/mac/companiond/runtime_contract.py +47 -0
- package/payload/mac/companiond/runtime_manifest.py +197 -0
- package/payload/mac/companiond/runtime_paths.py +87 -0
- package/payload/mac/companiond/safety_monitor.py +542 -0
- package/payload/mac/companiond/sentinel_notifications.py +491 -0
- package/payload/mac/companiond/standard_push_publisher.py +516 -0
- package/payload/mac/companiond/substrate_status_contract.py +139 -0
- package/payload/mac/companiond/terminal_screen_backend.py +332 -0
- package/payload/mac/companiond/terminal_text_sanitizer.py +54 -0
- package/payload/mac/companiond/workstate_feed_contract.py +108 -0
- package/payload/mac/connectd/cmd/pairling-connectd/auth_open_test.go +116 -0
- package/payload/mac/connectd/cmd/pairling-connectd/main.go +345 -0
- package/payload/mac/connectd/cmd/pairling-connectd/upstream_health_test.go +33 -0
- package/payload/mac/connectd/go.mod +51 -0
- package/payload/mac/connectd/go.sum +229 -0
- package/payload/mac/connectd/internal/gateway/proxy.go +597 -0
- package/payload/mac/connectd/internal/gateway/proxy_test.go +531 -0
- package/payload/mac/connectd/internal/runtime/config.go +99 -0
- package/payload/mac/connectd/internal/runtime/config_test.go +29 -0
- package/payload/mac/connectd/internal/status/status.go +300 -0
- package/payload/mac/connectd/internal/status/status_test.go +263 -0
- package/payload/mac/guardian/companion-power-guardian.py +613 -0
- package/payload/mac/guardian/guardian_contract.py +67 -0
- package/payload/mac/install/bootstrap-first-run.sh +206 -0
- package/payload/mac/install/doctor.sh +660 -0
- package/payload/mac/install/install-runtime.sh +1241 -0
- package/payload/mac/install/render-launchd.py +119 -0
- package/payload/mac/install/uninstall-runtime.sh +136 -0
- package/payload/mac/mcp/phone_tools.py +210 -0
- package/payload/mac/packaging/bin/pairling +63 -0
- package/payload-manifest.json +255 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"context"
|
|
5
|
+
"encoding/json"
|
|
6
|
+
"errors"
|
|
7
|
+
"flag"
|
|
8
|
+
"fmt"
|
|
9
|
+
"io"
|
|
10
|
+
"log"
|
|
11
|
+
"net"
|
|
12
|
+
"net/http"
|
|
13
|
+
"net/url"
|
|
14
|
+
"os"
|
|
15
|
+
"os/exec"
|
|
16
|
+
"os/signal"
|
|
17
|
+
"path/filepath"
|
|
18
|
+
"strconv"
|
|
19
|
+
"strings"
|
|
20
|
+
"syscall"
|
|
21
|
+
"time"
|
|
22
|
+
|
|
23
|
+
"dev.pairling/connectd/internal/gateway"
|
|
24
|
+
runtimecfg "dev.pairling/connectd/internal/runtime"
|
|
25
|
+
"dev.pairling/connectd/internal/status"
|
|
26
|
+
"tailscale.com/tsnet"
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
func main() {
|
|
30
|
+
os.Exit(run(os.Args[1:]))
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
func run(args []string) int {
|
|
34
|
+
fs := flag.NewFlagSet("pairling-connectd", flag.ContinueOnError)
|
|
35
|
+
fs.SetOutput(os.Stderr)
|
|
36
|
+
|
|
37
|
+
home, _ := os.UserHomeDir()
|
|
38
|
+
appSupport := runtimecfg.DefaultAppSupportRoot(home)
|
|
39
|
+
defaultStateDir := runtimecfg.DefaultStateDir(home)
|
|
40
|
+
defaultHostname := runtimecfg.HostnameFromInstallID(runtimecfg.LoadInstallID(appSupport))
|
|
41
|
+
|
|
42
|
+
upstreamRaw := fs.String("upstream", "http://127.0.0.1:7773", "Pairling daemon upstream URL")
|
|
43
|
+
listenAddr := fs.String("listen", ":7773", "tailnet-only service listen address")
|
|
44
|
+
statusAddr := fs.String("status-addr", "127.0.0.1:7774", "loopback status server address")
|
|
45
|
+
stateDir := fs.String("state-dir", defaultStateDir, "tsnet state directory")
|
|
46
|
+
hostname := fs.String("hostname", defaultHostname, "tailnet hostname for this Pairling Connect node")
|
|
47
|
+
controlURL := fs.String("control-url", "", "advanced: custom Tailscale-compatible control server URL")
|
|
48
|
+
maxBodyBytes := fs.Int64("max-body-bytes", 1_000_000, "maximum proxied request body size")
|
|
49
|
+
verbose := fs.Bool("verbose", false, "enable verbose tsnet backend logs")
|
|
50
|
+
|
|
51
|
+
if err := fs.Parse(args); err != nil {
|
|
52
|
+
if errors.Is(err, flag.ErrHelp) {
|
|
53
|
+
return 0
|
|
54
|
+
}
|
|
55
|
+
return 2
|
|
56
|
+
}
|
|
57
|
+
if strings.TrimSpace(*hostname) == "" {
|
|
58
|
+
*hostname = runtimecfg.HostnameFromInstallID("")
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
upstream, err := url.Parse(*upstreamRaw)
|
|
62
|
+
if err != nil {
|
|
63
|
+
log.Printf("invalid upstream: %v", err)
|
|
64
|
+
return 2
|
|
65
|
+
}
|
|
66
|
+
if err := ensurePrivateDir(*stateDir); err != nil {
|
|
67
|
+
log.Printf("cannot prepare state dir: %v", err)
|
|
68
|
+
return 1
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
statusStore := status.NewStore(*hostname)
|
|
72
|
+
statusStore.SetControlURLMode(controlURLMode(*controlURL))
|
|
73
|
+
statusStore.SetListenPort(listenPort(*listenAddr))
|
|
74
|
+
statusStore.SetConnectdVersion(status.DefaultConnectdVersion)
|
|
75
|
+
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
|
|
76
|
+
defer stop()
|
|
77
|
+
|
|
78
|
+
statusServer := startStatusServer(*statusAddr, statusStore)
|
|
79
|
+
defer shutdownHTTPServer(statusServer)
|
|
80
|
+
|
|
81
|
+
go monitorUpstream(ctx, upstream, statusStore)
|
|
82
|
+
|
|
83
|
+
srv := &tsnet.Server{
|
|
84
|
+
Dir: *stateDir,
|
|
85
|
+
Hostname: *hostname,
|
|
86
|
+
ControlURL: strings.TrimSpace(*controlURL),
|
|
87
|
+
UserLogf: userLogf(statusStore),
|
|
88
|
+
}
|
|
89
|
+
if *verbose {
|
|
90
|
+
srv.Logf = func(format string, args ...any) {
|
|
91
|
+
log.Printf("tsnet: "+format, args...)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
handler, err := gateway.NewHandler(gateway.Options{
|
|
96
|
+
Upstream: upstream,
|
|
97
|
+
MaxBodyBytes: *maxBodyBytes,
|
|
98
|
+
Mode: gateway.ExposureModePairlingConnect,
|
|
99
|
+
Logger: gatewayLogger{store: statusStore},
|
|
100
|
+
RateLimiter: gateway.NewMemoryRateLimiter(20, 5*time.Minute),
|
|
101
|
+
})
|
|
102
|
+
if err != nil {
|
|
103
|
+
log.Printf("cannot create gateway: %v", err)
|
|
104
|
+
return 1
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
ln, err := srv.Listen("tcp", *listenAddr)
|
|
108
|
+
if err != nil {
|
|
109
|
+
statusStore.SetLastError(err.Error())
|
|
110
|
+
log.Printf("cannot start tailnet listener: %v", err)
|
|
111
|
+
return 1
|
|
112
|
+
}
|
|
113
|
+
defer srv.Close()
|
|
114
|
+
statusStore.SetListenerRunning(true)
|
|
115
|
+
go monitorTailnetIPs(ctx, srv, statusStore)
|
|
116
|
+
|
|
117
|
+
log.Printf("pairling-connectd hostname=%s state_dir=%s listen=%s upstream=%s status=%s", *hostname, *stateDir, *listenAddr, upstream.String(), *statusAddr)
|
|
118
|
+
server := &http.Server{
|
|
119
|
+
Handler: handler,
|
|
120
|
+
ReadHeaderTimeout: 10 * time.Second,
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
errCh := make(chan error, 1)
|
|
124
|
+
go func() {
|
|
125
|
+
errCh <- server.Serve(ln)
|
|
126
|
+
}()
|
|
127
|
+
|
|
128
|
+
select {
|
|
129
|
+
case <-ctx.Done():
|
|
130
|
+
shutdownHTTPServer(server)
|
|
131
|
+
return 0
|
|
132
|
+
case err := <-errCh:
|
|
133
|
+
if err != nil && !errors.Is(err, http.ErrServerClosed) {
|
|
134
|
+
statusStore.SetLastError(err.Error())
|
|
135
|
+
log.Printf("tailnet server stopped: %v", err)
|
|
136
|
+
return 1
|
|
137
|
+
}
|
|
138
|
+
return 0
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
func controlURLMode(raw string) string {
|
|
143
|
+
if strings.TrimSpace(raw) == "" {
|
|
144
|
+
return status.DefaultControlURLMode
|
|
145
|
+
}
|
|
146
|
+
return status.CustomControlURLMode
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
func listenPort(addr string) int {
|
|
150
|
+
addr = strings.TrimSpace(addr)
|
|
151
|
+
if addr == "" {
|
|
152
|
+
return status.DefaultListenPort
|
|
153
|
+
}
|
|
154
|
+
_, portString, err := net.SplitHostPort(addr)
|
|
155
|
+
if err != nil {
|
|
156
|
+
if strings.HasPrefix(addr, ":") {
|
|
157
|
+
portString = strings.TrimPrefix(addr, ":")
|
|
158
|
+
} else {
|
|
159
|
+
idx := strings.LastIndex(addr, ":")
|
|
160
|
+
if idx >= 0 && idx < len(addr)-1 {
|
|
161
|
+
portString = addr[idx+1:]
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
port, err := strconv.Atoi(portString)
|
|
166
|
+
if err != nil || port <= 0 {
|
|
167
|
+
return status.DefaultListenPort
|
|
168
|
+
}
|
|
169
|
+
return port
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
type gatewayLogger struct {
|
|
173
|
+
store *status.Store
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
func (l gatewayLogger) Log(event gateway.Event) {
|
|
177
|
+
log.Printf("gateway method=%s path=%s status=%d outcome=%s", event.Method, event.Path, event.Status, event.Outcome)
|
|
178
|
+
if l.store != nil {
|
|
179
|
+
l.store.RecordGatewayEvent(event.Method, event.Path, event.Status, event.Outcome)
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
func userLogf(store *status.Store) func(string, ...any) {
|
|
184
|
+
return func(format string, args ...any) {
|
|
185
|
+
msg := fmt.Sprintf(format, args...)
|
|
186
|
+
redacted := status.Redact(msg)
|
|
187
|
+
log.Printf("tailscale: %s", redacted)
|
|
188
|
+
if strings.Contains(msg, "login.tailscale.com") || strings.Contains(strings.ToLower(msg), "auth") {
|
|
189
|
+
store.SetAuthPending(msg)
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
func ensurePrivateDir(path string) error {
|
|
195
|
+
if strings.TrimSpace(path) == "" {
|
|
196
|
+
return errors.New("state dir is required")
|
|
197
|
+
}
|
|
198
|
+
cleaned := filepath.Clean(path)
|
|
199
|
+
if err := os.MkdirAll(cleaned, 0o700); err != nil {
|
|
200
|
+
return err
|
|
201
|
+
}
|
|
202
|
+
return os.Chmod(cleaned, 0o700)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
func startStatusServer(addr string, store *status.Store) *http.Server {
|
|
206
|
+
mux := http.NewServeMux()
|
|
207
|
+
mux.Handle("/status", store.Handler())
|
|
208
|
+
mux.HandleFunc("/auth/open", func(w http.ResponseWriter, r *http.Request) {
|
|
209
|
+
handleAuthOpen(w, r, store)
|
|
210
|
+
})
|
|
211
|
+
mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
|
|
212
|
+
w.Header().Set("Content-Type", "application/json")
|
|
213
|
+
_, _ = w.Write([]byte(`{"ok":true}` + "\n"))
|
|
214
|
+
})
|
|
215
|
+
server := &http.Server{
|
|
216
|
+
Addr: addr,
|
|
217
|
+
Handler: mux,
|
|
218
|
+
ReadHeaderTimeout: 5 * time.Second,
|
|
219
|
+
}
|
|
220
|
+
go func() {
|
|
221
|
+
if err := server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
|
|
222
|
+
log.Printf("status server stopped: %v", err)
|
|
223
|
+
store.SetLastError(err.Error())
|
|
224
|
+
}
|
|
225
|
+
}()
|
|
226
|
+
return server
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
var openAuthURL = func(rawURL string) error {
|
|
230
|
+
return exec.Command("/usr/bin/open", rawURL).Start()
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
func handleAuthOpen(w http.ResponseWriter, r *http.Request, store *status.Store) {
|
|
234
|
+
if r.Method != http.MethodPost {
|
|
235
|
+
http.Error(w, "POST required", http.StatusMethodNotAllowed)
|
|
236
|
+
return
|
|
237
|
+
}
|
|
238
|
+
if !isLoopbackRemote(r.RemoteAddr) {
|
|
239
|
+
http.Error(w, "loopback required", http.StatusForbidden)
|
|
240
|
+
return
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
w.Header().Set("Content-Type", "application/json")
|
|
244
|
+
rawURL, ok := store.AuthURLForOpen()
|
|
245
|
+
if !ok {
|
|
246
|
+
w.WriteHeader(http.StatusConflict)
|
|
247
|
+
_ = json.NewEncoder(w).Encode(map[string]any{
|
|
248
|
+
"ok": false,
|
|
249
|
+
"opened": false,
|
|
250
|
+
"auth_url_present": store.Snapshot().AuthURLPresent,
|
|
251
|
+
"error": "Pairling Connect auth URL is not available yet.",
|
|
252
|
+
})
|
|
253
|
+
return
|
|
254
|
+
}
|
|
255
|
+
if err := openAuthURL(rawURL); err != nil {
|
|
256
|
+
w.WriteHeader(http.StatusInternalServerError)
|
|
257
|
+
_ = json.NewEncoder(w).Encode(map[string]any{
|
|
258
|
+
"ok": false,
|
|
259
|
+
"opened": false,
|
|
260
|
+
"auth_url_present": true,
|
|
261
|
+
"error": "Pairling Connect could not open browser approval.",
|
|
262
|
+
})
|
|
263
|
+
return
|
|
264
|
+
}
|
|
265
|
+
_ = json.NewEncoder(w).Encode(map[string]any{
|
|
266
|
+
"ok": true,
|
|
267
|
+
"opened": true,
|
|
268
|
+
"auth_url_present": true,
|
|
269
|
+
})
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
func isLoopbackRemote(remoteAddr string) bool {
|
|
273
|
+
host, _, err := net.SplitHostPort(remoteAddr)
|
|
274
|
+
if err != nil {
|
|
275
|
+
host = remoteAddr
|
|
276
|
+
}
|
|
277
|
+
ip := net.ParseIP(strings.TrimSpace(host))
|
|
278
|
+
return ip != nil && ip.IsLoopback()
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
func shutdownHTTPServer(server *http.Server) {
|
|
282
|
+
if server == nil {
|
|
283
|
+
return
|
|
284
|
+
}
|
|
285
|
+
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
|
286
|
+
defer cancel()
|
|
287
|
+
_ = server.Shutdown(ctx)
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
func monitorUpstream(ctx context.Context, upstream *url.URL, store *status.Store) {
|
|
291
|
+
ticker := time.NewTicker(5 * time.Second)
|
|
292
|
+
defer ticker.Stop()
|
|
293
|
+
check := func() {
|
|
294
|
+
store.SetUpstreamReachable(checkUpstream(upstream))
|
|
295
|
+
}
|
|
296
|
+
check()
|
|
297
|
+
for {
|
|
298
|
+
select {
|
|
299
|
+
case <-ctx.Done():
|
|
300
|
+
return
|
|
301
|
+
case <-ticker.C:
|
|
302
|
+
check()
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
func checkUpstream(upstream *url.URL) bool {
|
|
308
|
+
if upstream == nil {
|
|
309
|
+
return false
|
|
310
|
+
}
|
|
311
|
+
healthURL := *upstream
|
|
312
|
+
healthURL.Path = strings.TrimRight(healthURL.Path, "/") + "/readyz"
|
|
313
|
+
healthURL.RawQuery = ""
|
|
314
|
+
client := http.Client{Timeout: 2 * time.Second}
|
|
315
|
+
resp, err := client.Get(healthURL.String())
|
|
316
|
+
if err != nil {
|
|
317
|
+
return false
|
|
318
|
+
}
|
|
319
|
+
_, _ = io.Copy(io.Discard, resp.Body)
|
|
320
|
+
_ = resp.Body.Close()
|
|
321
|
+
return resp.StatusCode < 500
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
func monitorTailnetIPs(ctx context.Context, srv *tsnet.Server, store *status.Store) {
|
|
325
|
+
ticker := time.NewTicker(2 * time.Second)
|
|
326
|
+
defer ticker.Stop()
|
|
327
|
+
update := func() {
|
|
328
|
+
ip4, _ := srv.TailscaleIPs()
|
|
329
|
+
if ip4.IsValid() {
|
|
330
|
+
store.SetTailnetIP(ip4.String())
|
|
331
|
+
store.SetAuthenticated()
|
|
332
|
+
return
|
|
333
|
+
}
|
|
334
|
+
store.SetAuthPending("")
|
|
335
|
+
}
|
|
336
|
+
update()
|
|
337
|
+
for {
|
|
338
|
+
select {
|
|
339
|
+
case <-ctx.Done():
|
|
340
|
+
return
|
|
341
|
+
case <-ticker.C:
|
|
342
|
+
update()
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"net/http"
|
|
5
|
+
"net/http/httptest"
|
|
6
|
+
"net/url"
|
|
7
|
+
"testing"
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
func TestCheckUpstreamUsesCheapReadyzEndpoint(t *testing.T) {
|
|
11
|
+
var gotPath string
|
|
12
|
+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
13
|
+
gotPath = r.URL.Path
|
|
14
|
+
if r.URL.Path != "/readyz" {
|
|
15
|
+
http.Error(w, "expensive health path called", http.StatusInternalServerError)
|
|
16
|
+
return
|
|
17
|
+
}
|
|
18
|
+
w.WriteHeader(http.StatusNoContent)
|
|
19
|
+
}))
|
|
20
|
+
defer server.Close()
|
|
21
|
+
|
|
22
|
+
upstream, err := url.Parse(server.URL)
|
|
23
|
+
if err != nil {
|
|
24
|
+
t.Fatal(err)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if !checkUpstream(upstream) {
|
|
28
|
+
t.Fatal("checkUpstream returned false for readyz success")
|
|
29
|
+
}
|
|
30
|
+
if gotPath != "/readyz" {
|
|
31
|
+
t.Fatalf("checkUpstream path = %q, want /readyz", gotPath)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module dev.pairling/connectd
|
|
2
|
+
|
|
3
|
+
go 1.26.3
|
|
4
|
+
|
|
5
|
+
require tailscale.com v1.98.3
|
|
6
|
+
|
|
7
|
+
require (
|
|
8
|
+
filippo.io/edwards25519 v1.2.0 // indirect
|
|
9
|
+
github.com/akutz/memconn v0.1.0 // indirect
|
|
10
|
+
github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa // indirect
|
|
11
|
+
github.com/coder/websocket v1.8.12 // indirect
|
|
12
|
+
github.com/creachadair/msync v0.7.1 // indirect
|
|
13
|
+
github.com/dblohm7/wingoes v0.0.0-20240119213807-a09d6be7affa // indirect
|
|
14
|
+
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
|
|
15
|
+
github.com/gaissmai/bart v0.26.1 // indirect
|
|
16
|
+
github.com/go-json-experiment/json v0.0.0-20250813024750-ebf49471dced // indirect
|
|
17
|
+
github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466 // indirect
|
|
18
|
+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
|
|
19
|
+
github.com/google/btree v1.1.3 // indirect
|
|
20
|
+
github.com/google/go-cmp v0.7.0 // indirect
|
|
21
|
+
github.com/hdevalence/ed25519consensus v0.2.0 // indirect
|
|
22
|
+
github.com/huin/goupnp v1.3.0 // indirect
|
|
23
|
+
github.com/jsimonetti/rtnetlink v1.4.0 // indirect
|
|
24
|
+
github.com/klauspost/compress v1.18.5 // indirect
|
|
25
|
+
github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42 // indirect
|
|
26
|
+
github.com/mdlayher/socket v0.5.0 // indirect
|
|
27
|
+
github.com/mitchellh/go-ps v1.0.0 // indirect
|
|
28
|
+
github.com/pires/go-proxyproto v0.8.1 // indirect
|
|
29
|
+
github.com/safchain/ethtool v0.3.0 // indirect
|
|
30
|
+
github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d // indirect
|
|
31
|
+
github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 // indirect
|
|
32
|
+
github.com/tailscale/hujson v0.0.0-20260302212456-ecc657c15afd // indirect
|
|
33
|
+
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect
|
|
34
|
+
github.com/tailscale/web-client-prebuilt v0.0.0-20250124233751-d4cd19a26976 // indirect
|
|
35
|
+
github.com/tailscale/wireguard-go v0.0.0-20260427181203-e3ac4a0afb4e // indirect
|
|
36
|
+
github.com/x448/float16 v0.8.4 // indirect
|
|
37
|
+
go4.org/mem v0.0.0-20240501181205-ae6ca9944745 // indirect
|
|
38
|
+
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
|
|
39
|
+
golang.org/x/crypto v0.51.0 // indirect
|
|
40
|
+
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect
|
|
41
|
+
golang.org/x/net v0.55.0 // indirect
|
|
42
|
+
golang.org/x/oauth2 v0.36.0 // indirect
|
|
43
|
+
golang.org/x/sync v0.20.0 // indirect
|
|
44
|
+
golang.org/x/sys v0.45.0 // indirect
|
|
45
|
+
golang.org/x/term v0.43.0 // indirect
|
|
46
|
+
golang.org/x/text v0.37.0 // indirect
|
|
47
|
+
golang.org/x/time v0.12.0 // indirect
|
|
48
|
+
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
|
|
49
|
+
golang.zx2c4.com/wireguard/windows v0.5.3 // indirect
|
|
50
|
+
gvisor.dev/gvisor v0.0.0-20260224225140-573d5e7127a8 // indirect
|
|
51
|
+
)
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
9fans.net/go v0.0.8-0.20250307142834-96bdba94b63f h1:1C7nZuxUMNz7eiQALRfiqNOm04+m3edWlRff/BYHf0Q=
|
|
2
|
+
9fans.net/go v0.0.8-0.20250307142834-96bdba94b63f/go.mod h1:hHyrZRryGqVdqrknjq5OWDLGCTJ2NeEvtrpR96mjraM=
|
|
3
|
+
filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo=
|
|
4
|
+
filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc=
|
|
5
|
+
filippo.io/mkcert v1.4.4 h1:8eVbbwfVlaqUM7OwuftKc2nuYOoTDQWqsoXmzoXZdbc=
|
|
6
|
+
filippo.io/mkcert v1.4.4/go.mod h1:VyvOchVuAye3BoUsPUOOofKygVwLV2KQMVFJNRq+1dA=
|
|
7
|
+
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
|
|
8
|
+
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
|
9
|
+
github.com/akutz/memconn v0.1.0 h1:NawI0TORU4hcOMsMr11g7vwlCdkYeLKXBcxWu2W/P8A=
|
|
10
|
+
github.com/akutz/memconn v0.1.0/go.mod h1:Jo8rI7m0NieZyLI5e2CDlRdRqRRB4S7Xp77ukDjH+Fw=
|
|
11
|
+
github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7VVbI0o4wBRNQIgn917usHWOd6VAffYI=
|
|
12
|
+
github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4=
|
|
13
|
+
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
|
|
14
|
+
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
|
|
15
|
+
github.com/aws/aws-sdk-go-v2 v1.41.0 h1:tNvqh1s+v0vFYdA1xq0aOJH+Y5cRyZ5upu6roPgPKd4=
|
|
16
|
+
github.com/aws/aws-sdk-go-v2 v1.41.0/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0=
|
|
17
|
+
github.com/aws/aws-sdk-go-v2/config v1.29.5 h1:4lS2IB+wwkj5J43Tq/AwvnscBerBJtQQ6YS7puzCI1k=
|
|
18
|
+
github.com/aws/aws-sdk-go-v2/config v1.29.5/go.mod h1:SNzldMlDVbN6nWxM7XsUiNXPSa1LWlqiXtvh/1PrJGg=
|
|
19
|
+
github.com/aws/aws-sdk-go-v2/credentials v1.17.58 h1:/d7FUpAPU8Lf2KUdjniQvfNdlMID0Sd9pS23FJ3SS9Y=
|
|
20
|
+
github.com/aws/aws-sdk-go-v2/credentials v1.17.58/go.mod h1:aVYW33Ow10CyMQGFgC0ptMRIqJWvJ4nxZb0sUiuQT/A=
|
|
21
|
+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.27 h1:7lOW8NUwE9UZekS1DYoiPdVAqZ6A+LheHWb+mHbNOq8=
|
|
22
|
+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.27/go.mod h1:w1BASFIPOPUae7AgaH4SbjNbfdkxuggLyGfNFTn8ITY=
|
|
23
|
+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.16 h1:rgGwPzb82iBYSvHMHXc8h9mRoOUBZIGFgKb9qniaZZc=
|
|
24
|
+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.16/go.mod h1:L/UxsGeKpGoIj6DxfhOWHWQ/kGKcd4I1VncE4++IyKA=
|
|
25
|
+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.16 h1:1jtGzuV7c82xnqOVfx2F0xmJcOw5374L7N6juGW6x6U=
|
|
26
|
+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.16/go.mod h1:M2E5OQf+XLe+SZGmmpaI2yy+J326aFf6/+54PoxSANc=
|
|
27
|
+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 h1:Pg9URiobXy85kgFev3og2CuOZ8JZUBENF+dcgWBaYNk=
|
|
28
|
+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
|
|
29
|
+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 h1:0ryTNEdJbzUCEWkVXEXoqlXV72J5keC1GvILMOuD00E=
|
|
30
|
+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4/go.mod h1:HQ4qwNZh32C3CBeO6iJLQlgtMzqeG17ziAA/3KDJFow=
|
|
31
|
+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.16 h1:oHjJHeUy0ImIV0bsrX0X91GkV5nJAyv1l1CC9lnO0TI=
|
|
32
|
+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.16/go.mod h1:iRSNGgOYmiYwSCXxXaKb9HfOEj40+oTKn8pTxMlYkRM=
|
|
33
|
+
github.com/aws/aws-sdk-go-v2/service/ssm v1.44.7 h1:a8HvP/+ew3tKwSXqL3BCSjiuicr+XTU2eFYeogV9GJE=
|
|
34
|
+
github.com/aws/aws-sdk-go-v2/service/ssm v1.44.7/go.mod h1:Q7XIWsMo0JcMpI/6TGD6XXcXcV1DbTj6e9BKNntIMIM=
|
|
35
|
+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.14 h1:c5WJ3iHz7rLIgArznb3JCSQT3uUMiz9DLZhIX+1G8ok=
|
|
36
|
+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.14/go.mod h1:+JJQTxB6N4niArC14YNtxcQtwEqzS3o9Z32n7q33Rfs=
|
|
37
|
+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.13 h1:f1L/JtUkVODD+k1+IiSJUUv8A++2qVr+Xvb3xWXETMU=
|
|
38
|
+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.13/go.mod h1:tvqlFoja8/s0o+UruA1Nrezo/df0PzdunMDDurUfg6U=
|
|
39
|
+
github.com/aws/aws-sdk-go-v2/service/sts v1.41.5 h1:SciGFVNZ4mHdm7gpD1dgZYnCuVdX1s+lFTg4+4DOy70=
|
|
40
|
+
github.com/aws/aws-sdk-go-v2/service/sts v1.41.5/go.mod h1:iW40X4QBmUxdP+fZNOpfmkdMZqsovezbAeO+Ubiv2pk=
|
|
41
|
+
github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk=
|
|
42
|
+
github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
|
|
43
|
+
github.com/axiomhq/hyperloglog v0.0.0-20240319100328-84253e514e02 h1:bXAPYSbdYbS5VTy92NIUbeDI1qyggi+JYh5op9IFlcQ=
|
|
44
|
+
github.com/axiomhq/hyperloglog v0.0.0-20240319100328-84253e514e02/go.mod h1:k08r+Yj1PRAmuayFiRK6MYuR5Ve4IuZtTfxErMIh0+c=
|
|
45
|
+
github.com/cilium/ebpf v0.16.0 h1:+BiEnHL6Z7lXnlGUsXQPPAE7+kenAd4ES8MQ5min0Ok=
|
|
46
|
+
github.com/cilium/ebpf v0.16.0/go.mod h1:L7u2Blt2jMM/vLAVgjxluxtBKlz3/GWjB0dMOEngfwE=
|
|
47
|
+
github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo=
|
|
48
|
+
github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs=
|
|
49
|
+
github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6 h1:8h5+bWd7R6AYUslN6c6iuZWTKsKxUFDlpnmilO6R2n0=
|
|
50
|
+
github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q=
|
|
51
|
+
github.com/creachadair/mds v0.25.9 h1:080Hr8laN2h+l3NeVCGMBpXtIPnl9mz8e4HLraGPqtA=
|
|
52
|
+
github.com/creachadair/mds v0.25.9/go.mod h1:4hatI3hRM+qhzuAmqPRFvaBM8mONkS7nsLxkcuTYUIs=
|
|
53
|
+
github.com/creachadair/msync v0.7.1 h1:SeZmuEBXQPe5GqV/C94ER7QIZPwtvFbeQiykzt/7uho=
|
|
54
|
+
github.com/creachadair/msync v0.7.1/go.mod h1:8CcFlLsSujfHE5wWm19uUBLHIPDAUr6LXDwneVMO008=
|
|
55
|
+
github.com/creachadair/taskgroup v0.13.2 h1:3KyqakBuFsm3KkXi/9XIb0QcA8tEzLHLgaoidf0MdVc=
|
|
56
|
+
github.com/creachadair/taskgroup v0.13.2/go.mod h1:i3V1Zx7H8RjwljUEeUWYT30Lmb9poewSb2XI1yTwD0g=
|
|
57
|
+
github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
|
|
58
|
+
github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE=
|
|
59
|
+
github.com/dblohm7/wingoes v0.0.0-20240119213807-a09d6be7affa h1:h8TfIT1xc8FWbwwpmHn1J5i43Y0uZP97GqasGCzSRJk=
|
|
60
|
+
github.com/dblohm7/wingoes v0.0.0-20240119213807-a09d6be7affa/go.mod h1:Nx87SkVqTKd8UtT+xu7sM/l+LgXs6c0aHrlKusR+2EQ=
|
|
61
|
+
github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc h1:8WFBn63wegobsYAX0YjD+8suexZDga5CctH4CCTx2+8=
|
|
62
|
+
github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw=
|
|
63
|
+
github.com/digitalocean/go-smbios v0.0.0-20180907143718-390a4f403a8e h1:vUmf0yezR0y7jJ5pceLHthLaYf4bA5T14B6q39S4q2Q=
|
|
64
|
+
github.com/digitalocean/go-smbios v0.0.0-20180907143718-390a4f403a8e/go.mod h1:YTIHhz/QFSYnu/EhlF2SpU2Uk+32abacUYA5ZPljz1A=
|
|
65
|
+
github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c=
|
|
66
|
+
github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0=
|
|
67
|
+
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
|
68
|
+
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
|
69
|
+
github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
|
|
70
|
+
github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
|
|
71
|
+
github.com/gaissmai/bart v0.26.1 h1:+w4rnLGNlA2GDVn382Tfe3jOsK5vOr5n4KmigJ9lbTo=
|
|
72
|
+
github.com/gaissmai/bart v0.26.1/go.mod h1:GREWQfTLRWz/c5FTOsIw+KkscuFkIV5t8Rp7Nd1Td5c=
|
|
73
|
+
github.com/github/fakeca v0.1.0 h1:Km/MVOFvclqxPM9dZBC4+QE564nU4gz4iZ0D9pMw28I=
|
|
74
|
+
github.com/github/fakeca v0.1.0/go.mod h1:+bormgoGMMuamOscx7N91aOuUST7wdaJ2rNjeohylyo=
|
|
75
|
+
github.com/go-json-experiment/json v0.0.0-20250813024750-ebf49471dced h1:Q311OHjMh/u5E2TITc++WlTP5We0xNseRMkHDyvhW7I=
|
|
76
|
+
github.com/go-json-experiment/json v0.0.0-20250813024750-ebf49471dced/go.mod h1:TiCD2a1pcmjd7YnhGH0f/zKNcCD06B029pHhzV23c2M=
|
|
77
|
+
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
|
|
78
|
+
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
|
|
79
|
+
github.com/go4org/plan9netshell v0.0.0-20250324183649-788daa080737 h1:cf60tHxREO3g1nroKr2osU3JWZsJzkfi7rEg+oAB0Lo=
|
|
80
|
+
github.com/go4org/plan9netshell v0.0.0-20250324183649-788daa080737/go.mod h1:MIS0jDzbU/vuM9MC4YnBITCv+RYuTRq8dJzmCrFsK9g=
|
|
81
|
+
github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466 h1:sQspH8M4niEijh3PFscJRLDnkL547IeP7kpPe3uUhEg=
|
|
82
|
+
github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466/go.mod h1:ZiQxhyQ+bbbfxUKVvjfO498oPYvtYhZzycal3G/NHmU=
|
|
83
|
+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
|
|
84
|
+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
|
|
85
|
+
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
|
|
86
|
+
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
|
|
87
|
+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
|
88
|
+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
|
89
|
+
github.com/google/go-tpm v0.9.4 h1:awZRf9FwOeTunQmHoDYSHJps3ie6f1UlhS1fOdPEt1I=
|
|
90
|
+
github.com/google/go-tpm v0.9.4/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY=
|
|
91
|
+
github.com/google/nftables v0.2.1-0.20240414091927-5e242ec57806 h1:wG8RYIyctLhdFk6Vl1yPGtSRtwGpVkWyZww1OCil2MI=
|
|
92
|
+
github.com/google/nftables v0.2.1-0.20240414091927-5e242ec57806/go.mod h1:Beg6V6zZ3oEn0JuiUQ4wqwuyqqzasOltcoXPtgLbFp4=
|
|
93
|
+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
|
94
|
+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
|
95
|
+
github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N3iBb1Tb4rdcU=
|
|
96
|
+
github.com/hdevalence/ed25519consensus v0.2.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo=
|
|
97
|
+
github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
|
|
98
|
+
github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
|
|
99
|
+
github.com/illarion/gonotify/v3 v3.0.2 h1:O7S6vcopHexutmpObkeWsnzMJt/r1hONIEogeVNmJMk=
|
|
100
|
+
github.com/illarion/gonotify/v3 v3.0.2/go.mod h1:HWGPdPe817GfvY3w7cx6zkbzNZfi3QjcBm/wgVvEL1U=
|
|
101
|
+
github.com/insomniacslk/dhcp v0.0.0-20231206064809-8c70d406f6d2 h1:9K06NfxkBh25x56yVhWWlKFE8YpicaSfHwoV8SFbueA=
|
|
102
|
+
github.com/insomniacslk/dhcp v0.0.0-20231206064809-8c70d406f6d2/go.mod h1:3A9PQ1cunSDF/1rbTq99Ts4pVnycWg+vlPkfeD2NLFI=
|
|
103
|
+
github.com/jellydator/ttlcache/v3 v3.1.0 h1:0gPFG0IHHP6xyUyXq+JaD8fwkDCqgqwohXNJBcYE71g=
|
|
104
|
+
github.com/jellydator/ttlcache/v3 v3.1.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4=
|
|
105
|
+
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
|
106
|
+
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
|
107
|
+
github.com/jsimonetti/rtnetlink v1.4.0 h1:Z1BF0fRgcETPEa0Kt0MRk3yV5+kF1FWTni6KUFKrq2I=
|
|
108
|
+
github.com/jsimonetti/rtnetlink v1.4.0/go.mod h1:5W1jDvWdnthFJ7fxYX1GMK07BUpI4oskfOqvPteYS6E=
|
|
109
|
+
github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE=
|
|
110
|
+
github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
|
|
111
|
+
github.com/kortschak/wol v0.0.0-20200729010619-da482cc4850a h1:+RR6SqnTkDLWyICxS1xpjCi/3dhyV+TgZwA6Ww3KncQ=
|
|
112
|
+
github.com/kortschak/wol v0.0.0-20200729010619-da482cc4850a/go.mod h1:YTtCCM3ryyfiu4F7t8HQ1mxvp1UBdWM2r6Xa+nGWvDk=
|
|
113
|
+
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
|
|
114
|
+
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
|
115
|
+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
|
116
|
+
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
|
117
|
+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
|
118
|
+
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
|
119
|
+
github.com/mdlayher/genetlink v1.3.2 h1:KdrNKe+CTu+IbZnm/GVUMXSqBBLqcGpRDa0xkQy56gw=
|
|
120
|
+
github.com/mdlayher/genetlink v1.3.2/go.mod h1:tcC3pkCrPUGIKKsCsp0B3AdaaKuHtaxoJRz3cc+528o=
|
|
121
|
+
github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42 h1:A1Cq6Ysb0GM0tpKMbdCXCIfBclan4oHk1Jb+Hrejirg=
|
|
122
|
+
github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42/go.mod h1:BB4YCPDOzfy7FniQ/lxuYQ3dgmM2cZumHbK8RpTjN2o=
|
|
123
|
+
github.com/mdlayher/sdnotify v1.0.0 h1:Ma9XeLVN/l0qpyx1tNeMSeTjCPH6NtuD6/N9XdTlQ3c=
|
|
124
|
+
github.com/mdlayher/sdnotify v1.0.0/go.mod h1:HQUmpM4XgYkhDLtd+Uad8ZFK1T9D5+pNxnXQjCeJlGE=
|
|
125
|
+
github.com/mdlayher/socket v0.5.0 h1:ilICZmJcQz70vrWVes1MFera4jGiWNocSkykwwoy3XI=
|
|
126
|
+
github.com/mdlayher/socket v0.5.0/go.mod h1:WkcBFfvyG8QENs5+hfQPl1X6Jpd2yeLIYgrGFmJiJxI=
|
|
127
|
+
github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
|
|
128
|
+
github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
|
|
129
|
+
github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
|
|
130
|
+
github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
|
|
131
|
+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
|
132
|
+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
|
133
|
+
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
|
134
|
+
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
|
135
|
+
github.com/pierrec/lz4/v4 v4.1.25 h1:kocOqRffaIbU5djlIBr7Wh+cx82C0vtFb0fOurZHqD0=
|
|
136
|
+
github.com/pierrec/lz4/v4 v4.1.25/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
|
|
137
|
+
github.com/pires/go-proxyproto v0.8.1 h1:9KEixbdJfhrbtjpz/ZwCdWDD2Xem0NZ38qMYaASJgp0=
|
|
138
|
+
github.com/pires/go-proxyproto v0.8.1/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU=
|
|
139
|
+
github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo=
|
|
140
|
+
github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk=
|
|
141
|
+
github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
|
|
142
|
+
github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
|
|
143
|
+
github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE=
|
|
144
|
+
github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8=
|
|
145
|
+
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
|
|
146
|
+
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
|
147
|
+
github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP0=
|
|
148
|
+
github.com/safchain/ethtool v0.3.0/go.mod h1:SA9BwrgyAqNo7M+uaL6IYbxpm5wk3L7Mm6ocLW+CJUs=
|
|
149
|
+
github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d h1:JcGKBZAL7ePLwOhUdN8qGQZlP5GueEiIZwY7R62pejE=
|
|
150
|
+
github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d/go.mod h1:XrBNfAFN+pwoWuksbFS9Ccxnopa15zJGgXRFN90l3K4=
|
|
151
|
+
github.com/tailscale/gliderssh v0.3.4-0.20260330083525-c1389c70ff89 h1:glgVc1ZYMjwN1Q/ITWeuSQyl029uayagaR2sjsifehc=
|
|
152
|
+
github.com/tailscale/gliderssh v0.3.4-0.20260330083525-c1389c70ff89/go.mod h1:wn16Km1EZOX4UEAyaZa3dBwfFGOJ7neck40NcwosJUw=
|
|
153
|
+
github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 h1:Gzfnfk2TWrk8Jj4P4c1a3CtQyMaTVCznlkLZI++hok4=
|
|
154
|
+
github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55/go.mod h1:4k4QO+dQ3R5FofL+SanAUZe+/QfeK0+OIuwDIRu2vSg=
|
|
155
|
+
github.com/tailscale/golang-x-crypto v0.0.0-20250404221719-a5573b049869 h1:SRL6irQkKGQKKLzvQP/ke/2ZuB7Py5+XuqtOgSj+iMM=
|
|
156
|
+
github.com/tailscale/golang-x-crypto v0.0.0-20250404221719-a5573b049869/go.mod h1:ikbF+YT089eInTp9f2vmvy4+ZVnW5hzX1q2WknxSprQ=
|
|
157
|
+
github.com/tailscale/hujson v0.0.0-20260302212456-ecc657c15afd h1:Rf9uhF1+VJ7ZHqxrG8pJ6YacmHvVCmByDmGbAWCc/gA=
|
|
158
|
+
github.com/tailscale/hujson v0.0.0-20260302212456-ecc657c15afd/go.mod h1:EbW0wDK/qEUYI0A5bqq0C2kF8JTQwWONmGDBbzsxxHo=
|
|
159
|
+
github.com/tailscale/netlink v1.1.1-0.20240822203006-4d49adab4de7 h1:uFsXVBE9Qr4ZoF094vE6iYTLDl0qCiKzYXlL6UeWObU=
|
|
160
|
+
github.com/tailscale/netlink v1.1.1-0.20240822203006-4d49adab4de7/go.mod h1:NzVQi3Mleb+qzq8VmcWpSkcSYxXIg0DkI6XDzpVkhJ0=
|
|
161
|
+
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc h1:24heQPtnFR+yfntqhI3oAu9i27nEojcQ4NuBQOo5ZFA=
|
|
162
|
+
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc/go.mod h1:f93CXfllFsO9ZQVq+Zocb1Gp4G5Fz0b0rXHLOzt/Djc=
|
|
163
|
+
github.com/tailscale/web-client-prebuilt v0.0.0-20250124233751-d4cd19a26976 h1:UBPHPtv8+nEAy2PD8RyAhOYvau1ek0HDJqLS/Pysi14=
|
|
164
|
+
github.com/tailscale/web-client-prebuilt v0.0.0-20250124233751-d4cd19a26976/go.mod h1:agQPE6y6ldqCOui2gkIh7ZMztTkIQKH049tv8siLuNQ=
|
|
165
|
+
github.com/tailscale/wf v0.0.0-20240214030419-6fbb0a674ee6 h1:l10Gi6w9jxvinoiq15g8OToDdASBni4CyJOdHY1Hr8M=
|
|
166
|
+
github.com/tailscale/wf v0.0.0-20240214030419-6fbb0a674ee6/go.mod h1:ZXRML051h7o4OcI0d3AaILDIad/Xw0IkXaHM17dic1Y=
|
|
167
|
+
github.com/tailscale/wireguard-go v0.0.0-20260427181203-e3ac4a0afb4e h1:GexFR7ak1iz26fxg8HWCpOEqAOL8UEZJ7J3JxeCalDs=
|
|
168
|
+
github.com/tailscale/wireguard-go v0.0.0-20260427181203-e3ac4a0afb4e/go.mod h1:6SerzcvHWQchKO2BfNdmquA77CHSECZuFl+D9fp4RnI=
|
|
169
|
+
github.com/tailscale/xnet v0.0.0-20240729143630-8497ac4dab2e h1:zOGKqN5D5hHhiYUp091JqK7DPCqSARyUfduhGUY8Bek=
|
|
170
|
+
github.com/tailscale/xnet v0.0.0-20240729143630-8497ac4dab2e/go.mod h1:orPd6JZXXRyuDusYilywte7k094d7dycXXU5YnWsrwg=
|
|
171
|
+
github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA=
|
|
172
|
+
github.com/tc-hib/winres v0.2.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk=
|
|
173
|
+
github.com/u-root/u-root v0.14.0 h1:Ka4T10EEML7dQ5XDvO9c3MBN8z4nuSnGjcd1jmU2ivg=
|
|
174
|
+
github.com/u-root/u-root v0.14.0/go.mod h1:hAyZorapJe4qzbLWlAkmSVCJGbfoU9Pu4jpJ1WMluqE=
|
|
175
|
+
github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 h1:pyC9PaHYZFgEKFdlp3G8RaCKgVpHZnecvArXvPXcFkM=
|
|
176
|
+
github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701/go.mod h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA=
|
|
177
|
+
github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY=
|
|
178
|
+
github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
|
|
179
|
+
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
|
|
180
|
+
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
|
|
181
|
+
go4.org/mem v0.0.0-20240501181205-ae6ca9944745 h1:Tl++JLUCe4sxGu8cTpDzRLd3tN7US4hOxG5YpKCzkek=
|
|
182
|
+
go4.org/mem v0.0.0-20240501181205-ae6ca9944745/go.mod h1:reUoABIJ9ikfM5sgtSF3Wushcza7+WeD01VB9Lirh3g=
|
|
183
|
+
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M=
|
|
184
|
+
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
|
|
185
|
+
golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
|
|
186
|
+
golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
|
|
187
|
+
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o=
|
|
188
|
+
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8=
|
|
189
|
+
golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8=
|
|
190
|
+
golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
|
|
191
|
+
golang.org/x/image v0.27.0 h1:C8gA4oWU/tKkdCfYT6T2u4faJu3MeNS5O8UPWlPF61w=
|
|
192
|
+
golang.org/x/image v0.27.0/go.mod h1:xbdrClrAUway1MUTEZDq9mz/UpRwYAkFFNUslZtcB+g=
|
|
193
|
+
golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM=
|
|
194
|
+
golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
|
|
195
|
+
golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
|
|
196
|
+
golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
|
|
197
|
+
golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
|
|
198
|
+
golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
|
|
199
|
+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
200
|
+
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
|
|
201
|
+
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
|
|
202
|
+
golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
203
|
+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
204
|
+
golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
|
|
205
|
+
golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
|
206
|
+
golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
|
|
207
|
+
golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
|
|
208
|
+
golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
|
|
209
|
+
golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
|
|
210
|
+
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
|
|
211
|
+
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
|
|
212
|
+
golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
|
|
213
|
+
golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
|
|
214
|
+
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg=
|
|
215
|
+
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI=
|
|
216
|
+
golang.zx2c4.com/wireguard/windows v0.5.3 h1:On6j2Rpn3OEMXqBq00QEDC7bWSZrPIHKIus8eIuExIE=
|
|
217
|
+
golang.zx2c4.com/wireguard/windows v0.5.3/go.mod h1:9TEe8TJmtwyQebdFwAkEWOPr3prrtqm+REGFifP60hI=
|
|
218
|
+
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
|
|
219
|
+
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
|
220
|
+
gvisor.dev/gvisor v0.0.0-20260224225140-573d5e7127a8 h1:Zy8IV/+FMLxy6j6p87vk/vQGKcdnbprwjTxc8UiUtsA=
|
|
221
|
+
gvisor.dev/gvisor v0.0.0-20260224225140-573d5e7127a8/go.mod h1:QkHjoMIBaYtpVufgwv3keYAbln78mBoCuShZrPrer1Q=
|
|
222
|
+
honnef.co/go/tools v0.7.0 h1:w6WUp1VbkqPEgLz4rkBzH/CSU6HkoqNLp6GstyTx3lU=
|
|
223
|
+
honnef.co/go/tools v0.7.0/go.mod h1:pm29oPxeP3P82ISxZDgIYeOaf9ta6Pi0EWvCFoLG2vc=
|
|
224
|
+
howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM=
|
|
225
|
+
howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g=
|
|
226
|
+
software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k=
|
|
227
|
+
software.sslmate.com/src/go-pkcs12 v0.4.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI=
|
|
228
|
+
tailscale.com v1.98.3 h1:caAbG4UfkKfKPE6b1fj5t4ep5qrwEis5AJu91ruvePw=
|
|
229
|
+
tailscale.com v1.98.3/go.mod h1:U23ZwbZlKJMNU7CScy+lCVVlece/S5n09q0nyudncBI=
|