Compare commits

..

1 Commits

61 changed files with 1283 additions and 2033 deletions

View File

@ -7,7 +7,7 @@ on:
- infra-*
env:
GO_VERSION: "~1.22.3"
GO_VERSION: "~1.22.0"
CGO_ENABLED: "0"
BUILD_USER: docker
BUILD_HOST: github.syncthing.net

View File

@ -12,7 +12,7 @@ env:
# The go version to use for builds. We set check-latest to true when
# installing, so we get the latest patch version that matches the
# expression.
GO_VERSION: "~1.22.3"
GO_VERSION: "~1.22.0"
# Optimize compatibility on the slow archictures.
GO386: softfloat
@ -48,7 +48,7 @@ jobs:
runner: ["windows-latest", "ubuntu-latest", "macos-latest"]
# The oldest version in this list should match what we have in our go.mod.
# Variables don't seem to be supported here, or we could have done something nice.
go: ["~1.21.7", "~1.22.3"]
go: ["~1.21.7", "~1.22.0"]
runs-on: ${{ matrix.runner }}
steps:
- name: Set git to use LF
@ -642,20 +642,19 @@ jobs:
cd packages
"$GITHUB_WORKSPACE/tools/generate-release-json" "$BASE_URL" > nightly.json
env:
BASE_URL: ${{ secrets.NIGHTLY_BASE_URL }}
BASE_URL: https://syncthing.ams3.digitaloceanspaces.com/nightly/
- name: Push artifacts
uses: docker://docker.io/rclone/rclone:latest
env:
RCLONE_CONFIG_OBJSTORE_TYPE: s3
RCLONE_CONFIG_OBJSTORE_PROVIDER: ${{ secrets.S3_PROVIDER }}
RCLONE_CONFIG_OBJSTORE_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }}
RCLONE_CONFIG_OBJSTORE_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }}
RCLONE_CONFIG_OBJSTORE_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
RCLONE_CONFIG_OBJSTORE_REGION: ${{ secrets.S3_REGION }}
RCLONE_CONFIG_OBJSTORE_ACL: public-read
RCLONE_CONFIG_SPACES_TYPE: s3
RCLONE_CONFIG_SPACES_PROVIDER: DigitalOcean
RCLONE_CONFIG_SPACES_ACCESS_KEY_ID: ${{ secrets.SPACES_KEY }}
RCLONE_CONFIG_SPACES_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET }}
RCLONE_CONFIG_SPACES_ENDPOINT: ams3.digitaloceanspaces.com
RCLONE_CONFIG_SPACES_ACL: public-read
with:
args: sync packages objstore:${{ secrets.S3_BUCKET }}/nightly
args: sync packages spaces:syncthing/nightly
#
# Push release artifacts to Spaces
@ -697,31 +696,29 @@ jobs:
version=$(go run build.go version)
echo "VERSION=$version" >> $GITHUB_ENV
- name: Push to object store (${{ env.VERSION }})
- name: Push to Spaces (${{ env.VERSION }})
uses: docker://docker.io/rclone/rclone:latest
env:
RCLONE_CONFIG_OBJSTORE_TYPE: s3
RCLONE_CONFIG_OBJSTORE_PROVIDER: ${{ secrets.S3_PROVIDER }}
RCLONE_CONFIG_OBJSTORE_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }}
RCLONE_CONFIG_OBJSTORE_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }}
RCLONE_CONFIG_OBJSTORE_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
RCLONE_CONFIG_OBJSTORE_REGION: ${{ secrets.S3_REGION }}
RCLONE_CONFIG_OBJSTORE_ACL: public-read
RCLONE_CONFIG_SPACES_TYPE: s3
RCLONE_CONFIG_SPACES_PROVIDER: DigitalOcean
RCLONE_CONFIG_SPACES_ACCESS_KEY_ID: ${{ secrets.SPACES_KEY }}
RCLONE_CONFIG_SPACES_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET }}
RCLONE_CONFIG_SPACES_ENDPOINT: ams3.digitaloceanspaces.com
RCLONE_CONFIG_SPACES_ACL: public-read
with:
args: sync packages objstore:${{ secrets.S3_BUCKET }}/release/${{ env.VERSION }}
args: sync packages spaces:syncthing/release/${{ env.VERSION }}
- name: Push to object store (latest)
- name: Push to Spaces (latest)
uses: docker://docker.io/rclone/rclone:latest
env:
RCLONE_CONFIG_OBJSTORE_TYPE: s3
RCLONE_CONFIG_OBJSTORE_PROVIDER: ${{ secrets.S3_PROVIDER }}
RCLONE_CONFIG_OBJSTORE_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }}
RCLONE_CONFIG_OBJSTORE_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }}
RCLONE_CONFIG_OBJSTORE_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
RCLONE_CONFIG_OBJSTORE_REGION: ${{ secrets.S3_REGION }}
RCLONE_CONFIG_OBJSTORE_ACL: public-read
RCLONE_CONFIG_SPACES_TYPE: s3
RCLONE_CONFIG_SPACES_PROVIDER: DigitalOcean
RCLONE_CONFIG_SPACES_ACCESS_KEY_ID: ${{ secrets.SPACES_KEY }}
RCLONE_CONFIG_SPACES_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET }}
RCLONE_CONFIG_SPACES_ENDPOINT: ams3.digitaloceanspaces.com
RCLONE_CONFIG_SPACES_ACL: public-read
with:
args: sync objstore:${{ secrets.S3_BUCKET }}/release/${{ env.VERSION }} objstore:${{ secrets.S3_BUCKET }}/release/latest
args: sync spaces:syncthing/release/${{ env.VERSION }} spaces:syncthing/release/latest
#
# Build and push to Docker Hub

View File

@ -209,7 +209,6 @@ Liu Siyuan (liusy182) <liusy182@gmail.com> <liusy182@hotmail.com>
Lode Hoste (Zillode) <zillode@zillode.be>
Lord Landon Agahnim (LordLandon) <lordlandon@gmail.com>
LSmithx2 <42276854+lsmithx2@users.noreply.github.com>
luchenhan <168071714+luchenhan@users.noreply.github.com>
Lukas Lihotzki <lukas@lihotzki.de>
Luke Hamburg <1992842+luckman212@users.noreply.github.com>
luzpaz <luzpaz@users.noreply.github.com>
@ -301,7 +300,6 @@ Scott Klupfel (kluppy) <kluppy@going2blue.com>
sec65 <106604020+sec65@users.noreply.github.com>
Sergey Mishin (ralder) <ralder@yandex.ru>
Sertonix <83883937+Sertonix@users.noreply.github.com>
Severin von Wnuck-Lipinski <ss7@live.de>
Shaarad Dalvi <60266155+shaaraddalvi@users.noreply.github.com> <shdalv@microsoft.com>
Simon Frei (imsodin) <freisim93@gmail.com>
Simon Mwepu <simonmwepu@gmail.com>
@ -337,7 +335,6 @@ Vil Brekin (Vilbrekin) <vilbrekin@gmail.com>
villekalliomaki <53118179+villekalliomaki@users.noreply.github.com>
Vladimir Rusinov <vrusinov@google.com> <vladimir.rusinov@gmail.com>
wangguoliang <liangcszzu@163.com>
WangXi <xib1102@icloud.com>
Will Rouesnel <wrouesnel@wrouesnel.com>
William A. Kennington III (wkennington) <william@wkennington.com>
wouter bolsterlee <wouter@bolsterl.ee>

View File

@ -11,6 +11,14 @@ LABEL org.opencontainers.image.authors="The Syncthing Project" \
EXPOSE 8080
COPY strelaypoolsrv-linux-${TARGETARCH} /bin/strelaypoolsrv
RUN apk add --no-cache ca-certificates su-exec curl
ENV PUID=1000 PGID=1000 MAXMIND_KEY=
ENTRYPOINT ["/bin/strelaypoolsrv", "-listen", ":8080"]
RUN mkdir /var/strelaypoolsrv && chown 1000 /var/strelaypoolsrv
USER 1000
COPY strelaypoolsrv-linux-${TARGETARCH} /bin/strelaypoolsrv
COPY script/strelaypoolsrv-entrypoint.sh /bin/entrypoint.sh
WORKDIR /var/strelaypoolsrv
ENTRYPOINT ["/bin/entrypoint.sh", "/bin/strelaypoolsrv", "-listen", ":8080"]

View File

@ -84,7 +84,7 @@ func libst_run_main() int {
}
//export libst_run_syncthing
func libst_run_syncthing(configDir string, dataDir string, guiAddress string, guiApiKey string, verbose bool, allowNewerConfig bool, noDefaultConfig bool, skipPortProbing bool, ensureConfigDirExists bool, ensureDataDirExists bool, expandPathsFromEnv bool) int {
func libst_run_syncthing(configDir string, dataDir string, guiAddress string, guiApiKey string, verbose bool, allowNewerConfig bool, noDefaultConfig bool, skipPortProbing bool, ensureConfigDirExists bool, ensureDataDirExists bool) int {
// return if already running (for simplicity we only allow one Syncthing instance at at time for now)
if theApp != nil {
return 0
@ -100,9 +100,6 @@ func libst_run_syncthing(configDir string, dataDir string, guiAddress string, gu
// set specified config dir
if configDir != "" {
if expandPathsFromEnv {
configDir = os.ExpandEnv(configDir)
}
if !filepath.IsAbs(configDir) {
var err error
configDir, err = filepath.Abs(configDir)
@ -119,9 +116,6 @@ func libst_run_syncthing(configDir string, dataDir string, guiAddress string, gu
// set specified database dir
if dataDir != "" {
if expandPathsFromEnv {
dataDir = os.ExpandEnv(dataDir)
}
if !filepath.IsAbs(dataDir) {
var err error
dataDir, err = filepath.Abs(dataDir)

View File

@ -21,12 +21,12 @@ import (
"time"
lru "github.com/hashicorp/golang-lru/v2"
"github.com/oschwald/geoip2-golang"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/syncthing/syncthing/cmd/strelaypoolsrv/auto"
"github.com/syncthing/syncthing/lib/assets"
_ "github.com/syncthing/syncthing/lib/automaxprocs"
"github.com/syncthing/syncthing/lib/geoip"
"github.com/syncthing/syncthing/lib/httpcache"
"github.com/syncthing/syncthing/lib/protocol"
"github.com/syncthing/syncthing/lib/rand"
@ -100,12 +100,11 @@ var (
debug bool
permRelaysFile string
ipHeader string
geoipPath string
proto string
statsRefresh = time.Minute
requestQueueLen = 64
requestProcessors = 8
geoipLicenseKey = os.Getenv("GEOIP_LICENSE_KEY")
geoipAccountID, _ = strconv.Atoi(os.Getenv("GEOIP_ACCOUNT_ID"))
requests chan request
@ -131,38 +130,34 @@ func main() {
flag.StringVar(&permRelaysFile, "perm-relays", "", "Path to list of permanent relays")
flag.StringVar(&knownRelaysFile, "known-relays", knownRelaysFile, "Path to list of current relays")
flag.StringVar(&ipHeader, "ip-header", "", "Name of header which holds clients ip:port. Only meaningful when running behind a reverse proxy.")
flag.StringVar(&geoipPath, "geoip", "GeoLite2-City.mmdb", "Path to GeoLite2-City database")
flag.StringVar(&proto, "protocol", "tcp", "Protocol used for listening. 'tcp' for IPv4 and IPv6, 'tcp4' for IPv4, 'tcp6' for IPv6")
flag.DurationVar(&statsRefresh, "stats-refresh", statsRefresh, "Interval at which to refresh relay stats")
flag.IntVar(&requestQueueLen, "request-queue", requestQueueLen, "Queue length for incoming test requests")
flag.IntVar(&requestProcessors, "request-processors", requestProcessors, "Number of request processor routines")
flag.StringVar(&geoipLicenseKey, "geoip-license-key", geoipLicenseKey, "License key for GeoIP database")
flag.Parse()
requests = make(chan request, requestQueueLen)
geoip, err := geoip.NewGeoLite2CityProvider(context.Background(), geoipAccountID, geoipLicenseKey, os.TempDir())
if err != nil {
log.Fatalln("Failed to create GeoIP provider:", err)
}
go geoip.Serve(context.TODO())
var listener net.Listener
var err error
if permRelaysFile != "" {
permanentRelays = loadRelays(permRelaysFile, geoip)
permanentRelays = loadRelays(permRelaysFile)
}
testCert = createTestCertificate()
for i := 0; i < requestProcessors; i++ {
go requestProcessor(geoip)
go requestProcessor()
}
// Load relays from cache in the background.
// Load them in a serial fashion to make sure any genuine requests
// are not dropped.
go func() {
for _, relay := range loadRelays(knownRelaysFile, geoip) {
for _, relay := range loadRelays(knownRelaysFile) {
resultChan := make(chan result)
requests <- request{relay, resultChan, nil}
result := <-resultChan
@ -430,19 +425,19 @@ func handlePostRequest(w http.ResponseWriter, r *http.Request) {
}
}
func requestProcessor(geoip *geoip.Provider) {
func requestProcessor() {
for request := range requests {
if request.queueTimer != nil {
request.queueTimer.ObserveDuration()
}
timer := prometheus.NewTimer(relayTestActionsSeconds.WithLabelValues("test"))
handleRelayTest(request, geoip)
handleRelayTest(request)
timer.ObserveDuration()
}
}
func handleRelayTest(request request, geoip *geoip.Provider) {
func handleRelayTest(request request) {
if debug {
log.Println("Request for", request.relay)
}
@ -455,7 +450,7 @@ func handleRelayTest(request request, geoip *geoip.Provider) {
}
stats := fetchStats(request.relay)
location := getLocation(request.relay.uri.Host, geoip)
location := getLocation(request.relay.uri.Host)
mut.Lock()
if stats != nil {
@ -528,7 +523,7 @@ func evict(relay *relay) func() {
}
}
func loadRelays(file string, geoip *geoip.Provider) []*relay {
func loadRelays(file string) []*relay {
content, err := os.ReadFile(file)
if err != nil {
log.Println("Failed to load relays: " + err.Error())
@ -552,7 +547,7 @@ func loadRelays(file string, geoip *geoip.Provider) []*relay {
relays = append(relays, &relay{
URL: line,
Location: getLocation(uri.Host, geoip),
Location: getLocation(uri.Host),
uri: uri,
})
if debug {
@ -585,16 +580,21 @@ func createTestCertificate() tls.Certificate {
return cert
}
func getLocation(host string, geoip *geoip.Provider) location {
func getLocation(host string) location {
timer := prometheus.NewTimer(locationLookupSeconds)
defer timer.ObserveDuration()
db, err := geoip2.Open(geoipPath)
if err != nil {
return location{}
}
defer db.Close()
addr, err := net.ResolveTCPAddr("tcp", host)
if err != nil {
return location{}
}
city, err := geoip.City(addr.IP)
city, err := db.City(addr.IP)
if err != nil {
return location{}
}

View File

@ -8,7 +8,6 @@ package serve
import (
"bytes"
"context"
"database/sql"
"embed"
"encoding/json"
@ -18,7 +17,6 @@ import (
"log"
"net"
"net/http"
"os"
"regexp"
"sort"
"strconv"
@ -28,11 +26,11 @@ import (
"unicode"
_ "github.com/lib/pq" // PostgreSQL driver
"github.com/oschwald/geoip2-golang"
"github.com/prometheus/client_golang/prometheus/promhttp"
"golang.org/x/text/cases"
"golang.org/x/text/language"
"github.com/syncthing/syncthing/lib/geoip"
"github.com/syncthing/syncthing/lib/upgrade"
"github.com/syncthing/syncthing/lib/ur/contract"
)
@ -41,8 +39,7 @@ type CLI struct {
Debug bool `env:"UR_DEBUG"`
DBConn string `env:"UR_DB_URL" default:"postgres://user:password@localhost/ur?sslmode=disable"`
Listen string `env:"UR_LISTEN" default:"0.0.0.0:8080"`
GeoIPLicenseKey string `env:"UR_GEOIP_LICENSE_KEY"`
GeoIPAccountID int `env:"UR_GEOIP_ACCOUNT_ID"`
GeoIPPath string `env:"UR_GEOIP" default:"GeoLite2-City.mmdb"`
}
//go:embed static
@ -192,16 +189,10 @@ func (cli *CLI) Run() error {
log.Fatalln("listen:", err)
}
geoip, err := geoip.NewGeoLite2CityProvider(context.Background(), cli.GeoIPAccountID, cli.GeoIPLicenseKey, os.TempDir())
if err != nil {
log.Fatalln("geoip:", err)
}
go geoip.Serve(context.TODO())
srv := &server{
db: db,
debug: cli.Debug,
geoip: geoip,
geoIPPath: cli.GeoIPPath,
}
http.HandleFunc("/", srv.rootHandler)
http.HandleFunc("/newdata", srv.newDataHandler)
@ -224,7 +215,7 @@ func (cli *CLI) Run() error {
type server struct {
debug bool
db *sql.DB
geoip *geoip.Provider
geoIPPath string
cacheMut sync.Mutex
cachedIndex []byte
@ -247,7 +238,7 @@ func (s *server) cacheRefresher() {
}
func (s *server) refreshCacheLocked() error {
rep := getReport(s.db, s.geoip)
rep := getReport(s.db, s.geoIPPath)
buf := new(bytes.Buffer)
err := tpl.Execute(buf, rep)
if err != nil {
@ -501,7 +492,15 @@ type weightedLocation struct {
Weight int `json:"weight"`
}
func getReport(db *sql.DB, geoip *geoip.Provider) map[string]interface{} {
func getReport(db *sql.DB, geoIPPath string) map[string]interface{} {
geoip, err := geoip2.Open(geoIPPath)
if err != nil {
log.Println("opening geoip db", err)
geoip = nil
} else {
defer geoip.Close()
}
nodes := 0
countriesTotal := 0
var versions []string

View File

@ -1,4 +1,4 @@
# Increase maximum socket buffer sizes to 7MiB for QUIC connections
# Increase maximum socket buffer sizes to 2.5MiB for QUIC connections
# see https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes
net.core.rmem_max = 7340032
net.core.wmem_max = 7340032
net.core.rmem_max = 2621440
net.core.wmem_max = 2621440

59
go.mod
View File

@ -4,7 +4,7 @@ go 1.21.0
require (
github.com/AudriusButkevicius/recli v0.0.7-0.20220911121932-d000ce8fbf0f
github.com/alecthomas/kong v0.9.0
github.com/alecthomas/kong v0.8.1
github.com/calmh/incontainer v1.0.0
github.com/calmh/xdr v1.1.0
github.com/ccding/go-stun v0.1.4
@ -12,81 +12,82 @@ require (
github.com/d4l3k/messagediff v1.2.1
github.com/flynn-archive/go-shlex v0.0.0-20150515145356-3f9db97f8568
github.com/getsentry/raven-go v0.2.0
github.com/go-ldap/ldap/v3 v3.4.8
github.com/go-ldap/ldap/v3 v3.4.6
github.com/gobwas/glob v0.2.3
github.com/gogo/protobuf v1.3.2
github.com/greatroar/blobloom v0.7.2
github.com/hashicorp/golang-lru/v2 v2.0.7
github.com/jackpal/gateway v1.0.15
github.com/jackpal/gateway v1.0.13
github.com/jackpal/go-nat-pmp v1.0.2
github.com/julienschmidt/httprouter v1.3.0
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
github.com/lib/pq v1.10.9
github.com/maruel/panicparse/v2 v2.3.1
github.com/maxbrunsfeld/counterfeiter/v6 v6.8.1
github.com/maxmind/geoipupdate/v6 v6.1.0
github.com/minio/sha256-simd v1.0.1
github.com/miscreant/miscreant.go v0.0.0-20200214223636-26d376326b75
github.com/oschwald/geoip2-golang v1.9.0
github.com/pierrec/lz4/v4 v4.1.21
github.com/prometheus/client_golang v1.19.1
github.com/quic-go/quic-go v0.44.0
github.com/prometheus/client_golang v1.19.0
github.com/quic-go/quic-go v0.41.0
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475
github.com/shirou/gopsutil/v3 v3.24.4
github.com/shirou/gopsutil/v3 v3.24.2
github.com/syncthing/notify v0.0.0-20210616190510-c6b7342338d2
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d
github.com/thejerf/suture/v4 v4.0.5
github.com/urfave/cli v1.22.15
github.com/thejerf/suture/v4 v4.0.2
github.com/urfave/cli v1.22.14
github.com/vitrun/qart v0.0.0-20160531060029-bf64b92db6b0
github.com/willabides/kongplete v0.4.0
go.uber.org/automaxprocs v1.5.3
golang.org/x/crypto v0.23.0
golang.org/x/net v0.25.0
golang.org/x/sys v0.20.0
golang.org/x/text v0.15.0
golang.org/x/crypto v0.21.0
golang.org/x/net v0.21.0
golang.org/x/sys v0.18.0
golang.org/x/text v0.14.0
golang.org/x/time v0.5.0
golang.org/x/tools v0.21.0
google.golang.org/protobuf v1.34.1
golang.org/x/tools v0.18.0
google.golang.org/protobuf v1.32.0
)
require (
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect
github.com/alecthomas/assert/v2 v2.5.0 // indirect
github.com/alecthomas/repr v0.3.0 // indirect
github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-asn1-ber/asn1-ber v1.5.7 // indirect
github.com/go-asn1-ber/asn1-ber v1.5.5 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
github.com/gofrs/flock v0.8.1 // indirect
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/pprof v0.0.0-20240521024322-9665fa269a30 // indirect
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/nxadm/tail v1.4.11 // indirect
github.com/onsi/ginkgo/v2 v2.17.3 // indirect
github.com/onsi/ginkgo/v2 v2.16.0 // indirect
github.com/onsi/gomega v1.31.1 // indirect
github.com/oschwald/maxminddb-golang v1.12.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/posener/complete v1.2.3 // indirect
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.53.0 // indirect
github.com/prometheus/procfs v0.15.0 // indirect
github.com/prometheus/client_model v0.6.0 // indirect
github.com/prometheus/common v0.49.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/riywo/loginshell v0.0.0-20200815045211-7d26008be1ab // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/stretchr/objx v0.5.2 // indirect
github.com/stretchr/testify v1.9.0 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.uber.org/mock v0.4.0 // indirect
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect
golang.org/x/mod v0.17.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect
golang.org/x/mod v0.16.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

154
go.sum
View File

@ -3,12 +3,13 @@ github.com/AudriusButkevicius/recli v0.0.7-0.20220911121932-d000ce8fbf0f/go.mod
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 h1:mFRzDkZVAjdal+s7s0MwaRv9igoPqLRdzOLzw/8Xvq8=
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/alecthomas/assert/v2 v2.6.0 h1:o3WJwILtexrEUk3cUVal3oiQY2tfgr/FHWiz/v2n4FU=
github.com/alecthomas/assert/v2 v2.6.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
github.com/alecthomas/kong v0.9.0 h1:G5diXxc85KvoV2f0ZRVuMsi45IrBgx9zDNGNj165aPA=
github.com/alecthomas/kong v0.9.0/go.mod h1:Y47y5gKfHp1hDc7CH7OeXgLIpp+Q2m1Ni0L5s3bI8Os=
github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/alecthomas/assert/v2 v2.5.0 h1:OJKYg53BQx06/bMRBSPDCO49CbCDNiUQXwdoNrt6x5w=
github.com/alecthomas/assert/v2 v2.5.0/go.mod h1:fw5suVxB+wfYJ3291t0hRTqtGzFYdSwstnRQdaQx2DM=
github.com/alecthomas/kong v0.8.1 h1:acZdn3m4lLRobeh3Zi2S2EpnXTd1mOL6U7xVml+vfkY=
github.com/alecthomas/kong v0.8.1/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U=
github.com/alecthomas/repr v0.3.0 h1:NeYzUPfjjlqHY4KtzgKJiWd6sVq2eNUPTi34PiFGjY8=
github.com/alecthomas/repr v0.3.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4=
github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7VVbI0o4wBRNQIgn917usHWOd6VAffYI=
github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@ -21,19 +22,19 @@ github.com/calmh/xdr v1.1.0 h1:U/Dd4CXNLoo8EiQ4ulJUXkgO1/EyQLgDKLgpY1SOoJE=
github.com/calmh/xdr v1.1.0/go.mod h1:E8sz2ByAdXC8MbANf1LCRYzedSnnc+/sXXJs/PVqoeg=
github.com/ccding/go-stun v0.1.4 h1:lC0co3Q3vjAuu2Jz098WivVPBPbemYFqbwE1syoka4M=
github.com/ccding/go-stun v0.1.4/go.mod h1:cCZjJ1J3WFSJV6Wj8Y9Di8JMTsEXh6uv2eNmLzKaUeM=
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d h1:S2NE3iHSwP0XV47EEXL8mWmRdEfGscSJ+7EgePNgt0s=
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chmduquesne/rollinghash v4.0.0+incompatible h1:hnREQO+DXjqIw3rUTzWN7/+Dpw+N5Um8zpKV0JOEgbo=
github.com/chmduquesne/rollinghash v4.0.0+incompatible/go.mod h1:Uc2I36RRfTAf7Dge82bi3RU0OQUmXT9iweIcPqvr8A0=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/d4l3k/messagediff v1.2.1 h1:ZcAIMYsUg0EAp9X+tt8/enBE/Q8Yd5kzPynLyKptt9U=
github.com/d4l3k/messagediff v1.2.1/go.mod h1:Oozbb1TVXFac9FtSIxHBMnBCq2qeH/2KkEQxENCrlLo=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -49,21 +50,18 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs=
github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA=
github.com/go-asn1-ber/asn1-ber v1.5.5/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
github.com/go-asn1-ber/asn1-ber v1.5.7 h1:DTX+lbVTWaTw1hQ+PbZPlnDZPEIs0SS/GCZAl535dDk=
github.com/go-asn1-ber/asn1-ber v1.5.7/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
github.com/go-ldap/ldap/v3 v3.4.8 h1:loKJyspcRezt2Q3ZRMq2p/0v8iOurlmeXDPw6fikSvQ=
github.com/go-ldap/ldap/v3 v3.4.8/go.mod h1:qS3Sjlu76eHfHGpUdWkAXQTw4beih+cHsco2jXlIXrk=
github.com/go-ldap/ldap/v3 v3.4.6 h1:ert95MdbiG7aWo/oPYp9btL3KJlMPKnP58r09rI8T+A=
github.com/go-ldap/ldap/v3 v3.4.6/go.mod h1:IGMQANNtxpsOzj7uUAMjpGBaOVTC4DYyIy8VsTdxmtc=
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@ -75,6 +73,8 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@ -87,12 +87,11 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20240521024322-9665fa269a30 h1:r6YdmbD41tGHeCWDyHF691LWtL7D1iSTyJaKejTWwVU=
github.com/google/pprof v0.0.0-20240521024322-9665fa269a30/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw=
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q=
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
github.com/greatroar/blobloom v0.7.2 h1:F30MGLHOcb4zr0pwCPTcKdlTM70rEgkf+LzdUPc5ss8=
github.com/greatroar/blobloom v0.7.2/go.mod h1:mjMJ1hh1wjGVfr93QIHJ6FfDNVrA0IELv8OvMHJxHKs=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@ -101,31 +100,16 @@ github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brv
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jackpal/gateway v1.0.15 h1:yb4Gltgr8ApHWWnSyybnDL1vURbqw7ooo7IIL5VZSeg=
github.com/jackpal/gateway v1.0.15/go.mod h1:dbyEDcDhHUh9EmjB9ung81elMUZfG0SoNc2TfTbcj4c=
github.com/jackpal/gateway v1.0.13 h1:fJccMvawxx0k7S1q7Fy/SXFE0R3hMXkMuw8y9SofWAk=
github.com/jackpal/gateway v1.0.13/go.mod h1:6c8LjW+FVESFmwxaXySkt7fU98Yv806ADS3OY6Cvh2U=
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs=
github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo=
github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM=
github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg=
github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo=
github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o=
github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg=
github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh687T8=
github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs=
github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
@ -147,8 +131,6 @@ github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/maxbrunsfeld/counterfeiter/v6 v6.8.1 h1:NicmruxkeqHjDv03SfSxqmaLuisddudfP3h5wdXFbhM=
github.com/maxbrunsfeld/counterfeiter/v6 v6.8.1/go.mod h1:eyp4DdUJAKkr9tvxR3jWhw2mDK7CWABMG5r9uyaKC7I=
github.com/maxmind/geoipupdate/v6 v6.1.0 h1:sdtTHzzQNJlXF5+fd/EoPTucRHyMonYt/Cok8xzzfqA=
github.com/maxmind/geoipupdate/v6 v6.1.0/go.mod h1:cZYCDzfMzTY4v6dKRdV7KTB6SStxtn3yFkiJ1btTGGc=
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
@ -164,14 +146,14 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
github.com/onsi/ginkgo/v2 v2.17.3 h1:oJcvKpIb7/8uLpDDtnQuf18xVnwKp8DTD7DQ6gTd/MU=
github.com/onsi/ginkgo/v2 v2.17.3/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc=
github.com/onsi/ginkgo/v2 v2.16.0 h1:7q1w9frJDzninhXxjZd+Y/x54XNjG/UlRLIYPZafsPM=
github.com/onsi/ginkgo/v2 v2.16.0/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
github.com/onsi/gomega v1.33.0 h1:snPCflnZrpMsy94p4lXVEkHo12lmPnc3vY5XBbreexE=
github.com/onsi/gomega v1.33.0/go.mod h1:+925n5YtiFsLzzafLUHzVMBpvvRAzrydIBiSIxjX3wY=
github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo=
github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0=
github.com/oschwald/geoip2-golang v1.9.0 h1:uvD3O6fXAXs+usU+UGExshpdP13GAqp4GBrzN7IgKZc=
github.com/oschwald/geoip2-golang v1.9.0/go.mod h1:BHK6TvDyATVQhKNbQBdrj9eAvuwOMi2zSFXizL3K81Y=
github.com/oschwald/maxminddb-golang v1.12.0 h1:9FnTOD0YOhP7DGxGsq4glzpGy5+w7pq50AS6wALUMYs=
@ -190,16 +172,16 @@ github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE=
github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho=
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.53.0 h1:U2pL9w9nmJwJDa4qqLQ3ZaePJ6ZTwt7cMD3AG3+aLCE=
github.com/prometheus/common v0.53.0/go.mod h1:BrxBKv3FWBIGXw89Mg1AeBq7FSyRzXWI3l3e7W3RN5U=
github.com/prometheus/procfs v0.15.0 h1:A82kmvXJq2jTu5YUhSGNlYoxh85zLnKgPz4bMZgI5Ek=
github.com/prometheus/procfs v0.15.0/go.mod h1:Y0RJ/Y5g5wJpkTisOtqwDSo4HwhGmLB4VQSw2sQJLHk=
github.com/quic-go/quic-go v0.44.0 h1:So5wOr7jyO4vzL2sd8/pD9Kesciv91zSk8BoFngItQ0=
github.com/quic-go/quic-go v0.44.0/go.mod h1:z4cx/9Ny9UtGITIPzmPTXh1ULfOyWh4qGQlpnPcWmek=
github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos=
github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8=
github.com/prometheus/common v0.49.0 h1:ToNTdK4zSnPVJmh698mGFkDor9wBI/iGaJy5dbH1EgI=
github.com/prometheus/common v0.49.0/go.mod h1:Kxm+EULxRbUkjGU6WFsQqo3ORzB4tyKvlWFOE9mB2sE=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/quic-go/quic-go v0.41.0 h1:aD8MmHfgqTURWNJy48IYFg2OnxwHT3JL7ahGs73lb4k=
github.com/quic-go/quic-go v0.41.0/go.mod h1:qCkNjqczPEvgsOnxZ0eCD14lv+B2LHlFAB++CNOh9hA=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/riywo/loginshell v0.0.0-20200815045211-7d26008be1ab h1:ZjX6I48eZSFetPb41dHudEyVr5v953N15TsNZXlkcWY=
@ -210,8 +192,8 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8=
github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM=
github.com/shirou/gopsutil/v3 v3.24.4 h1:dEHgzZXt4LMNm+oYELpzl9YCqV65Yr/6SfrvgRBtXeU=
github.com/shirou/gopsutil/v3 v3.24.4/go.mod h1:lTd2mdiOspcqLgAnr9/nGi71NkeMpWKdmhuxm9GusH8=
github.com/shirou/gopsutil/v3 v3.24.2 h1:kcR0erMbLg5/3LcInpw0X/rrPSqq4CDPyI6A6ZRC18Y=
github.com/shirou/gopsutil/v3 v3.24.2/go.mod h1:tSg/594BcA+8UdQU2XcW803GWYgdtauFFPgJCJKZlVk=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@ -221,10 +203,10 @@ github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
@ -232,13 +214,13 @@ github.com/syncthing/notify v0.0.0-20210616190510-c6b7342338d2 h1:F4snRP//nIuTTW
github.com/syncthing/notify v0.0.0-20210616190510-c6b7342338d2/go.mod h1:J0q59IWjLtpRIJulohwqEZvjzwOfTEPp8SVhDJl+y0Y=
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs=
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48=
github.com/thejerf/suture/v4 v4.0.5 h1:F1E/4FZwXWqvlWDKEUo6/ndLtxGAUzMmNqkrMknZbAA=
github.com/thejerf/suture/v4 v4.0.5/go.mod h1:gu9Y4dXNUWFrByqRt30Rm9/UZ0wzRSt9AJS6xu/ZGxU=
github.com/thejerf/suture/v4 v4.0.2 h1:VxIH/J8uYvqJY1+9fxi5GBfGRkRZ/jlSOP6x9HijFQc=
github.com/thejerf/suture/v4 v4.0.2/go.mod h1:g0e8vwskm9tI0jRjxrnA6lSr0q6OfPdWJVX7G5bVWRs=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.15 h1:nuqt+pdC/KqswQKhETJjo7pvn/k4xMUxgW6liI7XpnM=
github.com/urfave/cli v1.22.15/go.mod h1:wSan1hmo5zeyLGBjRJbzRTNk8gwoYa2B9n4q9dmRIc0=
github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk=
github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA=
github.com/vitrun/qart v0.0.0-20160531060029-bf64b92db6b0 h1:okhMind4q9H1OxF44gNegWkiP4H/gsTFLalHFa4OOUI=
github.com/vitrun/qart v0.0.0-20160531060029-bf64b92db6b0/go.mod h1:TTbGUfE+cXXceWtbTHq6lqcTvYPBKLNejBEbnUsQJtU=
github.com/willabides/kongplete v0.4.0 h1:eivXxkp5ud5+4+NVN9e4goxC5mSh3n1RHov+gsblM2g=
@ -256,23 +238,20 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM=
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc=
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ=
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
@ -282,20 +261,17 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su
golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -324,26 +300,24 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@ -353,8 +327,8 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw=
golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@ -368,8 +342,8 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

View File

@ -15,19 +15,19 @@
"Add filter entry": "إضافة عامل التصفية",
"Add ignore patterns": "أضف أنماط التجاهل",
"Add new folder?": "إضافة مجلد جديد؟",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "بالإضافة إلى ذلك ، سيُزاد الفاصل الزمني لإعادة الفحص الكامل (60 مرة، وهو الافتراضي الجديد من 1H). يمكنك أيضًا التحكم بالإعدادات وتعديلها يدويًا لكل مجلد لاحقًا بعد اختيار \"لا\".",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "بالإضافة إلى ذلك ، سيتم زيادة الفاصل الزمني لإعادة الفحص الكامل (60 مرة، وهو الافتراضي الجديد من 1H). يمكنك أيضًا التحكم بالإعدادات وتعديلها يدويًا لكل مجلد لاحقًا بعد اختيار \"لا\".",
"Address": "العنوان",
"Addresses": "العناوين",
"Advanced": "متقدم",
"Advanced Configuration": "ضبط متقدم",
"All Data": "كل البيانات",
"All Time": "كل الوقت",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "يجب حماية جميع المجلدات التي شاركتها مع هذا الجهاز بكلمة مرور ، بحيث تكون جميع البيانات المرسلة غير قابلة للقراءة بدون كلمة المرور المقدمة.",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "يجب حماية جميع المجلدات التي تمت مشاركتها مع هذا الجهاز بكلمة مرور ، بحيث تكون جميع البيانات المرسلة غير قابلة للقراءة بدون كلمة المرور المقدمة.",
"Allow Anonymous Usage Reporting?": "السماح بإرسال تقارير الإستخدام المجهولة؟",
"Allowed Networks": "الشبكات المسموح بها",
"Alphabetic": "أبجدية",
"Altered by ignoring deletes.": غير بتجاهل عمليات الحذف.",
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "الإصدار يعالج بواسطة أمر خارجي. يجب إزالة الملف من المجلدات المشتركة. إذا كان المسار للتطبيق يحتوي على مسافات، يجب وضعها بين علامتي تنصيص دلالة على الاقتباس.",
"Altered by ignoring deletes.": م التغيير بتجاهل عمليات الحذف.",
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "الإصدار يتم معالجته بواسطة أمر خارجي. يجب إزالة الملف من المجلدات المشتركة. إذا كان المسار للتطبيق يحتوي على مسافات، يجب وضعها بين علامتي تنصيص دلالة على الاقتباس.",
"Anonymous Usage Reporting": "تقارير الإستخدام المجهولة",
"Anonymous usage report format has changed. Would you like to move to the new format?": "هل تريد الانتقال الى التصميم الجديد لتقرير الاستخدام المجهول ؟",
"Applied to LAN": "الشبكة المحلية",
@ -70,13 +70,13 @@
"Connection Type": "نوع الاتصال",
"Connections": "اتصالات",
"Connections via relays might be rate limited by the relay": "قد يكون معدل التوصيلات عبر المرحلات محدودًا بواسطة المرحل",
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "مراقبة الملفات بشكل مستمر متوفر في Syncthing. تفحص الملفات التي تغيرت في المسار فقط. هذا يساعد على تجنب فحص كامل المسار لأداء اسرع.",
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "مراقبة الملفات بشكل مستمر متوفر في Syncthing. يتم فحص الملفات التي تم تغييرها في المسار فقط. هذا يساعد على تجنب فحص كامل المسار لأداء اسرع.",
"Copied from elsewhere": "منسوخ من مكان أخر",
"Copied from original": "منسوخ من الأصل",
"Copied!": "نُسِخَ!",
"Copied!": "تم النسخ!",
"Copy": "نسخ",
"Copy failed! Try to select and copy manually.": "فشل النسخ! حاول التحديد والنسخ يدويًا.",
"Currently Shared With Devices": "مُشارَك مع الأجهزة حاليا",
"Currently Shared With Devices": "حاليًا تم مشاركته مع الأجهزة",
"Custom Range": "نطاق مخصص",
"Danger!": "خطر!",
"Database Location": "موقع قاعدة البيانات",
@ -158,9 +158,9 @@
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "يُتوقع فشل الاتصال بخوادم IPv6، إذا لم يكن IPv6 متاحا.",
"File Pull Order": "ترتيب استيراد الملفات",
"File Versioning": "إصدارات الملف",
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "تنقل الملفات إلى مجلد `.stversions` عند الاستبدال أو الحذف بواسطة البرنامج.",
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "تنقل الملفات إلى الإصدارات المؤرخة المختومة في مجلد `.stversions` عند استبدالها أو حذفها بواسطة Syncthing.",
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "الملفات محمية من التغييرات التي أجريت على الأجهزة الأخرى ، ولكن سترسل التغييرات التي أجريت على هذا الجهاز إلى بقية الأجهزة.",
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "الملفات يتم نقلها إلى مجلد `.stversions` عند الاستبدال أو الحذف بواسطة البرنامج.",
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "يتم نقل الملفات إلى الإصدارات المؤرخة المختومة في مجلد `.stversions` عند استبدالها أو حذفها بواسطة Syncthing.",
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "الملفات محمية من التغييرات التي تم إجراؤها على الأجهزة الأخرى ، ولكن سيتم إرسال التغييرات التي تم إجراؤها على هذا الجهاز إلى بقية الأجهزة.",
"Files are synchronized from the cluster, but any changes made locally will not be sent to other devices.": "تُزامَنُ الملفات من العنقود، لكن التغيرات المحلية على هذا الجهاز لاتُطَبَّقُ على غيره من الأجهزة.",
"Filesystem Watcher Errors": "أخطاء مراقب نظام الملفات",
"Filter by date": "فلترة بالتاريخ",
@ -174,7 +174,7 @@
"Folder type \"{%receiveEncrypted%}\" can only be set when adding a new folder.": "نوع المجلد \"{{receiveEncrypted}}\" لا يمكن إعداده إلا أثناء إنشاء الملف.",
"Folder type \"{%receiveEncrypted%}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.": "نوع المجلد \"{{receiveEncrypted}}\" لا يمكن إعداده بعد إضافة المجلد. يجب أن تحذف المجلد وأن تفك تشفير البيانات على قرص التخزين أو تحذفها، بعدها تنشئ المجلد مجددا.",
"Folders": "المجلدات",
"For the following folders an error occurred while starting to watch for changes. It will be retried every minute, so the errors might go away soon. If they persist, try to fix the underlying issue and ask for help if you can't.": "للمجلدات التالية، حدث خطأ قبل بدء مشاهدة التغييرات. ستعاد المحاولة كل دقيقة، نظرًا لذلك قد تختفي الأخطاء قريبًا. لكن إذا استمرت، فحاول حل المشكلة واطلب المساعدة إذا لم تستطع حل المشكلة.",
"For the following folders an error occurred while starting to watch for changes. It will be retried every minute, so the errors might go away soon. If they persist, try to fix the underlying issue and ask for help if you can't.": "للمجلدات التالية، حدث خطأ قبل بدء مشاهدة التغييرات. ستتم إعادة المحاولة كل دقيقة، نظرًا لذلك قد تختفي الأخطاء قريبًا. لكن إذا استمرت، فحاول حل المشكلة واطلب المساعدة إذا لم تستطع حل المشكلة.",
"Forever": "للأبد",
"Full Rescan Interval (s)": "مدة إعادة الفحص الكامل (ثانية)",
"GUI": "واجهة المستخدم الرسومية",
@ -182,7 +182,7 @@
"GUI Authentication Password": "كلمة السر لتوثيق الواجهة",
"GUI Authentication User": "اسم المستخدم لدخول واجهة الرسومية",
"GUI Authentication: Set User and Password": "توثيق الواجهة: أنشئ كلمة مرور للمستخدم",
"GUI Listen Address": "عنوان ترقب الواجهة الرسومية",
"GUI Listen Address": "واجهة الرسومية الاستماع الى العنوان",
"GUI Override Directory": "مجلد إحلال الواجهة",
"GUI Theme": "شكل الواجهة",
"General": "عام",
@ -193,7 +193,7 @@
"Help": "مساعدة",
"Hint: only deny-rules detected while the default is deny. Consider adding \"permit any\" as last rule.": "ملحوظة: إذا كان الإعداد الافتراضي هو الرفض، وحدها قواعد الرفض تُرصد. جرب إضافة \"السماح للكل\" كخيار أخير.",
"Home page": "الصفحة الرئيسية",
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "ومع ذلك، تشير إعداداتك الحالية إلى أنك قد لا ترغب في تمكينه. لذلك توقف الإبلاغ التلقائي عن الأعطال.",
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "ومع ذلك، تشير إعداداتك الحالية إلى أنك قد لا ترغب في تمكينه. لذلك تم تعطيل الإبلاغ التلقائي عن الأعطال.",
"Identification": "المُعرِّف",
"If untrusted, enter encryption password": "في حالة الرِّيبة، أدخل كلمة سر التشفير",
"If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.": "إذا أردت منع المستخدمين الآخرين على هذا الحاسب من الوصول لملفاتك من خلال Syncthing، يُنصَح بإعداد وثائق الملكية.",
@ -225,9 +225,9 @@
"Learn more": "اعرف أكثر",
"Learn more at {%url%}": "اطلع على المزيد في {{url}}",
"Limit": "الحد",
"Listener Failures": "أعطال المنصت",
"Listener Status": "حالة المنصت",
"Listeners": "المنصتين",
"Listener Failures": "فشل المستمع",
"Listener Status": "حالة المستمع",
"Listeners": "المستمعين",
"Loading data...": "تحميل بيانات...",
"Loading...": "تحميل...",
"Local Additions": "الإضافات المحلِّيَّة",
@ -264,7 +264,7 @@
"Newest First": "الأحدث أولا",
"No": "لا",
"No File Versioning": "لا تقسيم لإصدارات الملفات",
"No files will be deleted as a result of this operation.": "لن يحذف أي ملف بسبب هذه العملية.",
"No files will be deleted as a result of this operation.": "لن يتم حذف أي ملفات بسبب هذا العملية.",
"No rules set": "لم تحدد قواعد",
"No upgrades": "لا يوجد ترقيات",
"Not shared": "لم يُشارَك",
@ -328,7 +328,7 @@
"Rescans": "يعيد الفحص",
"Restart": "إعادة تشغيل",
"Restart Needed": "مطلوب أعادة تشغيل",
"Restarting": ُعاد التشغيل",
"Restarting": تم إعادة التشغيل",
"Restore": "استعادة",
"Restore Versions": "استعادة إصدارات",
"Resume": "استرد",
@ -339,7 +339,7 @@
"Save": "حفظ",
"Saving changes": "تُحفَظ التعديلات",
"Scan Time Remaining": "فحص الوقت المتبقي",
"Scanning": "جار الفحص",
"Scanning": "يتم الفحص",
"See external versioning help for supported templated command line parameters.": "راجع تعليمات الإصدارات الخارجية لمعرفة القيم المدعومة في سطر الأوامر.",
"Select All": "تحديد الكل",
"Select a version": "اختر إصداراً",
@ -364,12 +364,12 @@
"Show ID": "عرض المُعرِّف",
"Show QR": "اظهار QR",
"Show detailed discovery status": "اعرض حالة الاكتشاف تفصيليا",
"Show detailed listener status": "اعرض حالة الإنصات تفصيليا",
"Show detailed listener status": "اعرض حالة الاستماع تفصيليا",
"Show diff with previous version": "أظهر الفرق مقارنةً بالنسخة السابقة",
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "يُعرَض بدلا من المُعرِّف ضمن العناقيد. سيُروَّج للأجهزة الأخرى على أنه اسم أساسي محتمل.",
"Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.": "يُعرَض بدلا من المُعرِّف ضمن العناقيد. إذا تُرك فارغا، سيُحدَّث إلى الاسم المختار من قِبَل الجهاز.",
"Shutdown": "إغلاق",
"Shutdown Complete": "أُغلِق",
"Shutdown Complete": "تم الإغلاق",
"Simple": "بسيط",
"Simple File Versioning": "التقسيم البسيط لإصدارات الملفات",
"Single level wildcard (matches within a directory only)": "المقارنة على مستوى واحد (المقارنة مع الملفات في المجلد الحالي فقط)",
@ -377,10 +377,10 @@
"Smallest First": "الأصغر أولا",
"Some discovery methods could not be established for finding other devices or announcing this device:": "بعض أساليب الاستكشاف يمكن استخدامها للبحث عن أجهزة أخرى أو الإعلان عن هذا الجهاز:",
"Some items could not be restored:": "بعض العناصر لا يمكن استرجاعها:",
"Some listening addresses could not be enabled to accept connections:": "بعض عناوين الإنصات لا يمكن تفعيلها لقبول الاتصالات:",
"Some listening addresses could not be enabled to accept connections:": "بعض عناوين الاستماع لا يمكن تفعيلها لقبول الاتصالات:",
"Source Code": "مصدر الشفرة",
"Stable releases and release candidates": "الإصدارات المستقرة والإصدارات المرشحة",
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "الإصدارات المستقرة تأخرت نحو أسبوعين. خلال هذه الفترة نُجري الاختبارات عن طريق الإصدارات المرشحة.",
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "الإصدارات المستقرة تأخرت بنحو أسبوعين. خلال هذه الفترة يتم إجراء الاختبارات كإصدارات مرشحة.",
"Stable releases only": "الإصدارات المستقرة فقط",
"Staggered": "مترنِّح",
"Staggered File Versioning": "تقسمات إصدارات الملف مهترئة",
@ -396,17 +396,17 @@
"Sync Ownership": "زامن الملكية",
"Sync Protocol Listen Addresses": "عناوين بروتوكول استقبال المزامنة",
"Sync Status": "وضع المزامنة",
"Syncing": ُزامَن",
"Syncing": تم التزامن",
"Syncthing device ID for \"{%devicename%}\"": "مُعرِّف Syncthing للجهاز {{devicename}}",
"Syncthing has been shut down.": "أُوقِف Syncthing.",
"Syncthing has been shut down.": "تم إيقاف Syncthing.",
"Syncthing includes the following software or portions thereof:": "المزامنة تتضمن البرامج التالية أو أجزائها:",
"Syncthing is Free and Open Source Software licensed as MPL v2.0.": "Syncthing هو برنامج حر مفتوح المصدر تحت ترخيص MPL v2.0 (ترخيص موزيلا العام النسخة الثانية).",
"Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it's transmitted over the internet.": "Syncthing هو تطبيق للمزامنة المستمرة للملفات. يزامن الملفات بين جهازين أو أكثر بشكل لحظي، آمن من الأعين المتربصة. بياناتك ملك لك وحدك، من حقك أن تختار أين تُخَزَّن، وهل يطلع عليها غيرك أم لا، وكيف تتنقل عبر الشبكة.",
"Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it's transmitted over the internet.": "Syncthing هو تطبيق للمزامنة المستمرة للملفات. يزامن الملفات بين جهازين أو أكثر بشكل لحظي، آمن من الأعين المتربصة. بياناتك ملك لك وحدك، من حقك أن تختار أين تُخَزَّن، وهل يطلع عليها طرف ثالث أم لا، وكيف تتنقل عبر الشبكة.",
"Syncthing is listening on the following network addresses for connection attempts from other devices:": "Syncthing يترقب محاولات الاتصال على العنوان التالي:",
"Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.": "Syncthing لا يترقب أي محاولة للاتصال على أي من عناوين الشبكة. الاتصالات الصادرة فقط هي التي يمكن أن تعمل.",
"Syncthing is restarting.": عاد تشغيل Syncthing.",
"Syncthing is restarting.": تم إعادة تشغيل Syncthing.",
"Syncthing is saving changes.": "Syncthing يحفظ التعديلات.",
"Syncthing is upgrading.": "نطور Syncthing.",
"Syncthing is upgrading.": "يتم تطوير Syncthing.",
"Syncthing now supports automatically reporting crashes to the developers. This feature is enabled by default.": "Syncthing يدعم إعادة التشغيل التلقائي للمطورين. هذه الخاصية مفعلة بشكل افتراضي.",
"Syncthing seems to be down, or there is a problem with your Internet connection. Retrying…": "Syncthing معطل على ما يبدو، ربما يكون العطل في شبكتك. إعادة المحاولة…",
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "Syncthing يواجه مشكلة في معالجة طلبك. إذا استعصت المشكلة، أعد تحميل الصفحة رجاء.",
@ -418,7 +418,7 @@
"The Syncthing admin interface is configured to allow remote access without a password.": "واجهة مدير Syncthing معدة للسماح بالوصول بغير كلمة مرور.",
"The aggregated statistics are publicly available at the URL below.": "الإحصاءات المجمعة متاحة للجميع على العنوان التالي.",
"The cleanup interval cannot be blank.": "المدة بين عمليات التنظيف لا يمكن تركها فارغة.",
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "حفظت الإعدادات ولكن لم تفعَّل بعد. يجب أعادة تشغيل Syncthing حتى تفعَّل الإعدادات.",
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "تم حفظ الإعدادات ولكن لم يتم تفعيلها بعد. يجب أعادة تشغيل Syncthing حتى تم تفعيل الإعدادات.",
"The device ID cannot be blank.": "مُعرِّف الجهاز لا يمكن أن يكون فارغاً.",
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "يمكنك أن تجد مُعرِّف الجهاز الذي ينبغي استخدامه هنا في قائمة \"الإجراءات > عرض المُعرِّف\" على الجهاز الآخر. المسافات والخطوط الاعتراضية تُتجاهَل.",
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes, and app versions. If the reported data set is changed you will be prompted with this dialog again.": "تقارير الاستخدام المشفرة ترسل يوميا. تُستخدم هذه التقارير لتتبع المنصات الشائعة، أحجام المجلدات، إصدارات التطبيق. إذا تغيرت بنود هذا التقرير، ستواجَهُ بهذه النافذة مرة أخرى.",
@ -452,7 +452,7 @@
"There are no devices to share this folder with.": "لا توجد أجهزة أخرى لتشاركها هذا المجلد.",
"There are no file versions to restore.": "لا توجد إصدارات يمكن استعادتها لهذا الملف.",
"There are no folders to share with this device.": "لا توجد مجلدات لمشاركتها مع هذا الجهاز.",
"They are retried automatically and will be synced when the error is resolved.": ُعاد المحاولة تلقائيًا وستزامن عند إصلاح الخطأ.",
"They are retried automatically and will be synced when the error is resolved.": تم إعادة المحاولة تلقائيًا وسيتم مزامنتها عند إصلاح الخطأ.",
"This Device": "هذا الجهاز",
"This Month": "هذا الشهر",
"This can easily give hackers access to read and change any files on your computer.": "هذا قد يسبب في اختراق جهازك.",
@ -473,7 +473,7 @@
"Undecided (will prompt)": "غير محدد ( ستظهر نافذة للتحديد لاحقًا )",
"Unexpected Items": "المحتويات المفاجِئة",
"Unexpected items have been found in this folder.": "عُثِر على محتويات غير متوقعة في هذا المجلد.",
"Unignore": "لا تتجاهل",
"Unignore": "لا يتم التجاهل",
"Unknown": "غير معرف",
"Unshared": "غير مشترك",
"Unshared Devices": "الأجهزة غير المُشَارَكة",
@ -499,7 +499,7 @@
"Version": "الإصدار",
"Versions": "نسخ",
"Versions Path": "مسار النسخ",
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "تحذف الإصدارات تلقائيًا إذا تجاوزت العمر الأقصى أو تجاوزت عدد الملفات المسموح بها خلال فاصل زمني محدد.",
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "يتم حذف الإصدارات تلقائيًا إذا تجاوزت العمر الأقصى أو تجاوزت عدد الملفات المسموح بها خلال فاصل زمني محدد.",
"Waiting to Clean": "في انتظار التنظيف",
"Waiting to Scan": "في انتظار الفحص",
"Waiting to Sync": "في انتظار المزامنة",

View File

@ -153,7 +153,7 @@
"Failed to load file versions.": "Nepodařilo se nahrát verze souboru.",
"Failed to load ignore patterns.": "Načtení vzorů ignorovaného se nezdařilo.",
"Failed to setup, retrying": "Nastavování se nezdařilo, zkouší se znovu",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Je v pořádku, když se připojení k IPv6 serverům nezdaří, pokud není k dispozici IPv6 konektivita.",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Je v pořádku, když připojení k IPv6 serverům nezdaří, pokud není k dispozici IPv6 konektivita.",
"File Pull Order": "Pořadí stahování souborů",
"File Versioning": "Správa verzí souborů",
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Při nahrazování nebo mazání aplikací Syncthing jsou původní soubory přesunuty do složky .stversions.",
@ -494,9 +494,7 @@
"You should never add or change anything locally in a \"{%receiveEncrypted%}\" folder.": "Ve složce typu „{{receiveEncrypted}}“ byste neměli lokálně nic měnit ani vytvářet.",
"days": "dní",
"directories": "složky",
"file": "soubor",
"files": "souborů",
"folder": "složka",
"full documentation": "úplná dokumentace",
"items": "položky",
"seconds": "sekund",

View File

@ -26,7 +26,7 @@
"Allow Anonymous Usage Reporting?": "Autoriser l'envoi de statistiques d'utilisation anonymisées ?",
"Allowed Networks": "Réseaux autorisés",
"Alphabetic": "Alphabétique",
"Altered by ignoring deletes.": "Protégé par \"Ignore Delete\".",
"Altered by ignoring deletes.": "Altéré par \"Ignore Delete\".",
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Une commande externe gère les versions de fichiers. Il lui incombe de supprimer les fichiers du répertoire partagé. Si le chemin contient des espaces, il doit être spécifié entre guillemets.",
"Anonymous Usage Reporting": "Rapport anonyme de statistiques d'utilisation",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Le format du rapport anonyme d'utilisation a changé. Voulez-vous passer au nouveau format ?",
@ -190,7 +190,7 @@
"Global Discovery": "Découverte globale",
"Global Discovery Servers": "Serveurs de découverte globale",
"Global State": "État global",
"Help": "Aide (anglais)",
"Help": "Aide (en anglais)",
"Hint: only deny-rules detected while the default is deny. Consider adding \"permit any\" as last rule.": "Remarque : vous n'avez indiqué que des filtres de refus alors que le comportement par défaut est déjà le refus. Envisagez d'ajouter * (Partager tout les autres attributs non spécifiés) comme dernier filtre (coché) pour inverser le comportement par défaut.",
"Home page": "Page d'accueil",
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "Cependant, vos réglages indiquent que vous pourriez souhaiter ne pas l'activer. Nous avons désactivé pour vous l'envoi automatique des rapports.",

View File

@ -11,135 +11,16 @@
"Add Folder": "Engadir cartafol",
"Add Remote Device": "Engadir dispositivo remoto",
"Add devices from the introducer to our device list, for mutually shared folders.": "Engadir dispositivos desde o enviador ao noso dispositivo, para cartafoles mutuamente compartidos.",
"Add filter entry": "Engadir unha entrada ao filtro",
"Add ignore patterns": "Engadir patróns a ignorar",
"Add new folder?": "Engadir novo cartafol?",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "Ademais, aumentarase o lapso de reescaneo completo (60 veces, é dicir, novo por defecto dunha hora). Tamén pode configuralo de xeito manual para cada cartafol logo de escoller No.",
"Address": "Enderezo",
"Addresses": "Enderezos",
"Advanced": "Avanzado",
"Advanced Configuration": "Configuración avanzada",
"All Data": "Todos os datos",
"All Time": "Todo o tempo",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Todos os cartafoles compartidos con este dispositivo teñen que estar protexidos por un contrasinal, de modo que os datos enviados sexan ilexibles sen o constrasinal indicado.",
"Allow Anonymous Usage Reporting?": "Permitir o informe de uso anónimo?",
"Allowed Networks": "Redes permitidas",
"Alphabetic": "Alfabética",
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Un comando externo xestiona as versións. Ten que eliminar o ficheiro do cartafol compartido. Si a ruta ao aplicativo contén espazos, deberían ir acotados.",
"Anonymous Usage Reporting": "Informe anónimo de uso",
"Anonymous usage report format has changed. Would you like to move to the new format?": "O formato do informe de uso anónimo cambiou. Quere usar o novo formato?",
"Applied to LAN": "Aplicado a LAN",
"Apply": "Aplicar",
"Are you sure you want to override all remote changes?": "Está seguro de que desexa sobrecribir todos os cambios remotos?",
"Are you sure you want to permanently delete all these files?": "Está seguro de que desexa eliminar permanentemente todos estes ficheiros?",
"Are you sure you want to remove device {%name%}?": "Está seguro de que desexa eliminar o dispositivo {{name}}?",
"Are you sure you want to remove folder {%label%}?": "Está seguro de que desexa eliminar o cartafol {{label}}?",
"Are you sure you want to restore {%count%} files?": "Está seguro de que desexa restaurar {{count}} ficheiros?",
"Are you sure you want to upgrade?": "Está seguro de que desexa actualizar?",
"Authors": "Autores",
"Auto Accept": "Aceptar automaticamente",
"Automatic Crash Reporting": "Informe Automático de Erros",
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Agora a actualización automática permite escoller entre versións estables e versións candidatas.",
"Automatic upgrades": "Actualizacións automáticas",
"Automatic upgrades are always enabled for candidate releases.": "As actualizacións automáticas sempre están activadas para versións candidatas.",
"Be careful!": "Teña coidado!",
"Body:": "Corpo:",
"Bugs": "Erros",
"Cancel": "Cancelar",
"Changelog": "Rexistro de cambios",
"Cleanup Interval": "Intervalo de Limpeza",
"Click to see full identification string and QR code.": "Faga clic para ver a cadea de identificación completa e o código QR.",
"Close": "Pechar",
"Compression": "Compresión",
"Configuration Directory": "Directorio de Configuración",
"Configuration File": "Ficheiro de Configuración",
"Configured": "Configurado",
"Connected (Unused)": "Conectado (Sen uso)",
"Connection Error": "Erro de Conexión",
"Connection Management": "Xestión de Conexións",
"Connection Type": "Tipo de Conexión",
"Connections": "Conexións",
"Connections via relays might be rate limited by the relay": "As conexións a través de relevos poden estar limitados polo relevo",
"Copied from elsewhere": "Copiado doutro sitio",
"Copied from original": "Copiado do orixinal",
"Copied!": "Copiado!",
"Copy": "Copiar",
"Copy failed! Try to select and copy manually.": "Fallou a copia! Probe a seleccionar e copiar manualmente.",
"Danger!": "Perigo!",
"Delete": "Eliminar",
"Delete Unexpected Items": "Eliminar os Ítems Inesperados",
"Deleted {%file%}": "Eliminado {{file}}",
"Deselect All": "Deseleccionar Todo",
"Deselect devices to stop sharing this folder with.": "Deleccionar os dispositivos cos que deixar de compartir este cartafol.",
"Deselect folders to stop sharing with this device.": "Deseleccionar os cartafois que deixar de compartir con este dispositivo.",
"Device": "Dispositivo",
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "O dispositivo \"{{name}}\" ({{device}} en {{address}}) quere conectarse. Engadir o dispositivo?",
"Device ID": "ID do dispositivo",
"Device Identification": "Identificación do dispositivo",
"Device Name": "Nome do dispositivo",
"Device Status": "Estado do dispositivo",
"Devices": "Dispositivos",
"Disabled": "Deshabilitado",
"Discard": "Descartar",
"Disconnected": "Desconectado",
"Disconnected (Inactive)": "Desconectado (Inactivo)",
"Disconnected (Unused)": "Desconectado (Sen uso)",
"Discovered": "Descuberto",
"Discovery": "Descubrimento",
"Discovery Failures": "Erros de Descubrimento",
"Discovery Status": "Estado do Descubrimento",
"Dismiss": "Descartar",
"Do not restore": "Non restaurar",
"Documentation": "Documentación",
"Download Rate": "Velocidade de Descarga",
"Downloaded": "Descargado",
"Downloading": "Descargando",
"Edit": "Editar",
"Edit Device": "Editar o Dispositivo",
"Edit Folder": "Editar o Cartafol",
"Editing {%path%}.": "Editando {{path}}.",
"Enable NAT traversal": "Habilitar o NAT traversal",
"Enable Relaying": "Habilitar Relevos",
"Enabled": "Habilitado",
"Enter a non-negative number (e.g., \"2.35\") and select a unit. Percentages are as part of the total disk size.": "Introduza un número non negativo (por exemplo, \"2.35\") e seleccione unha unidade. As porcentaxes son como partes totais do tamaño do disco.",
"Enter a non-privileged port number (1024 - 65535).": "Introduza un número de porto non privilexiado (1024-65535).",
"Enter comma separated (\"tcp://ip:port\", \"tcp://host:port\") addresses or \"dynamic\" to perform automatic discovery of the address.": "Introduza direccións separadas por comas (\"tcp://ip:porto\", \"tcp://host:porto\") ou \"dynamic\" para realizar o descubrimento automático da dirección.",
"Enter ignore patterns, one per line.": "Introduza patróns a ignorar, un por liña.",
"Enter up to three octal digits.": "Introduza ata tres díxitos octais.",
"Error": "Erro",
"Extended Attributes": "Atributos Estendidos",
"Extended Attributes Filter": "Filtro de Atributos Estendidos",
"External": "Externo",
"External File Versioning": "Versionado de Fichiro Externo",
"File Pull Order": "Orde de Obtención de Arquivos",
"File Versioning": "Versionado de Ficheiros",
"Filter by date": "FIltrar por data",
"Filter by name": "Filtrar por nome",
"Folder": "Cartafol",
"Folder ID": "ID do Cartafol",
"Folder Label": "Etiqueta do Cartafol",
"Folder Path": "Ruta do Cartafol",
"Folder Status": "Estado do Cartafol",
"Folder Type": "Tipo do Cartafol",
"Folder type \"{%receiveEncrypted%}\" can only be set when adding a new folder.": "O tipo de cartafol \"{{receiveEncrypted}}\" so pode ser establecido ao engadir un cartafol novo.",
"Folder type \"{%receiveEncrypted%}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.": "O tipo de cartafol \"{{receiveEncrypted}}\" non se pode cambiar despois de engadir o cartafol. Ten que eliminar o cartafol, eliminar ou desencriptar os datos do disco e volver a engadirlo.",
"Folders": "Cartafois",
"Forever": "Para sempre",
"Full Rescan Interval (s)": "Intervalo de Escaneamento Completo (s)",
"GUI": "GUI",
"GUI / API HTTPS Certificate": "Certificado HTTPS GUI/API",
"GUI Authentication Password": "Contrasinal de Autenticación da GUI",
"GUI Authentication User": "Usuario de Autenticación da GUI",
"GUI Authentication: Set User and Password": "Autenticación da GUI: Establecer o Usuario e o Contrasinal",
"GUI Listen Address": "Dirección de Escoita da GUI",
"GUI Theme": "Tema da GUI",
"General": "Xeral",
"Generate": "Xerar",
"Global Discovery": "Descubrimento Global",
"Global Discovery Servers": "Servidores de Descubrimento Global",
"Global State": "Estado Global",
"Help": "Axuda",
"Home page": "Páxina de inicio",
"Identification": "Identificación",
"LDAP": "LDAP"
}

View File

@ -1,555 +0,0 @@
{
"A device with that ID is already added.": "उस ID वाला उपकरण पहले से ही जुड़ा है।",
"A negative number of days doesn't make sense.": "दिनों की नकारात्मक संख्या का कोई मतलब नहीं है।",
"A new major version may not be compatible with previous versions.": "नया प्रमुख संस्करण पिछले संस्करणों के साथ संगत नहीं हो सकता है।",
"API Key": "API कुंजी",
"About": "हमारे बारे में",
"Action": "कार्रवाई",
"Actions": "कार्रवाइयां",
"Active filter rules": "सक्रिय फिल्टर नियम",
"Add": "जोड़ें",
"Add Device": "उपकरण जोड़ें",
"Add Folder": "फोल्डर जोड़ें",
"Add Remote Device": "रिमोट उपकरण जोड़ें",
"Add devices from the introducer to our device list, for mutually shared folders.": "पारस्परिक रूप से साझा किए गए फोल्डरों के लिए, परिचयकर्ता से हमारी उपकरण सूची में उपकरण जोड़ें।",
"Add filter entry": "फिल्टर प्रविष्टि जोड़ें",
"Add ignore patterns": "नजरअंदाज प्रतिमान जोड़ें",
"Add new folder?": "नया फोल्डर जोड़ें?",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "इसके अतिरिक्त पूर्ण पुन: स्कैन अंतराल बढ़ाया जाएगा (60 गुना, यानी 1घं का नया तयशुदा अंतराल)। आप नंबर चुनने के बाद में इसे प्रत्येक फोल्डर के लिए मैन्युअल रूप से विन्यस्त भी कर सकते हैं।",
"Address": "पता",
"Addresses": "पते",
"Advanced": "उन्नत",
"Advanced Configuration": "उन्नत विन्यास",
"All Data": "सभी डेटा",
"All Time": "हर समय",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "इस उपकरण के साथ साझा किए गए सभी फोल्डरों को पासवर्ड द्वारा संरक्षित किया जाना चाहिए, जैसे कि दिए गए पासवर्ड के बिना भेजा गया सभी डेटा अपठनीय हो।",
"Allow Anonymous Usage Reporting?": "अज्ञात उपयोग रिपोर्टिंग की अनुमति दें?",
"Allowed Networks": "अनुमत नेटवर्क",
"Alphabetic": "वर्णानुक्रमक",
"Altered by ignoring deletes.": "मिटाए गए को अनदेखा करके बदला गया।",
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "एक बाहरी कमांड संस्करणीकरण को संभालता है। इसे साझा फोल्डर से फाइल को हटाना होगा। यदि अनुप्रयोग के पथ में रिक्त स्थान हैं, तो उसे उद्धृत किया जाना चाहिए।",
"Anonymous Usage Reporting": "अनाम उपयोग रिपोर्टिंग",
"Anonymous usage report format has changed. Would you like to move to the new format?": "अनाम उपयोग रिपोर्ट प्रारूप बदल गया है। क्या आप नए प्रारूप में जाना चाहेंगे?",
"Applied to LAN": "LAN पर लागू किया गया",
"Apply": "लागू करें",
"Are you sure you want to override all remote changes?": "क्या आप वाकई सभी रिमोट परिवर्तनों का अध्यारोहण करना चाहते हैं?",
"Are you sure you want to permanently delete all these files?": "क्या आप वाकई इन सभी फाइलों को स्थायी रूप से मिटाना चाहते हैं?",
"Are you sure you want to remove device {%name%}?": "क्या आप वाकई उपकरण {{name}} को हटाना चाहते हैं?",
"Are you sure you want to remove folder {%label%}?": "क्या आप वाकई फोल्डर {{label}} हटाना चाहते हैं?",
"Are you sure you want to restore {%count%} files?": "क्या आप वाकई {{count}} फाइलें पुनर्स्थापित करना चाहते हैं?",
"Are you sure you want to revert all local changes?": "क्या आप वाकई सभी स्थानीय परिवर्तन पूर्ववत करना चाहते हैं?",
"Are you sure you want to upgrade?": "क्या आप वाकई उन्नयन करना चाहते हैं?",
"Authentication Required": "प्रमाणीकरण आवश्यक",
"Authors": "रचयिता",
"Auto Accept": "स्वतः स्वीकारें",
"Automatic Crash Reporting": "स्वचालित क्रैश रिपोर्टिंग",
"Automatic upgrade now offers the choice between stable releases and release candidates.": "स्वचालित उन्नयन अब स्थिर रिलीज़ और रिलीज़ उम्मीदवारों के बीच विकल्प प्रदान करता है।",
"Automatic upgrades": "स्वचालित उन्नयन",
"Automatic upgrades are always enabled for candidate releases.": "उम्मीदवार रिलीज़ के लिए स्वचालित उन्नयन हमेशा सक्षम होते हैं।",
"Automatically create or share folders that this device advertises at the default path.": "स्वचालित रूप से वे फोल्डर बनाएं या साझा करें जिन्हें यह उपकरण तयशुदा पथ पर विज्ञापित करता है।",
"Available debug logging facilities:": "उपलब्ध डिबग लॉगिंग सुविधाएं:",
"Be careful!": "ध्यान से!",
"Body:": "ढांचा:",
"Bugs": "बग",
"Cancel": "रद्द करें",
"Changelog": "चेंजलॉग",
"Clean out after": "इतने समय के बाद साफ़ करें",
"Cleaning Versions": "सफाई संस्करण",
"Cleanup Interval": "सफाई अंतराल",
"Click to see full identification string and QR code.": "पूर्ण पहचान स्ट्रिंग और QR कोड देखने के लिए क्लिक करें।",
"Close": "बंद करें",
"Command": "कमांड",
"Comment, when used at the start of a line": "टिप्पणी, जब किसी पंक्ति के आरंभ में उपयोग किया जाता है",
"Compression": "संपीड़न",
"Configuration Directory": "विन्यास निर्देशिका",
"Configuration File": "विन्यास फाइल",
"Configured": "विन्यस्त",
"Connected (Unused)": "जुड़े हुए (अप्रयुक्त)",
"Connection Error": "कनेक्शन त्रुटि",
"Connection Management": "कनेक्शन प्रबंधन",
"Connection Type": "कनेक्शन प्रकार",
"Connections": "कनेक्शन",
"Connections via relays might be rate limited by the relay": "रिले के माध्यम से कनेक्शन की दर रिले द्वारा सीमित हो सकती है",
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "परिवर्तनों पर लगातार नजर रखना अब Syncthing के भीतर उपलब्ध है। यह डिस्क पर परिवर्तनों का पता लगाएगा और केवल संशोधित पथों पर स्कैन जारी करेगा। लाभ यह है कि परिवर्तन तेजी से प्रसारित होते हैं और कम पूर्ण स्कैन की आवश्यकता होती है।",
"Copied from elsewhere": "अन्यत्र से कॉपी किया गया",
"Copied from original": "मूल से कॉपी किया गया",
"Copied!": "कॉपी किया गया!",
"Copy": "कॉपी करें",
"Copy failed! Try to select and copy manually.": "कॉपी विफल! मैन्युअल रूप से चयन करने और कॉपी करने का प्रयास करें।",
"Currently Shared With Devices": "वर्तमान में उपकरणों के साथ साझा किया गया",
"Custom Range": "तदनुकूल दायरा",
"Danger!": "खतरा!",
"Database Location": "डेटाबेस स्थान",
"Debugging Facilities": "डिबगिंग सुविधाएं",
"Default": "तयशुदा",
"Default Configuration": "तयशुदा विन्यास",
"Default Device": "तयशुदा उपकरण",
"Default Folder": "तयशुदा फोल्डर",
"Default Ignore Patterns": "तयशुदा नजरअंदाज प्रतिमान",
"Defaults": "तयशुदा मान",
"Delete": "मिटाएं",
"Delete Unexpected Items": "अप्रत्याशित वस्तुएं मिटाएं",
"Deleted {%file%}": "{{file}} मिटाई गई",
"Deselect All": "सभी अचयनित करें",
"Deselect devices to stop sharing this folder with.": "इस फोल्डर को साझा करना बंद करने के लिए उपकरण का चयन रद्द करें।",
"Deselect folders to stop sharing with this device.": "इस उपकरण के साथ साझा करना बंद करने के लिए फोल्डरों का चयन रद्द करें।",
"Device": "उपकरण",
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "उपकरण \"{{name}}\" ({{device}} {{address}} पर) जुड़ना चाहता है। नया उपकरण जोड़ें?",
"Device Certificate": "उपकरण प्रमाणपत्र",
"Device ID": "उपकरण ID",
"Device Identification": "उपकरण पहचान",
"Device Name": "उपकरण का नाम",
"Device Status": "उपकरण की स्थिति",
"Device is untrusted, enter encryption password": "उपकरण अविश्वसनीय है, कूटलेखन पासवर्ड दर्ज करें",
"Device rate limits": "उपकरण दर सीमा",
"Device that last modified the item": "वह उपकरण जिसने अंतिम बार वस्तु को संशोधित किया था",
"Devices": "उपकरण",
"Disable Crash Reporting": "क्रैश रिपोर्टिंग अक्षम करें",
"Disabled": "अक्षम",
"Disabled periodic scanning and disabled watching for changes": "आवधिक स्कैनिंग और परिवर्तनों को देखना अक्षम किया गया",
"Disabled periodic scanning and enabled watching for changes": "आवधिक स्कैनिंग अक्षम की गई और परिवर्तनों को देखना सक्षम किया गया",
"Disabled periodic scanning and failed setting up watching for changes, retrying every 1m:": "आवधिक स्कैनिंग अक्षम और परिवर्तनों को देखने के लिए स्थापना विफल, हर 1मि में पुन: प्रयास:",
"Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).": "फाइल अनुमतियों की तुलना और समन्वयन अक्षम करता है। अस्तित्वहीन या तदनुकूल अनुमतियों (जैसे FAT, exFAT, Synology, Android) वाले सिस्टम पर उपयोगी।",
"Discard": "त्यागें",
"Disconnected": "वियोजीत",
"Disconnected (Inactive)": "वियोजीत (निष्क्रिय)",
"Disconnected (Unused)": "वियोजीत (अप्रयुक्त)",
"Discovered": "खोजे गए",
"Discovery": "खोज",
"Discovery Failures": "खोज विफलताएं",
"Discovery Status": "खोज स्थिति",
"Dismiss": "खारिज करें",
"Do not add it to the ignore list, so this notification may recur.": "इसे अनदेखा सूची में न जोड़ें, ताकि यह अधिसूचना दोबारा आ सके।",
"Do not restore": "पुनर्स्थापित न करें",
"Do not restore all": "सभी को पुनर्स्थापित न करें",
"Do you want to enable watching for changes for all your folders?": "क्या आप अपने सभी फोल्डरों के लिए परिवर्तनों को देखना सक्षम करना चाहते हैं?",
"Documentation": "दस्तावेज़ीकरण",
"Download Rate": "डाउनलोड दर",
"Downloaded": "डाउनलोड किए गए",
"Downloading": "डाउनलोड किया जा रहा है",
"Edit": "संपादित करें",
"Edit Device": "उपकरण संपादित करें",
"Edit Device Defaults": "उपकरण तयशुदा संपादित करें",
"Edit Folder": "फोल्डर संपादित करें",
"Edit Folder Defaults": "फोल्डर तयशुदा संपादित करें",
"Editing {%path%}.": "{{path}} का संपादन।",
"Enable Crash Reporting": "क्रैश रिपोर्टिंग सक्षम करें",
"Enable NAT traversal": "NAT ट्रैवर्सल सक्षम करें",
"Enable Relaying": "रिले करना सक्षम करें",
"Enabled": "सक्षम",
"Enables sending extended attributes to other devices, and applying incoming extended attributes. May require running with elevated privileges.": "अन्य उपकरणों पर विस्तारित विशेषताएं भेजने और आने वाली विस्तारित विशेषताएं लागू करने में सक्षम बनाता है। उन्नत विशेषाधिकारों के साथ चलने की आवश्यकता हो सकती है।",
"Enables sending extended attributes to other devices, but not applying incoming extended attributes. This can have a significant performance impact. Always enabled when \"Sync Extended Attributes\" is enabled.": "अन्य उपकरणों पर विस्तारित विशेषताएं भेजने में सक्षम बनाता है, लेकिन आने वाली विस्तारित विशेषताओं को लागू नहीं करता है। इससे प्रदर्शन पर महत्वपूर्ण प्रभाव पड़ सकता है। \"विस्तारित विशेषताएं समन्वयित करें\" सक्षम होने पर हमेशा सक्षम होता है।",
"Enables sending ownership information to other devices, and applying incoming ownership information. Typically requires running with elevated privileges.": "अन्य उपकरणों पर स्वामित्व जानकारी भेजने और आने वाली स्वामित्व जानकारी लागू करने में सक्षम बनाता है। आमतौर पर उन्नत विशेषाधिकारों के साथ चलने की आवश्यकता होती है।",
"Enables sending ownership information to other devices, but not applying incoming ownership information. This can have a significant performance impact. Always enabled when \"Sync Ownership\" is enabled.": "अन्य उपकरणों पर स्वामित्व जानकारी भेजने में सक्षम बनाता है, लेकिन आने वाली स्वामित्व जानकारी को लागू नहीं करता है। इससे प्रदर्शन पर महत्वपूर्ण प्रभाव पड़ सकता है। \"स्वामित्व समन्वयित करें\" सक्षम होने पर हमेशा सक्षम रहें।",
"Enter a non-negative number (e.g., \"2.35\") and select a unit. Percentages are as part of the total disk size.": "एक गैर-नकारात्मक संख्या दर्ज करें (उदाहरण के लिए, \"2.35\") और एक इकाई का चयन करें। प्रतिशत कुल डिस्क आकार के भाग के रूप में हैं।",
"Enter a non-privileged port number (1024 - 65535).": "एक गैर-विशेषाधिकार प्राप्त पोर्ट नंबर (1024 - 65535) दर्ज करें।",
"Enter comma separated (\"tcp://ip:port\", \"tcp://host:port\") addresses or \"dynamic\" to perform automatic discovery of the address.": "पते की स्वचालित खोज करने के लिए अल्पविराम से अलग किए गए पते (\"tcp://ip:port\", \"tcp://host:port\") या \"dynamic\" दर्ज करें।",
"Enter ignore patterns, one per line.": "नजरअंदाज प्रतिमान दर्ज करें, प्रति पंक्ति एक।",
"Enter up to three octal digits.": "तीन अष्टक अंक तक दर्ज करें।",
"Error": "त्रुटि",
"Extended Attributes": "विस्तारित विशेषताएं",
"Extended Attributes Filter": "विस्तारित विशेषताएं फिल्टर",
"External": "बाहरी",
"External File Versioning": "बाहरी फाइल संस्करणीकरण",
"Failed Items": "विफल वस्तुएं",
"Failed to load file versions.": "फाइल संस्करण लोड करने में विफल।",
"Failed to load ignore patterns.": "नजरअंदाज प्रतिमान लोड करने में विफल।",
"Failed to setup, retrying": "स्थापना करने में विफल, पुनः प्रयास किया जा रहा है",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "यदि IPv6 संयोजकता नहीं है तो IPv6 सर्वर से जुड़ने में विफलता अपेक्षित है।",
"File Pull Order": "फाइल खींचने का क्रम",
"File Versioning": "फाइल संस्करणीकरण",
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Syncthing द्वारा प्रतिस्थापित या हटाए जाने पर फाइलों को .stversions निर्देशिका में ले जाया जाता है।",
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Syncthing द्वारा प्रतिस्थापित या हटाए जाने पर फाइलों को .stversions निर्देशिका में दिनांक अंकित संस्करणों में ले जाया जाता है।",
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "फाइलें अन्य उपकरण पर किए गए परिवर्तनों से सुरक्षित रहती हैं, लेकिन इस उपकरण पर किए गए परिवर्तन शेष समूह में भेजे जाएंगे।",
"Files are synchronized from the cluster, but any changes made locally will not be sent to other devices.": "फाइलें समूह से समन्वयित की जाती हैं, लेकिन स्थानीय रूप से किया गया कोई भी परिवर्तन अन्य उपकरणों पर नहीं भेजा जाएगा।",
"Filesystem Watcher Errors": "फाइलसिस्टम वॉचर त्रुटियां",
"Filter by date": "दिनांक अनुसार फिल्टर करें",
"Filter by name": "नाम अनुसार फिल्टर करें",
"Folder": "फोल्डर",
"Folder ID": "फोल्डर ID",
"Folder Label": "फोल्डर लेबल",
"Folder Path": "फोल्डर पथ",
"Folder Status": "फोल्डर स्थिति",
"Folder Type": "फोल्डर प्रकार",
"Folder type \"{%receiveEncrypted%}\" can only be set when adding a new folder.": "फोल्डर प्रकार \"{{receiveEncrypted}}\" केवल नया फोल्डर जोड़ते समय ही निर्धारित किया जा सकता है।",
"Folder type \"{%receiveEncrypted%}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.": "फोल्डर जोड़ने के बाद फोल्डर प्रकार \"{{receiveEncrypted}}\" को बदला नहीं जा सकता। आपको फोल्डर को हटाना होगा, डिस्क पर डेटा को मिटाना या विकोड करना होगा और फोल्डर को फिर से जोड़ना होगा।",
"Folders": "फोल्डर",
"For the following folders an error occurred while starting to watch for changes. It will be retried every minute, so the errors might go away soon. If they persist, try to fix the underlying issue and ask for help if you can't.": "निम्नलिखित फोल्डरों के लिए परिवर्तनों को देखना प्रारंभ करते समय एक त्रुटि उत्पन्न हुई। इसे हर मिनट पुनः प्रयास किया जाएगा, इसलिए त्रुटियां जल्द ही दूर हो सकती हैं। यदि वे बने रहते हैं, तो अंतर्निहित समस्या को ठीक करने का प्रयास करें और यदि आप नहीं कर सकते तो मदद मांगें।",
"Forever": "सदैव",
"Full Rescan Interval (s)": "पूर्ण पुनःस्कैन अंतराल (से)",
"GUI": "GUI",
"GUI / API HTTPS Certificate": "GUI / API HTTPS प्रमाणपत्र",
"GUI Authentication Password": "GUI प्रमाणीकरण पासवर्ड",
"GUI Authentication User": "GUI प्रमाणीकरण उपयोक्ता",
"GUI Authentication: Set User and Password": "जीयूआई प्रमाणीकरण: उपयोक्ता और पासवर्ड निर्धारित करें",
"GUI Listen Address": "GUI सुनने का पता",
"GUI Override Directory": "GUI अध्यारोहण निर्देशिका",
"GUI Theme": "GUI थीम",
"General": "सामान्य",
"Generate": "उत्पन्न करें",
"Global Discovery": "वैश्विक खोज",
"Global Discovery Servers": "वैश्विक खोज सर्वर",
"Global State": "वैश्विक स्थिति",
"Help": "सहायता",
"Hint: only deny-rules detected while the default is deny. Consider adding \"permit any\" as last rule.": "संकेत: केवल deny-rules का पता चला है जबकि तयशुदा deny है। अंतिम नियम के रूप में \"permit any\" जोड़ने पर विचार करें।",
"Home page": "घर पृष्ठ",
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "हालांकि, आपकी वर्तमान सेटिंग्स इंगित करती हैं कि आप शायद इसे सक्षम नहीं करना चाहेंगे। हमने आपके लिए स्वचालित क्रैश रिपोर्टिंग अक्षम कर दी है।",
"Identification": "पहचान",
"If untrusted, enter encryption password": "यदि अविश्वसनीय है, तो कूटलेखन पासवर्ड दर्ज करें",
"If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.": "यदि आप इस कंप्यूटर पर अन्य उपयोक्ताओं को Syncthing और इसके माध्यम से अपनी फाइलों तक पहुँचने से रोकना चाहते हैं, तो प्रमाणीकरण स्थापित करने पर विचार करें।",
"Ignore": "नजरअंदाज करें",
"Ignore Patterns": "नजरअंदाज प्रतिमान",
"Ignore Permissions": "अनुमतियां नजरअंदाज करें",
"Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.": "फोल्डर बनने के बाद ही नजरअंदाज प्रतिमान जोड़े जा सकते हैं। यदि जांच की जाती है, तो सहेजने के बाद नजरअंदाज प्रतिमान दर्ज करने के लिए एक आगत क्षेत्र प्रस्तुत किया जाएगा।",
"Ignored Devices": "नजरअंदाज उपकरण",
"Ignored Folders": "नजरअंदाज किये फोल्डर",
"Ignored at": "यहां पर नजरअंदाज",
"Included Software": "सम्मिलित सॉफ्टवेयर",
"Incoming Rate Limit (KiB/s)": "आवक दर सीमा (KiB/s)",
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "गलत विन्यास आपके फोल्डर की सामग्री को नुकसान पहुंचा सकता है और Syncthing को निष्क्रिय कर सकता है।",
"Incorrect user name or password.": "गलत उपयोक्ता नाम या पासवर्ड।",
"Internally used paths:": "आंतरिक प्रयुक्त पथ:",
"Introduced By": "इनके द्वारा परिचय",
"Introducer": "परिचयकर्ता",
"Introduction": "परिचय",
"Inversion of the given condition (i.e. do not exclude)": "दी गई शर्त का व्युत्क्रमण (अर्थात् बहिष्कृत न करें)",
"Keep Versions": "संस्करण रखें",
"LDAP": "LDAP",
"Largest First": "सबसे बड़ा प्रथम",
"Last 30 Days": "पिछले 30 दिन",
"Last 7 Days": "पिछले 7 दिन",
"Last Month": "पिछला महीना",
"Last Scan": "अंतिम स्कैन",
"Last seen": "अंतिम बार देखा गया",
"Latest Change": "नवीनतम परिवर्तन",
"Learn more": "अधिक जानें",
"Learn more at {%url%}": "{{url}} पर और जानें",
"Limit": "सीमा",
"Listener Failures": "श्रोता की विफलता",
"Listener Status": "श्रोता स्थिति",
"Listeners": "श्रोता",
"Loading data...": "डेटा लोड हो रहा है..।",
"Loading...": "लोड हो रहा है..।",
"Local Additions": "स्थानीय परिवर्धन",
"Local Discovery": "स्थानीय खोज",
"Local State": "स्थानिक स्थिति",
"Local State (Total)": "स्थानिक स्थिति (कुल)",
"Locally Changed Items": "स्थानीय रूप से परिवर्तित वस्तुएं",
"Log": "लॉग",
"Log File": "लॉग फाइल",
"Log In": "लॉगिन",
"Log Out": "लॉग आउट",
"Log in to see paths information.": "पथ जानकारी देखने के लिए लॉगिन करें।",
"Log in to see version information.": "संस्करण जानकारी देखने के लिए लॉगिन करें।",
"Log tailing paused. Scroll to the bottom to continue.": "लॉग ट्रैकिंग रोक दी गई है। जारी रखने के लिए नीचे स्क्रॉल करें।",
"Login failed, see Syncthing logs for details.": "लॉगिन विफल, विवरण के लिए Syncthing लॉग देखें।",
"Logs": "लॉग",
"Major Upgrade": "प्रमुख उन्नयन",
"Mass actions": "सामूहिक कार्रवाई",
"Maximum Age": "अधिकतम आयु",
"Maximum single entry size": "अधिकतम एकल प्रविष्टि आकार",
"Maximum total size": "अधिकतम कुल आकार",
"Metadata Only": "केवल मेटाडेटा",
"Minimum Free Disk Space": "न्यूनतम मुक्त डिस्क स्थान",
"Mod. Device": "संशोधित उपकरण",
"Mod. Time": "संशोधन समय",
"More than a month ago": "एक महीने से भी पहले",
"More than a week ago": "एक सप्ताह से भी पहले",
"More than a year ago": "एक साल से भी पहले",
"Move to top of queue": "कतार के शीर्ष पर जाएं",
"Multi level wildcard (matches multiple directory levels)": "बहुस्तरीय वाइल्डकार्ड (एकाधिक निर्देशिका स्तरों से मेल खाता है)",
"Never": "कभी नहीं",
"New Device": "नया उपकरण",
"New Folder": "नया फोल्डर",
"Newest First": "नवीनतम पहले",
"No": "नहीं",
"No File Versioning": "कोई फाइल संस्करण नहीं",
"No files will be deleted as a result of this operation.": "इस अभियान के परिणामस्वरूप कोई भी फाइल मिटाई नहीं जाएगी।",
"No rules set": "कोई नियम निर्धारित नहीं",
"No upgrades": "कोई उन्नयन नहीं",
"Not shared": "साझा नहीं किया गया",
"Notice": "सूचना",
"Number of Connections": "कनेक्शनों की संख्या",
"OK": "ठीक है",
"Off": "बंद",
"Oldest First": "पुराना पहले",
"Optional descriptive label for the folder. Can be different on each device.": "फोल्डर के लिए वैकल्पिक वर्णनात्मक लेबल। प्रत्येक उपकरण पर भिन्न हो सकता है।",
"Options": "विकल्प",
"Out of Sync": "समन्वयन से बाहर",
"Out of Sync Items": "समन्वयन से बाहर वस्तुएं",
"Outgoing Rate Limit (KiB/s)": "जावक दर सीमा (KiB/s)",
"Override": "अध्यारोहण",
"Override Changes": "परिवर्तनों का अध्यारोहण",
"Ownership": "स्वामित्व",
"Password": "पासवर्ड",
"Path": "पथ",
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "स्थानीय कंप्यूटर पर फोल्डर का पथ। अगर यह मौजूद नहीं है तो इसे बनाया जाएगा। टिल्ड वर्ण (~) का उपयोग शॉर्टकट के रूप में किया जा सकता है",
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "पथ जहां संस्करण संग्रहीत किए जाने चाहिए (साझा फोल्डर में तयशुदा .stversions निर्देशिका के लिए खाली छोड़ दें)।",
"Paths": "पथ",
"Pause": "विराम",
"Pause All": "सभी विराम करें",
"Paused": "विरामित",
"Paused (Unused)": "विरामित (अप्रयुक्त)",
"Pending changes": "लंबित परिवर्तन",
"Periodic scanning at given interval and disabled watching for changes": "दिए गए अंतराल पर आवधिक स्कैनिंग और परिवर्तनों पर नजर रखने में अक्षम",
"Periodic scanning at given interval and enabled watching for changes": "दिए गए अंतराल पर आवधिक स्कैनिंग और परिवर्तनों को देखने में सक्षम",
"Periodic scanning at given interval and failed setting up watching for changes, retrying every 1m:": "दिए गए अंतराल पर आवधिक स्कैनिंग और परिवर्तनों को देखने के लिए स्थापना विफल, हर 1मि में पुन: प्रयास:",
"Permanently add it to the ignore list, suppressing further notifications.": "आगे की सूचनाओं को दबाते हुए, इसे स्थायी रूप से अनदेखा सूची में जोड़ें।",
"Please consult the release notes before performing a major upgrade.": "कृपया कोई बड़ा उन्नयन करने से पहले रिलीज़ नोट्स से परामर्श लें।",
"Please set a GUI Authentication User and Password in the Settings dialog.": "कृपया सेटिंग्स संवाद में एक GUI प्रमाणीकरण उपयोक्ता और पासवर्ड निर्धारित करें।",
"Please wait": "कृपया प्रतीक्षा करें",
"Prefix indicating that the file can be deleted if preventing directory removal": "उपसर्ग यह दर्शाता है कि निर्देशिका हटाने से रोकने पर फाइल को मिटाया जा सकता है",
"Prefix indicating that the pattern should be matched without case sensitivity": "उपसर्ग यह दर्शाता है कि प्रतिमान को केस संवेदनशीलता के बिना मिलान किया जाना चाहिए",
"Preparing to Sync": "समन्वयन की तैयारी",
"Preview": "पूर्वावलोकन",
"Preview Usage Report": "उपयोग रिपोर्ट का पूर्वावलोकन करें",
"QR code": "QR कोड",
"QUIC LAN": "QUIC LAN",
"QUIC WAN": "QUIC WAN",
"Quick guide to supported patterns": "समर्थित प्रतिमान के लिए त्वरित मार्गदर्शिका",
"Random": "यादृच्छिक",
"Receive Encrypted": "कूटलेखित प्राप्त करें",
"Receive Only": "केवल प्राप्त करें",
"Received data is already encrypted": "प्राप्त डेटा पहले से ही कूटलेखित है",
"Recent Changes": "हालिया परिवर्तन",
"Reduced by ignore patterns": "नजरअंदाज प्रतिमान से कम किया गया",
"Relay LAN": "रिले LAN",
"Relay WAN": "रिले WAN",
"Release Notes": "रिलीज नोट्स",
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "रिलीज़ उम्मीदवारों में नवीनतम सुविधाएं और सुधार शामिल हैं। वे पारंपरिक द्वि-साप्ताहिक Syncthing रिलीज़ के समान हैं।",
"Remote Devices": "रिमोट उपकरण",
"Remote GUI": "रिमोट GUI",
"Remove": "हटाएं",
"Remove Device": "उपकरण हटाएं",
"Remove Folder": "फोल्डर हटाएं",
"Required identifier for the folder. Must be the same on all cluster devices.": "फोल्डर के लिए आवश्यक पहचानकर्ता। समूह के सभी उपकरणों पर समान होना चाहिए।",
"Rescan": "पुनः स्कैन करें",
"Rescan All": "सभी पुनः स्कैन करें",
"Rescans": "पुनः स्कैन करता है",
"Restart": "पुनः प्रारंभ करें",
"Restart Needed": "पुनरारंभ की आवश्यकता है",
"Restarting": "पुनः प्रारंभ हो रहा है",
"Restore": "पुनर्स्थापित करें",
"Restore Versions": "संस्करण पुनर्स्थापित करें",
"Resume": "पुनः आरम्भ करें",
"Resume All": "सभी पुनः आरंभ करें",
"Reused": "पुन:प्रयुक्त",
"Revert": "पूर्ववत करें",
"Revert Local Changes": "स्थानीय परिवर्तन पूर्ववत करें",
"Save": "सहेजें",
"Saving changes": "परिवर्तन सहेजे जा रहे हैं",
"Scan Time Remaining": "स्कैन समय शेष",
"Scanning": "स्कैनिंग",
"See external versioning help for supported templated command line parameters.": "समर्थित खाका कमांड लाइन पैरामीटर के लिए बाहरी संस्करण सहायता देखें।",
"Select All": "सभी चुनें",
"Select a version": "एक संस्करण चुनें",
"Select additional devices to share this folder with.": "इस फोल्डर को साझा करने के लिए अतिरिक्त उपकरणों का चयन करें।",
"Select additional folders to share with this device.": "इस उपकरण के साथ साझा करने के लिए अतिरिक्त फोल्डर चुनें।",
"Select latest version": "नवीनतम संस्करण चुनें",
"Select oldest version": "सबसे पुराना संस्करण चुनें",
"Send & Receive": "भेजें एवं प्राप्त करें",
"Send Extended Attributes": "विस्तारित विशेषताएं भेजें",
"Send Only": "केवल भेजें",
"Send Ownership": "स्वामित्व भेजें",
"Set Ignores on Added Folder": "नए फोल्डर के लिए नजरअंदाज प्रतिमान निर्धारित करें",
"Settings": "सेटिंग्स",
"Share": "साझा करें",
"Share Folder": "फोल्डर साझा करें",
"Share by Email": "ईमेल द्वारा साझा करें",
"Share by SMS": "SMS द्वारा साझा करें",
"Share this folder?": "यह फोल्डर साझा करें?",
"Shared Folders": "सांझे फोल्डर",
"Shared With": "इसके साथ साझा",
"Sharing": "साझाकरण",
"Show ID": "ID दिखाएं",
"Show QR": "QR दिखाएं",
"Show detailed discovery status": "विस्तृत खोज स्थिति दिखाएं",
"Show detailed listener status": "विस्तृत श्रोता स्थिति दिखाएं",
"Show diff with previous version": "पिछले संस्करण के साथ अंतर दिखाएं",
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "समूह स्थिति में उपकरण ID के बजाय दिखाया गया। वैकल्पिक तयशुदा नाम के रूप में अन्य उपकरणों पर विज्ञापित किया जाएगा।",
"Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.": "समूह स्थिति में उपकरण ID के बजाय दिखाया गया। खाली छोड़े जाने पर उपकरण द्वारा विज्ञापित नाम में अद्यतित कर दिया जाएगा।",
"Shutdown": "शटडाउन",
"Shutdown Complete": "शटडाउन पूर्ण",
"Simple": "सरल",
"Simple File Versioning": "सरल फाइल संस्करण",
"Single level wildcard (matches within a directory only)": "एकल स्तरीय वाइल्डकार्ड (केवल एक निर्देशिका के भीतर मेल खाता है)",
"Size": "आकार",
"Smallest First": "सबसे छोटा पहले",
"Some discovery methods could not be established for finding other devices or announcing this device:": "अन्य उपकरणों को खोजने या इस उपकरण की घोषणा करने के लिए कुछ खोज विधियां स्थापित नहीं की जा सकीं:",
"Some items could not be restored:": "कुछ वस्तुएं पुनर्स्थापित नहीं किए जा सके:",
"Some listening addresses could not be enabled to accept connections:": "कुछ श्रवण पते कनेक्शन स्वीकार करने के लिए सक्षम नहीं किए जा सके:",
"Source Code": "स्रोत कोड",
"Stable releases and release candidates": "स्थिर रिलीज़ और रिलीज़ उम्मीदवार",
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "स्थिर रिलीज़ में लगभग दो सप्ताह की देरी हो रही है। इस दौरान वे रिलीज़ उम्मीदवारों के रूप में परीक्षण से गुजरते हैं।",
"Stable releases only": "केवल स्थिर रिलीज़",
"Staggered": "विचलता",
"Staggered File Versioning": "विचलता फाइल संस्करण",
"Start Browser": "ब्राउज़र प्रारंभ करें",
"Statistics": "आंकडे",
"Stay logged in": "लॉगिन रहें",
"Stopped": "रुका हुआ",
"Stores and syncs only encrypted data. Folders on all connected devices need to be set up with the same password or be of type \"{%receiveEncrypted%}\" too.": "केवल कूटलेखित डेटा को स्टोर और समन्वयित करें। सभी जुड़ें उपकरणों पर फोल्डरों को एक ही पासवर्ड के साथ स्थापित किया जाना चाहिए या \"{{receiveEncrypted}}\" प्रकार का भी होना चाहिए।",
"Subject:": "विषय:",
"Support": "समर्थन",
"Support Bundle": "समर्थन बंडल",
"Sync Extended Attributes": "विस्तारित विशेषताएं समन्वयित करें",
"Sync Ownership": "स्वामित्व समन्वयित करें",
"Sync Protocol Listen Addresses": "समन्वयन प्रोटोकॉल का श्रवण पता",
"Sync Status": "समन्वयन स्थिति",
"Syncing": "समन्वयित हो रहा है",
"Syncthing device ID for \"{%devicename%}\"": "\"{{devicename}}\" के लिए Syncthing उपकरण ID",
"Syncthing has been shut down.": "Syncthing बंद कर दिया गया है।",
"Syncthing includes the following software or portions thereof:": "Syncthing में निम्नलिखित सॉफ़्टवेयर या उसके भाग शामिल हैं:",
"Syncthing is Free and Open Source Software licensed as MPL v2.0.": "Syncthing मुक्त और खुले-स्त्रोत सॉफ़्टवेयर है जिसे MPL v2.0 के रूप में लाइसेंस प्राप्त है।",
"Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it's transmitted over the internet.": "Syncthing एक सतत फाइल समन्वयन प्रोग्राम है। यह वास्तविक समय में दो या दो से अधिक कंप्यूटरों के बीच फाइलों को समन्वयित करता है, जो कि लोगों की नज़रों से सुरक्षित रूप से सुरक्षित रहता है। आपका डेटा केवल आपका डेटा है और आप यह चुनने के हकदार हैं कि इसे कहाँ संग्रहीत किया जाता है, क्या इसे किसी तीसरे पक्ष के साथ साझा किया जाता है, और इसे इंटरनेट पर कैसे प्रसारित किया जाता है।",
"Syncthing is listening on the following network addresses for connection attempts from other devices:": "अन्य उपकरणों से कनेक्शन प्रयासों के लिए Syncthing निम्नलिखित नेटवर्क पतों पर सुन रहा है:",
"Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.": "Syncthing किसी भी पते पर अन्य उपकरणों से कनेक्शन प्रयासों को नहीं सुन रहा है। इस उपकरण से केवल जावक कनेक्शन ही काम कर सकते हैं।",
"Syncthing is restarting.": "Syncthing पुनः प्रारंभ हो रहा है।",
"Syncthing is saving changes.": "Syncthing परिवर्तनों को सहेज रहा है।",
"Syncthing is upgrading.": "Syncthing उन्नयन हो रहा है।",
"Syncthing now supports automatically reporting crashes to the developers. This feature is enabled by default.": "Syncthing अब विकासकर्ता को क्रैश की स्वचालित रूप से रिपोर्ट करने का समर्थन करता है। यह सुविधा तयशुदा रूप से सक्षम है।",
"Syncthing seems to be down, or there is a problem with your Internet connection. Retrying…": "ऐसा लगता है कि Syncthing बंद है, या आपके इंटरनेट कनेक्शन में कोई समस्या है। पुनः प्रयास किया जा रहा है…",
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "ऐसा लगता है कि Syncthing को आपके अनुरोध को संसाधित करने में समस्या आ रही है। यदि समस्या बनी रहती है तो कृपया पृष्ठ को ताज़ा करें या Syncthing को पुनरारंभ करें।",
"TCP LAN": "TCP LAN",
"TCP WAN": "TCP WAN",
"Take me back": "मुझे वापस ले जाएं",
"The GUI address is overridden by startup options. Changes here will not take effect while the override is in place.": "GUI पता स्टार्टअप विकल्पों द्वारा अध्यारोहण किया गया है। अध्यारोहण लागू होने तक यहां परिवर्तन प्रभावी नहीं होंगे।",
"The Syncthing Authors": "Syncthing के रचयिता",
"The Syncthing admin interface is configured to allow remote access without a password.": "Syncthing व्यवस्थापक इंटरफ़ेस को पासवर्ड के बिना रिमोट पहुंच की अनुमति देने के लिए विन्यस्त किया गया है।",
"The aggregated statistics are publicly available at the URL below.": "एकत्रित आंकड़े नीचे दिए गए URL पर सार्वजनिक रूप से उपलब्ध हैं।",
"The cleanup interval cannot be blank.": "सफाई अंतराल रिक्त नहीं हो सकता।",
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "विन्यास सहेजा गया है लेकिन सक्रिय नहीं किया गया है। नए विन्यास को सक्रिय करने के लिए Syncthing को पुनरारंभ करना होगा।",
"The device ID cannot be blank.": "उपकरण ID रिक्त नहीं हो सकती।",
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "यहां दर्ज की जाने वाली उपकरण ID अन्य उपकरण पर \"कार्रवाइयां > ID3 दिखाएं\" संवाद में पाई जा सकती है। रिक्त स्थान और डैश वैकल्पिक हैं (अनदेखा)।",
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes, and app versions. If the reported data set is changed you will be prompted with this dialog again.": "कूटलेखित उपयोग रिपोर्ट प्रतिदिन भेजी जाती है। इसका उपयोग सामान्य प्लेटफ़ॉर्म, फोल्डर आकार और ऐप संस्करणों को ट्रैक करने के लिए किया जाता है। यदि रिपोर्ट किया गया डेटा सेट बदल दिया गया है तो आपको इस संवाद के साथ फिर से संकेत दिया जाएगा।",
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "दर्ज की गई उपकरण ID वैध नहीं लगती। यह 52 या 56 वर्णमाला होनी चाहिए जिसमें अक्षर और संख्याएं हों, रिक्त स्थान और डैश वैकल्पिक हों।",
"The folder ID cannot be blank.": "फोल्डर ID रिक्त नहीं हो सकती।",
"The folder ID must be unique.": "फोल्डर ID अद्वितीय होनी चाहिए।",
"The folder content on other devices will be overwritten to become identical with this device. Files not present here will be deleted on other devices.": "इस उपकरण के समान बनने के लिए अन्य उपकरण पर फोल्डर सामग्री को अधिलेखित कर दिया जाएगा। यहां मौजूद नहीं होने वाली फाइलें अन्य उपकरण पर मिटा दी जाएंगी।",
"The folder content on this device will be overwritten to become identical with other devices. Files newly added here will be deleted.": "इस उपकरण पर फोल्डर सामग्री को अन्य उपकरण के समान बनाने के लिए अधिलेखित कर दिया जाएगा। यहां नई जोड़ी गई फाइलें मिटा दी जाएंगी।",
"The folder path cannot be blank.": "फोल्डर पथ रिक्त नहीं हो सकता।",
"The following intervals are used: for the first hour a version is kept every 30 seconds, for the first day a version is kept every hour, for the first 30 days a version is kept every day, until the maximum age a version is kept every week.": "निम्नलिखित अंतरालों का उपयोग किया जाता है: पहले घंटे के लिए हर 30 सेकंड में एक संस्करण रखा जाता है, पहले दिन के लिए हर घंटे एक संस्करण रखा जाता है, पहले 30 दिनों के लिए हर दिन एक संस्करण रखा जाता है, अधिकतम आयु तक हर एक संस्करण रखा जाता है सप्ताह।",
"The following items could not be synchronized.": "निम्नलिखित वस्तुएं समन्वयित नहीं किए जा सके।",
"The following items were changed locally.": "निम्नलिखित वस्तुएं स्थानीय रूप से बदले गए थे।",
"The following methods are used to discover other devices on the network and announce this device to be found by others:": "नेटवर्क पर अन्य उपकरणों को खोजने और इस उपकरण को दूसरों द्वारा पाए जाने की घोषणा करने के लिए निम्नलिखित विधियों का उपयोग किया जाता है:",
"The following text will automatically be inserted into a new message.": "निम्नलिखित पाठ स्वचालित रूप से एक नए संदेश में डाला जाएगा।",
"The following unexpected items were found.": "निम्नलिखित अप्रत्याशित वस्तुएं मिलीं।",
"The interval must be a positive number of seconds.": "अंतराल सेकंड की सकारात्मक संख्या होनी चाहिए।",
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "संस्करण निर्देशिका में सफाई करने की अंतराल, सेकंड में। आवधिक सफाई को अक्षम करने के लिए शून्य।",
"The maximum age must be a number and cannot be blank.": "अधिकतम आयु एक संख्या होनी चाहिए और रिक्त नहीं हो सकती।",
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "किसी संस्करण को रखने का अधिकतम समय (दिनों में, संस्करणों को हमेशा के लिए रखने के लिए 0 पर निर्धारित करें)।",
"The number of connections must be a non-negative number.": "कनेक्शन की संख्या एक गैर-नकारात्मक संख्या होनी चाहिए।",
"The number of days must be a number and cannot be blank.": "दिनों की संख्या एक संख्या होनी चाहिए और रिक्त नहीं हो सकती।",
"The number of days to keep files in the trash can. Zero means forever.": "फाइलों को रद्दी में रखने के दिनों की संख्या। शून्य का अर्थ है सदैव।",
"The number of old versions to keep, per file.": "प्रति फाइल रखने के लिए पुराने संस्करणों की संख्या।",
"The number of versions must be a number and cannot be blank.": "संस्करणों की संख्या एक संख्या होनी चाहिए और रिक्त नहीं हो सकती।",
"The path cannot be blank.": "पथ रिक्त नहीं हो सकता।",
"The rate limit is applied to the accumulated traffic of all connections to this device.": "दर सीमा इस उपकरण के सभी कनेक्शनों के संचित ट्रैफिक पर लागू होती है।",
"The rate limit must be a non-negative number (0: no limit)": "दर सीमा एक गैर-ऋणात्मक संख्या होनी चाहिए (0: कोई सीमा नहीं)",
"The remote device has not accepted sharing this folder.": "रिमोट उपकरण ने इस फोल्डर को साझा करना स्वीकार नहीं किया है।",
"The remote device has paused this folder.": "रिमोट उपकरण ने इस फोल्डर को रोक दिया है।",
"The rescan interval must be a non-negative number of seconds.": "पुन: स्कैन अंतराल सेकंड की गैर-नकारात्मक संख्या होनी चाहिए।",
"There are no devices to share this folder with.": "इस फोल्डर को साझा करने के लिए कोई उपकरण नहीं है।",
"There are no file versions to restore.": "पुनर्स्थापित करने के लिए कोई फाइल संस्करण नहीं हैं।",
"There are no folders to share with this device.": "इस उपकरण के साथ साझा करने के लिए कोई फोल्डर नहीं हैं।",
"They are retried automatically and will be synced when the error is resolved.": "वे स्वचालित रूप से पुनः प्रयास किए जाते हैं और त्रुटि हल होने पर समन्वयित हो जाएंगे।",
"This Device": "यह उपकरण",
"This Month": "इस महीने",
"This can easily give hackers access to read and change any files on your computer.": "इससे हैकर्स को आसानी से आपके कंप्यूटर पर किसी भी फाइल को पढ़ने और बदलने की सुविधा मिल सकती है।",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "यह उपकरण स्वचालित रूप से अन्य उपकरणों की खोज नहीं कर सकता है या दूसरों द्वारा ढूंढे जाने के लिए अपने स्वयं के पते की घोषणा नहीं कर सकता है। केवल स्थिर रूप से विन्यस्त पते वाले उपकरण ही जुड़ सकते हैं।",
"This is a major version upgrade.": "यह प्रमुख संस्करण उन्नयन है।",
"This setting controls the free space required on the home (i.e., index database) disk.": "यह सेटिंग होम (यानी, अनुक्रमणिका डेटाबेस) डिस्क पर आवश्यक खाली स्थान को नियंत्रित करती है।",
"Time": "समय",
"Time the item was last modified": "वस्तु को अंतिम बार संशोधित करने का समय",
"To connect with the Syncthing device named \"{%devicename%}\", add a new remote device on your end with this ID:": "\"{{devicename}}\" नामक Syncthing उपकरण से जुड़ने के लिए, इस ID के साथ अपनी ओर से एक नया रिमोट उपकरण जोड़ें:",
"To permit a rule, have the checkbox checked. To deny a rule, leave it unchecked.": "किसी नियम की अनुमति देने के लिए, चेकबॉक्स चेक करें। किसी नियम को अस्वीकार करने के लिए उसे अनियंत्रित छोड़ दें।",
"Today": "आज",
"Trash Can": "रद्दी",
"Trash Can File Versioning": "रद्दी फाइल संस्करण",
"Type": "प्रकार",
"UNIX Permissions": "UNIX अनुमतियां",
"Unavailable": "अनुपलब्ध",
"Unavailable/Disabled by administrator or maintainer": "व्यवस्थापक या अनुरक्षक द्वारा अनुपलब्ध/अक्षम",
"Undecided (will prompt)": "अनिर्णीत (संकेत देगा)",
"Unexpected Items": "अप्रत्याशित वस्तुएं",
"Unexpected items have been found in this folder.": "इस फोल्डर में अप्रत्याशित वस्तुएं मिली हैं।",
"Unignore": "अनदेखा न करें",
"Unknown": "अज्ञात",
"Unshared": "अनसाझा",
"Unshared Devices": "अनसाझा उपकरण",
"Unshared Folders": "अनसाझा फोल्डर",
"Untrusted": "अविश्वस्त",
"Up to Date": "अद्यतित है",
"Updated {%file%}": "{{file}} अद्यतित",
"Upgrade": "उन्नयन",
"Upgrade To {%version%}": "{{version}} पर उन्नयन करें",
"Upgrading": "उन्नयन किया जा रहा है",
"Upload Rate": "अपलोड दर",
"Uptime": "सक्रिय-अवधि",
"Usage reporting is always enabled for candidate releases.": "उम्मीदवार की रिलीज़ के लिए उपयोग रिपोर्टिंग हमेशा सक्षम होती है।",
"Use HTTPS for GUI": "GUI के लिए HTTPS का उपयोग करें",
"Use notifications from the filesystem to detect changed items.": "परिवर्तित वस्तुओं का पता लगाने के लिए फाइल सिस्टम से सूचनाओं का उपयोग करें।",
"User": "उपयोक्ता",
"User Home": "उपयोक्ता होम",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "GUI प्रमाणीकरण के लिए उपयोक्तानाम/पासवर्ड निर्धारित नहीं किया गया है। कृपया इसे स्थापित करने पर विचार करें।",
"Using a QUIC connection over LAN": "LAN पर QUIC कनेक्शन का उपयोग किया जा रहा है",
"Using a QUIC connection over WAN": "WAN पर QUIC कनेक्शन का उपयोग किया जा रहा है",
"Using a direct TCP connection over LAN": "LAN पर सीधे TCP कनेक्शन का उपयोग किया जा रहा है",
"Using a direct TCP connection over WAN": "WAN पर सीधे TCP कनेक्शन का उपयोग किया जा रहा है",
"Version": "संस्करण",
"Versions": "संस्करण",
"Versions Path": "संस्करण पथ",
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "यदि संस्करण अधिकतम आयु से अधिक पुराने हैं या किसी अंतराल में अनुमत फाइलों की संख्या से अधिक हैं तो वे स्वचालित रूप से मिटा दिए जाते हैं।",
"Waiting to Clean": "सफाई की प्रतीक्षा में",
"Waiting to Scan": "स्कैन की प्रतीक्षा में",
"Waiting to Sync": "समन्वयन की प्रतीक्षा में",
"Warning": "चेतावनी",
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "चेतावनी, यह पथ मौजूदा फोल्डर \"{{otherFolder}}\" की मूल निर्देशिका है।",
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "चेतावनी, यह पथ मौजूदा फोल्डर \"{{otherFolderLabel}}\" ({{otherFolder}}) की मूल निर्देशिका है।",
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "चेतावनी, यह पथ मौजूदा फोल्डर \"{{otherFolder}}\" की एक उपनिर्देशिका है।",
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "चेतावनी, यह पथ मौजूदा फोल्डर \"{{otherFolderLabel}}\" ({{otherFolder}}) की एक उपनिर्देशिका है।",
"Warning: If you are using an external watcher like {%syncthingInotify%}, you should make sure it is deactivated.": "चेतावनी: यदि आप {{syncthingInotify}} जैसे बाहरी वॉचर का उपयोग कर रहे हैं, तो आपको यह सुनिश्चित करना चाहिए कि यह निष्क्रिय है।",
"Watch for Changes": "परिवर्तनों पर नजर रखें",
"Watching for Changes": "परिवर्तनों पर नजर रख रहे हैं",
"Watching for changes discovers most changes without periodic scanning.": "परिवर्तनों पर नज़र रखने से समय-समय पर स्कैनिंग के बिना अधिकांश परिवर्तनों का पता चलता है।",
"When adding a new device, keep in mind that this device must be added on the other side too.": "नया उपकरण जोड़ते समय इस बात का ध्यान रखें कि यह उपकरण दूसरी तरफ भी जुड़ा होना चाहिए।",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "नया फोल्डर जोड़ते समय, ध्यान रखें कि फोल्डर ID का उपयोग उपकरणों के बीच फोल्डरों को एक साथ जोड़ने के लिए किया जाता है। वे केस संवेदनशील हैं और सभी उपकरणों के बीच बिल्कुल मेल खाना चाहिए।",
"When set to more than one on both devices, Syncthing will attempt to establish multiple concurrent connections. If the values differ, the highest will be used. Set to zero to let Syncthing decide.": "जब दोनों उपकरणों पर एक से अधिक पर तय किया जाता है, तो Syncthing एकाधिक समवर्ती कनेक्शन स्थापित करने का प्रयास करेगा। यदि मान भिन्न हैं, तो उच्चतम का उपयोग किया जाएगा। Syncthing को निर्णय लेने देने के लिए शून्य पर निर्धारित करें।",
"Yes": "हां",
"Yesterday": "बिता कल",
"You can also copy and paste the text into a new message manually.": "आप पाठ को मैन्युअल रूप से नए संदेश में कॉपी और पेस्ट भी कर सकते हैं।",
"You can also select one of these nearby devices:": "आप इन निकटवर्ती उपकरणों में से एक का चयन भी कर सकते हैं:",
"You can change your choice at any time in the Settings dialog.": "आप सेटिंग संवाद में किसी भी समय अपनी पसंद बदल सकते हैं।",
"You can read more about the two release channels at the link below.": "आप नीचे दिए गए लिंक पर दो रिलीज़ चैनलों के बारे में अधिक पढ़ सकते हैं।",
"You have no ignored devices.": "आपके पास कोई उपेक्षित उपकरण नहीं है।",
"You have no ignored folders.": "आपके पास कोई उपेक्षित फोल्डर नहीं है।",
"You have unsaved changes. Do you really want to discard them?": "आपके पास सहेजे नहीं गए परिवर्तन हैं। क्या आप सचमुच उन्हें त्यागना चाहते हैं?",
"You must keep at least one version.": "आपको कम से कम एक संस्करण रखना होगा।",
"You should never add or change anything locally in a \"{%receiveEncrypted%}\" folder.": "आपको \"{{receiveEncrypted}}\" फोल्डर में कभी भी स्थानीय रूप से कुछ भी जोड़ना या बदलना नहीं चाहिए।",
"Your SMS app should open to let you choose the recipient and send it from your own number.": "आपका SMS ऐप खुल जाना चाहिए ताकि आप प्राप्तकर्ता का चयन कर सकें और इसे अपने नंबर से भेज सकें।",
"Your email app should open to let you choose the recipient and send it from your own address.": "आपका ईमेल ऐप खुल जाना चाहिए ताकि आप प्राप्तकर्ता का चयन कर सकें और इसे अपने पते से भेज सकें।",
"days": "दिन",
"deleted": "मिटाया गया",
"deny": "अस्वीकारें",
"directories": "निर्देशिकाएं",
"file": "फाइल",
"files": "फाइलें",
"folder": "फोल्डर",
"full documentation": "पूर्ण दस्तावेज़ीकरण",
"items": "वस्तुएं",
"modified": "संशोधित",
"permit": "अनुमति",
"seconds": "सेकंड",
"theme": {
"name": {
"black": "काली",
"dark": "गहरी",
"default": "तयशुदा",
"light": "हल्की"
}
},
"unknown device": "अज्ञात उपकरण",
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} फोल्डर \"{{folder}}\" साझा करना चाहता है।",
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} फोल्डर \"{{folderlabel}}\" ({{folder}}) साझा करना चाहता है।",
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} इस उपकरण को दोबारा पेश कर सकता है।"
}

View File

@ -294,8 +294,8 @@
"Rescan All": "Nuskaityti visus aplankus",
"Rescans": "Nuskaitymai",
"Restart": "Paleisti iš naujo",
"Restart Needed": "Reikia paleisti iš naujo",
"Restarting": "Paleidžiama iš naujo",
"Restart Needed": "Reikalingas perleidimas",
"Restarting": "Persileidžia",
"Restore": "Atkurti",
"Restore Versions": "Atkurti versijas",
"Resume": "Pratęsti",
@ -360,12 +360,12 @@
"Syncthing includes the following software or portions thereof:": "Syncthing naudoja šias programas ar jų dalis:",
"Syncthing is Free and Open Source Software licensed as MPL v2.0.": "Syncthing yra laisva ir atvirojo kodo programinė įranga, licencijuota pagal MPL v2.0.",
"Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it's transmitted over the internet.": "Syncthing yra pastovaus failų sinchronizavimo programa. Ji realiu laiku sinchronizuoja failus tarp dviejų ar daugiau kompiuterių, saugiai apsaugodama juos nuo smalsių akių. Jūsų duomenys yra tik jūsų duomenys ir jūs turite teisę rinktis, kur juos laikyti, su kuo juos bendrinti ir kaip juos persiuntinėti.",
"Syncthing is restarting.": "Syncthing paleidžiama iš naujo.",
"Syncthing is restarting.": "Syncthing perleidžiamas",
"Syncthing is saving changes.": "Syncthing įrašo pakeitimus.",
"Syncthing is upgrading.": "Syncthing atsinaujina.",
"Syncthing now supports automatically reporting crashes to the developers. This feature is enabled by default.": "Dabar, Syncthing palaiko ir automatiškai plėtotojams siunčia ataskaitas apie strigtis. Pagal numatymą, ši ypatybė yra įjungta.",
"Syncthing seems to be down, or there is a problem with your Internet connection. Retrying…": "Atrodo, kad Syncthing išjungta arba yra problemų su interneto ryšiu. Bandoma iš naujo…",
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "Atrodo, kad Syncthing, vykdydama jūsų užklausą, susidūrė su problemomis. Prašome įkelti puslapį iš naujo arba, jei problema išlieka, iš naujo paleisti Syncthing.",
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "Atrodo, kad Syncthing, vykdydamas jūsų užklausą, susidūrė su problemomis. Prašome iš naujo įkelti puslapį, arba jei problema išlieka, iš naujo paleisti Syncthing.",
"TCP LAN": "TCP LAN (vietinis tinklas)",
"TCP WAN": "TCP WAN (platusis tinklas)",
"Take me back": "Sugrąžinkite mane",

View File

@ -237,8 +237,6 @@
"Log File": "Arquivo de registro",
"Log In": "Entrar",
"Log Out": "Sair",
"Log in to see paths information.": "Faça Log In para ver informações de caminhos.",
"Log in to see version information.": "Faça Log In para ver informações de versão.",
"Log tailing paused. Scroll to the bottom to continue.": "Log tailing pausado. Role até o final para continuar.",
"Login failed, see Syncthing logs for details.": "Falha no login. Veja os logs do Syncthing para mais detalhes.",
"Logs": "Registros",

View File

@ -386,7 +386,7 @@
"Staggered File Versioning": "Aşamalı Dosya Sürümlendirme",
"Start Browser": "Tarayıcıyı başlat",
"Statistics": "İstatistikler",
"Stay logged in": "Oturum açık kalsın",
"Stay logged in": "Oturum açık kal",
"Stopped": "Durduruldu",
"Stores and syncs only encrypted data. Folders on all connected devices need to be set up with the same password or be of type \"{%receiveEncrypted%}\" too.": "Yalnızca şifrelenmiş verileri depolar ve eşitler. Tüm bağlı cihazlardaki klasörlerin de aynı parola ile ayarlanması veya \"{{receiveEncrypted}}\" türünde olması gerekir.",
"Subject:": "Konu:",

View File

@ -1,20 +1,18 @@
{
"A device with that ID is already added.": "Пристрій з таким ID вже додано.",
"A device with that ID is already added.": "Пристрій з таким ID вже додано раніше.",
"A negative number of days doesn't make sense.": "Від'ємна кількість днів немає сенсу.",
"A new major version may not be compatible with previous versions.": "Нова версія з великими змінвми може бути несумісною із попередніми версіями.",
"A new major version may not be compatible with previous versions.": "Нова мажорна версія може бути несумісною із попередніми версіями.",
"API Key": "API ключ",
"About": "Про програму",
"Action": "Дія",
"Actions": "Дії",
"Active filter rules": "Діючі правила фільтрування",
"Add": "Додати",
"Add Device": "Додати пристрій",
"Add Folder": "Додати папку",
"Add Folder": "Додати директорію",
"Add Remote Device": "Додати віддалений пристрій",
"Add devices from the introducer to our device list, for mutually shared folders.": "Додавати пристрої з пристрою що рекомендує, до списку пристроїв для налаштування спільних папок.",
"Add filter entry": "Додати правило фільтру",
"Add devices from the introducer to our device list, for mutually shared folders.": "Додати пристрої від того, що рекомендує, до нашого списку пристроїв для спільних папок.",
"Add ignore patterns": "Додати шаблони ігнорування",
"Add new folder?": "Додати нову папку?",
"Add new folder?": "Додати нову директорію?",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "Крім того, буде збільшений інтервал повного сканування (у 60 разів, тобто нове значення за замовчанням - 1 година). Ви також можете налаштувати його вручну для кожної папки пізніше після вибору \"Ні\".",
"Address": "Адреса",
"Addresses": "Адреси",
@ -25,12 +23,11 @@
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Ті папки, якими поділилися з цим пристроєм, мають бути захищені паролем, щоб усі надіслані дані неможливо було прочитати без вказаного пароля.",
"Allow Anonymous Usage Reporting?": "Дозволити програмі збирати анонімну статистику використання?",
"Allowed Networks": "Дозволені мережі",
"Alphabetic": "За абеткою",
"Alphabetic": "За алфавітом",
"Altered by ignoring deletes.": "Змінено шляхом ігнорування видалень.",
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Зовнішня команда для керування версіями. Вона має видалити файл зі спільної папки. Якщо шлях до програми містить пробіли, його слід взяти в лапки.",
"Anonymous Usage Reporting": "Анонімізована статистика використання",
"Anonymous Usage Reporting": "Анонімна статистика використання",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Змінився формат анонімного звіту про користування. Бажаєте перейти на новий формат?",
"Applied to LAN": "Застосовано до LAN",
"Apply": "Застосувати",
"Are you sure you want to override all remote changes?": "Ви впевнені, що бажаєте відхилити всі зміни у віддалених папках?",
"Are you sure you want to permanently delete all these files?": "Ви впевнені, що бажаєте остаточно видалити всі ці файли?",
@ -38,13 +35,12 @@
"Are you sure you want to remove folder {%label%}?": "Ви впевнені, що хочете видалити папку {{label}}?",
"Are you sure you want to restore {%count%} files?": "Чи ви впевнені в необхідності відновити наступну к-сть файлів: {{count}} ?",
"Are you sure you want to revert all local changes?": "Ви впевнені, що бажаєте відкинути всі локальні зміни?",
"Are you sure you want to upgrade?": "Напевно хочете оновити?",
"Authentication Required": "Потрібна авторизація",
"Are you sure you want to upgrade?": "Впевнені, що хочете оновитися?",
"Authors": "Автори",
"Auto Accept": "Автоприймання",
"Automatic Crash Reporting": "Автоматичне звітування про збої",
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Автоматиче оновлення зараз дозволяє обирати між стабільними випусками та реліз-кандидатами.",
"Automatic upgrades": "Автоматичне оновлення",
"Automatic upgrades": "Автоматичні оновлення",
"Automatic upgrades are always enabled for candidate releases.": "Автоматичні оновлення завжди увімкнені для реліз-кандидатів.",
"Automatically create or share folders that this device advertises at the default path.": "Автоматично створювати або поширювати каталоги, які цей пристрій декларує як створені по замовчанню.",
"Available debug logging facilities:": "Доступні засоби журналу для відладки:",
@ -66,7 +62,6 @@
"Configured": "Налаштовано",
"Connected (Unused)": "Під'єднано (не використовується)",
"Connection Error": "Помилка з’єднання",
"Connection Management": "Керування з'єднанням",
"Connection Type": "Тип з'єднання",
"Connections": "З'єднання",
"Connections via relays might be rate limited by the relay": "Швидкість з’єднання через реле може бути обмежена ним",
@ -78,10 +73,9 @@
"Copy failed! Try to select and copy manually.": "Помилка копіювання! Спробуйте вибрати та скопіювати вручну.",
"Currently Shared With Devices": "На даний момент є спільний доступ пристроїв",
"Custom Range": "Вибрати діапазон",
"Danger!": "Небезпека!",
"Danger!": "Небезпечно!",
"Database Location": "Місцезнаходження бази даних",
"Debugging Facilities": "Засоби відладки",
"Default": "За замовчанням",
"Default Configuration": "Конфігурація за замовчуванням",
"Default Device": "Пристрій за замовчуванням",
"Default Folder": "Папка за замовчуванням",
@ -99,7 +93,6 @@
"Device ID": "ID пристрою",
"Device Identification": "Ідентифікатор пристрою",
"Device Name": "Назва пристрою",
"Device Status": "Статус пристрою",
"Device is untrusted, enter encryption password": "Пристрій ненадійний, введіть пароль для шифрування",
"Device rate limits": "Обмеження пристрою",
"Device that last modified the item": "Пристрій, що останнім змінив елемент",
@ -110,7 +103,7 @@
"Disabled periodic scanning and enabled watching for changes": "Відключено періодичне сканування та увімкнене стеження за змінами",
"Disabled periodic scanning and failed setting up watching for changes, retrying every 1m:": "Відключено періодичне сканування та не вдається налаштувати перегляд змін, повторення кожну 1 хв:",
"Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).": "Вимикає порівняння та синхронізацію дозволів на файли. Корисно для систем з відсутніми або особливими дозволами (наприклад: FAT, exFAT, Synology, Android).",
"Discard": "Відхили",
"Discard": "Відхилити",
"Disconnected": "З’єднання відсутнє",
"Disconnected (Inactive)": "Від'єднаний (неактивний)",
"Disconnected (Unused)": "Від'єднано (не використовується)",
@ -126,8 +119,8 @@
"Documentation": "Документація",
"Download Rate": "Швидкість завантаження",
"Downloaded": "Завантажено",
"Downloading": "Завантажується",
"Edit": "Редагуй",
"Downloading": "Завантаження",
"Edit": "Редагувати",
"Edit Device": "Налаштування пристрою",
"Edit Device Defaults": "Редагувати параметри пристрою за замовчуванням",
"Edit Folder": "Налаштування папки",
@ -148,7 +141,6 @@
"Enter up to three octal digits.": "Введіть до трьох вісімкових цифр.",
"Error": "Помилка",
"Extended Attributes": "Розширені атрибути",
"Extended Attributes Filter": "Фільтр за розширеними атрибутами",
"External": "Зовнішній",
"External File Versioning": "Зовнішне керування версіями",
"Failed Items": "Невдалі",
@ -169,7 +161,6 @@
"Folder ID": "ID папки",
"Folder Label": "Назва папки",
"Folder Path": "Шлях до папки",
"Folder Status": "Статус папки",
"Folder Type": "Тип папки",
"Folder type \"{%receiveEncrypted%}\" can only be set when adding a new folder.": "Тип папки \"{{receiveEncrypted}}\" можна встановити лише під час додавання нової папки.",
"Folder type \"{%receiveEncrypted%}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.": "Тип папки \"{{receiveEncrypted}}\" не можна змінити після її додавання. Потрібно видалити її спочатку, далі видалити або розшифрувати дані на диску, а потім додати папку знову.",
@ -191,7 +182,6 @@
"Global Discovery Servers": "Сервери глобального виявлення",
"Global State": "Глобальний статус",
"Help": "Допомога",
"Hint: only deny-rules detected while the default is deny. Consider adding \"permit any\" as last rule.": "Підказка: додано лише забороняючі правила при тому, що \"заборонити\" дія за замовченням. Розважте додавання \"дозволити будь-яке\" як останнє правило.",
"Home page": "Домашня сторінка",
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "Однак ваші поточні налаштування вказують, що ви, можливо, не хочете, щоб це було ввімкнено. Ми вимкнули автоматичне повідомлення про аварійне завершення роботи.",
"Identification": "Ідентифікатор",
@ -207,11 +197,9 @@
"Included Software": "Включене ПЗ",
"Incoming Rate Limit (KiB/s)": "Ліміт швидкості завантаження (КіБ/с)",
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Невірна конфігурація може пошкодити вміст вашої папки та зробити Syncthing недієздатним.",
"Incorrect user name or password.": "Невірний логін або пароль.",
"Internally used paths:": "Шляхи, що використовуються внутрішньо:",
"Introduced By": "Рекомендовано",
"Introducer": "Рекомендувач",
"Introduction": "Введення",
"Inversion of the given condition (i.e. do not exclude)": "Інверсія поточної умови (тобто не виключає)",
"Keep Versions": "Зберігати версії",
"LDAP": "LDAP",
@ -237,18 +225,11 @@
"Locally Changed Items": "Локально змінені об'єкти",
"Log": "Журнал",
"Log File": "Файл журналу",
"Log In": "Увійти",
"Log Out": "Вийти",
"Log in to see paths information.": "Увійдіть щоб отримати інформацію о шляхах.",
"Log in to see version information.": "Увійдіть щоб отримати інформацію про версії.",
"Log tailing paused. Scroll to the bottom to continue.": "Промотування журналу призупинене. Прокрутіть нижче, щоби продовжити.",
"Login failed, see Syncthing logs for details.": "Вхід не завершено, перевірьте деталі у логах Syncthing.",
"Logs": "Журнали",
"Major Upgrade": "Мажорне оновлення",
"Mass actions": "Масові операції",
"Maximum Age": "Максимальний вік",
"Maximum single entry size": "Максимальний розмір одного запису",
"Maximum total size": "Максимальний загальний розмір",
"Metadata Only": "Тільки метадані",
"Minimum Free Disk Space": "Мінімальний вільний простір на диску",
"Mod. Device": "Модифікований пристрій:",
@ -260,16 +241,14 @@
"Multi level wildcard (matches multiple directory levels)": "Багаторівнева маска (пошук збігів в усіх піддиректоріях) ",
"Never": "Ніколи",
"New Device": "Новий пристрій",
"New Folder": "Нова папка",
"New Folder": "Нова директорія",
"Newest First": "Спершу новіші",
"No": "Ні",
"No File Versioning": "Версіювання вимкнено",
"No files will be deleted as a result of this operation.": "В результаті цієї операції не було видалено жодного файлу.",
"No rules set": "Не вказано правила",
"No upgrades": "Немає оновлень",
"Not shared": "Не розповсюджується",
"Notice": "Зауваження",
"Number of Connections": "Кількість З'єднань",
"OK": "Гаразд",
"Off": "Вимкнути",
"Oldest First": "Спершу старіші",
@ -281,7 +260,6 @@
"Override": "Перевизначити",
"Override Changes": "Розіслати мою версію",
"Ownership": "Права власності",
"Password": "Пароль",
"Path": "Шлях",
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Шлях до папки на локальному комп’ютері. Буде створений, якщо не існує. Символ тильди (~) може бути використаний як ярлик для",
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Шлях, де повинні зберігатися версії (залиште порожнім для зберігання в .stversions усередині директорії)",
@ -315,11 +293,11 @@
"Reduced by ignore patterns": "Зменшено шаблонами ігнорування",
"Relay LAN": "LAN реле",
"Relay WAN": "WAN реле",
"Release Notes": ерелік Змін",
"Release Notes": римітки до випуску",
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Реліз-кандидати містять найостанніші функції та виправлення. Вони схожі на традиційні щодвотижневі випуски Syncthing.",
"Remote Devices": "Віддалені пристрої",
"Remote GUI": "Віддалена панель керування",
"Remove": "Видали",
"Remove": "Видалити",
"Remove Device": "Видалити пристрій",
"Remove Folder": "Видалити папку",
"Required identifier for the folder. Must be the same on all cluster devices.": "Обов'язковий унікальний ідентифікатор папки. Має бути однаковим на усіх пристроях кластеру.",
@ -336,8 +314,7 @@
"Reused": "Використано вдруге",
"Revert": "Повернути",
"Revert Local Changes": "Інвертувати локальні зміни",
"Save": "Збережи",
"Saving changes": "Збереження змін",
"Save": "Зберегти",
"Scan Time Remaining": "Час до кінця сканування",
"Scanning": "Сканування",
"See external versioning help for supported templated command line parameters.": "Дивіться допомогу по зовнішньому версіюванню, щоб дізнатися підтримувані шаблони для параметрів командного рядка.",
@ -386,7 +363,6 @@
"Staggered File Versioning": "Поступове версіювання",
"Start Browser": "Запустити браузер",
"Statistics": "Статистика",
"Stay logged in": "Не виходити",
"Stopped": "Зупинено",
"Stores and syncs only encrypted data. Folders on all connected devices need to be set up with the same password or be of type \"{%receiveEncrypted%}\" too.": "Зберігає та синхронізує лише зашифровані дані. Папки на всіх під’єднаних пристроях мають бути налаштовані з однаковим паролем або ще мати тип \"{{receiveEncrypted}}\".",
"Subject:": "Тема:",
@ -405,7 +381,6 @@
"Syncthing is listening on the following network addresses for connection attempts from other devices:": "Syncthing прослуховує такі мережеві адреси на предмет спроб підключення з інших пристроїв:",
"Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.": "Syncthing не прослуховує спроби підключення від інших пристроїв із жодних адрес. Можуть працювати лише вихідні з’єднання з цього пристрою.",
"Syncthing is restarting.": "Syncthing перезавантажується.",
"Syncthing is saving changes.": "Syncthing записує зміни.",
"Syncthing is upgrading.": "Syncthing оновлюється.",
"Syncthing now supports automatically reporting crashes to the developers. This feature is enabled by default.": "Syncthing тепер підтримує автоматичне звітування розобникам про збої. Ця функція увімкнена за умовчанням.",
"Syncthing seems to be down, or there is a problem with your Internet connection. Retrying…": "Схоже на те, що Syncthing закритий, або виникла проблема із Інтернет-з’єднанням. Проводиться повторна спроба з’єднання…",
@ -438,13 +413,11 @@
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "Інтервал в секундах, для запуску очищення в директорії версій. Нуль вимикає періодичну очистку.",
"The maximum age must be a number and cannot be blank.": "Максимальний термін повинен бути числом та не може бути пустим.",
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "Максимальний термін зберігання версії (у днях; впишіть 0, щоб зберігати версії без обмежень).",
"The number of connections must be a non-negative number.": "Кількість з'єднань має бути додатнім числом.",
"The number of days must be a number and cannot be blank.": "Кількість днів має бути числом і не може бути порожнім.",
"The number of days to keep files in the trash can. Zero means forever.": "Кількість днів зберігання файлів у кошику. Нуль означає назавжди.",
"The number of old versions to keep, per file.": "Кількість старих версій, яку необхідно зберігати для кожного файлу.",
"The number of versions must be a number and cannot be blank.": "Кількість версій повинна бути цифрою та не може бути порожньою.",
"The path cannot be blank.": "Шлях не може бути порожнім.",
"The rate limit is applied to the accumulated traffic of all connections to this device.": "Обмеження швидкості накладається на сумарний трафік всіх під'єднань до цього пристрою.",
"The rate limit must be a non-negative number (0: no limit)": "Швидкість має бути додатнім числом.",
"The remote device has not accepted sharing this folder.": "Віддалений пристрій не прийняв спільний доступ до цієї папки.",
"The remote device has paused this folder.": "Віддалений пристрій призупинив синхронізацію цієї папки.",
@ -462,7 +435,6 @@
"Time": "Час",
"Time the item was last modified": "Час останньої зміни елемента:",
"To connect with the Syncthing device named \"{%devicename%}\", add a new remote device on your end with this ID:": "Щоб підключитися до пристрою Syncthing з назвою \"{{devicename}}\", додайте новий віддалений пристрій із свого боку за цим ID:",
"To permit a rule, have the checkbox checked. To deny a rule, leave it unchecked.": "Аби застосувати правило, зазначте поле. Аби відмінити правило, залишить поле порожнім.",
"Today": "Сьогодні",
"Trash Can": "Смітник",
"Trash Can File Versioning": "Версіювання файлів у кошику",
@ -489,11 +461,8 @@
"Usage reporting is always enabled for candidate releases.": "Звіти про користування завжди увімкнені для реліз-кандидатів.",
"Use HTTPS for GUI": "Використовувати HTTPS для доступу до панелі керування",
"Use notifications from the filesystem to detect changed items.": "Використовувати сповіщення від файлової системи для виявлення змінених об'єктів.",
"User": "Користувач",
"User Home": "Домашня директорія користувача",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "Логін/пароль не встановлені для автентифікації в панелі керування. Будь ласка, налаштуйте їх.",
"Using a QUIC connection over LAN": "З використанням QUICK з'єднання у LAN",
"Using a QUIC connection over WAN": "З використанням QUICK з'єднання у WAN",
"Using a direct TCP connection over LAN": "Використовується пряме TCP-з'єднання через локальну мережу",
"Using a direct TCP connection over WAN": "Використовується пряме TCP-з'єднання через глобальну мережу",
"Version": "Версія",
@ -514,7 +483,6 @@
"Watching for changes discovers most changes without periodic scanning.": "Моніторинг виявляє більшість змін без періодичного сканування.",
"When adding a new device, keep in mind that this device must be added on the other side too.": "Коли додаєте новий вузол, пам’ятайте, що цей вузол повинен бути доданий і на іншій стороні.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Коли додаєте нову папку, пам’ятайте, що її ID дозволяє зв’язувати папки разом на різних пристроях. Назви повинні точно збігатися між усіма пристроями, а регістр символів має значення.",
"When set to more than one on both devices, Syncthing will attempt to establish multiple concurrent connections. If the values differ, the highest will be used. Set to zero to let Syncthing decide.": "Коли вказано більше ніш одне на обох пристроях, Syncthing спробує встановити паралельні з'єднання. Якщо значення різняться, буде використано найбільше. Вкажіть 0 аби Syncthing обрав .",
"Yes": "Так",
"Yesterday": "Вчора",
"You can also copy and paste the text into a new message manually.": "Ви також можете скопіювати та вставити текст у нове повідомлення вручну.",
@ -530,7 +498,6 @@
"Your email app should open to let you choose the recipient and send it from your own address.": "Ваш додаток електронної пошти має відкритися, щоб ви могли вибрати одержувача та надіслати його зі своєї власної адреси.",
"days": "днів",
"deleted": "видалено",
"deny": "заборонити",
"directories": "директорії",
"file": "файл",
"files": "файли",
@ -538,7 +505,6 @@
"full documentation": "повна документація",
"items": "елементи",
"modified": "змінено",
"permit": "дозволь",
"seconds": "секунд",
"theme": {
"name": {
@ -548,7 +514,6 @@
"light": "Світла"
}
},
"unknown device": "невідомий пристрій",
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} хоче поділитися папкою \"{{folder}}\".",
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} хоче поділитися папкою \"{{folderLabel}}\" ({{folder}}).",
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} може повторно порекомендувати цей пристрій."

View File

@ -26,20 +26,14 @@
"Allow Anonymous Usage Reporting?": "允許回報匿名數據?",
"Allowed Networks": "允許的網路",
"Alphabetic": "字母順序",
"Altered by ignoring deletes.": "透過忽略刪除動作進行變更。",
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "外部指令接管了版本控制。它必須將檔案自分享資料夾中移除。如果應用程式的路徑包含了空格,則必須使用雙引號刮起。",
"Anonymous Usage Reporting": "匿名數據回報",
"Anonymous usage report format has changed. Would you like to move to the new format?": "匿名數據回報格式已經變更,想要移至新格式嗎?",
"Applied to LAN": "套用至區域網路",
"Apply": "套用",
"Are you sure you want to override all remote changes?": "您確定要覆蓋所有遠端的變更嗎?",
"Are you sure you want to permanently delete all these files?": "確認永久刪除檔案?",
"Are you sure you want to remove device {%name%}?": "確定要移除 {{name}} 裝置?",
"Are you sure you want to remove folder {%label%}?": "確定要移除 {{label}} 資料夾?",
"Are you sure you want to restore {%count%} files?": "確定想要還原 {{count}} 個檔案?",
"Are you sure you want to revert all local changes?": "您確定要還原所有本地的變更嗎?",
"Are you sure you want to upgrade?": "確定想要更新?",
"Authentication Required": "需要驗證",
"Authors": "作者群",
"Auto Accept": "自動接受",
"Automatic Crash Reporting": "自動回傳當機報告",
@ -49,7 +43,6 @@
"Automatically create or share folders that this device advertises at the default path.": "自動在預設資料夾路徑建立或分享該裝置推薦的資料夾。",
"Available debug logging facilities:": "可用的除錯日誌工具:",
"Be careful!": "請小心!",
"Body:": "內文:",
"Bugs": "程式錯誤",
"Cancel": "取消",
"Changelog": "更新日誌",
@ -61,8 +54,6 @@
"Command": "指令",
"Comment, when used at the start of a line": "註解,當輸入在一行的開頭時",
"Compression": "壓縮",
"Configuration Directory": "設定檔目錄",
"Configuration File": "設定檔",
"Configured": "已設定",
"Connected (Unused)": "已連線(未使用)",
"Connection Error": "連線錯誤",
@ -77,11 +68,8 @@
"Copy": "複製",
"Copy failed! Try to select and copy manually.": "複製失敗!嘗試手動選擇並複製。",
"Currently Shared With Devices": "目前與裝置共享",
"Custom Range": "自訂範圍",
"Danger!": "危險!",
"Database Location": "資料庫位置",
"Debugging Facilities": "除錯工具",
"Default": "預設",
"Default Configuration": "預設配置",
"Default Device": "預設裝置",
"Default Folder": "預設資料夾",
@ -95,11 +83,9 @@
"Deselect folders to stop sharing with this device.": "取消選擇資料夾以停用與此裝置共享。",
"Device": "裝置",
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "裝置 \"{{name}}\" ({{device}} 位於 {{address}}) 想要連線。要添加新裝置嗎?",
"Device Certificate": "裝置憑證",
"Device ID": "裝置識別碼",
"Device Identification": "裝置識別",
"Device Name": "裝置名稱",
"Device Status": "裝置狀態",
"Device is untrusted, enter encryption password": "裝置不受信任,輸入加密密碼",
"Device rate limits": "裝置速率限制",
"Device that last modified the item": "前次修改裝置",
@ -148,12 +134,8 @@
"Enter up to three octal digits.": "輸入最多三位八進位數字。",
"Error": "錯誤",
"Extended Attributes": "延伸屬性",
"Extended Attributes Filter": "擴充屬性篩選器",
"External": "外部",
"External File Versioning": "外部的檔案版本控制",
"Failed Items": "失敗的項目",
"Failed to load file versions.": "無法載入檔案版本。",
"Failed to load ignore patterns.": "無法載入忽略模式。",
"Failed to setup, retrying": "無法設定,正在重試",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "若沒有 IPv6 連線能力,則無法連接 IPv6 伺服器為正常現象。",
"File Pull Order": "提取檔案的順序",
@ -169,21 +151,17 @@
"Folder ID": "資料夾識別碼",
"Folder Label": "資料夾標籤",
"Folder Path": "資料夾路徑",
"Folder Status": "資料夾狀態",
"Folder Type": "資料夾類型",
"Folder type \"{%receiveEncrypted%}\" can only be set when adding a new folder.": "資料夾類型「{{receiveEncrypted}}」只能在新增資料夾時設定。",
"Folder type \"{%receiveEncrypted%}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.": "資料夾類型 \"{{receiveEncrypted}}\" 無法在新增後變更。您需要移除資料夾、刪除或解密磁碟上的資料,並再次新增資料夾。",
"Folders": "資料夾",
"For the following folders an error occurred while starting to watch for changes. It will be retried every minute, so the errors might go away soon. If they persist, try to fix the underlying issue and ask for help if you can't.": "啟動監視下列資料夾時發生錯誤。由於每分鐘將進行重試,錯誤可能很快就消失。若錯誤仍存在,請嘗試修復潛在問題,或請求協助。",
"Forever": "永遠",
"Full Rescan Interval (s)": "完全重新掃描間隔 (秒)",
"GUI": "GUI",
"GUI / API HTTPS Certificate": "GUI / API HTTPS 憑證",
"GUI Authentication Password": "GUI 驗證密碼",
"GUI Authentication User": "GUI 驗證使用者名稱",
"GUI Authentication: Set User and Password": "GUI 驗證:設定使用者名稱與密碼",
"GUI Listen Address": "GUI 監聽位址",
"GUI Override Directory": "GUI 覆蓋目錄",
"GUI Theme": "主題",
"General": "一般",
"Generate": "產生",
@ -191,7 +169,6 @@
"Global Discovery Servers": "全域探索伺服器",
"Global State": "全域狀態",
"Help": "說明",
"Hint: only deny-rules detected while the default is deny. Consider adding \"permit any\" as last rule.": "提示:只偵測到拒絕規則,而預設為拒絕。請考慮在最後新增「允許所有」規則。",
"Home page": "首頁",
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "但是,當前設定表明您可能不希望啟用它。我們為您停用了當機自動回報。",
"Identification": "識別碼",
@ -207,25 +184,18 @@
"Included Software": "包含的軟體",
"Incoming Rate Limit (KiB/s)": "傳入速率限制 (KiB/s)",
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "不正確的設定可能會損壞您的資料夾內容,並導致 Syncthing 不正常運作。",
"Incorrect user name or password.": "使用者名稱或密碼不正確。",
"Internally used paths:": "內部使用的路徑:",
"Introduced By": "引入自",
"Introducer": "引入者",
"Introduction": "介紹",
"Inversion of the given condition (i.e. do not exclude)": "反轉給定條件 (即:不要排除)",
"Keep Versions": "保留歷史版本數",
"LDAP": "LDAP",
"Largest First": "最大的優先",
"Last 30 Days": "過去 30 天",
"Last 7 Days": "過去 7 天",
"Last Month": "上個月",
"Last Scan": "最後掃描",
"Last seen": "最後發現時間",
"Latest Change": "最近變動",
"Learn more": "瞭解更多",
"Learn more at {%url%}": "在 {{url}} 了解更多",
"Limit": "限制",
"Listener Failures": "監聽器失敗",
"Listener Status": "監聽狀態",
"Listeners": "監聽者",
"Loading data...": "正在載入資料...",
@ -236,19 +206,11 @@
"Local State (Total)": "本機狀態 (總結)",
"Locally Changed Items": "本地變動項目",
"Log": "日誌",
"Log File": "日誌檔案",
"Log In": "登入",
"Log Out": "登出",
"Log in to see paths information.": "登入以檢視路徑資訊。",
"Log in to see version information.": "登入以檢視版本資訊。",
"Log tailing paused. Scroll to the bottom to continue.": "日誌自動滾動已暫停。滾動到底部以繼續。",
"Login failed, see Syncthing logs for details.": "登入失敗,請檢視 Syncthing 日誌以取得詳細資訊。",
"Logs": "日誌",
"Major Upgrade": "重大更新",
"Mass actions": "大量操作",
"Maximum Age": "最長保留時間",
"Maximum single entry size": "單一檔案大小上限",
"Maximum total size": "總空間上限",
"Metadata Only": "僅中繼資料",
"Minimum Free Disk Space": "最少閒置磁碟空間",
"Mod. Device": "修改裝置",
@ -265,7 +227,6 @@
"No": "否",
"No File Versioning": "無檔案版本控制",
"No files will be deleted as a result of this operation.": "此操作將不會移除您的檔案。",
"No rules set": "未設定規則",
"No upgrades": "不更新",
"Not shared": "未共享",
"Notice": "注意",
@ -278,10 +239,8 @@
"Out of Sync": "未同步",
"Out of Sync Items": "未同步項目",
"Outgoing Rate Limit (KiB/s)": "連出速率限制 (KiB/s)",
"Override": "覆蓋",
"Override Changes": "覆蓋變動",
"Ownership": "所有權",
"Password": "密碼",
"Path": "路徑",
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "資料夾在本機的路徑。若資料夾不存在則會建立。波浪符號 (~) 可用作下列資料夾的捷徑:",
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "儲存歷史版本的路徑(共享資料夾中的預設 .stversions 目錄則留白)。",
@ -303,7 +262,6 @@
"Preparing to Sync": "正在準備同步",
"Preview": "預覽",
"Preview Usage Report": "預覽數據報告",
"QR code": "QR 碼",
"QUIC LAN": "QUIC 區域網路",
"QUIC WAN": "QUIC 廣域網路",
"Quick guide to supported patterns": "可支援樣式的快速指南",
@ -334,10 +292,8 @@
"Resume": "繼續",
"Resume All": "全部繼續",
"Reused": "重用",
"Revert": "還原",
"Revert Local Changes": "撤銷本機變更",
"Save": "儲存",
"Saving changes": "正在儲存變更",
"Scan Time Remaining": "剩餘掃描時間",
"Scanning": "正在掃描",
"See external versioning help for supported templated command line parameters.": "查看關於命令列模板參數請參閱外部版本管理說明。",
@ -351,7 +307,6 @@
"Send Extended Attributes": "傳送延伸屬性",
"Send Only": "僅傳送",
"Send Ownership": "傳送所有權",
"Set Ignores on Added Folder": "在新增的資料夾上設定忽略",
"Settings": "設定",
"Share": "共享",
"Share Folder": "共享資料夾",
@ -370,26 +325,21 @@
"Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.": "代替裝置識別碼顯示在叢集狀態中。本欄若未填寫則將被更新為此裝置所廣播的名稱。",
"Shutdown": "關閉",
"Shutdown Complete": "關閉完成",
"Simple": "簡單",
"Simple File Versioning": "簡單檔案版本控制",
"Single level wildcard (matches within a directory only)": "單階層萬用字元 (只在單個資料夾階層內比對)",
"Size": "大小",
"Smallest First": "最小的優先",
"Some discovery methods could not be established for finding other devices or announcing this device:": "無法建立一些探索方式來尋找其他裝置或宣佈此裝置:",
"Some items could not be restored:": "有些項目無法被還原:",
"Some listening addresses could not be enabled to accept connections:": "某些監聽地址無法啟用以接受連線:",
"Source Code": "原始碼",
"Stable releases and release candidates": "穩定版及候選發行版",
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "穩定版大約延遲兩週發佈。這段期間將作為候選發行版來測試。",
"Stable releases only": "僅穩定發行版",
"Staggered": "分階段",
"Staggered File Versioning": "變動式檔案版本控制",
"Start Browser": "啟動瀏覽器",
"Statistics": "統計",
"Stay logged in": "保持登入",
"Stopped": "已停止",
"Stores and syncs only encrypted data. Folders on all connected devices need to be set up with the same password or be of type \"{%receiveEncrypted%}\" too.": "僅儲存並同步已加密的資料。所有位於已連接裝置上的資料夾,必須設定相同的密碼,或屬於 \"{{receiveEncrypted}}\" 類型。",
"Subject:": "主旨:",
"Support": "支援",
"Support Bundle": "支援包",
"Sync Extended Attributes": "同步延伸屬性",
@ -397,18 +347,14 @@
"Sync Protocol Listen Addresses": "同步通訊協定監聽位址",
"Sync Status": "同步狀態",
"Syncing": "正在同步",
"Syncthing device ID for \"{%devicename%}\"": "「{{devicename}}」的 Syncthing 裝置 ID",
"Syncthing has been shut down.": "Syncthing 已經關閉。",
"Syncthing includes the following software or portions thereof:": "Syncthing 包括以下軟體或其中的一部分:",
"Syncthing is Free and Open Source Software licensed as MPL v2.0.": "Syncthing 為自由且開源授權條款為 MPL v2.0。",
"Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it's transmitted over the internet.": "Syncthing 是一個連續檔案同步程式。它能安全、即時地同步多台裝置之間的檔案,保護檔案免於窺視。您的資料只屬於您自己,您有權選擇將其儲存在何處,決定是否與第三方共享,以及該如何透過網路傳輸。",
"Syncthing is listening on the following network addresses for connection attempts from other devices:": "Syncthing 正在以下的網路位址上監聽來自其他設備的連接嘗試:",
"Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.": "Syncthing 不會主動接受其他裝置的發起的連線,只會從此裝置對外發起連線。",
"Syncthing is restarting.": "Syncthing 正在重新啟動。",
"Syncthing is saving changes.": "Syncthing 正在儲存變更。",
"Syncthing is upgrading.": "Syncthing 正在進行升級。",
"Syncthing now supports automatically reporting crashes to the developers. This feature is enabled by default.": "Syncthing 已支援將當機報告回傳至開發者。此功能預設為啟用。",
"Syncthing seems to be down, or there is a problem with your Internet connection. Retrying…": "Syncthing 似乎離線了,或者您的網際網路連線出現問題。正在重試",
"Syncthing seems to be down, or there is a problem with your Internet connection. Retrying…": "Syncthing 似乎離線了,或者您的網際網路連線出現問題。正在重試...",
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "Syncthing 在處理您的請求時似乎遇到了問題。請重新整理本頁面,若問題持續發生,請重新啟動 Syncthing。",
"TCP LAN": "TCP 區域網路",
"TCP WAN": "TCP 廣域網路",
@ -425,20 +371,16 @@
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "輸入的裝置識別碼似乎無效。它應該為一串長度為 52 或 56 個字元長的半形英文字母及數字,並可能會含有額外的空白或連接符號。",
"The folder ID cannot be blank.": "資料夾識別碼不能為空白。",
"The folder ID must be unique.": "資料夾識別碼必須為獨一無二的。",
"The folder content on other devices will be overwritten to become identical with this device. Files not present here will be deleted on other devices.": "其他裝置上的資料夾內容將被覆蓋以與此裝置相同。這裡不存在的檔案將在其他裝置上被刪除。",
"The folder content on this device will be overwritten to become identical with other devices. Files newly added here will be deleted.": "此裝置上的資料夾內容將被覆蓋以與其他裝置相同。這裡新增的檔案將被刪除。",
"The folder path cannot be blank.": "資料夾路徑不能空白。",
"The following intervals are used: for the first hour a version is kept every 30 seconds, for the first day a version is kept every hour, for the first 30 days a version is kept every day, until the maximum age a version is kept every week.": "使用下列的間隔:在第一個小時內每 30 秒保留一個版本,在第一天內每小時保留一個版本,在第 30 天內每一天保留一個版本,在達到最長保留時間前每一星期保留一個版本。",
"The following items could not be synchronized.": "無法同步以下項目。",
"The following items were changed locally.": "以下項目在本機進行了變更。",
"The following methods are used to discover other devices on the network and announce this device to be found by others:": "以下方式被用來探索網路上的其他裝置以及宣告此裝置以被其他裝置探索:",
"The following text will automatically be inserted into a new message.": "以下文字將自動插入到新訊息中。",
"The following methods are used to discover other devices on the network and announce this device to be found by others:": "以下方式被用來探索網路上的其他裝置以及宣佈此裝置,被其他裝置探索",
"The following unexpected items were found.": "找到以下不預期項目。",
"The interval must be a positive number of seconds.": "間隔秒數必須為正數。",
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "間隔,以秒為單位,執行清除歷史版本目錄。如欲停用週期清除,設 0 。",
"The maximum age must be a number and cannot be blank.": "最長保留時間必須為一個數字且不得為空。",
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "一個版本被保留的最長時間 (單位為天,若設定為 0 則表示永遠保留)。",
"The number of connections must be a non-negative number.": "連線數量必須為正整數。",
"The number of days must be a number and cannot be blank.": "天數必須必須為一個數字且不得為空。",
"The number of days to keep files in the trash can. Zero means forever.": "檔案在垃圾筒中保留的天數。零表示永遠地保留。",
"The number of old versions to keep, per file.": "每個檔案要保留的舊版本數量。",
@ -450,21 +392,14 @@
"The remote device has paused this folder.": "遠端裝置已暫停同步此資料夾。",
"The rescan interval must be a non-negative number of seconds.": "重新掃描間隔必須為一個非負數的秒數。",
"There are no devices to share this folder with.": "沒有裝置可以共享此資料夾。",
"There are no file versions to restore.": "沒有檔案版本可以還原。",
"There are no folders to share with this device.": "沒有資料夾分享給此裝置。",
"They are retried automatically and will be synced when the error is resolved.": "解決問題後,將會自動重試和同步。",
"This Device": "本機",
"This Month": "本月",
"This can easily give hackers access to read and change any files on your computer.": "這能給駭客輕易的來讀取、變更電腦中的任何檔案。",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "此裝置無法自動尋找其他裝置,或公開自身地址讓其他裝置找到。只有設定了固定位址的裝置才能進行連線。",
"This is a major version upgrade.": "這是一個重大版本更新。",
"This setting controls the free space required on the home (i.e., index database) disk.": "此設定控制家目錄(即:索引資料庫)的必須可用空間。",
"Time": "時間",
"Time the item was last modified": "前次修改時間",
"To connect with the Syncthing device named \"{%devicename%}\", add a new remote device on your end with this ID:": "要連線名稱為「{{devicename}}」的 Syncthing 裝置,請在您的端點新增一個具有此 ID 的新遠端裝置:",
"To permit a rule, have the checkbox checked. To deny a rule, leave it unchecked.": "若要允許某項規則,請勾選該規則旁的選取匡。若要拒絕某項規則,則不要勾選其旁邊的選取匡。",
"Today": "今天",
"Trash Can": "垃圾桶",
"Trash Can File Versioning": "垃圾筒式檔案版本控制",
"Type": "類型",
"UNIX Permissions": "UNIX 權限",
@ -489,8 +424,6 @@
"Usage reporting is always enabled for candidate releases.": "候選發行版永遠啟用使用數據回報。",
"Use HTTPS for GUI": "為 GUI 使用 HTTPS",
"Use notifications from the filesystem to detect changed items.": "使用來自檔案系統的通知以檢測變動的項目。",
"User": "使用者",
"User Home": "使用者主目錄",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "尚未設定GUI 驗證的使用者名稱/密碼。請考慮進行設定。",
"Using a QUIC connection over LAN": "通過區域網路使用 QUIC 連線",
"Using a QUIC connection over WAN": "通過廣域網路使用 QUIC 連線",
@ -516,29 +449,19 @@
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "當新增一個資料夾時,請記住,資料夾識別碼是用來將裝置之間的資料夾綁定在一起的。它們有區分大小寫,且必須在所有裝置之間完全相同。",
"When set to more than one on both devices, Syncthing will attempt to establish multiple concurrent connections. If the values differ, the highest will be used. Set to zero to let Syncthing decide.": "當兩台裝置都設定為大於 1 時Syncthing 會嘗試建立多個並行的連線。如果兩台裝置數值不同,最高的數值會被使用。設定為 0 以便讓 Syncthing 自行決定。",
"Yes": "是",
"Yesterday": "昨天",
"You can also copy and paste the text into a new message manually.": "您也可以手動複製並貼上文字到新訊息中。",
"You can also select one of these nearby devices:": "您亦可從這些附近裝置中擇一:",
"You can change your choice at any time in the Settings dialog.": "您可以在設定對話框中隨時更改您的選擇。",
"You can read more about the two release channels at the link below.": "您可於下方連結閱讀更多關於發行頻道的說明。",
"You have no ignored devices.": "您沒有已忽略的裝置。",
"You have no ignored folders.": "您沒有已忽略的資料夾。",
"You have no ignored devices.": "您沒有已忽略的裝置。\n",
"You have no ignored folders.": "您沒有已忽略的資料夾。\n",
"You have unsaved changes. Do you really want to discard them?": "您有未儲存的變更。確認棄用嗎?",
"You must keep at least one version.": "您必須保留至少一個版本。",
"You should never add or change anything locally in a \"{%receiveEncrypted%}\" folder.": "您不應該在 \"{{receiveEncrypted}}\" 資料夾中新增或變更任何內容。",
"Your SMS app should open to let you choose the recipient and send it from your own number.": "您的簡訊應用程式應該開啟,讓您選擇收件人並從您自己的號碼傳送。",
"Your email app should open to let you choose the recipient and send it from your own address.": "您的電子郵件應用程式應該開啟,讓您選擇收件人並從您自己的地址傳送。",
"days": "日",
"deleted": "已刪除",
"deny": "拒絕",
"directories": "目錄",
"file": "檔案",
"files": "個檔案",
"folder": "資料夾",
"full documentation": "完整說明文件",
"items": "個項目",
"modified": "已修改",
"permit": "允許",
"seconds": "秒",
"theme": {
"name": {
@ -548,7 +471,6 @@
"light": "淺色"
}
},
"unknown device": "未知裝置",
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} 想要共享資料夾 \"{{folder}}\"。",
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} 想要共享資料夾 \"{{folderlabel}}\" ({{folder}})。",
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} 可能會重新引入此裝置。"

View File

@ -1 +1 @@
var langPrettyprint = {"ar":"Arabic","bg":"Bulgarian","ca":"Catalan","ca@valencia":"Valencian","cs":"Czech","da":"Danish","de":"German","el":"Greek","en":"English","en-GB":"English (United Kingdom)","es":"Spanish","eu":"Basque","fr":"French","fy":"Frisian","hi":"Hindi","hu":"Hungarian","id":"Indonesian","it":"Italian","ja":"Japanese","ko-KR":"Korean","lt":"Lithuanian","nl":"Dutch","pl":"Polish","pt-BR":"Portuguese (Brazil)","pt-PT":"Portuguese (Portugal)","ro-RO":"Romanian","ru":"Russian","sk":"Slovak","sl":"Slovenian","sv":"Swedish","tr":"Turkish","uk":"Ukrainian","zh-CN":"Chinese (Simplified)","zh-HK":"Chinese (Traditional, Hong Kong)","zh-TW":"Chinese (Traditional)"}
var langPrettyprint = {"ar":"Arabic","bg":"Bulgarian","ca":"Catalan","ca@valencia":"Valencian","cs":"Czech","da":"Danish","de":"German","el":"Greek","en":"English","en-GB":"English (United Kingdom)","es":"Spanish","eu":"Basque","fr":"French","fy":"Frisian","hu":"Hungarian","id":"Indonesian","it":"Italian","ja":"Japanese","ko-KR":"Korean","lt":"Lithuanian","nl":"Dutch","pl":"Polish","pt-BR":"Portuguese (Brazil)","pt-PT":"Portuguese (Portugal)","ro-RO":"Romanian","ru":"Russian","sk":"Slovak","sl":"Slovenian","sv":"Swedish","tr":"Turkish","uk":"Ukrainian","zh-CN":"Chinese (Simplified)","zh-HK":"Chinese (Traditional, Hong Kong)","zh-TW":"Chinese (Traditional)"}

View File

@ -1 +1 @@
var validLangs = ["ar","bg","ca","ca@valencia","cs","da","de","el","en","en-GB","es","eu","fr","fy","hi","hu","id","it","ja","ko-KR","lt","nl","pl","pt-BR","pt-PT","ro-RO","ru","sk","sl","sv","tr","uk","zh-CN","zh-HK","zh-TW"]
var validLangs = ["ar","bg","ca","ca@valencia","cs","da","de","el","en","en-GB","es","eu","fr","fy","hu","id","it","ja","ko-KR","lt","nl","pl","pt-BR","pt-PT","ro-RO","ru","sk","sl","sv","tr","uk","zh-CN","zh-HK","zh-TW"]

View File

@ -12,7 +12,8 @@
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="shortcut icon" href="assets/img/favicon-default.png" ng-href="assets/img/favicon-{{syncthingStatus()}}.png" type="image/x-icon"/>
<link rel="shortcut icon" href="assets/img/favicon-default.png" type="image/x-icon"/>
<link rel="shortcut icon" href="assets/img/favicon-{{syncthingStatus()}}.png" type="image/x-icon"/>
<link rel="mask-icon" href="assets/img/safari-pinned-tab.svg" color="#0882c8"/>
<title ng-bind="thisDeviceName() + ' | Syncthing'"></title>
@ -590,9 +591,9 @@
<span class="fa fa-lock"></span>&nbsp;<!-- Avoid stray space...
--></span><!-- Avoid stray space...
--><span ng-switch="completion[device.deviceID][folder.id].remoteState"><!-- Avoid stray space...
--><a ng-switch-when="notSharing" href="" ng-click="editDeviceExisting(devices[device.deviceID])" data-original-title="{{'The remote device has not accepted sharing this folder.' | translate}}" tooltip>{{deviceName(devices[device.deviceID])}}<sup>1</sup></a><!-- Avoid stray space...
--><a ng-switch-when="paused" href="" ng-click="editDeviceExisting(devices[device.deviceID])" data-original-title="{{'The remote device has paused this folder.' | translate}}" tooltip>{{deviceName(devices[device.deviceID])}}<sup>2</sup></a><!-- Avoid stray space...
--><a ng-switch-default href="" ng-click="editDeviceExisting(devices[device.deviceID])">{{deviceName(devices[device.deviceID])}}</a><!-- Avoid stray space...
--><span ng-switch-when="notSharing" data-original-title="{{'The remote device has not accepted sharing this folder.' | translate}}" tooltip>{{deviceName(devices[device.deviceID])}}<sup>1</sup></span><!-- Avoid stray space...
--><span ng-switch-when="paused" data-original-title="{{'The remote device has paused this folder.' | translate}}" tooltip>{{deviceName(devices[device.deviceID])}}<sup>2</sup></span><!-- Avoid stray space...
--><span ng-switch-default><a href="" ng-click="editDeviceExisting(devices[device.deviceID])">{{deviceName(devices[device.deviceID])}}</a></span><!-- Avoid stray space...
--><span ng-if="!$last">,</span>
</span>
</span>

View File

@ -30,7 +30,7 @@
<h4 class="text-center" translate>The Syncthing Authors</h4>
<div class="row">
<div class="col-md-12" id="contributor-list">
Jakob Borg, Audrius Butkevicius, Jesse Lucas, Simon Frei, Tomasz Wilczyński, Alexander Graf, Alexandre Viau, Anderson Mesquita, André Colomb, Antony Male, Ben Schulz, Caleb Callaway, Daniel Harte, Eric P, Evgeny Kuznetsov, Lars K.W. Gohlke, Lode Hoste, Michael Ploujnikov, Nate Morrison, Philippe Schommers, Ryan Sullivan, Sergey Mishin, Stefan Tatschner, Wulf Weich, bt90, greatroar, Aaron Bieber, Adam Piggott, Adel Qalieh, Alan Pope, Alberto Donato, Aleksey Vasenev, Alessandro G., Alex Lindeman, Alex Xu, Alexander Seiler, Alexandre Alves, Aman Gupta, Anatoli Babenia, Andreas Sommer, Andrew Dunham, Andrew Meyer, Andrew Rabert, Andrey D, Anjan Momi, Anthony Goeckner, Antoine Lamielle, Anur, Aranjedeath, Arkadiusz Tymiński, Aroun, Arthur Axel fREW Schmidt, Artur Zubilewicz, Aurélien Rainone, BAHADIR YILMAZ, Bart De Vries, Beat Reichenbach, Ben Curthoys, Ben Shepherd, Ben Sidhom, Benedikt Heine, Benedikt Morbach, Benjamin Nater, Benno Fünfstück, Benny Ng, Boqin Qin, Boris Rybalkin, Brandon Philips, Brendan Long, Brian R. Becker, Carsten Hagemann, Catfriend1, Cathryne Linenweaver, Cedric Staniewski, Chih-Hsuan Yen, Choongkyu, Chris Howie, Chris Joel, Chris Tonkinson, Christian Kujau, Christian Prescott, Colin Kennedy, Cromefire_, Cyprien Devillez, Dale Visser, Dan, Daniel Barczyk, Daniel Bergmann, Daniel Martí, Daniel Padrta, Darshil Chanpura, David Rimmer, DeflateAwning, Denis A., Dennis Wilson, DerRockWolf, Devon G. Redekopp, Dimitri Papadopoulos Orfanos, Dmitry Saveliev, Domenic Horner, Dominik Heidler, Elias Jarlebring, Elliot Huffman, Emil Hessman, Emil Lundberg, Eng Zer Jun, Eric Lesiuta, Erik Meitner, Evan Spensley, Federico Castagnini, Felix, Felix Ableitner, Felix Lampe, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gahl Saraf, Gilli Sigurdsson, Gleb Sinyavskiy, Graham Miln, Greg, Han Boetes, HansK-p, Harrison Jones, Heiko Zuerker, Hugo Locurcio, Iain Barnett, Ian Johnson, Ikko Ashimine, Ilya Brin, Iskander Sharipov, Jaakko Hannikainen, Jacek Szafarkiewicz, Jack Croft, Jacob, Jake Peterson, James O'Beirne, James Patterson, Jaroslav Lichtblau, Jaroslav Malec, Jaspitta, Jauder Ho, Jaya Chithra, Jaya Kumar, Jeffery To, Jens Diemer, Jerry Jacobs, Jochen Voss, Johan Andersson, Johan Vromans, John Rinehart, Jonas Thelemann, Jonathan, Jonathan Cross, Jonta, Jose Manuel Delicado, Julian Lehrhuber, Jörg Thalheim, Jędrzej Kula, K.B.Dharun Krishna, Kalle Laine, Karol Różycki, Kebin Liu, Keith Harrison, Keith Turner, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Kevin Bushiri, Kevin White, Jr., Kurt Fitzner, LSmithx2, Lars Lehtonen, Laurent Arnoud, Laurent Etiemble, Leo Arias, Liu Siyuan, Lord Landon Agahnim, Lukas Lihotzki, Luke Hamburg, Majed Abdulaziz, Marc Laporte, Marc Pujol, Marcin Dziadus, Marcus Legendre, Mario Majila, Mark Pulford, Martchus, Martin Polehla, Mateusz Naściszewski, Mateusz Ż, Matic Potočnik, Matt Burke, Matt Robenolt, Matteo Ruina, Maurizio Tomasi, Max, Max Schulze, MaximAL, Maxime Thirouin, Maximilian, MichaIng, Michael Jephcote, Michael Rienstra, Michael Tilli, Migelo, Mike Boone, MikeLund, MikolajTwarog, Mingxuan Lin, Naveen, Nicholas Rishel, Nick Busey, Nico Stapelbroek, Nicolas Braud-Santoni, Nicolas Perraut, Niels Peter Roest, Nils Jakobi, NinoM4ster, Nitroretro, NoLooseEnds, Oliver Freyermuth, Otiel, Oyebanji Jacob Mayowa, Pablo, Pascal Jungblut, Paul Brit, Pawel Palenica, Paweł Rozlach, Peter Badida, Peter Dave Hello, Peter Hoeg, Peter Marquardt, Phani Rithvij, Phil Davis, Phill Luby, Pier Paolo Ramon, Piotr Bejda, Pramodh KP, Quentin Hibon, Rahmi Pruitt, Richard Hartmann, Robert Carosi, Roberto Santalla, Robin Schoonover, Roman Zaynetdinov, Ross Smith II, Ruslan Yevdokymov, Ryan Qian, Sacheendra Talluri, Scott Klupfel, Sertonix, Severin von Wnuck-Lipinski, Shaarad Dalvi, Simon Mwepu, Sly_tom_cat, Stefan Kuntz, Steven Eckhoff, Suhas Gundimeda, Sven Bachmann, Taylor Khan, Thomas, Thomas Hipp, Tim Abell, Tim Howes, Tim Nordenfur, Tobias Klauser, Tobias Nygren, Tobias Tom, Tom Jakubowski, Tommy Thorn, Tully Robinson, Tyler Brazier, Tyler Kropp, Unrud, Veeti Paananen, Victor Buinsky, Vik, Vil Brekin, Vladimir Rusinov, WangXi, Will Rouesnel, William A. Kennington III, Xavier O., Yannic A., andresvia, andyleap, boomsquared, chenrui, chucic, cjc7373, cui fliter, d-volution, derekriemer, desbma, diemade, digital, entity0xfe, georgespatton, ghjklw, guangwu, gudvinr, ignacy123, janost, jaseg, jelle van der Waa, jtagcat, klemens, kylosus, luchenhan, luzpaz, marco-m, mclang, mv1005, nf, orangekame3, otbutz, overkill, perewa, red_led, rubenbe, sec65, vapatel2, villekalliomaki, wangguoliang, wouter bolsterlee, xarx00, xjtdy888, 佛跳墙, 落心
Jakob Borg, Audrius Butkevicius, Jesse Lucas, Simon Frei, Tomasz Wilczyński, Alexander Graf, Alexandre Viau, Anderson Mesquita, André Colomb, Antony Male, Ben Schulz, Caleb Callaway, Daniel Harte, Eric P, Evgeny Kuznetsov, Lars K.W. Gohlke, Lode Hoste, Michael Ploujnikov, Nate Morrison, Philippe Schommers, Ryan Sullivan, Sergey Mishin, Stefan Tatschner, Wulf Weich, bt90, greatroar, Aaron Bieber, Adam Piggott, Adel Qalieh, Alan Pope, Alberto Donato, Aleksey Vasenev, Alessandro G., Alex Lindeman, Alex Xu, Alexander Seiler, Alexandre Alves, Aman Gupta, Anatoli Babenia, Andreas Sommer, Andrew Dunham, Andrew Meyer, Andrew Rabert, Andrey D, Anjan Momi, Anthony Goeckner, Antoine Lamielle, Anur, Aranjedeath, Arkadiusz Tymiński, Aroun, Arthur Axel fREW Schmidt, Artur Zubilewicz, Aurélien Rainone, BAHADIR YILMAZ, Bart De Vries, Beat Reichenbach, Ben Curthoys, Ben Shepherd, Ben Sidhom, Benedikt Heine, Benedikt Morbach, Benjamin Nater, Benno Fünfstück, Benny Ng, Boqin Qin, Boris Rybalkin, Brandon Philips, Brendan Long, Brian R. Becker, Carsten Hagemann, Catfriend1, Cathryne Linenweaver, Cedric Staniewski, Chih-Hsuan Yen, Choongkyu, Chris Howie, Chris Joel, Chris Tonkinson, Christian Kujau, Christian Prescott, Colin Kennedy, Cromefire_, Cyprien Devillez, Dale Visser, Dan, Daniel Barczyk, Daniel Bergmann, Daniel Martí, Daniel Padrta, Darshil Chanpura, David Rimmer, DeflateAwning, Denis A., Dennis Wilson, DerRockWolf, Devon G. Redekopp, Dimitri Papadopoulos Orfanos, Dmitry Saveliev, Domenic Horner, Dominik Heidler, Elias Jarlebring, Elliot Huffman, Emil Hessman, Emil Lundberg, Eng Zer Jun, Eric Lesiuta, Erik Meitner, Evan Spensley, Federico Castagnini, Felix, Felix Ableitner, Felix Lampe, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gahl Saraf, Gilli Sigurdsson, Gleb Sinyavskiy, Graham Miln, Greg, Han Boetes, HansK-p, Harrison Jones, Heiko Zuerker, Hugo Locurcio, Iain Barnett, Ian Johnson, Ikko Ashimine, Ilya Brin, Iskander Sharipov, Jaakko Hannikainen, Jacek Szafarkiewicz, Jack Croft, Jacob, Jake Peterson, James O'Beirne, James Patterson, Jaroslav Lichtblau, Jaroslav Malec, Jaspitta, Jauder Ho, Jaya Chithra, Jaya Kumar, Jeffery To, Jens Diemer, Jerry Jacobs, Jochen Voss, Johan Andersson, Johan Vromans, John Rinehart, Jonas Thelemann, Jonathan, Jonathan Cross, Jonta, Jose Manuel Delicado, Julian Lehrhuber, Jörg Thalheim, Jędrzej Kula, K.B.Dharun Krishna, Kalle Laine, Karol Różycki, Kebin Liu, Keith Harrison, Keith Turner, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Kevin Bushiri, Kevin White, Jr., Kurt Fitzner, LSmithx2, Lars Lehtonen, Laurent Arnoud, Laurent Etiemble, Leo Arias, Liu Siyuan, Lord Landon Agahnim, Lukas Lihotzki, Luke Hamburg, Majed Abdulaziz, Marc Laporte, Marc Pujol, Marcin Dziadus, Marcus Legendre, Mario Majila, Mark Pulford, Martchus, Martin Polehla, Mateusz Naściszewski, Mateusz Ż, Matic Potočnik, Matt Burke, Matt Robenolt, Matteo Ruina, Maurizio Tomasi, Max, Max Schulze, MaximAL, Maxime Thirouin, Maximilian, MichaIng, Michael Jephcote, Michael Rienstra, Michael Tilli, Migelo, Mike Boone, MikeLund, MikolajTwarog, Mingxuan Lin, Naveen, Nicholas Rishel, Nick Busey, Nico Stapelbroek, Nicolas Braud-Santoni, Nicolas Perraut, Niels Peter Roest, Nils Jakobi, NinoM4ster, Nitroretro, NoLooseEnds, Oliver Freyermuth, Otiel, Oyebanji Jacob Mayowa, Pablo, Pascal Jungblut, Paul Brit, Pawel Palenica, Paweł Rozlach, Peter Badida, Peter Dave Hello, Peter Hoeg, Peter Marquardt, Phani Rithvij, Phil Davis, Phill Luby, Pier Paolo Ramon, Piotr Bejda, Pramodh KP, Quentin Hibon, Rahmi Pruitt, Richard Hartmann, Robert Carosi, Roberto Santalla, Robin Schoonover, Roman Zaynetdinov, Ross Smith II, Ruslan Yevdokymov, Ryan Qian, Sacheendra Talluri, Scott Klupfel, Sertonix, Shaarad Dalvi, Simon Mwepu, Sly_tom_cat, Stefan Kuntz, Steven Eckhoff, Suhas Gundimeda, Sven Bachmann, Taylor Khan, Thomas, Thomas Hipp, Tim Abell, Tim Howes, Tim Nordenfur, Tobias Klauser, Tobias Nygren, Tobias Tom, Tom Jakubowski, Tommy Thorn, Tully Robinson, Tyler Brazier, Tyler Kropp, Unrud, Veeti Paananen, Victor Buinsky, Vik, Vil Brekin, Vladimir Rusinov, Will Rouesnel, William A. Kennington III, Xavier O., Yannic A., andresvia, andyleap, boomsquared, chenrui, chucic, cjc7373, cui fliter, d-volution, derekriemer, desbma, diemade, digital, entity0xfe, georgespatton, ghjklw, guangwu, gudvinr, ignacy123, janost, jaseg, jelle van der Waa, jtagcat, klemens, kylosus, luzpaz, marco-m, mclang, mv1005, nf, orangekame3, otbutz, overkill, perewa, red_led, rubenbe, sec65, vapatel2, villekalliomaki, wangguoliang, wouter bolsterlee, xarx00, xjtdy888, 佛跳墙, 落心
</div>
</div>
</div>

View File

@ -7,8 +7,6 @@
package config
import (
"bytes"
"crypto/sha256"
"errors"
"fmt"
"path"
@ -92,51 +90,27 @@ func (f *FolderConfiguration) CreateMarker() error {
return nil
}
ffs := f.Filesystem(nil)
// Create the marker as a directory
err := ffs.Mkdir(DefaultMarkerName, 0o755)
permBits := fs.FileMode(0o777)
if build.IsWindows {
// Windows has no umask so we must chose a safer set of bits to
// begin with.
permBits = 0o700
}
fs := f.Filesystem(nil)
err := fs.Mkdir(DefaultMarkerName, permBits)
if err != nil {
return err
}
// Create a file inside it, reducing the risk of the marker directory
// being removed by automated cleanup tools.
markerFile := filepath.Join(DefaultMarkerName, f.markerFilename())
if err := fs.WriteFile(ffs, markerFile, f.markerContents(), 0o644); err != nil {
return err
}
// Sync & hide the containing directory
if dir, err := ffs.Open("."); err != nil {
if dir, err := fs.Open("."); err != nil {
l.Debugln("folder marker: open . failed:", err)
} else if err := dir.Sync(); err != nil {
l.Debugln("folder marker: fsync . failed:", err)
}
ffs.Hide(DefaultMarkerName)
fs.Hide(DefaultMarkerName)
return nil
}
func (f *FolderConfiguration) RemoveMarker() error {
ffs := f.Filesystem(nil)
_ = ffs.Remove(filepath.Join(DefaultMarkerName, f.markerFilename()))
return ffs.Remove(DefaultMarkerName)
}
func (f *FolderConfiguration) markerFilename() string {
h := sha256.Sum256([]byte(f.ID))
return fmt.Sprintf("syncthing-folder-%x.txt", h[:3])
}
func (f *FolderConfiguration) markerContents() []byte {
var buf bytes.Buffer
buf.WriteString("# This directory is a Syncthing folder marker.\n# Do not delete.\n\n")
fmt.Fprintf(&buf, "folderID: %s\n", f.ID)
fmt.Fprintf(&buf, "created: %s\n", time.Now().Format(time.RFC3339))
return buf.Bytes()
}
// CheckPath returns nil if the folder root exists and contains the marker file
func (f *FolderConfiguration) CheckPath() error {
return f.checkFilesystemPath(f.Filesystem(nil), ".")

View File

@ -75,7 +75,6 @@ type FolderConfiguration struct {
RescanIntervalS int `protobuf:"varint,7,opt,name=rescan_interval_s,json=rescanIntervalS,proto3,casttype=int" json:"rescanIntervalS" xml:"rescanIntervalS,attr" default:"3600"`
FSWatcherEnabled bool `protobuf:"varint,8,opt,name=fs_watcher_enabled,json=fsWatcherEnabled,proto3" json:"fsWatcherEnabled" xml:"fsWatcherEnabled,attr" default:"true"`
FSWatcherDelayS float64 `protobuf:"fixed64,9,opt,name=fs_watcher_delay_s,json=fsWatcherDelayS,proto3" json:"fsWatcherDelayS" xml:"fsWatcherDelayS,attr" default:"10"`
FSWatcherTimeoutS float64 `protobuf:"fixed64,40,opt,name=fs_watcher_timeout_s,json=fsWatcherTimeoutS,proto3" json:"fsWatcherTimeoutS" xml:"fsWatcherTimeoutS,attr"`
IgnorePerms bool `protobuf:"varint,10,opt,name=ignore_perms,json=ignorePerms,proto3" json:"ignorePerms" xml:"ignorePerms,attr"`
AutoNormalize bool `protobuf:"varint,11,opt,name=auto_normalize,json=autoNormalize,proto3" json:"autoNormalize" xml:"autoNormalize,attr" default:"true"`
MinDiskFree Size `protobuf:"bytes,12,opt,name=min_disk_free,json=minDiskFree,proto3" json:"minDiskFree" xml:"minDiskFree" default:"1 %"`
@ -241,161 +240,158 @@ func init() {
}
var fileDescriptor_44a9785876ed3afa = []byte{
// 2460 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0x4d, 0x6c, 0x24, 0x47,
0x15, 0x76, 0xdb, 0xfb, 0x63, 0x97, 0xd7, 0x5e, 0xbb, 0x6c, 0xef, 0x76, 0x9c, 0xc4, 0x35, 0xe9,
0xcc, 0x26, 0x93, 0x90, 0x78, 0x37, 0x4e, 0x14, 0x29, 0x11, 0x01, 0x32, 0x76, 0x46, 0x2c, 0x8b,
0xb3, 0x56, 0x8f, 0x21, 0x90, 0x20, 0x35, 0xed, 0xee, 0x9a, 0x99, 0x8e, 0x7b, 0xba, 0x87, 0xae,
0xf6, 0xda, 0xb3, 0x87, 0x28, 0xe4, 0x80, 0x90, 0xc8, 0x01, 0x99, 0x03, 0xe2, 0x80, 0x14, 0x09,
0x84, 0x20, 0x5c, 0x38, 0x73, 0xe1, 0xba, 0x17, 0x64, 0x9f, 0x10, 0xe2, 0x50, 0x52, 0xbc, 0xb7,
0x39, 0xf6, 0x71, 0x4f, 0xe8, 0xbd, 0xfe, 0x99, 0xea, 0x99, 0x89, 0x84, 0xc4, 0x6d, 0xea, 0xfb,
0x5e, 0xbd, 0xf7, 0x75, 0xd5, 0xab, 0x57, 0xaf, 0x86, 0x54, 0x7d, 0xef, 0xe0, 0xb6, 0x13, 0x06,
0x2d, 0xaf, 0x7d, 0xbb, 0x15, 0xfa, 0x2e, 0x8f, 0xd2, 0xc1, 0x51, 0x64, 0xc7, 0x5e, 0x18, 0x6c,
0xf6, 0xa2, 0x30, 0x0e, 0xe9, 0x95, 0x14, 0x5c, 0x7f, 0x7a, 0xcc, 0x3a, 0xee, 0xf7, 0x78, 0x6a,
0xb4, 0xbe, 0xa6, 0x90, 0xc2, 0x7b, 0x98, 0xc3, 0xeb, 0x0a, 0xdc, 0x3b, 0xf2, 0xfd, 0x30, 0x72,
0x79, 0x94, 0x71, 0x35, 0x85, 0x7b, 0xc0, 0x23, 0xe1, 0x85, 0x81, 0x17, 0xb4, 0x27, 0x28, 0x58,
0x67, 0x8a, 0xe5, 0x81, 0x1f, 0x3a, 0x87, 0xa3, 0xae, 0x28, 0x18, 0xb4, 0xc4, 0x6d, 0x10, 0x24,
0x32, 0xec, 0x99, 0x0c, 0x73, 0xc2, 0x5e, 0x3f, 0xb2, 0x83, 0x36, 0xef, 0xf2, 0xb8, 0x13, 0xba,
0x19, 0x3b, 0xc7, 0x4f, 0xe2, 0xf4, 0xa7, 0xf1, 0xaf, 0x19, 0xf2, 0x54, 0x03, 0xbf, 0x67, 0x87,
0x3f, 0xf0, 0x1c, 0xbe, 0xad, 0x2a, 0xa0, 0x5f, 0x6a, 0x64, 0xce, 0x45, 0xdc, 0xf2, 0x5c, 0x5d,
0xab, 0x68, 0xb5, 0x6b, 0xf5, 0xcf, 0xb5, 0x47, 0x92, 0x4d, 0xfd, 0x47, 0xb2, 0x37, 0xda, 0x5e,
0xdc, 0x39, 0x3a, 0xd8, 0x74, 0xc2, 0xee, 0x6d, 0xd1, 0x0f, 0x9c, 0xb8, 0xe3, 0x05, 0x6d, 0xe5,
0x17, 0x48, 0xc0, 0x20, 0x4e, 0xe8, 0x6f, 0xa6, 0xde, 0xef, 0xee, 0x5c, 0x48, 0x36, 0x9b, 0xff,
0x1e, 0x48, 0x36, 0xeb, 0x66, 0xbf, 0x13, 0xc9, 0x16, 0x4e, 0xba, 0xfe, 0xdb, 0x86, 0xe7, 0xbe,
0x62, 0xc7, 0x71, 0x64, 0x0c, 0xce, 0xaa, 0x57, 0xb3, 0xdf, 0xc9, 0x59, 0xb5, 0xb0, 0xfb, 0xe5,
0x79, 0x55, 0x3b, 0x3d, 0xaf, 0x16, 0x3e, 0xcc, 0x9c, 0x71, 0xe9, 0x9f, 0x34, 0xb2, 0xe0, 0x05,
0x71, 0x14, 0xba, 0x47, 0x0e, 0x77, 0xad, 0x83, 0xbe, 0x3e, 0x8d, 0x82, 0x3f, 0xfd, 0xbf, 0x04,
0x0f, 0x24, 0xbb, 0x36, 0xf4, 0x5a, 0xef, 0x27, 0x92, 0xdd, 0x4c, 0x85, 0x2a, 0x60, 0x21, 0x79,
0x79, 0x0c, 0x05, 0xc1, 0x66, 0xc9, 0x03, 0x75, 0xc8, 0x0a, 0x0f, 0x9c, 0xa8, 0xdf, 0x83, 0x35,
0xb6, 0x7a, 0xb6, 0x10, 0xc7, 0x61, 0xe4, 0xea, 0x33, 0x15, 0xad, 0x36, 0x57, 0xdf, 0x1a, 0x48,
0x46, 0x87, 0xf4, 0x5e, 0xc6, 0x26, 0x92, 0xe9, 0x18, 0x76, 0x9c, 0x32, 0xcc, 0x09, 0xf6, 0xc6,
0x3f, 0x6e, 0x91, 0x95, 0x74, 0x63, 0xcb, 0x5b, 0xda, 0x24, 0xd3, 0xd9, 0x56, 0xce, 0xd5, 0xb7,
0x2f, 0x24, 0x9b, 0xc6, 0x4f, 0x9c, 0xf6, 0x20, 0xc2, 0x46, 0x69, 0x07, 0x2a, 0x41, 0xe8, 0xf2,
0x96, 0x7d, 0xe4, 0xc7, 0x6f, 0x1b, 0x71, 0x74, 0xc4, 0xd5, 0x2d, 0x39, 0x3d, 0xaf, 0x4e, 0xdf,
0xdd, 0xf9, 0x02, 0xbe, 0x6d, 0xda, 0x73, 0xe9, 0x0f, 0xc8, 0x65, 0xdf, 0x3e, 0xe0, 0x3e, 0xae,
0xf8, 0x5c, 0xfd, 0xdb, 0x03, 0xc9, 0x52, 0x20, 0x91, 0xac, 0x82, 0x4e, 0x71, 0x94, 0xf9, 0x8d,
0xb8, 0x88, 0xed, 0x28, 0x7e, 0xdb, 0x68, 0xd9, 0xbe, 0x40, 0xb7, 0x64, 0x48, 0x7f, 0x7a, 0x5e,
0x9d, 0x32, 0xd3, 0xc9, 0xb4, 0x4d, 0xae, 0xb7, 0x3c, 0x9f, 0x8b, 0xbe, 0x88, 0x79, 0xd7, 0x82,
0xfc, 0xc6, 0x45, 0x5a, 0xdc, 0xa2, 0x9b, 0x2d, 0xb1, 0xd9, 0x28, 0xa8, 0xfd, 0x7e, 0x8f, 0xd7,
0x5f, 0x1e, 0x48, 0xb6, 0xd8, 0x2a, 0x61, 0x89, 0x64, 0xab, 0x18, 0xbd, 0x0c, 0x1b, 0xe6, 0x88,
0x1d, 0xdd, 0x25, 0x97, 0x7a, 0x76, 0xdc, 0xd1, 0x2f, 0xa1, 0xfc, 0xb7, 0x06, 0x92, 0xe1, 0x38,
0x91, 0xec, 0x69, 0x9c, 0x0f, 0x83, 0x4c, 0x7c, 0xb1, 0x24, 0x9f, 0x80, 0xf0, 0xb9, 0x82, 0x79,
0x72, 0x56, 0xd5, 0x3e, 0x31, 0x71, 0x1a, 0xdd, 0x23, 0x97, 0x50, 0xec, 0xe5, 0x4c, 0x6c, 0x7a,
0x7a, 0x37, 0xd3, 0xed, 0x40, 0xb1, 0x35, 0x08, 0x11, 0xa7, 0x12, 0xaf, 0x63, 0x08, 0x18, 0x14,
0x69, 0x34, 0x57, 0x8c, 0x4c, 0xb4, 0xa2, 0x3f, 0x21, 0x57, 0xd3, 0x3c, 0x17, 0xfa, 0x95, 0xca,
0x4c, 0x6d, 0x7e, 0xeb, 0xb9, 0xb2, 0xd3, 0x09, 0x87, 0xb7, 0xce, 0x20, 0xed, 0x07, 0x92, 0xe5,
0x33, 0x13, 0xc9, 0xae, 0x61, 0xa8, 0x74, 0x6c, 0x98, 0x39, 0x41, 0x7f, 0xa3, 0x91, 0xe5, 0x88,
0x0b, 0xc7, 0x0e, 0x2c, 0x2f, 0x88, 0x79, 0xf4, 0xc0, 0xf6, 0x2d, 0xa1, 0x5f, 0xad, 0x68, 0xb5,
0xcb, 0xf5, 0xf6, 0x40, 0xb2, 0xeb, 0x29, 0x79, 0x37, 0xe3, 0x9a, 0x89, 0x64, 0x2f, 0xa1, 0xa7,
0x11, 0x7c, 0x74, 0x89, 0x5e, 0x7f, 0xf3, 0xce, 0x1d, 0xe3, 0x89, 0x64, 0x33, 0x5e, 0x10, 0x0f,
0xce, 0xaa, 0xab, 0x93, 0xcc, 0x9f, 0x9c, 0x55, 0x2f, 0x81, 0x9d, 0x39, 0x1a, 0x84, 0xfe, 0x5d,
0x23, 0xb4, 0x25, 0xac, 0x63, 0x3b, 0x76, 0x3a, 0x3c, 0xb2, 0x78, 0x60, 0x1f, 0xf8, 0xdc, 0xd5,
0x67, 0x2b, 0x5a, 0x6d, 0xb6, 0xfe, 0x2b, 0xed, 0x42, 0xb2, 0xa5, 0x46, 0xf3, 0x83, 0x94, 0x7d,
0x2f, 0x25, 0x07, 0x92, 0x2d, 0xb5, 0x44, 0x19, 0x4b, 0x24, 0x7b, 0x39, 0x4d, 0x82, 0x11, 0x62,
0x54, 0x6d, 0x9e, 0xe3, 0x6b, 0x13, 0x0d, 0x41, 0x27, 0x58, 0x9c, 0x9e, 0x57, 0xc7, 0xc2, 0x9a,
0x63, 0x41, 0xe9, 0xdf, 0xca, 0xe2, 0x5d, 0xee, 0xdb, 0x7d, 0x4b, 0xe8, 0x73, 0x15, 0xad, 0xa6,
0xd5, 0x3f, 0x03, 0xf1, 0xd7, 0x0b, 0x2f, 0x3b, 0x40, 0x36, 0x61, 0x9d, 0x0b, 0x37, 0x29, 0x94,
0x48, 0xf6, 0x62, 0x59, 0x7a, 0x8a, 0x8f, 0x2a, 0x7f, 0xed, 0x0e, 0xe8, 0x5e, 0x9d, 0x64, 0xf5,
0xe4, 0xac, 0x3a, 0xfd, 0xda, 0x9d, 0xd3, 0xf3, 0xea, 0x68, 0x38, 0x73, 0x34, 0x18, 0x14, 0xfb,
0x55, 0x45, 0x72, 0xec, 0x75, 0x79, 0x78, 0x14, 0x5b, 0x42, 0xaf, 0xa1, 0xe8, 0xfe, 0x85, 0x64,
0xcb, 0x85, 0x93, 0xfd, 0x94, 0x05, 0xd5, 0xcb, 0x85, 0xa3, 0x1c, 0x4c, 0x24, 0x7b, 0xa6, 0xac,
0x3b, 0x67, 0x8a, 0x0c, 0xbf, 0x31, 0x99, 0x3a, 0x3d, 0xaf, 0x8e, 0xc7, 0x30, 0xc7, 0x23, 0xd0,
0x9f, 0x92, 0x6b, 0x5e, 0x3b, 0x08, 0x23, 0x6e, 0xf5, 0x78, 0xd4, 0x15, 0x3a, 0xc1, 0xac, 0x78,
0x67, 0x20, 0xd9, 0x7c, 0x8a, 0xef, 0x01, 0x9c, 0x48, 0x76, 0x23, 0xad, 0x69, 0x43, 0xac, 0x90,
0xb0, 0x34, 0x0a, 0x9a, 0xea, 0x54, 0xfa, 0x73, 0x8d, 0x2c, 0xda, 0x47, 0x71, 0x68, 0x05, 0x61,
0xd4, 0xb5, 0x7d, 0xef, 0x21, 0xd7, 0xe7, 0x31, 0xc8, 0x87, 0x03, 0xc9, 0x16, 0x80, 0x79, 0x3f,
0x27, 0x8a, 0x7d, 0x2a, 0xa1, 0x5f, 0x97, 0x5f, 0x74, 0xdc, 0x2a, 0x4f, 0x2e, 0xb3, 0xec, 0x97,
0x86, 0x64, 0xa1, 0xeb, 0x05, 0x96, 0xeb, 0x89, 0x43, 0xab, 0x15, 0x71, 0xae, 0x5f, 0xab, 0x68,
0xb5, 0xf9, 0xad, 0x6b, 0xf9, 0xe1, 0x6f, 0x7a, 0x0f, 0x79, 0xfd, 0x9d, 0xec, 0x9c, 0xcf, 0x77,
0xbd, 0x60, 0xc7, 0x13, 0x87, 0x8d, 0x88, 0x83, 0x22, 0x86, 0x8a, 0x14, 0x4c, 0x4d, 0x98, 0xca,
0x2d, 0xe3, 0xc9, 0x59, 0x75, 0xe6, 0xb5, 0xca, 0x2d, 0x53, 0x9d, 0x46, 0xdb, 0x84, 0x0c, 0xbb,
0x11, 0x7d, 0x01, 0xa3, 0xb1, 0x3c, 0xda, 0x0f, 0x0b, 0xa6, 0x5c, 0x68, 0x5e, 0xc8, 0x04, 0x28,
0x53, 0x13, 0xc9, 0x96, 0x30, 0xfe, 0x10, 0x32, 0x4c, 0x85, 0xa7, 0xef, 0x90, 0xab, 0x4e, 0xd8,
0xf3, 0x78, 0x24, 0xf4, 0x45, 0xac, 0x33, 0xcf, 0x43, 0xa5, 0xca, 0xa0, 0xa2, 0x19, 0xc8, 0xc6,
0x79, 0x0d, 0x31, 0x73, 0x03, 0xfa, 0x4f, 0x8d, 0xdc, 0x80, 0x3e, 0x88, 0x47, 0x56, 0xd7, 0x3e,
0xb1, 0x7a, 0x3c, 0x70, 0xbd, 0xa0, 0x6d, 0x1d, 0x7a, 0x07, 0xfa, 0x75, 0x74, 0xf7, 0x5b, 0x38,
0x62, 0x2b, 0x7b, 0x68, 0xb2, 0x6b, 0x9f, 0xec, 0xa5, 0x06, 0xf7, 0xbc, 0xfa, 0x40, 0xb2, 0x95,
0xde, 0x38, 0x9c, 0x48, 0xf6, 0x54, 0x5a, 0xea, 0xc7, 0x39, 0xa5, 0x84, 0x4d, 0x9c, 0x3a, 0x19,
0x3e, 0x3d, 0xaf, 0x4e, 0x8a, 0x6f, 0x4e, 0xb0, 0x3d, 0x80, 0xe5, 0xe8, 0xd8, 0xa2, 0x03, 0xcb,
0xb1, 0x34, 0x5c, 0x8e, 0x0c, 0x2a, 0x96, 0x23, 0x1b, 0x0f, 0x97, 0x23, 0x03, 0xe8, 0xbb, 0xe4,
0x32, 0x76, 0x84, 0xfa, 0x32, 0xde, 0x38, 0xcb, 0xf9, 0x8e, 0x41, 0xfc, 0xfb, 0x40, 0xd4, 0x75,
0xb8, 0x92, 0xd1, 0x26, 0x91, 0x6c, 0x1e, 0xbd, 0xe1, 0xc8, 0x30, 0x53, 0x94, 0xde, 0x23, 0x0b,
0xd9, 0x81, 0x72, 0xb9, 0xcf, 0x63, 0xae, 0x53, 0x4c, 0xf6, 0x17, 0xb0, 0xff, 0x41, 0x62, 0x07,
0xf1, 0x44, 0x32, 0xaa, 0x1c, 0xa9, 0x14, 0x34, 0xcc, 0x92, 0x0d, 0x3d, 0x21, 0x3a, 0xde, 0x26,
0xbd, 0x28, 0x6c, 0x47, 0x5c, 0x08, 0xf5, 0x5a, 0x59, 0xc1, 0xef, 0x83, 0x16, 0x61, 0x0d, 0x6c,
0xf6, 0x32, 0x13, 0xf5, 0x72, 0x49, 0x2f, 0xdd, 0x89, 0x6c, 0xf1, 0xed, 0x93, 0x27, 0xd3, 0x26,
0x59, 0xcc, 0xf2, 0xa2, 0x67, 0x1f, 0x09, 0x6e, 0x09, 0x7d, 0x15, 0xe3, 0xbd, 0x0a, 0xdf, 0x91,
0x32, 0x7b, 0x40, 0x34, 0x8b, 0xef, 0x50, 0xc1, 0xc2, 0x7b, 0xc9, 0x94, 0x72, 0xb2, 0x00, 0x59,
0x06, 0x8b, 0xea, 0x7b, 0x4e, 0x2c, 0xf4, 0x35, 0xf4, 0xf9, 0x1d, 0xf0, 0xd9, 0xb5, 0x4f, 0xb6,
0x73, 0x7c, 0x78, 0xea, 0x14, 0xb0, 0x5c, 0xa7, 0xb3, 0x00, 0x69, 0x59, 0x36, 0x4b, 0xb3, 0xa9,
0x4b, 0x56, 0x5d, 0x4f, 0xc0, 0xfd, 0x61, 0x89, 0x9e, 0x1d, 0x09, 0x6e, 0x61, 0x9b, 0xa2, 0xdf,
0xc0, 0x9d, 0xc0, 0xc6, 0x30, 0xe3, 0x9b, 0x48, 0x63, 0x03, 0x54, 0x34, 0x86, 0xe3, 0x94, 0x61,
0x4e, 0xb0, 0x57, 0xa3, 0xc4, 0xbc, 0xdb, 0xb3, 0xbc, 0xc0, 0xe5, 0x27, 0x5c, 0xe8, 0x37, 0xc7,
0xa2, 0xec, 0xf3, 0x6e, 0xef, 0x6e, 0xca, 0x8e, 0x46, 0x51, 0xa8, 0x61, 0x14, 0x05, 0xa4, 0x5b,
0xe4, 0x0a, 0x6e, 0x80, 0xab, 0xeb, 0xe8, 0x77, 0x7d, 0x20, 0x59, 0x86, 0x14, 0x7d, 0x48, 0x3a,
0x34, 0xcc, 0x0c, 0xa7, 0x31, 0xb9, 0x79, 0xcc, 0xed, 0x43, 0x0b, 0xb2, 0xda, 0x8a, 0x3b, 0x11,
0x17, 0x9d, 0xd0, 0x77, 0xad, 0x9e, 0x13, 0xeb, 0x4f, 0xe1, 0x82, 0x43, 0x79, 0x5f, 0x05, 0x93,
0xef, 0xda, 0xa2, 0xb3, 0x9f, 0x1b, 0xec, 0x39, 0x71, 0x22, 0xd9, 0x3a, 0xba, 0x9c, 0x44, 0x16,
0x9b, 0x3a, 0x71, 0x2a, 0xdd, 0x26, 0xf3, 0x5d, 0x3b, 0x3a, 0xe4, 0x91, 0x15, 0xd8, 0x5d, 0xae,
0xaf, 0x63, 0x0b, 0x68, 0x40, 0x39, 0x4b, 0xe1, 0xf7, 0xed, 0x2e, 0x2f, 0xca, 0xd9, 0x10, 0x32,
0x4c, 0x85, 0xa7, 0x7d, 0xb2, 0x0e, 0x4f, 0x2d, 0x2b, 0x3c, 0x0e, 0x78, 0x24, 0x3a, 0x5e, 0xcf,
0x6a, 0x45, 0x61, 0xd7, 0xea, 0xd9, 0x11, 0x0f, 0x62, 0xfd, 0x69, 0x5c, 0x82, 0x6f, 0x0e, 0x24,
0xbb, 0x09, 0x56, 0xf7, 0x73, 0xa3, 0x46, 0x14, 0x76, 0xf7, 0xd0, 0x24, 0x91, 0xec, 0xd9, 0xbc,
0xe2, 0x4d, 0xe2, 0x0d, 0xf3, 0xeb, 0x66, 0xd2, 0x5f, 0x68, 0x64, 0xb9, 0x1b, 0xba, 0x78, 0x5f,
0x5b, 0xc7, 0x5e, 0xe0, 0x86, 0xc7, 0x96, 0xd0, 0x9f, 0xc1, 0x05, 0xfb, 0x08, 0xee, 0x6c, 0xd3,
0x3e, 0xde, 0x0d, 0x5d, 0xb8, 0x39, 0x3f, 0x40, 0x16, 0xee, 0xec, 0xc5, 0x6e, 0x09, 0x29, 0x1a,
0xe5, 0x32, 0x9c, 0xaf, 0x1c, 0xdc, 0xca, 0x63, 0x5e, 0xcc, 0x11, 0x1f, 0xf4, 0x53, 0x8d, 0xac,
0x65, 0xc7, 0xc4, 0x39, 0x8a, 0x40, 0x9b, 0x75, 0x1c, 0x79, 0x31, 0x17, 0xfa, 0xb3, 0x28, 0xe6,
0xfb, 0x50, 0x7a, 0xd3, 0x84, 0xcf, 0xf8, 0x0f, 0x90, 0x4e, 0x24, 0xbb, 0xa5, 0x9c, 0x9a, 0x12,
0xa7, 0x1c, 0x9e, 0x2d, 0xe5, 0xec, 0x68, 0x5b, 0xe6, 0x24, 0x4f, 0x50, 0xc4, 0xf2, 0xdc, 0x6e,
0xc1, 0xbb, 0x4e, 0xdf, 0x18, 0x16, 0xb1, 0x8c, 0x68, 0x00, 0x5e, 0x1c, 0x7e, 0x15, 0x34, 0xcc,
0x92, 0x0d, 0xf5, 0xc9, 0x12, 0xbe, 0xb7, 0x2d, 0xa8, 0x05, 0x56, 0x5a, 0x5f, 0x19, 0xd6, 0xd7,
0x1b, 0x79, 0x7d, 0xad, 0x03, 0x3f, 0x2c, 0xb2, 0xf8, 0x04, 0x39, 0x28, 0x61, 0xc5, 0xca, 0x96,
0x61, 0xc3, 0x1c, 0xb1, 0xa3, 0x9f, 0x6b, 0x64, 0x19, 0x53, 0x08, 0x9f, 0xeb, 0x56, 0xfa, 0x5e,
0xd7, 0x2b, 0x18, 0x6f, 0x05, 0x9e, 0x3b, 0xdb, 0x61, 0xaf, 0x6f, 0x02, 0xb7, 0x8b, 0x54, 0xfd,
0x1e, 0x34, 0x8c, 0x4e, 0x19, 0x4c, 0x24, 0xab, 0x15, 0x69, 0xa4, 0xe0, 0xca, 0x32, 0x8a, 0xd8,
0x0e, 0x5c, 0x3b, 0x72, 0xe1, 0xfe, 0x9f, 0xcd, 0x07, 0xe6, 0xa8, 0x23, 0xfa, 0x47, 0x90, 0x63,
0x43, 0x01, 0xe5, 0x81, 0xf0, 0x62, 0xef, 0x01, 0xac, 0xa8, 0xfe, 0x1c, 0x2e, 0xe7, 0x09, 0x74,
0xaf, 0xdb, 0xb6, 0xe0, 0xcd, 0x9c, 0x6b, 0x60, 0xf7, 0xea, 0x94, 0xa1, 0x44, 0xb2, 0xb5, 0x54,
0x4c, 0x19, 0x87, 0x1e, 0x68, 0xcc, 0x76, 0x1c, 0x82, 0x9e, 0x75, 0x24, 0x88, 0x39, 0x62, 0x23,
0xe8, 0x1f, 0x34, 0xb2, 0xd4, 0x0a, 0x7d, 0x3f, 0x3c, 0xb6, 0x3e, 0x3e, 0x0a, 0x1c, 0x68, 0x47,
0x84, 0x6e, 0x0c, 0x55, 0x7e, 0x2f, 0x07, 0xdf, 0x15, 0x3b, 0x5e, 0x24, 0x40, 0xe5, 0xc7, 0x65,
0xa8, 0x50, 0x39, 0x82, 0xa3, 0xca, 0x51, 0xdb, 0x71, 0x08, 0x54, 0x8e, 0x04, 0x31, 0xaf, 0xa7,
0x8a, 0x0a, 0x98, 0xde, 0x27, 0x8b, 0x90, 0x51, 0xc3, 0xea, 0xa0, 0x3f, 0x8f, 0x12, 0xe1, 0x15,
0xb8, 0x00, 0x4c, 0x71, 0xae, 0x13, 0xc9, 0x56, 0xd2, 0xcb, 0x4f, 0x45, 0x0d, 0xb3, 0x6c, 0x85,
0x0e, 0x79, 0xe0, 0x2a, 0x0e, 0xab, 0x8a, 0x43, 0x1e, 0xb8, 0x13, 0x1c, 0xaa, 0x28, 0x38, 0x54,
0xc7, 0x50, 0x04, 0x51, 0xe1, 0x09, 0x74, 0xa3, 0x42, 0xbf, 0x85, 0xde, 0xb0, 0x08, 0x02, 0xfc,
0x23, 0x44, 0x8b, 0x22, 0x38, 0x84, 0x0c, 0x53, 0xe1, 0xd1, 0x09, 0xa8, 0xca, 0x9c, 0xbc, 0xa0,
0x38, 0xe1, 0x81, 0x3b, 0xea, 0xa4, 0x80, 0xc0, 0x49, 0x31, 0x80, 0xc6, 0x1e, 0xe7, 0xc3, 0xdd,
0x17, 0xf3, 0x48, 0x7f, 0x11, 0x7b, 0xd0, 0x95, 0xfc, 0xc4, 0xa1, 0x55, 0x03, 0xa9, 0x7a, 0x2d,
0x6f, 0x7c, 0x4f, 0x86, 0x60, 0x22, 0xd9, 0x32, 0xfa, 0x57, 0x30, 0xc3, 0x54, 0x2d, 0xe8, 0x21,
0x99, 0x8b, 0xb8, 0xed, 0x5a, 0x61, 0xe0, 0xf7, 0xf5, 0x3f, 0x37, 0x50, 0xe5, 0xee, 0x85, 0x64,
0x74, 0x87, 0xf7, 0x22, 0xee, 0xd8, 0x31, 0x77, 0x4d, 0x6e, 0xbb, 0xf7, 0x03, 0xbf, 0x3f, 0x90,
0x4c, 0x7b, 0xb5, 0xf8, 0xc7, 0x27, 0x0a, 0xb1, 0x59, 0x7f, 0x25, 0xec, 0x7a, 0x70, 0x73, 0xc6,
0x7d, 0xfc, 0xc7, 0x67, 0x0c, 0xd5, 0x35, 0x73, 0x36, 0xca, 0x1c, 0xd0, 0x9f, 0x91, 0xe5, 0x52,
0x07, 0x8f, 0xb7, 0xd9, 0x5f, 0x1a, 0xf8, 0xa2, 0x7a, 0xef, 0x42, 0x32, 0x7d, 0x18, 0x74, 0x77,
0xd8, 0x87, 0xef, 0x39, 0x71, 0x1e, 0x7a, 0x63, 0xb4, 0x8d, 0xdf, 0x73, 0x62, 0x45, 0x81, 0xae,
0x99, 0x8b, 0x65, 0x92, 0xfe, 0x98, 0x5c, 0x4d, 0xbb, 0x17, 0xa1, 0x7f, 0xd9, 0xc0, 0xca, 0xfb,
0x2d, 0xb8, 0x06, 0x86, 0x81, 0xd2, 0xae, 0x54, 0x94, 0x3f, 0x2e, 0x9b, 0xa2, 0xb8, 0xce, 0xca,
0xad, 0xae, 0x99, 0xb9, 0x3f, 0x7a, 0x48, 0x16, 0xb1, 0xaf, 0x1b, 0xe6, 0xdd, 0x5f, 0xd3, 0xf5,
0xdb, 0xbe, 0x90, 0xec, 0xe6, 0x30, 0x42, 0xd3, 0xb1, 0x83, 0x22, 0xb9, 0xf2, 0x38, 0xcf, 0x16,
0x5d, 0x5d, 0x41, 0x95, 0x3f, 0x64, 0xa1, 0xc4, 0x19, 0x9f, 0xcd, 0x90, 0x79, 0x65, 0xbb, 0xe9,
0x47, 0xe4, 0x2a, 0x0f, 0xe2, 0xc8, 0xe3, 0x42, 0xd7, 0xf0, 0x3f, 0x10, 0x7d, 0x42, 0x52, 0xbc,
0x17, 0xc4, 0x51, 0xbf, 0xfe, 0x62, 0xfe, 0xd7, 0x47, 0x36, 0xa1, 0xe8, 0x79, 0x61, 0x8c, 0xdb,
0x76, 0x19, 0x7f, 0x99, 0xb9, 0x01, 0xfd, 0x5d, 0x76, 0x79, 0x09, 0x2f, 0x68, 0xfb, 0xdc, 0x42,
0xd6, 0x12, 0xf0, 0xe8, 0x9b, 0xc6, 0x25, 0x6c, 0x41, 0x5f, 0xd4, 0xb5, 0x4f, 0x9a, 0xc8, 0x63,
0x94, 0xa6, 0xfa, 0xf2, 0x1b, 0xa7, 0x4a, 0x7d, 0xdf, 0xd6, 0x1b, 0xca, 0x23, 0x62, 0x82, 0x1f,
0x78, 0x00, 0x82, 0x95, 0x39, 0x81, 0xa3, 0x0f, 0xc9, 0x22, 0x48, 0x8b, 0xc3, 0x18, 0x1a, 0x68,
0xd0, 0x34, 0x83, 0x9a, 0xf6, 0xb3, 0xfe, 0x73, 0x1f, 0x88, 0x4c, 0xcd, 0x73, 0xb9, 0x9a, 0x02,
0x54, 0x74, 0xbc, 0x71, 0xe7, 0xad, 0x37, 0x15, 0x1d, 0xa5, 0xb9, 0xa0, 0x00, 0x78, 0xb3, 0x84,
0x1a, 0xbf, 0xd7, 0xc8, 0xd2, 0xe8, 0xf2, 0xc2, 0x73, 0xa3, 0x0b, 0xef, 0xf1, 0xec, 0x6f, 0xc4,
0x6f, 0xc0, 0xdb, 0x02, 0x01, 0xa5, 0x4f, 0x8a, 0x9d, 0x4e, 0xf1, 0xd2, 0x26, 0xc3, 0xa1, 0x99,
0x1a, 0xd2, 0x06, 0xb9, 0x02, 0x0f, 0x77, 0x2f, 0xc6, 0xf5, 0x9d, 0xad, 0x6f, 0x62, 0x7f, 0x88,
0x48, 0x71, 0x84, 0xd3, 0x61, 0xe1, 0x65, 0x5e, 0x19, 0x9b, 0x99, 0x6d, 0xfd, 0xde, 0xa3, 0xaf,
0x36, 0xa6, 0xce, 0xbf, 0xda, 0x98, 0x7a, 0x74, 0xb1, 0xa1, 0x9d, 0x5f, 0x6c, 0x68, 0xbf, 0x7e,
0xbc, 0x31, 0xf5, 0xc5, 0xe3, 0x0d, 0xed, 0xfc, 0xf1, 0xc6, 0xd4, 0xbf, 0x1f, 0x6f, 0x4c, 0x7d,
0xf8, 0xd2, 0xff, 0xf0, 0xaf, 0x6f, 0x9a, 0x47, 0x07, 0x57, 0xf0, 0xdf, 0xdf, 0xd7, 0xff, 0x1b,
0x00, 0x00, 0xff, 0xff, 0x68, 0x19, 0x36, 0x63, 0x1b, 0x18, 0x00, 0x00,
// 2413 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xcf, 0x6f, 0x24, 0x47,
0xf5, 0x77, 0xdb, 0xbb, 0x6b, 0xbb, 0xfc, 0xbb, 0x6c, 0xef, 0x76, 0x9c, 0xc4, 0x35, 0xe9, 0xcc,
0x26, 0x4e, 0xbe, 0x89, 0x77, 0xe3, 0x44, 0x91, 0x12, 0x7d, 0x03, 0x64, 0xec, 0x8c, 0x58, 0x16,
0x67, 0xad, 0x1e, 0x43, 0x20, 0x41, 0x6a, 0xda, 0xdd, 0x35, 0x33, 0x1d, 0xf7, 0x8f, 0xa1, 0xab,
0xbd, 0xf6, 0xec, 0x21, 0x0a, 0x39, 0x20, 0x24, 0x72, 0x40, 0xe6, 0x80, 0x38, 0x20, 0x45, 0x02,
0x21, 0x08, 0x17, 0xce, 0xfc, 0x05, 0xb9, 0x20, 0xfb, 0x84, 0x10, 0x87, 0x92, 0xe2, 0xbd, 0xcd,
0x71, 0x8e, 0x7b, 0x42, 0xef, 0xf5, 0x8f, 0xa9, 0x9e, 0x99, 0x48, 0x48, 0xdc, 0xa6, 0x3e, 0x9f,
0x57, 0xef, 0x7d, 0xfa, 0x55, 0xd5, 0xab, 0x57, 0x43, 0xaa, 0xbe, 0x77, 0x74, 0xc7, 0x89, 0xc2,
0xa6, 0xd7, 0xba, 0xd3, 0x8c, 0x7c, 0x97, 0xc7, 0xe9, 0xe0, 0x24, 0xb6, 0x13, 0x2f, 0x0a, 0xb7,
0x3b, 0x71, 0x94, 0x44, 0xf4, 0x46, 0x0a, 0x6e, 0x3c, 0x3d, 0x62, 0x9d, 0x74, 0x3b, 0x3c, 0x35,
0xda, 0x58, 0x57, 0x48, 0xe1, 0x3d, 0xca, 0xe1, 0x0d, 0x05, 0xee, 0x9c, 0xf8, 0x7e, 0x14, 0xbb,
0x3c, 0xce, 0xb8, 0x2d, 0x85, 0x7b, 0xc8, 0x63, 0xe1, 0x45, 0xa1, 0x17, 0xb6, 0xc6, 0x28, 0xd8,
0x60, 0x8a, 0xe5, 0x91, 0x1f, 0x39, 0xc7, 0xc3, 0xae, 0x28, 0x18, 0x34, 0xc5, 0x1d, 0x10, 0x24,
0x32, 0xec, 0x99, 0x0c, 0x73, 0xa2, 0x4e, 0x37, 0xb6, 0xc3, 0x16, 0x0f, 0x78, 0xd2, 0x8e, 0xdc,
0x8c, 0x9d, 0xe5, 0x67, 0x49, 0xfa, 0xd3, 0xf8, 0xe7, 0x14, 0x79, 0xaa, 0x8e, 0xdf, 0xb3, 0xc7,
0x1f, 0x7a, 0x0e, 0xdf, 0x55, 0x15, 0xd0, 0x2f, 0x35, 0x32, 0xeb, 0x22, 0x6e, 0x79, 0xae, 0xae,
0x55, 0xb4, 0xad, 0xf9, 0xda, 0xe7, 0xda, 0x57, 0x92, 0x4d, 0xfc, 0x5b, 0xb2, 0x37, 0x5a, 0x5e,
0xd2, 0x3e, 0x39, 0xda, 0x76, 0xa2, 0xe0, 0x8e, 0xe8, 0x86, 0x4e, 0xd2, 0xf6, 0xc2, 0x96, 0xf2,
0x0b, 0x24, 0x60, 0x10, 0x27, 0xf2, 0xb7, 0x53, 0xef, 0xf7, 0xf6, 0xae, 0x24, 0x9b, 0xc9, 0x7f,
0xf7, 0x24, 0x9b, 0x71, 0xb3, 0xdf, 0x7d, 0xc9, 0x16, 0xce, 0x02, 0xff, 0x6d, 0xc3, 0x73, 0x5f,
0xb1, 0x93, 0x24, 0x36, 0x7a, 0x17, 0xd5, 0xe9, 0xec, 0x77, 0xff, 0xa2, 0x5a, 0xd8, 0xfd, 0xf2,
0xb2, 0xaa, 0x9d, 0x5f, 0x56, 0x0b, 0x1f, 0x66, 0xce, 0xb8, 0xf4, 0x4f, 0x1a, 0x59, 0xf0, 0xc2,
0x24, 0x8e, 0xdc, 0x13, 0x87, 0xbb, 0xd6, 0x51, 0x57, 0x9f, 0x44, 0xc1, 0x9f, 0xfe, 0x4f, 0x82,
0x7b, 0x92, 0xcd, 0x0f, 0xbc, 0xd6, 0xba, 0x7d, 0xc9, 0x6e, 0xa5, 0x42, 0x15, 0xb0, 0x90, 0xbc,
0x32, 0x82, 0x82, 0x60, 0xb3, 0xe4, 0x81, 0x3a, 0x64, 0x95, 0x87, 0x4e, 0xdc, 0xed, 0x40, 0x8e,
0xad, 0x8e, 0x2d, 0xc4, 0x69, 0x14, 0xbb, 0xfa, 0x54, 0x45, 0xdb, 0x9a, 0xad, 0xed, 0xf4, 0x24,
0xa3, 0x03, 0xfa, 0x20, 0x63, 0xfb, 0x92, 0xe9, 0x18, 0x76, 0x94, 0x32, 0xcc, 0x31, 0xf6, 0xc6,
0x79, 0x95, 0xac, 0xa6, 0x0b, 0x5b, 0x5e, 0xd2, 0x06, 0x99, 0xcc, 0x96, 0x72, 0xb6, 0xb6, 0x7b,
0x25, 0xd9, 0x24, 0x7e, 0xe2, 0xa4, 0x07, 0x11, 0x36, 0x4b, 0x2b, 0x50, 0x09, 0x23, 0x97, 0x37,
0xed, 0x13, 0x3f, 0x79, 0xdb, 0x48, 0xe2, 0x13, 0xae, 0x2e, 0xc9, 0xf9, 0x65, 0x75, 0xf2, 0xde,
0xde, 0x17, 0xf0, 0x6d, 0x93, 0x9e, 0x4b, 0x7f, 0x40, 0xae, 0xfb, 0xf6, 0x11, 0xf7, 0x31, 0xe3,
0xb3, 0xb5, 0x6f, 0xf7, 0x24, 0x4b, 0x81, 0xbe, 0x64, 0x15, 0x74, 0x8a, 0xa3, 0xcc, 0x6f, 0xcc,
0x45, 0x62, 0xc7, 0xc9, 0xdb, 0x46, 0xd3, 0xf6, 0x05, 0xba, 0x25, 0x03, 0xfa, 0xd3, 0xcb, 0xea,
0x84, 0x99, 0x4e, 0xa6, 0x2d, 0xb2, 0xd4, 0xf4, 0x7c, 0x2e, 0xba, 0x22, 0xe1, 0x81, 0x05, 0xfb,
0x1b, 0x93, 0xb4, 0xb8, 0x43, 0xb7, 0x9b, 0x62, 0xbb, 0x5e, 0x50, 0x87, 0xdd, 0x0e, 0xaf, 0xbd,
0xdc, 0x93, 0x6c, 0xb1, 0x59, 0xc2, 0xfa, 0x92, 0xad, 0x61, 0xf4, 0x32, 0x6c, 0x98, 0x43, 0x76,
0x74, 0x9f, 0x5c, 0xeb, 0xd8, 0x49, 0x5b, 0xbf, 0x86, 0xf2, 0xdf, 0xea, 0x49, 0x86, 0xe3, 0xbe,
0x64, 0x4f, 0xe3, 0x7c, 0x18, 0x64, 0xe2, 0x8b, 0x94, 0x7c, 0x02, 0xc2, 0x67, 0x0b, 0xe6, 0xc9,
0x45, 0x55, 0xfb, 0xc4, 0xc4, 0x69, 0xf4, 0x80, 0x5c, 0x43, 0xb1, 0xd7, 0x33, 0xb1, 0xe9, 0xe9,
0xdd, 0x4e, 0x97, 0x03, 0xc5, 0x6e, 0x41, 0x88, 0x24, 0x95, 0xb8, 0x84, 0x21, 0x60, 0x50, 0x6c,
0xa3, 0xd9, 0x62, 0x64, 0xa2, 0x15, 0xfd, 0x09, 0x99, 0x4e, 0xf7, 0xb9, 0xd0, 0x6f, 0x54, 0xa6,
0xb6, 0xe6, 0x76, 0x9e, 0x2b, 0x3b, 0x1d, 0x73, 0x78, 0x6b, 0x0c, 0xb6, 0x7d, 0x4f, 0xb2, 0x7c,
0x66, 0x5f, 0xb2, 0x79, 0x0c, 0x95, 0x8e, 0x0d, 0x33, 0x27, 0xe8, 0x6f, 0x34, 0xb2, 0x12, 0x73,
0xe1, 0xd8, 0xa1, 0xe5, 0x85, 0x09, 0x8f, 0x1f, 0xda, 0xbe, 0x25, 0xf4, 0xe9, 0x8a, 0xb6, 0x75,
0xbd, 0xd6, 0xea, 0x49, 0xb6, 0x94, 0x92, 0xf7, 0x32, 0xae, 0xd1, 0x97, 0xec, 0x25, 0xf4, 0x34,
0x84, 0x0f, 0xa7, 0xe8, 0xf5, 0x37, 0xef, 0xde, 0x35, 0x9e, 0x48, 0x36, 0xe5, 0x85, 0x49, 0xef,
0xa2, 0xba, 0x36, 0xce, 0xfc, 0xc9, 0x45, 0xf5, 0x1a, 0xd8, 0x99, 0xc3, 0x41, 0xe8, 0xdf, 0x35,
0x42, 0x9b, 0xc2, 0x3a, 0xb5, 0x13, 0xa7, 0xcd, 0x63, 0x8b, 0x87, 0xf6, 0x91, 0xcf, 0x5d, 0x7d,
0xa6, 0xa2, 0x6d, 0xcd, 0xd4, 0x7e, 0xa5, 0x5d, 0x49, 0xb6, 0x5c, 0x6f, 0x7c, 0x90, 0xb2, 0xef,
0xa5, 0x64, 0x4f, 0xb2, 0xe5, 0xa6, 0x28, 0x63, 0x7d, 0xc9, 0x5e, 0x4e, 0x37, 0xc1, 0x10, 0x31,
0xac, 0x36, 0xdf, 0xe3, 0xeb, 0x63, 0x0d, 0x41, 0x27, 0x58, 0x9c, 0x5f, 0x56, 0x47, 0xc2, 0x9a,
0x23, 0x41, 0xe9, 0xdf, 0xca, 0xe2, 0x5d, 0xee, 0xdb, 0x5d, 0x4b, 0xe8, 0xb3, 0x15, 0x6d, 0x4b,
0xab, 0x7d, 0x06, 0xe2, 0x97, 0x0a, 0x2f, 0x7b, 0x40, 0x36, 0x20, 0xcf, 0x85, 0x9b, 0x14, 0xea,
0x4b, 0xf6, 0x62, 0x59, 0x7a, 0x8a, 0x0f, 0x2b, 0x7f, 0xed, 0x2e, 0xe8, 0x5e, 0x1b, 0x67, 0xf5,
0xe4, 0xa2, 0x3a, 0xf9, 0xda, 0xdd, 0xf3, 0xcb, 0xea, 0x70, 0x38, 0x73, 0x38, 0x18, 0xfd, 0x29,
0x99, 0xf7, 0x5a, 0x61, 0x14, 0x73, 0xab, 0xc3, 0xe3, 0x40, 0xe8, 0x04, 0x13, 0xfd, 0x4e, 0x4f,
0xb2, 0xb9, 0x14, 0x3f, 0x00, 0xb8, 0x2f, 0xd9, 0xcd, 0xb4, 0x4c, 0x0c, 0xb0, 0x62, 0xdf, 0x2e,
0x0f, 0x83, 0xa6, 0x3a, 0x95, 0xfe, 0x5c, 0x23, 0x8b, 0xf6, 0x49, 0x12, 0x59, 0x61, 0x14, 0x07,
0xb6, 0xef, 0x3d, 0xe2, 0xfa, 0x1c, 0x06, 0xf9, 0xb0, 0x27, 0xd9, 0x02, 0x30, 0xef, 0xe7, 0x44,
0xf1, 0xe9, 0x25, 0xf4, 0x9b, 0x96, 0x8c, 0x8e, 0x5a, 0xe5, 0xeb, 0x65, 0x96, 0xfd, 0xd2, 0x88,
0x2c, 0x04, 0x5e, 0x68, 0xb9, 0x9e, 0x38, 0xb6, 0x9a, 0x31, 0xe7, 0xfa, 0x7c, 0x45, 0xdb, 0x9a,
0xdb, 0x99, 0xcf, 0xcf, 0x53, 0xc3, 0x7b, 0xc4, 0x6b, 0xef, 0x64, 0x47, 0x67, 0x2e, 0xf0, 0xc2,
0x3d, 0x4f, 0x1c, 0xd7, 0x63, 0x0e, 0x8a, 0x18, 0x2a, 0x52, 0x30, 0x75, 0x0d, 0x2a, 0xb7, 0x8d,
0x27, 0x17, 0xd5, 0xa9, 0xd7, 0x2a, 0xb7, 0x4d, 0x75, 0x1a, 0x6d, 0x11, 0x32, 0xb8, 0xe0, 0xf5,
0x05, 0x8c, 0xc6, 0xf2, 0x68, 0x3f, 0x2c, 0x98, 0xf2, 0xd9, 0x7d, 0x21, 0x13, 0xa0, 0x4c, 0xed,
0x4b, 0xb6, 0x8c, 0xf1, 0x07, 0x90, 0x61, 0x2a, 0x3c, 0x7d, 0x87, 0x4c, 0x3b, 0x51, 0xc7, 0xe3,
0xb1, 0xd0, 0x17, 0xf1, 0xe8, 0x3e, 0x0f, 0x87, 0x3f, 0x83, 0x8a, 0xfb, 0x35, 0x1b, 0xe7, 0xc7,
0xd2, 0xcc, 0x0d, 0xe8, 0x3f, 0x34, 0x72, 0x13, 0x5a, 0x0b, 0x1e, 0x5b, 0x81, 0x7d, 0x66, 0x75,
0x78, 0xe8, 0x7a, 0x61, 0xcb, 0x3a, 0xf6, 0x8e, 0xf4, 0x25, 0x74, 0xf7, 0x5b, 0xd8, 0xb5, 0xab,
0x07, 0x68, 0xb2, 0x6f, 0x9f, 0x1d, 0xa4, 0x06, 0xf7, 0xbd, 0x5a, 0x4f, 0xb2, 0xd5, 0xce, 0x28,
0xdc, 0x97, 0xec, 0xa9, 0xb4, 0x7a, 0x8e, 0x72, 0x4a, 0x55, 0x18, 0x3b, 0x75, 0x3c, 0x7c, 0x7e,
0x59, 0x1d, 0x17, 0xdf, 0x1c, 0x63, 0x7b, 0x04, 0xe9, 0x68, 0xdb, 0xa2, 0x0d, 0xe9, 0x58, 0x1e,
0xa4, 0x23, 0x83, 0x8a, 0x74, 0x64, 0xe3, 0x41, 0x3a, 0x32, 0x80, 0xbe, 0x4b, 0xae, 0x63, 0x93,
0xa5, 0xaf, 0x60, 0x11, 0x5f, 0xc9, 0x57, 0x0c, 0xe2, 0x3f, 0x00, 0xa2, 0xa6, 0xc3, 0x2d, 0x87,
0x36, 0x7d, 0xc9, 0xe6, 0xd0, 0x1b, 0x8e, 0x0c, 0x33, 0x45, 0xe9, 0x7d, 0xb2, 0x90, 0x1d, 0x28,
0x97, 0xfb, 0x3c, 0xe1, 0x3a, 0xc5, 0xcd, 0xfe, 0x02, 0xb6, 0x14, 0x48, 0xec, 0x21, 0xde, 0x97,
0x8c, 0x2a, 0x47, 0x2a, 0x05, 0x0d, 0xb3, 0x64, 0x43, 0xcf, 0x88, 0x8e, 0x05, 0xba, 0x13, 0x47,
0xad, 0x98, 0x0b, 0xa1, 0x56, 0xea, 0x55, 0xfc, 0x3e, 0xb8, 0x75, 0xd7, 0xc1, 0xe6, 0x20, 0x33,
0x51, 0xeb, 0x75, 0x7a, 0x8f, 0x8d, 0x65, 0x8b, 0x6f, 0x1f, 0x3f, 0x99, 0x36, 0xc8, 0x62, 0xb6,
0x2f, 0x3a, 0xf6, 0x89, 0xe0, 0x96, 0xd0, 0xd7, 0x30, 0xde, 0xab, 0xf0, 0x1d, 0x29, 0x73, 0x00,
0x44, 0xa3, 0xf8, 0x0e, 0x15, 0x2c, 0xbc, 0x97, 0x4c, 0x29, 0x27, 0x0b, 0xb0, 0xcb, 0x20, 0xa9,
0xbe, 0xe7, 0x24, 0x42, 0x5f, 0x47, 0x9f, 0xdf, 0x01, 0x9f, 0x81, 0x7d, 0xb6, 0x9b, 0xe3, 0x83,
0x53, 0xa7, 0x80, 0xe5, 0xd2, 0x97, 0x05, 0x48, 0x2b, 0x9d, 0x59, 0x9a, 0x4d, 0x5d, 0xb2, 0xe6,
0x7a, 0x02, 0x4a, 0xb2, 0x25, 0x3a, 0x76, 0x2c, 0xb8, 0x85, 0x37, 0xbf, 0x7e, 0x13, 0x57, 0x02,
0x7b, 0xad, 0x8c, 0x6f, 0x20, 0x8d, 0x3d, 0x45, 0xd1, 0x6b, 0x8d, 0x52, 0x86, 0x39, 0xc6, 0x5e,
0x8d, 0x92, 0xf0, 0xa0, 0x63, 0x79, 0xa1, 0xcb, 0xcf, 0xb8, 0xd0, 0x6f, 0x8d, 0x44, 0x39, 0xe4,
0x41, 0xe7, 0x5e, 0xca, 0x0e, 0x47, 0x51, 0xa8, 0x41, 0x14, 0x05, 0xa4, 0x3b, 0xe4, 0x06, 0x2e,
0x80, 0xab, 0xeb, 0xe8, 0x77, 0xa3, 0x27, 0x59, 0x86, 0x14, 0x57, 0x7b, 0x3a, 0x34, 0xcc, 0x0c,
0xa7, 0x09, 0xb9, 0x75, 0xca, 0xed, 0x63, 0x0b, 0x76, 0xb5, 0x95, 0xb4, 0x63, 0x2e, 0xda, 0x91,
0xef, 0x5a, 0x1d, 0x27, 0xd1, 0x9f, 0xc2, 0x84, 0x43, 0x79, 0x5f, 0x03, 0x93, 0xef, 0xda, 0xa2,
0x7d, 0x98, 0x1b, 0x1c, 0x38, 0x49, 0x5f, 0xb2, 0x0d, 0x74, 0x39, 0x8e, 0x2c, 0x16, 0x75, 0xec,
0x54, 0xba, 0x4b, 0xe6, 0x02, 0x3b, 0x3e, 0xe6, 0xb1, 0x15, 0xda, 0x01, 0xd7, 0x37, 0xb0, 0xab,
0x32, 0xa0, 0x9c, 0xa5, 0xf0, 0xfb, 0x76, 0xc0, 0x8b, 0x72, 0x36, 0x80, 0x0c, 0x53, 0xe1, 0x69,
0x97, 0x6c, 0xc0, 0xeb, 0xc5, 0x8a, 0x4e, 0x43, 0x1e, 0x8b, 0xb6, 0xd7, 0xb1, 0x9a, 0x71, 0x14,
0x58, 0x1d, 0x3b, 0xe6, 0x61, 0xa2, 0x3f, 0x8d, 0x29, 0xf8, 0xff, 0x9e, 0x64, 0xb7, 0xc0, 0xea,
0x41, 0x6e, 0x54, 0x8f, 0xa3, 0xe0, 0x00, 0x4d, 0xfa, 0x92, 0x3d, 0x9b, 0x57, 0xbc, 0x71, 0xbc,
0x61, 0x7e, 0xd3, 0x4c, 0xfa, 0x0b, 0x8d, 0xac, 0x04, 0x91, 0x6b, 0x25, 0x5e, 0xc0, 0xad, 0x53,
0x2f, 0x74, 0xa3, 0x53, 0x4b, 0xe8, 0xcf, 0x60, 0xc2, 0x3e, 0xba, 0x92, 0x6c, 0xc5, 0xb4, 0x4f,
0xf7, 0x23, 0xf7, 0xd0, 0x0b, 0xf8, 0x07, 0xc8, 0xc2, 0xe5, 0xbd, 0x18, 0x94, 0x90, 0xa2, 0xf7,
0x2c, 0xc3, 0x79, 0xe6, 0xce, 0x2f, 0xab, 0xa3, 0x5e, 0xcc, 0x21, 0x1f, 0xf4, 0x53, 0x8d, 0xac,
0x67, 0xc7, 0xc4, 0x39, 0x89, 0x41, 0x9b, 0x75, 0x1a, 0x7b, 0x09, 0x17, 0xfa, 0xb3, 0x28, 0xe6,
0xfb, 0x50, 0x7a, 0xd3, 0x0d, 0x9f, 0xf1, 0x1f, 0x20, 0xdd, 0x97, 0xec, 0xb6, 0x72, 0x6a, 0x4a,
0x9c, 0x72, 0x78, 0x76, 0x94, 0xb3, 0xa3, 0xed, 0x98, 0xe3, 0x3c, 0x41, 0x11, 0xcb, 0xf7, 0x76,
0x13, 0x9e, 0x4a, 0xfa, 0xe6, 0xa0, 0x88, 0x65, 0x44, 0x1d, 0xf0, 0xe2, 0xf0, 0xab, 0xa0, 0x61,
0x96, 0x6c, 0xa8, 0x4f, 0x96, 0xf1, 0x09, 0x6b, 0x41, 0x2d, 0xb0, 0xd2, 0xfa, 0xca, 0xb0, 0xbe,
0xde, 0xcc, 0xeb, 0x6b, 0x0d, 0xf8, 0x41, 0x91, 0xc5, 0xae, 0xfe, 0xa8, 0x84, 0x15, 0x99, 0x2d,
0xc3, 0x86, 0x39, 0x64, 0x47, 0x3f, 0xd7, 0xc8, 0x0a, 0x6e, 0x21, 0x7c, 0x01, 0x5b, 0xe9, 0x13,
0x58, 0xaf, 0x60, 0xbc, 0x55, 0x78, 0x41, 0xec, 0x46, 0x9d, 0xae, 0x09, 0xdc, 0x3e, 0x52, 0xb5,
0xfb, 0xd0, 0x83, 0x39, 0x65, 0xb0, 0x2f, 0xd9, 0x56, 0xb1, 0x8d, 0x14, 0x5c, 0x49, 0xa3, 0x48,
0xec, 0xd0, 0xb5, 0x63, 0x17, 0xee, 0xff, 0x99, 0x7c, 0x60, 0x0e, 0x3b, 0xa2, 0x7f, 0x04, 0x39,
0x36, 0x14, 0x50, 0x1e, 0x0a, 0x2f, 0xf1, 0x1e, 0x42, 0x46, 0xf5, 0xe7, 0x30, 0x9d, 0x67, 0xd0,
0x10, 0xee, 0xda, 0x82, 0x37, 0x72, 0xae, 0x8e, 0x0d, 0xa1, 0x53, 0x86, 0xfa, 0x92, 0xad, 0xa7,
0x62, 0xca, 0x38, 0xf4, 0x40, 0x23, 0xb6, 0xa3, 0x10, 0xb4, 0x81, 0x43, 0x41, 0xcc, 0x21, 0x1b,
0x41, 0xff, 0xa0, 0x91, 0xe5, 0x66, 0xe4, 0xfb, 0xd1, 0xa9, 0xf5, 0xf1, 0x49, 0xe8, 0x40, 0x3b,
0x22, 0x74, 0x63, 0xa0, 0xf2, 0x7b, 0x39, 0xf8, 0xae, 0xd8, 0xf3, 0x62, 0x01, 0x2a, 0x3f, 0x2e,
0x43, 0x85, 0xca, 0x21, 0x1c, 0x55, 0x0e, 0xdb, 0x8e, 0x42, 0xa0, 0x72, 0x28, 0x88, 0xb9, 0x94,
0x2a, 0x2a, 0x60, 0xfa, 0x80, 0x2c, 0xc2, 0x8e, 0x1a, 0x54, 0x07, 0xfd, 0x79, 0x94, 0x08, 0x0f,
0xab, 0x05, 0x60, 0x8a, 0x73, 0xdd, 0x97, 0x6c, 0x35, 0xbd, 0xfc, 0x54, 0xd4, 0x30, 0xcb, 0x56,
0xe8, 0x90, 0x87, 0xae, 0xe2, 0xb0, 0xaa, 0x38, 0xe4, 0xa1, 0x3b, 0xc6, 0xa1, 0x8a, 0x82, 0x43,
0x75, 0x0c, 0x45, 0x10, 0x15, 0x9e, 0x41, 0x37, 0x2a, 0xf4, 0xdb, 0xe8, 0x0d, 0x8b, 0x20, 0xc0,
0x3f, 0x42, 0xb4, 0x28, 0x82, 0x03, 0xc8, 0x30, 0x15, 0x1e, 0x9d, 0x80, 0xaa, 0xcc, 0xc9, 0x0b,
0x8a, 0x13, 0x1e, 0xba, 0xc3, 0x4e, 0x0a, 0x08, 0x9c, 0x14, 0x03, 0x68, 0xec, 0x71, 0x3e, 0xdc,
0x7d, 0x09, 0x8f, 0xf5, 0x17, 0xb1, 0x07, 0x5d, 0xcd, 0x4f, 0x1c, 0x5a, 0xd5, 0x91, 0xaa, 0x6d,
0xe5, 0x8d, 0xef, 0xd9, 0x00, 0xec, 0x4b, 0xb6, 0x82, 0xfe, 0x15, 0xcc, 0x30, 0x55, 0x0b, 0x7a,
0x4c, 0x66, 0x63, 0x6e, 0xbb, 0x56, 0x14, 0xfa, 0x5d, 0xfd, 0xcf, 0x75, 0x54, 0xb9, 0x7f, 0x25,
0x19, 0xdd, 0xe3, 0x9d, 0x98, 0x3b, 0x76, 0xc2, 0x5d, 0x93, 0xdb, 0xee, 0x83, 0xd0, 0xef, 0xf6,
0x24, 0xd3, 0x5e, 0x2d, 0xfe, 0x44, 0x89, 0x23, 0x6c, 0xd6, 0x5f, 0x89, 0x02, 0x0f, 0x6e, 0xce,
0xa4, 0x8b, 0x7f, 0xa2, 0x8c, 0xa0, 0xba, 0x66, 0xce, 0xc4, 0x99, 0x03, 0xfa, 0x33, 0xb2, 0x52,
0xea, 0xe0, 0xf1, 0x36, 0xfb, 0x4b, 0x1d, 0x5f, 0x56, 0xef, 0x5d, 0x49, 0xa6, 0x0f, 0x82, 0xee,
0x0f, 0xfa, 0xf0, 0x03, 0x27, 0xc9, 0x43, 0x6f, 0x0e, 0xb7, 0xf1, 0x07, 0x4e, 0xa2, 0x28, 0xd0,
0x35, 0x73, 0xb1, 0x4c, 0xd2, 0x1f, 0x93, 0xe9, 0xb4, 0x7b, 0x11, 0xfa, 0x97, 0x75, 0xac, 0xbc,
0xdf, 0x82, 0x6b, 0x60, 0x10, 0x28, 0xed, 0x4a, 0x45, 0xf9, 0xe3, 0xb2, 0x29, 0x8a, 0xeb, 0xac,
0xdc, 0xea, 0x9a, 0x99, 0xfb, 0xa3, 0xc7, 0x64, 0x11, 0xfb, 0xba, 0xc1, 0xbe, 0xfb, 0x6b, 0x9a,
0xbf, 0xdd, 0x2b, 0xc9, 0x6e, 0x0d, 0x22, 0x34, 0x1c, 0x3b, 0x2c, 0x36, 0x57, 0x1e, 0xe7, 0xd9,
0xa2, 0xab, 0x2b, 0xa8, 0xf2, 0x87, 0x2c, 0x94, 0x38, 0xe3, 0xb3, 0x29, 0x32, 0xa7, 0x2c, 0x37,
0xfd, 0x88, 0x4c, 0xf3, 0x30, 0x89, 0x3d, 0x2e, 0x74, 0x0d, 0xff, 0x56, 0xd0, 0xc7, 0x6c, 0x8a,
0xf7, 0xc2, 0x24, 0xee, 0xd6, 0x5e, 0xcc, 0xff, 0x4d, 0xc8, 0x26, 0x14, 0x3d, 0x2f, 0x8c, 0x71,
0xd9, 0xae, 0xe3, 0x2f, 0x33, 0x37, 0xa0, 0xbf, 0xcb, 0x2e, 0x2f, 0xe1, 0x85, 0x2d, 0x9f, 0x5b,
0xc8, 0x5a, 0x02, 0x1e, 0x7d, 0x93, 0x98, 0xc2, 0x26, 0xf4, 0x45, 0x81, 0x7d, 0xd6, 0x40, 0x1e,
0xa3, 0x34, 0xd4, 0x97, 0xdf, 0x28, 0x55, 0xea, 0xfb, 0x76, 0xde, 0x50, 0x1e, 0x11, 0x63, 0xfc,
0xc0, 0x03, 0x10, 0xac, 0xcc, 0x31, 0x1c, 0x7d, 0x44, 0x16, 0x41, 0x5a, 0x12, 0x25, 0xd0, 0x40,
0x83, 0xa6, 0x29, 0xd4, 0x74, 0x98, 0xf5, 0x9f, 0x87, 0x40, 0x64, 0x6a, 0x9e, 0xcb, 0xd5, 0x14,
0xa0, 0xa2, 0xe3, 0x8d, 0xbb, 0x6f, 0xbd, 0xa9, 0xe8, 0x28, 0xcd, 0x05, 0x05, 0xc0, 0x9b, 0x25,
0xd4, 0xf8, 0xbd, 0x46, 0x96, 0x87, 0xd3, 0x0b, 0xcf, 0x8d, 0x00, 0x5e, 0xe3, 0xd9, 0x3f, 0x73,
0xff, 0x07, 0x6f, 0x0b, 0x04, 0x94, 0x3e, 0x29, 0x71, 0xda, 0xc5, 0x4b, 0x9b, 0x0c, 0x86, 0x66,
0x6a, 0x48, 0xeb, 0xe4, 0x06, 0x3c, 0xdc, 0xbd, 0x04, 0xf3, 0x3b, 0x53, 0xdb, 0xc6, 0xfe, 0x10,
0x91, 0xe2, 0x08, 0xa7, 0xc3, 0xc2, 0xcb, 0x9c, 0x32, 0x36, 0x33, 0xdb, 0xda, 0xfd, 0xaf, 0xbe,
0xde, 0x9c, 0xb8, 0xfc, 0x7a, 0x73, 0xe2, 0xab, 0xab, 0x4d, 0xed, 0xf2, 0x6a, 0x53, 0xfb, 0xf5,
0xe3, 0xcd, 0x89, 0x2f, 0x1e, 0x6f, 0x6a, 0x97, 0x8f, 0x37, 0x27, 0xfe, 0xf5, 0x78, 0x73, 0xe2,
0xc3, 0x97, 0xfe, 0x8b, 0x3f, 0x52, 0xd3, 0x7d, 0x74, 0x74, 0x03, 0xff, 0x50, 0x7d, 0xfd, 0x3f,
0x01, 0x00, 0x00, 0xff, 0xff, 0xe3, 0x79, 0xd7, 0x43, 0x6e, 0x17, 0x00, 0x00,
}
func (m *FolderDeviceConfiguration) Marshal() (dAtA []byte, err error) {
@ -515,14 +511,6 @@ func (m *FolderConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0xc0
}
if m.FSWatcherTimeoutS != 0 {
i -= 8
encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.FSWatcherTimeoutS))))
i--
dAtA[i] = 0x2
i--
dAtA[i] = 0xc1
}
{
size, err := m.XattrFilter.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
@ -1119,9 +1107,6 @@ func (m *FolderConfiguration) ProtoSize() (n int) {
}
l = m.XattrFilter.ProtoSize()
n += 2 + l + sovFolderconfiguration(uint64(l))
if m.FSWatcherTimeoutS != 0 {
n += 10
}
if m.DeprecatedReadOnly {
n += 4
}
@ -2214,17 +2199,6 @@ func (m *FolderConfiguration) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 40:
if wireType != 1 {
return fmt.Errorf("proto: wrong wireType = %d for field FSWatcherTimeoutS", wireType)
}
var v uint64
if (iNdEx + 8) > l {
return io.ErrUnexpectedEOF
}
v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:]))
iNdEx += 8
m.FSWatcherTimeoutS = float64(math.Float64frombits(v))
case 9000:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedReadOnly", wireType)

View File

@ -1,27 +0,0 @@
// Copyright (C) 2024 The Syncthing Authors.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.
package connections
import (
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
)
var (
metricDeviceActiveConnections = promauto.NewGaugeVec(prometheus.GaugeOpts{
Namespace: "syncthing",
Subsystem: "connections",
Name: "active",
Help: "Number of currently active connections, per device. If value is 0, the device is disconnected.",
}, []string{"device"})
)
func registerDeviceMetrics(deviceID string) {
// Register metrics for this device, so that counters & gauges are present even
// when zero.
metricDeviceActiveConnections.WithLabelValues(deviceID)
}

View File

@ -12,7 +12,6 @@ package connections
import (
"context"
"crypto/tls"
"errors"
"net"
"net/url"
"sync"
@ -146,7 +145,7 @@ func (t *quicListener) serve(ctx context.Context) error {
}
session, err := listener.Accept(ctx)
if errors.Is(err, context.Canceled) {
if err == context.Canceled {
return nil
} else if err != nil {
l.Infoln("Listen (BEP/quic): Accepting connection:", err)

View File

@ -846,7 +846,6 @@ func (s *service) CommitConfiguration(from, to config.Configuration) bool {
newDevices := make(map[protocol.DeviceID]bool, len(to.Devices))
for _, dev := range to.Devices {
newDevices[dev.DeviceID] = true
registerDeviceMetrics(dev.DeviceID.String())
}
for _, dev := range from.Devices {
@ -854,7 +853,6 @@ func (s *service) CommitConfiguration(from, to config.Configuration) bool {
warningLimitersMut.Lock()
delete(warningLimiters, dev.DeviceID)
warningLimitersMut.Unlock()
metricDeviceActiveConnections.DeleteLabelValues(dev.DeviceID.String())
}
}
@ -1380,9 +1378,6 @@ func (c *deviceConnectionTracker) accountAddedConnection(conn protocol.Connectio
c.wantConnections[d] = int(h.NumConnections)
l.Debugf("Added connection for %s (now %d), they want %d connections", d.Short(), len(c.connections[d]), h.NumConnections)
// Update active connections metric
metricDeviceActiveConnections.WithLabelValues(d.String()).Inc()
// Close any connections we no longer want to retain.
c.closeWorsePriorityConnectionsLocked(d, conn.Priority()-upgradeThreshold)
}
@ -1404,10 +1399,6 @@ func (c *deviceConnectionTracker) accountRemovedConnection(conn protocol.Connect
delete(c.connections, d)
delete(c.wantConnections, d)
}
// Update active connections metric
metricDeviceActiveConnections.WithLabelValues(d.String()).Dec()
l.Debugf("Removed connection for %s (now %d)", d.Short(), c.connections[d])
}

View File

@ -64,7 +64,7 @@ func OpenLevelDBRO(location string) (Backend, error) {
return newLeveldbBackend(ldb, location), nil
}
// OpenLevelDBMemory returns a new Backend referencing an in-memory database.
// OpenMemory returns a new Backend referencing an in-memory database.
func OpenLevelDBMemory() Backend {
ldb, _ := leveldb.Open(storage.NewMemStorage(), nil)
return newLeveldbBackend(ldb, "")

View File

@ -103,7 +103,6 @@ type keyer interface {
// index IDs
GenerateIndexIDKey(key, device, folder []byte) (indexIDKey, error)
FolderFromIndexIDKey(key []byte) ([]byte, bool)
DeviceFromIndexIDKey(key []byte) ([]byte, bool)
// Mtimes
GenerateMtimesKey(key, folder []byte) (mtimesKey, error)
@ -309,10 +308,6 @@ func (k defaultKeyer) FolderFromIndexIDKey(key []byte) ([]byte, bool) {
return k.folderIdx.Val(binary.BigEndian.Uint32(key[keyPrefixLen+keyDeviceLen:]))
}
func (k defaultKeyer) DeviceFromIndexIDKey(key []byte) ([]byte, bool) {
return k.folderIdx.Val(binary.BigEndian.Uint32(key[keyPrefixLen : keyPrefixLen+keyDeviceLen]))
}
type mtimesKey []byte
func (k defaultKeyer) GenerateMtimesKey(key, folder []byte) (mtimesKey, error) {

View File

@ -665,24 +665,6 @@ func (db *Lowlevel) dropIndexIDs() error {
return t.Commit()
}
// dropOtherDeviceIndexIDs drops all index IDs for devices other than the
// local device. This means we will resend our indexes to all other devices,
// but they don't have to resend to us.
func (db *Lowlevel) dropOtherDeviceIndexIDs() error {
t, err := db.newReadWriteTransaction()
if err != nil {
return err
}
defer t.close()
if err := t.deleteKeyPrefixMatching([]byte{KeyTypeIndexID}, func(key []byte) bool {
dev, _ := t.keyer.DeviceFromIndexIDKey(key)
return !bytes.Equal(dev, protocol.LocalDeviceID[:])
}); err != nil {
return err
}
return t.Commit()
}
func (db *Lowlevel) dropMtimes(folder []byte) error {
key, err := db.keyer.GenerateMtimesKey(nil, folder)
if err != nil {

View File

@ -143,7 +143,7 @@ func NewFolderStatisticsNamespace(db backend.Backend, folder string) *Namespaced
return NewNamespacedKV(db, string(KeyTypeFolderStatistic)+folder)
}
// NewMiscDataNamespace creates a KV namespace for miscellaneous metadata.
// NewMiscDateNamespace creates a KV namespace for miscellaneous metadata.
func NewMiscDataNamespace(db backend.Backend) *NamespacedKV {
return NewNamespacedKV(db, string(KeyTypeMiscData))
}

View File

@ -20,7 +20,7 @@ import (
// do not put restrictions on downgrades (e.g. for repairs after a bugfix).
const (
dbVersion = 14
dbMigrationVersion = 20
dbMigrationVersion = 19
dbMinSyncthingVersion = "v1.9.0"
)
@ -102,8 +102,7 @@ func (db *schemaUpdater) updateSchema() error {
{14, 14, "v1.9.0", db.updateSchemaTo14},
{14, 16, "v1.9.0", db.checkRepairMigration},
{14, 17, "v1.9.0", db.migration17},
{14, 19, "v1.9.0", db.dropAllIndexIDsMigration},
{14, 20, "v1.9.0", db.dropOutgoingIndexIDsMigration},
{14, 19, "v1.9.0", db.dropIndexIDsMigration},
}
for _, m := range migrations {
@ -131,13 +130,13 @@ func (db *schemaUpdater) updateSchema() error {
}
func (*schemaUpdater) writeVersions(m migration, miscDB *NamespacedKV) error {
if err := miscDB.PutInt64("dbVersion", m.schemaVersion); err != nil {
if err := miscDB.PutInt64("dbVersion", m.schemaVersion); err != nil && err == nil {
return err
}
if err := miscDB.PutString("dbMinSyncthingVersion", m.minSyncthingVersion); err != nil {
if err := miscDB.PutString("dbMinSyncthingVersion", m.minSyncthingVersion); err != nil && err == nil {
return err
}
if err := miscDB.PutInt64("dbMigrationVersion", m.migrationVersion); err != nil {
if err := miscDB.PutInt64("dbMigrationVersion", m.migrationVersion); err != nil && err == nil {
return err
}
return nil
@ -832,14 +831,10 @@ func (db *schemaUpdater) migration17(prev int) error {
return nil
}
func (db *schemaUpdater) dropAllIndexIDsMigration(_ int) error {
func (db *schemaUpdater) dropIndexIDsMigration(_ int) error {
return db.dropIndexIDs()
}
func (db *schemaUpdater) dropOutgoingIndexIDsMigration(_ int) error {
return db.dropOtherDeviceIndexIDs()
}
func rewriteGlobals(t readWriteTransaction) error {
it, err := t.NewPrefixIterator([]byte{KeyTypeGlobal})
if err != nil {

View File

@ -168,10 +168,6 @@ type Snapshot struct {
func (s *FileSet) Snapshot() (*Snapshot, error) {
opStr := fmt.Sprintf("%s Snapshot()", s.folder)
l.Debugf(opStr)
s.updateMutex.Lock()
defer s.updateMutex.Unlock()
t, err := s.db.newReadOnlyTransaction()
if err != nil {
s.db.handleFailure(err)

View File

@ -388,7 +388,7 @@ func (vl *VersionList) findGlobal() int {
return 0
}
// findDevice returns whether the device is in InvalidVersions or Versions and
// findDevices returns whether the device is in InvalidVersions or Versions and
// in InvalidDevices or Devices (true for invalid), the positions in the version
// and device slices and whether it has been found at all.
func (vl *VersionList) findDevice(device []byte) (bool, int, int, bool) {

View File

@ -12,7 +12,7 @@ package fs
import "github.com/syncthing/notify"
const (
subEventMask = notify.Create | notify.Remove | notify.Write | notify.Rename | notify.FSEventsInodeMetaMod | notify.FSEventsXattrMod
subEventMask = notify.Create | notify.Remove | notify.Write | notify.Rename | notify.FSEventsInodeMetaMod
// FSEventsChangeOwner fires on permission change
permEventMask = notify.FSEventsChangeOwner
rmEventMask = notify.Remove | notify.Rename

View File

@ -1,124 +0,0 @@
// Copyright (C) 2024 The Syncthing Authors.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.
// Package geoip provides an automatically updating MaxMind GeoIP2 database
// provider.
package geoip
import (
"context"
"errors"
"fmt"
"net"
"os"
"path/filepath"
"sync"
"time"
"github.com/maxmind/geoipupdate/v6/pkg/geoipupdate"
"github.com/oschwald/geoip2-golang"
)
type Provider struct {
edition string
accountID int
licenseKey string
refreshInterval time.Duration
directory string
mut sync.Mutex
currentDBDir string
db *geoip2.Reader
}
// NewGeoLite2CityProvider returns a new GeoIP2 database provider for the
// GeoLite2-City database. The database will be stored in the given
// directory (which should exist) and refreshed every 7 days.
func NewGeoLite2CityProvider(ctx context.Context, accountID int, licenseKey string, directory string) (*Provider, error) {
p := &Provider{
edition: "GeoLite2-City",
accountID: accountID,
licenseKey: licenseKey,
refreshInterval: 7 * 24 * time.Hour,
directory: directory,
}
if err := p.download(ctx); err != nil {
return nil, err
}
return p, nil
}
func (p *Provider) City(ip net.IP) (*geoip2.City, error) {
p.mut.Lock()
defer p.mut.Unlock()
if p.db == nil {
return nil, errors.New("database not open")
}
return p.db.City(ip)
}
// Serve downloads the GeoIP2 database and keeps it up to date. It will return
// when the context is canceled.
func (p *Provider) Serve(ctx context.Context) error {
for {
select {
case <-ctx.Done():
return ctx.Err()
case <-time.After(p.refreshInterval):
if err := p.download(ctx); err != nil {
return err
}
}
}
}
func (p *Provider) download(ctx context.Context) error {
newSubdir, err := os.MkdirTemp(p.directory, "geoipupdate")
if err != nil {
return fmt.Errorf("download: %w", err)
}
cfg := &geoipupdate.Config{
URL: "https://updates.maxmind.com",
DatabaseDirectory: newSubdir,
LockFile: filepath.Join(newSubdir, "geoipupdate.lock"),
RetryFor: 5 * time.Minute,
Parallelism: 1,
AccountID: p.accountID,
LicenseKey: p.licenseKey,
EditionIDs: []string{p.edition},
}
if err := geoipupdate.NewClient(cfg).Run(ctx); err != nil {
return fmt.Errorf("download: %w", err)
}
dbPath := filepath.Join(newSubdir, p.edition+".mmdb")
db, err := geoip2.Open(dbPath)
if err != nil {
return fmt.Errorf("open downloaded db: %w", err)
}
p.mut.Lock()
prevDBDir := p.currentDBDir
if p.db != nil {
p.db.Close()
}
p.currentDBDir = newSubdir
p.db = db
p.mut.Unlock()
if prevDBDir != "" {
_ = os.RemoveAll(p.currentDBDir)
}
return nil
}

View File

@ -1,36 +0,0 @@
// Copyright (C) 2024 The Syncthing Authors.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.
package geoip
import (
"context"
"net"
"os"
"strconv"
"testing"
)
func TestDownloadAndOpen(t *testing.T) {
acctID, _ := strconv.Atoi(os.Getenv("GEOIP_ACCOUNT_ID"))
if acctID == 0 {
t.Skip("No account ID set")
}
license := os.Getenv("GEOIP_LICENSE_KEY")
if license == "" {
t.Skip("No license key set")
}
p, err := NewGeoLite2CityProvider(context.Background(), acctID, license, t.TempDir())
if err != nil {
t.Fatal(err)
}
_, err = p.City(net.ParseIP("8.8.8.8"))
if err != nil {
t.Fatal(err)
}
}

View File

@ -464,9 +464,9 @@ func (m *model) removeFolder(cfg config.FolderConfiguration) {
if isPathUnique {
// Remove (if empty and removable) or move away (if non-empty or
// otherwise not removable) Syncthing-specific marker files.
if err := cfg.RemoveMarker(); err != nil && !errors.Is(err, os.ErrNotExist) {
moved := config.DefaultMarkerName + time.Now().Format(".removed-20060102-150405")
fs := cfg.Filesystem(nil)
if err := fs.Remove(config.DefaultMarkerName); err != nil {
moved := config.DefaultMarkerName + time.Now().Format(".removed-20060102-150405")
_ = fs.Rename(config.DefaultMarkerName, moved)
}
}

View File

@ -233,8 +233,9 @@ func (s *Service) verifyExistingLocked(ctx context.Context, mapping *Mapping, na
default:
}
if nat, ok := nats[id]; !ok || len(extAddrs) == 0 {
// Delete addresses for NATDevice's that do not exist anymore
nat, ok := nats[id]
if !ok {
mapping.removeAddressLocked(id)
change = true
continue

View File

@ -58,6 +58,5 @@ func registerDeviceMetrics(deviceID string) {
metricDeviceSentUncompressedBytes.WithLabelValues(deviceID)
metricDeviceSentMessages.WithLabelValues(deviceID)
metricDeviceRecvBytes.WithLabelValues(deviceID)
metricDeviceRecvDecompressedBytes.WithLabelValues(deviceID)
metricDeviceRecvMessages.WithLabelValues(deviceID)
}

View File

@ -437,14 +437,7 @@ func (a *aggregator) CommitConfiguration(_, to config.Configuration) bool {
func (a *aggregator) updateConfig(folderCfg config.FolderConfiguration) {
a.notifyDelay = time.Duration(folderCfg.FSWatcherDelayS) * time.Second
if maxDelay := folderCfg.FSWatcherTimeoutS; maxDelay > 0 {
// FSWatcherTimeoutS is set explicitly so use that, but it also
// can't be lower than FSWatcherDelayS
a.notifyTimeout = time.Duration(max(maxDelay, folderCfg.FSWatcherDelayS)) * time.Second
} else {
// Use the default FSWatcherTimeoutS calculation
a.notifyTimeout = notifyTimeout(folderCfg.FSWatcherDelayS)
}
a.folderCfg = folderCfg
}
@ -468,8 +461,8 @@ func notifyTimeout(eventDelayS float64) time.Duration {
shortDelayS = 10
shortDelayMultiplicator = 6
longDelayS = 60
longDelayTimeout = time.Minute
)
longDelayTimeout := time.Duration(1) * time.Minute
if eventDelayS < shortDelayS {
return time.Duration(eventDelayS*shortDelayMultiplicator) * time.Second
}

View File

@ -27,18 +27,20 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "STDISCOSRV" "1" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "STDISCOSRV" "1" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
stdiscosrv \- Syncthing Discovery Server
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
stdiscosrv [\-cert=<file>] [\-db\-dir=<string>] [\-debug] [\-http] [\-key=<string>]
[\-listen=<address>] [\-metrics\-listen=<address>]
[\-replicate=<peers>] [\-replication\-listen=<address>]
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SH DESCRIPTION
@ -85,7 +87,7 @@ Prometheus compatible metrics endpoint listen address (default disabled).
.INDENT 0.0
.TP
.B \-replicate=<peers>
Replication peers, \X'tty: link mailto:id@address'\fI\%id@address\fP <\fBid@address\fP>\X'tty: link', comma separated
Replication peers, \fI\%id@address\fP <\fBid@address\fP>, comma separated
.UNINDENT
.INDENT 0.0
.TP
@ -112,10 +114,10 @@ entry from the list.
.SS Description
.sp
This guide assumes that you have already set up Syncthing. If you
havent yet, head over to \X'tty: link #getting-started'\fI\%Getting Started\fP\X'tty: link' first.
havent yet, head over to \fI\%Getting Started\fP first.
.SS Installing
.sp
Go to \X'tty: link https://github.com/syncthing/discosrv/releases'\fI\%releases\fP <\fBhttps://github.com/syncthing/discosrv/releases\fP>\X'tty: link' and
Go to \fI\%releases\fP <\fBhttps://github.com/syncthing/discosrv/releases\fP> and
download the file appropriate for your operating system. Unpacking it will
yield a binary called \fBstdiscosrv\fP (or \fBstdiscosrv.exe\fP on Windows).
Start this in whatever way you are most comfortable with; double clicking
@ -125,7 +127,7 @@ given flags to the contrary.
.sp
The discovery server can also be obtained through apt, the Debian/Ubuntu package
manager. Recent releases can be found at syncthings
\X'tty: link https://apt.syncthing.net/'\fI\%apt repository\fP <\fBhttps://apt.syncthing.net/\fP>\X'tty: link'\&. The name of the package is
\fI\%apt repository\fP <\fBhttps://apt.syncthing.net/\fP>\&. The name of the package is
syncthing\-discosrv.
.SS Configuring
.sp
@ -162,10 +164,12 @@ the certificate and key at startup. This isnt necessary with the \fBhttp\fP f
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
$ stdiscosrv \-cert=/path/to/cert.pem \-key=/path/to/key.pem
Server device ID is 7DDRT7J\-UICR4PM\-PBIZYL3\-MZOJ7X7\-EX56JP6\-IK6HHMW\-S7EK32W\-G3EUPQA
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -175,9 +179,11 @@ the clients in the discovery server URL:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
https://disco.example.com:8443/?id=7DDRT7J\-UICR4PM\-PBIZYL3\-MZOJ7X7\-EX56JP6\-IK6HHMW\-S7EK32W\-G3EUPQA
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -185,9 +191,11 @@ Otherwise, the URL will be:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
https://disco.example.com:8443/
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Replication
@ -202,8 +210,8 @@ shared with the main discovery API. If the \fB\-http\fP mode is used the
certificate is not used for client requests but only for replication
connections.
.sp
Authentication of replication connections is done using \X'tty: link https://docs.syncthing.net/dev/device-ids.html#id1'\fI\%Syncthing\-style
device IDs\fP <\fBhttps://docs.syncthing.net/dev/device-ids.html#id1\fP>\X'tty: link' only \- CA
Authentication of replication connections is done using \fI\%Syncthing\-style
device IDs\fP <\fBhttps://docs.syncthing.net/dev/device-ids.html#id1\fP> only \- CA
verification is not available. The device IDs in question are those printed
by the discovery server on startup.
.sp
@ -227,9 +235,11 @@ On server one:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
$ stdiscosrv \-replicate=MRI...7OK@192.0.2.55:19200 <other options>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -237,9 +247,11 @@ On server two:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
$ stdiscosrv \-replicate=I6K...H76@192.0.2.20:19200 <other options>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -254,9 +266,11 @@ device ID without “@ip:port” address:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
$ stdiscosrv \-replicate=I6K...H76 <other options>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -269,7 +283,7 @@ Syncthing towards this name. The same certificate must be used on both
discovery servers.
.SS Reverse Proxy Setup
.sp
Added in version 1.8.0: A new “X\-Client\-Port” HTTP header was added.
New in version 1.8.0: A new “X\-Client\-Port” HTTP header was added.
.sp
The discovery server can be run behind an SSL\-secured reverse proxy. This
@ -317,22 +331,25 @@ listed above:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
proxy_set_header X\-Forwarded\-For $proxy_add_x_forwarded_for;
proxy_set_header X\-Client\-Port $remote_port;
proxy_set_header X\-SSL\-Cert $ssl_client_cert;
ssl_verify_client optional_no_ca;
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
The following is a complete example Nginx configuration file. With this setup,
clients can use \X'tty: link https://discovery.example.com'\fI\%https://discovery.example.com\fP\X'tty: link' as the discovery server URL in
clients can use \fI\%https://discovery.example.com\fP as the discovery server URL in
the Syncthing settings.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
# HTTP 1.1 support
proxy_http_version 1.1;
proxy_buffering off;
@ -387,23 +404,26 @@ server {
proxy_pass http://discovery.example.com;
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
An example of automating the SSL certificates and reverse\-proxying the Discovery
Server and Syncthing using Nginx, \X'tty: link https://letsencrypt.org/'\fI\%Lets Encrypt\fP <\fBhttps://letsencrypt.org/\fP>\X'tty: link' and Docker can be found \X'tty: link https://forum.syncthing.net/t/docker-syncthing-and-syncthing-discovery-behind-nginx-reverse-proxy-with-lets-encrypt/6880'\fI\%here\fP <\fBhttps://forum.syncthing.net/t/docker-syncthing-and-syncthing-discovery-behind-nginx-reverse-proxy-with-lets-encrypt/6880\fP>\X'tty: link'\&.
Server and Syncthing using Nginx, \fI\%Lets Encrypt\fP <\fBhttps://letsencrypt.org/\fP> and Docker can be found \fI\%here\fP <\fBhttps://forum.syncthing.net/t/docker-syncthing-and-syncthing-discovery-behind-nginx-reverse-proxy-with-lets-encrypt/6880\fP>\&.
.SS Apache
.sp
The following lines must be added to the configuration:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
SSLProxyEngine On
SSLVerifyClient optional_no_ca
RequestHeader set X\-SSL\-Cert \(dq%{SSL_CLIENT_CERT}s\(dq
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -415,9 +435,11 @@ configuration:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
RemoteIPHeader X\-Forwarded\-For
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Caddy
@ -426,7 +448,8 @@ The following lines must be added to the Caddyfile:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
discovery.example.com {
reverse_proxy 192.0.2.1:8443 {
header_up X\-Forwarded\-For {http.request.remote.host}
@ -440,20 +463,23 @@ The following lines must be added to the Caddyfile:
}
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
For more details, see also the recommendations in the
\X'tty: link https://docs.syncthing.net/users/reverseproxy.html'\fI\%Reverse Proxy Setup\fP <\fBhttps://docs.syncthing.net/users/reverseproxy.html\fP>\X'tty: link'
\fI\%Reverse Proxy Setup\fP <\fBhttps://docs.syncthing.net/users/reverseproxy.html\fP>
page. Note that that page is directed at setting up a proxy for the
Syncthing web UI. You should do the proper path and port adjustments to proxying
the discovery server and your particular setup.

View File

@ -27,20 +27,22 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "STRELAYSRV" "1" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "STRELAYSRV" "1" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
strelaysrv \- Syncthing Relay Server
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
strelaysrv [\-debug] [\-ext\-address=<address>] [\-global\-rate=<bytes/s>] [\-keys=<dir>] [\-listen=<listen addr>]
[\-message\-timeout=<duration>] [\-nat] [\-nat\-lease=<duration>] [\-nat\-renewal=<duration>]
[\-nat\-timeout=<duration>] [\-network\-timeout=<duration>] [\-per\-session\-rate=<bytes/s>]
[\-ping\-interval=<duration>] [\-pools=<pool addresses>] [\-pprof] [\-protocol=<string>]
[\-provided\-by=<string>] [\-status\-srv=<listen addr>] [\-token=<string>] [\-version]
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SH DESCRIPTION
@ -48,7 +50,7 @@ strelaysrv [\-debug] [\-ext\-address=<address>] [\-global\-rate=<bytes/s>] [\-ke
Syncthing relies on a network of community\-contributed relay servers. Anyone
can run a relay server, and it will automatically join the relay pool and be
available to Syncthing users. The current list of relays can be found at
\X'tty: link https://relays.syncthing.net/'\fI\%https://relays.syncthing.net/\fP\X'tty: link'\&.
\fI\%https://relays.syncthing.net/\fP\&.
.SH OPTIONS
.INDENT 0.0
.TP
@ -125,7 +127,7 @@ How often pings are sent (default 1m0s).
.TP
.B \-pools=<pool addresses>
Comma separated list of relay pool addresses to join (default
\X'tty: link https://relays.syncthing.net/endpoint'\fI\%https://relays.syncthing.net/endpoint\fP\X'tty: link'”). Blank to disable announcement to
\fI\%https://relays.syncthing.net/endpoint\fP”). Blank to disable announcement to
a pool, thereby remaining a private relay.
.UNINDENT
.INDENT 0.0
@ -161,7 +163,7 @@ Show version
.UNINDENT
.SS Installing
.sp
Go to \X'tty: link https://github.com/syncthing/relaysrv/releases'\fI\%releases\fP <\fBhttps://github.com/syncthing/relaysrv/releases\fP>\X'tty: link' and
Go to \fI\%releases\fP <\fBhttps://github.com/syncthing/relaysrv/releases\fP> and
download the file appropriate for your operating system. Unpacking it will
yield a binary called \fBstrelaysrv\fP (or \fBstrelaysrv.exe\fP on Windows).
Start this in whatever way you are most comfortable with; double clicking
@ -173,7 +175,7 @@ The startup message prints instructions on how to change this.
.sp
The relay server can also be obtained through apt, the Debian/Ubuntu package
manager. Recent releases can be found at syncthings
\X'tty: link https://apt.syncthing.net/'\fI\%apt repository\fP <\fBhttps://apt.syncthing.net/\fP>\X'tty: link'\&. The name of the package is
\fI\%apt repository\fP <\fBhttps://apt.syncthing.net/\fP>\&. The name of the package is
syncthing\-relaysrv.
.SH SETTING UP
.sp
@ -187,12 +189,14 @@ system:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
$ sudo useradd strelaysrv
$ sudo mkdir /etc/strelaysrv
$ sudo chown strelaysrv /etc/strelaysrv
$ sudo \-u strelaysrv /usr/local/bin/strelaysrv \-keys /etc/strelaysrv
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -208,9 +212,11 @@ Syncthing can be configured to use specific relay servers (exclusively of the pu
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
relay://<host name|IP>[:port]/?id=<relay device ID>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -218,9 +224,11 @@ For example:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
relay://private\-relay\-1.example.com:443/?id=ITZRNXE\-YNROGBZ\-HXTH5P7\-VK5NYE5\-QHRQGE2\-7JQ6VNJ\-KZUEDIU\-5PPR5AM
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -238,9 +246,11 @@ to forward traffic from port 443 to port 22067, for example:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
iptables \-t nat \-A PREROUTING \-p tcp \-\-dport 443 \-j REDIRECT \-\-to\-port 22067
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -248,7 +258,8 @@ Or, if youre using \fBufw\fP, add the following to \fB/etc/ufw/before.rules\f
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
@ -256,7 +267,8 @@ Or, if youre using \fBufw\fP, add the following to \fB/etc/ufw/before.rules\f
\-A PREROUTING \-p tcp \-\-dport 443 \-j REDIRECT \-\-to\-port 22067
COMMIT
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -265,12 +277,12 @@ You will need to start \fBstrelaysrv\fP with \fB\-ext\-address \(dq:443\(dq\fP\&
on port 22067. You will also need to let both port 443 and 22067 through your
firewall.
.sp
Another option is \X'tty: link https://wiki.apache.org/httpd/NonRootPortBinding'\fI\%described here\fP <\fBhttps://wiki.apache.org/httpd/NonRootPortBinding\fP>\X'tty: link',
Another option is \fI\%described here\fP <\fBhttps://wiki.apache.org/httpd/NonRootPortBinding\fP>,
although your mileage may vary.
.SH FIREWALL CONSIDERATIONS
.sp
The relay server listens on two ports by default. One for data connections and the other
for providing public statistics at \X'tty: link https://relays.syncthing.net/'\fI\%https://relays.syncthing.net/\fP\X'tty: link'\&. The firewall, such as
for providing public statistics at \fI\%https://relays.syncthing.net/\fP\&. The firewall, such as
\fBiptables\fP, must permit incoming TCP connections to the following ports:
.INDENT 0.0
.IP \(bu 2
@ -283,17 +295,19 @@ Runtime \fBiptables\fP rules to allow access to the default ports:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
iptables \-I INPUT \-p tcp \-\-dport 22067 \-j ACCEPT
iptables \-I INPUT \-p tcp \-\-dport 22070 \-j ACCEPT
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Please consult Linux distribution documentation to persist firewall rules.
.SH ACCESS CONTROL FOR PRIVATE RELAYS
.sp
Added in version 1.22.1.
New in version 1.22.1.
.sp
Private relays can be configured to only accept connections from peers in possession of a shared secret.
@ -305,9 +319,11 @@ Then configure your Syncthing devices to send the token when joining the relay:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
relay://<host name|IP>[:port]/?id=<relay device ID>&token=mySecretToken
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SH SEE ALSO

View File

@ -1,4 +1,3 @@
'\" t
.\" Man page generated from reStructuredText.
.
.
@ -28,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-BEP" "7" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-BEP" "7" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-bep \- Block Exchange Protocol v1
.SH INTRODUCTION AND DEFINITIONS
@ -49,7 +48,7 @@ for the last block which may be smaller.
.sp
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”,
“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this
document are to be interpreted as described in \X'tty: link https://datatracker.ietf.org/doc/html/rfc2119.html'\fI\%RFC 2119\fP <\fBhttps://datatracker.ietf.org/doc/html/rfc2119.html\fP>\X'tty: link'\&.
document are to be interpreted as described in \fI\%RFC 2119\fP <\fBhttps://datatracker.ietf.org/doc/html/rfc2119.html\fP>\&.
.SH TRANSPORT AND AUTHENTICATION
.sp
BEP is deployed as the highest level in a protocol stack, with the lower
@ -57,7 +56,8 @@ level protocols providing encryption and authentication.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
| Block Exchange Protocol |
|\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-|
@ -66,7 +66,8 @@ level protocols providing encryption and authentication.
| Reliable Transport |
|\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-|
v ... v
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -128,7 +129,8 @@ followed by the contents of the Hello message itself.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
@ -141,7 +143,8 @@ followed by the contents of the Hello message itself.
\e Hello \e
/ /
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -149,13 +152,15 @@ The Hello message itself is in protocol buffer format with the following schema:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
message Hello {
string device_name = 1;
string client_name = 2;
string client_version = 3;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Fields (Hello message)
@ -167,8 +172,8 @@ The \fBclient_name\fP and \fBclient_version\fP identifies the implementation. Th
values SHOULD be simple strings identifying the implementation name, as a
user would expect to see it, and the version string in the same manner. An
example client name is “syncthing” and an example client version is “v0.7.2”.
The client version field SHOULD follow the patterns laid out in the \X'tty: link https://semver.org/'\fI\%Semantic
Versioning\fP <\fBhttps://semver.org/\fP>\X'tty: link' standard.
The client version field SHOULD follow the patterns laid out in the \fI\%Semantic
Versioning\fP <\fBhttps://semver.org/\fP> standard.
.sp
Immediately after exchanging Hello messages, the connection MUST be dropped
if the remote device does not pass authentication.
@ -188,7 +193,8 @@ A \fBMessage\fP
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
@ -205,7 +211,8 @@ A \fBMessage\fP
\e Message \e
/ /
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -221,7 +228,8 @@ As always, the length words are in network byte order (big endian).
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
message Header {
MessageType type = 1;
MessageCompression compression = 2;
@ -242,7 +250,8 @@ enum MessageCompression {
NONE = 0;
LZ4 = 1;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -265,7 +274,8 @@ initial exchange.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
message ClusterConfig {
repeated Folder folders = 1;
}
@ -300,7 +310,8 @@ enum Compression {
NEVER = 1;
ALWAYS = 2;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Fields (Cluster Config Message)
@ -378,7 +389,7 @@ The \fBencryption_password_token\fP field contains a token derived from the pass
used to encrypt data sent to this device. If the device is the same as the
device sending the message, it signifies that the device itself has encrypted
data that was encrypted with the given token. It is empty or missing if there is
no encryption. See \X'tty: link #untrusted'\fI\%Untrusted Device Encryption\fP\X'tty: link' for details on the encryption scheme.
no encryption. See \fI\%Untrusted Device Encryption\fP for details on the encryption scheme.
.SS Index and Index Update
.sp
The Index and Index Update messages define the contents of the senders
@ -395,7 +406,8 @@ although this is not guaranteed to be the case in the future.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
message Index {
string folder = 1;
repeated FileInfo files = 2;
@ -448,7 +460,8 @@ message Counter {
uint64 id = 1;
uint64 value = 2;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Fields (Index Message)
@ -531,7 +544,8 @@ corresponding to a part of a certain file in the peers folder.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
message Request {
int32 id = 1;
string folder = 2;
@ -541,7 +555,8 @@ message Request {
bytes hash = 6;
bool from_temporary = 7;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Fields
@ -571,7 +586,8 @@ The Response message is sent in response to a Request message.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
message Response {
int32 id = 1;
bytes data = 2;
@ -584,7 +600,8 @@ enum ErrorCode {
NO_SUCH_FILE = 2;
INVALID_FILE = 3;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Fields
@ -625,7 +642,8 @@ contain zero or more FileDownloadProgressUpdate messages.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
message DownloadProgress {
string folder = 1;
repeated FileDownloadProgressUpdate updates = 2;
@ -642,7 +660,8 @@ enum FileDownloadProgressUpdateType {
APPEND = 0;
FORGET = 1;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Fields (DownloadProgress Message)
@ -702,10 +721,12 @@ other message has been sent in the preceding 90 seconds.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
message Ping {
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Close
@ -717,11 +738,13 @@ further messages.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
message Close {
string reason = 1;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Fields
@ -736,13 +759,15 @@ directions.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
+\-\-\-\-\-\-\-\-\-\-\-\-+ Updates /\-\-\-\-\-\-\-\-\-\e
| | \-\-\-\-\-\-\-\-\-\-\-> / \e
| Device | | Cluster |
| | <\-\-\-\-\-\-\-\-\-\-\- \e /
+\-\-\-\-\-\-\-\-\-\-\-\-+ Updates \e\-\-\-\-\-\-\-\-\-/
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Send Only
@ -752,13 +777,15 @@ publishes changes of its local folder to the cluster as usual.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
+\-\-\-\-\-\-\-\-\-\-\-\-+ Updates /\-\-\-\-\-\-\-\-\-\e
| | \-\-\-\-\-\-\-\-\-\-\-> / \e
| Device | | Cluster |
| | \e /
+\-\-\-\-\-\-\-\-\-\-\-\-+ \e\-\-\-\-\-\-\-\-\-/
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Receive Only
@ -768,13 +795,15 @@ accepts changes to its local folder from the cluster as usual.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
+\-\-\-\-\-\-\-\-\-\-\-\-+ Updates /\-\-\-\-\-\-\-\-\-\e
| | <\-\-\-\-\-\-\-\-\-\-\- / \e
| Device | | Cluster |
| | \e /
+\-\-\-\-\-\-\-\-\-\-\-\-+ \e\-\-\-\-\-\-\-\-\-/
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SH DELTA INDEX EXCHANGE
@ -849,8 +878,9 @@ results in fewer than 2000 blocks, or the maximum block size for larger
files. This rule results in the following table of block sizes per file
size:
.TS
box center;
l|l.
center;
|l|l|.
_
T{
File Size
T} T{
@ -904,6 +934,7 @@ T{
T} T{
16 MiB
T}
_
.TE
.sp
An implementation MAY deviate from the block size rule when there is good
@ -919,8 +950,9 @@ allowed. The block size used MUST be exactly one of the power\-of\-two block
sizes listed in the table above.
.SH EXAMPLE EXCHANGE
.TS
box center;
l|l|l.
center;
|l|l|l|.
_
T{
#
T} T{
@ -1042,6 +1074,7 @@ T} T{
Ping\->
T} T{
T}
_
.TE
.sp
The connection is established and at 1. both peers send ClusterConfiguration
@ -1056,8 +1089,9 @@ the ping timer on device B expires and a Ping message is sent. The same
process occurs for device A at 15.
.SH EXAMPLES OF STRONG CIPHER SUITES
.TS
box center;
l|l|l.
center;
|l|l|l|.
_
T{
ID
T} T{
@ -1129,6 +1163,7 @@ ECDHE\-RSA\-AES128\-SHA256
T} T{
TLSv1.2 ECDH RSA AES(128) SHA256
T}
_
.TE
.SH AUTHOR
The Syncthing Authors

View File

@ -27,19 +27,21 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-CONFIG" "5" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-CONFIG" "5" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-config \- Syncthing Configuration
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
$XDG_STATE_HOME/syncthing
$HOME/.local/state/syncthing
$HOME/Library/Application Support/Syncthing
%LOCALAPPDATA%\eSyncthing
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SH DESCRIPTION
@ -54,7 +56,7 @@ installations may still use these directories instead of the newer
defaults.
.sp
Added in version 1.5.0: Database and config can now be set separately. Previously the database was
New in version 1.5.0: Database and config can now be set separately. Previously the database was
always located in the same directory as the config.
.sp
@ -117,7 +119,8 @@ may no longer correspond to the defaults.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<configuration version=\(dq37\(dq>
<folder id=\(dqdefault\(dq label=\(dqDefault Folder\(dq path=\(dq/Users/jb/Sync/\(dq type=\(dqsendreceive\(dq rescanIntervalS=\(dq3600\(dq fsWatcherEnabled=\(dqtrue\(dq fsWatcherDelayS=\(dq10\(dq ignorePerms=\(dqfalse\(dq autoNormalize=\(dqtrue\(dq>
<filesystemType>basic</filesystemType>
@ -274,14 +277,16 @@ may no longer correspond to the defaults.
</device>
</defaults>
</configuration>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SH CONFIGURATION ELEMENT
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<configuration version=\(dq37\(dq>
<folder></folder>
<device></device>
@ -291,7 +296,8 @@ may no longer correspond to the defaults.
<remoteIgnoredDevice></remoteIgnoredDevice>
<defaults></defaults>
</configuration>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -316,7 +322,8 @@ GUI.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<folder id=\(dqdefault\(dq label=\(dqDefault Folder\(dq path=\(dq/Users/jb/Sync/\(dq type=\(dqsendreceive\(dq rescanIntervalS=\(dq3600\(dq fsWatcherEnabled=\(dqtrue\(dq fsWatcherDelayS=\(dq10\(dq ignorePerms=\(dqfalse\(dq autoNormalize=\(dqtrue\(dq>
<filesystemType>basic</filesystemType>
<device id=\(dqS7UKX27\-GI7ZTXS\-GC6RKUA\-7AJGZ44\-C6NAYEB\-HSKTJQK\-KJHU2NO\-CWV7EQW\(dq introducedBy=\(dq\(dq>
@ -354,7 +361,8 @@ GUI.
<syncXattrs>false</syncXattrs>
<sendXattrs>false</sendXattrs>
</folder>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -595,7 +603,7 @@ to \fB\-1\fP to always use weak hash. Default is \fB25\fP\&.
.TP
.B markerName
Name of a directory or file in the folder root to be used as
\X'tty: link #marker-faq'\fI\%How do I serve a folder from a read only filesystem?\fP\X'tty: link'\&. Default is \fB\&.stfolder\fP\&.
\fI\%How do I serve a folder from a read only filesystem?\fP\&. Default is \fB\&.stfolder\fP\&.
.UNINDENT
.INDENT 0.0
.TP
@ -707,7 +715,8 @@ devices when this is set to \fBtrue\fP\&. See
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<device id=\(dqS7UKX27\-GI7ZTXS\-GC6RKUA\-7AJGZ44\-C6NAYEB\-HSKTJQK\-KJHU2NO\-CWV7EQW\(dq name=\(dqsyno\(dq compression=\(dqmetadata\(dq introducer=\(dqfalse\(dq skipIntroductionRemovals=\(dqfalse\(dq introducedBy=\(dq2CYF2WQ\-AKZO2QZ\-JAKWLYD\-AGHMQUM\-BGXUOIS\-GYILW34\-HJG3DUK\-LRRYQAR\(dq>
<address>dynamic</address>
<paused>false</paused>
@ -732,7 +741,8 @@ devices when this is set to \fBtrue\fP\&. See
<remoteGUIPort>8384</remoteGUIPort>
<numConnections>0</numConnections>
</device>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -744,7 +754,7 @@ element:
.INDENT 0.0
.TP
.B id (mandatory)
The \X'tty: link #device-ids'\fI\%device ID\fP\X'tty: link'\&.
The \fI\%device ID\fP\&.
.UNINDENT
.INDENT 0.0
.TP
@ -845,13 +855,15 @@ for example:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<device id=\(dq...\(dq>
<address>tcp://192.0.2.1:22001</address>
<address>quic://192.0.1.254:22000</address>
<address>dynamic</address>
</device>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.UNINDENT
@ -930,13 +942,15 @@ The number of connections to this device. See
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<gui enabled=\(dqtrue\(dq tls=\(dqfalse\(dq debugging=\(dqfalse\(dq>
<address>127.0.0.1:8384</address>
<apikey>k1dnz1Dd0rzTBjjFFh7CXPnrF12C49B1</apikey>
<theme>default</theme>
</gui>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -1046,7 +1060,7 @@ LDAP authentication. Requires ldap top level config section to be present.
.INDENT 0.0
.TP
.B sendBasicAuthPrompt
Added in version 1.26.0.
New in version 1.26.0.
.sp
Prior to version 1.26.0 the GUI used HTTP Basic Authorization for login, but
@ -1068,14 +1082,16 @@ wont see browser popups prompting for username and password.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<ldap>
<address>localhost:389</address>
<bindDN>cn=%s,ou=users,dc=syncthing,dc=net</bindDN>
<transport>nontls</transport>
<insecureSkipVerify>false</insecureSkipVerify>
</ldap>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -1134,7 +1150,8 @@ Search filter for user searches.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<options>
<listenAddress>default</listenAddress>
<globalAnnounceServer>default</globalAnnounceServer>
@ -1185,7 +1202,8 @@ Search filter for user searches.
<connectionLimitMax>0</connectionLimitMax>
<insecureAllowOldTLSVersions>false</insecureAllowOldTLSVersions>
</options>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -1327,7 +1345,7 @@ automatic upgrades.
.TP
.B upgradeToPreReleases
If \fBtrue\fP, automatic upgrades include release candidates (see
\X'tty: link #releases'\fI\%Versions & Releases\fP\X'tty: link').
\fI\%Versions & Releases\fP).
.UNINDENT
.INDENT 0.0
.TP
@ -1397,10 +1415,7 @@ the user acknowledged it (e.g. an transition notice on an upgrade).
.INDENT 0.0
.TP
.B trafficClass
Specify an IPv4 type of service (TOS)/IPv6 traffic class for outgoing
packets. To specify a differentiated services code point (DSCP) the value
must be bit shifted to the left by two to take the two least significant
ECN bits into account.
Specify a type of service (TOS)/traffic class of outgoing packets.
.UNINDENT
.INDENT 0.0
.TP
@ -1482,7 +1497,7 @@ addresses to global discovery.
.TP
.B sendFullIndexOnUpgrade
Controls whether all index data is resent when an upgrade has happened,
equivalent to starting Syncthing with \X'tty: link #cmdoption-reset-deltas'\fI\%\-\-reset\-deltas\fP\X'tty: link'\&. This used
equivalent to starting Syncthing with \fI\%\-\-reset\-deltas\fP\&. This used
to be the default behavior in older versions, but is mainly useful as a
troubleshooting step and causes high database churn. The default is now
\fBfalse\fP\&.
@ -1520,7 +1535,8 @@ detailed in \fI\%insecureAllowOldTLSVersions\fP\&.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<defaults>
<folder id=\(dq\(dq label=\(dq\(dq path=\(dq~\(dq type=\(dqsendreceive\(dq rescanIntervalS=\(dq3600\(dq fsWatcherEnabled=\(dqtrue\(dq fsWatcherDelayS=\(dq10\(dq ignorePerms=\(dqfalse\(dq autoNormalize=\(dqtrue\(dq>
<filesystemType>basic</filesystemType>
@ -1574,7 +1590,8 @@ detailed in \fI\%insecureAllowOldTLSVersions\fP\&.
<line>qu*</line>
</ignores>
</defaults>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -1606,10 +1623,10 @@ including the appropriate \fI\%folder.device\fP element underneath.
.INDENT 0.0
.TP
.B ignores
Added in version 1.19.0.
New in version 1.19.0.
.sp
Template for the \X'tty: link #ignoring-files'\fI\%ignore patterns\fP\X'tty: link' applied to new
Template for the \fI\%ignore patterns\fP applied to new
folders. These are copied to the \fB\&.stignore\fP file when a folder is
automatically accepted from a remote device. The GUI uses them to pre\-fill
the respective field when adding a new folder as well. In XML, each pattern
@ -1681,12 +1698,12 @@ accidentally if you sync your home folder between devices. A common symptom
of syncing configuration files is two devices ending up with the same Device ID.
.sp
If you want to use Syncthing to backup your configuration files, it is recommended
that the files you are backing up are in a \X'tty: link #folder-sendonly'\fI\%Send Only Folder\fP\X'tty: link' to prevent other
that the files you are backing up are in a \fI\%Send Only Folder\fP to prevent other
devices from overwriting the per device configuration. The folder on the remote
device(s) should not be used as configuration for the remote devices.
.sp
If youd like to sync your home folder in non\-send only mode, you may add the
folder that stores the configuration files to the \X'tty: link #ignoring-files'\fI\%ignore list\fP\X'tty: link'\&.
folder that stores the configuration files to the \fI\%ignore list\fP\&.
If youd also like to backup your configuration files, add another folder in
send only mode for just the configuration folder.
.SH AUTHOR

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-DEVICE-IDS" "7" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-DEVICE-IDS" "7" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-device-ids \- Understanding Device IDs
.sp
@ -52,7 +52,8 @@ The typical certificate will look something like this, inspected with
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
Certificate:
Data:
Version: 3 (0x2)
@ -86,7 +87,8 @@ Certificate:
...
88:7e:e2:61:aa:4c:02:e3:64:b0:da:70:3a:cd:1c:3d:86:db:
df:54:b9:4e:be:1b
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -111,23 +113,27 @@ bits) so the resulting ID looks something like:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
MFZWI3DBONSGYYLTMRWGC43ENRQXGZDMMFZWI3DBONSGYYLTMRWA====
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
The padding (\fB====\fP) is stripped away, the device ID split into four
groups, and \X'tty: link https://forum.syncthing.net/t/v0-9-0-new-node-id-format/478'\fI\%check
digits\fP <\fBhttps://forum.syncthing.net/t/v0-9-0-new-node-id-format/478\fP>\X'tty: link'
groups, and \fI\%check
digits\fP <\fBhttps://forum.syncthing.net/t/v0-9-0-new-node-id-format/478\fP>
are added for each group. For presentation purposes the device ID is
grouped with dashes, resulting in the final value:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
MFZWI3D\-BONSGYC\-YLTMRWG\-C43ENR5\-QXGZDMM\-FZWI3DP\-BONSGYY\-LTMRWAD
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Connection Establishment
@ -186,8 +192,8 @@ You can argue that of course there are collisions \- theres an infinite
amount of inputs and a finite amount of outputs \- so by definition there
are infinitely many messages that result in the same hash.
.sp
Im going to quote \X'tty: link https://stackoverflow.com/questions/4014090/is-it-safe-to-ignore-the-possibility-of-sha-collisions-in-practice'\fI\%stack
overflow\fP <\fBhttps://stackoverflow.com/questions/4014090/is-it-safe-to-ignore-the-possibility-of-sha-collisions-in-practice\fP>\X'tty: link'
Im going to quote \fI\%stack
overflow\fP <\fBhttps://stackoverflow.com/questions/4014090/is-it-safe-to-ignore-the-possibility-of-sha-collisions-in-practice\fP>
here:
.INDENT 0.0
.INDENT 3.5

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-EVENT-API" "7" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-EVENT-API" "7" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-event-api \- Event API
.SH DESCRIPTION
@ -40,7 +40,8 @@ Each event is represented by an object similar to the following:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 2,
\(dqglobalID\(dq: 3,
@ -51,7 +52,8 @@ Each event is represented by an object similar to the following:
\(dqid\(dq: \(dqNFGKEKE\-7Z6RTH7\-I3PRZXS\-DEJF3UJ\-FRWJBFO\-VBBTDND\-4SGNGVZ\-QUQHJAG\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -83,7 +85,7 @@ determined by the event type.
.SH EVENT TYPES
.SS ClusterConfigReceived
.sp
Added in version 1.20.0.
New in version 1.20.0.
.sp
The \fBClusterConfigReceived\fP event is emitted after processing such a protocol
@ -91,7 +93,8 @@ message received from a remote device. It is mainly used for internal purposes.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 84,
\(dqglobalID\(dq: 84,
@ -101,7 +104,8 @@ message received from a remote device. It is mainly used for internal purposes.
\(dqdevice\(dq: \(dqI6KAH76\-66SLLLB\-5PFXSOA\-UFJCDZC\-YAOMLEK\-CP2GB32\-BV5RQST\-3PSROAU\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS ConfigSaved
@ -111,7 +115,8 @@ itself.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 50,
\(dqglobalID\(dq: 50,
@ -128,7 +133,8 @@ itself.
\(dqdefaults\(dq: {\(dq...\(dq}
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS DeviceConnected
@ -137,7 +143,8 @@ Generated each time a connection to a device has been established.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 2,
\(dqglobalID\(dq: 2,
@ -152,7 +159,8 @@ Generated each time a connection to a device has been established.
\(dqtype\(dq: \(dqTCP (Client)\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS DeviceDisconnected
@ -161,7 +169,8 @@ Generated each time a connection to a device has been terminated.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 48,
\(dqglobalID\(dq: 48,
@ -172,7 +181,8 @@ Generated each time a connection to a device has been terminated.
\(dqid\(dq: \(dqNFGKEKE\-7Z6RTH7\-I3PRZXS\-DEJF3UJ\-FRWJBFO\-VBBTDND\-4SGNGVZ\-QUQHJAG\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -191,7 +201,8 @@ Emitted when a new device is discovered using local discovery.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 13,
\(dqglobalID\(dq: 13,
@ -204,7 +215,8 @@ Emitted when a new device is discovered using local discovery.
\(dqdevice\(dq: \(dqNFGKEKE\-7Z6RTH7\-I3PRZXS\-DEJF3UJ\-FRWJBFO\-VBBTDND\-4SGNGVZ\-QUQHJAG\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS DevicePaused
@ -213,7 +225,8 @@ Emitted when a device was paused.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 13,
\(dqglobalID\(dq: 13,
@ -223,7 +236,8 @@ Emitted when a device was paused.
\(dqdevice\(dq: \(dqNFGKEKE\-7Z6RTH7\-I3PRZXS\-DEJF3UJ\-FRWJBFO\-VBBTDND\-4SGNGVZ\-QUQHJAG\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS DeviceRejected (DEPRECATED)
@ -237,7 +251,8 @@ to talk to.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 24,
\(dqglobalID\(dq: 24,
@ -249,7 +264,8 @@ to talk to.
\(dqdevice\(dq: \(dqEJHMPAQ\-OGCVORE\-ISB4IS3\-SYYVJXF\-TKJGLTU\-66DIQPF\-GJ5D2GX\-GQ3OWQK\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS DeviceResumed
@ -258,7 +274,8 @@ Generated each time a device was resumed.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 2,
\(dqglobalID\(dq: 2,
@ -268,7 +285,8 @@ Generated each time a device was resumed.
\(dqdevice\(dq: \(dqNFGKEKE\-7Z6RTH7\-I3PRZXS\-DEJF3UJ\-FRWJBFO\-VBBTDND\-4SGNGVZ\-QUQHJAG\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS DownloadProgress
@ -279,7 +297,8 @@ configuration can cause multiple files to be shown.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 221,
\(dqglobalID\(dq: 221,
@ -332,7 +351,8 @@ configuration can cause multiple files to be shown.
}
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.INDENT 0.0
@ -373,7 +393,8 @@ The \fBdata\fP field contains a textual error message.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 93,
\(dqglobalID\(dq: 93,
@ -381,7 +402,8 @@ The \fBdata\fP field contains a textual error message.
\(dqtime\(dq: \(dq2021\-06\-07T21:22:03.414609034+02:00\(dq,
\(dqdata\(dq: \(dqindex handler got paused while already paused\(dq
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS FolderCompletion
@ -391,7 +413,7 @@ contents for a folder changes. It contains the completion percentage for
a given remote device and is emitted once per currently connected remote
device.
.sp
Added in version 1.20.0: Indication whether the remote device has accepted the folder (shares it with
New in version 1.20.0: Indication whether the remote device has accepted the folder (shares it with
us) as well, and whether it is paused. The \fBremoteState\fP field is
\fBunknown\fP when the remote device is not connected. Otherwise it can be
either \fBpaused\fP, \fBnotSharing\fP, or \fBvalid\fP if the remote is sharing back.
@ -399,7 +421,8 @@ either \fBpaused\fP, \fBnotSharing\fP, or \fBvalid\fP if the remote is sharing b
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 84,
\(dqglobalID\(dq: 84,
@ -418,7 +441,8 @@ either \fBpaused\fP, \fBnotSharing\fP, or \fBvalid\fP if the remote is sharing b
\(dqsequence\(dq: 12
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS FolderErrors
@ -431,7 +455,8 @@ synchronization attempt, a new \fBFolderErrors\fP event is emitted.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 132,
\(dqtype\(dq: \(dqFolderErrors\(dq,
@ -446,17 +471,18 @@ synchronization attempt, a new \fBFolderErrors\fP event is emitted.
\(dqfolder\(dq: \(dqdefault\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Added in version 0.11.12.
New in version 0.11.12.
.sp
\fBSEE ALSO:\fP
.INDENT 0.0
.INDENT 3.5
The \X'tty: link #statechanged'\fI\%StateChanged\fP\X'tty: link' event.
The \fI\%StateChanged\fP event.
.UNINDENT
.UNINDENT
.SS FolderPaused
@ -466,7 +492,8 @@ of a folder. Sent repeatedly for each changed folder.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 93,
\(dqglobalID\(dq: 93,
@ -477,7 +504,8 @@ of a folder. Sent repeatedly for each changed folder.
\(dqlabel\(dq: \(dqMy folder\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS FolderRejected (DEPRECATED)
@ -491,7 +519,8 @@ have, or have but do not share with the device in question.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 27,
\(dqglobalID\(dq: 27,
@ -503,7 +532,8 @@ have, or have but do not share with the device in question.
\(dqfolderLabel\(dq: \(dqMy Pictures\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS FolderResumed
@ -513,7 +543,8 @@ of a folder. Sent repeatedly for each changed folder.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 93,
\(dqglobalID\(dq: 93,
@ -524,7 +555,8 @@ of a folder. Sent repeatedly for each changed folder.
\(dqlabel\(dq: \(dqMy folder\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS FolderScanProgress
@ -535,7 +567,8 @@ total , as well as the current scanning rates in bytes per second.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqdata\(dq : {
\(dqtotal\(dq : 1,
@ -548,7 +581,8 @@ total , as well as the current scanning rates in bytes per second.
\(dqtime\(dq : \(dq2017\-03\-06T15:00:58.072004209+01:00\(dq,
\(dqid\(dq : 29
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS FolderSummary
@ -559,7 +593,8 @@ state.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 16,
\(dqtype\(dq: \(dqFolderSummary\(dq,
@ -609,7 +644,8 @@ state.
}
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS FolderWatchStateChanged
@ -622,7 +658,8 @@ If there was no error in either of these, the respective field is omitted.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 123,
\(dqtype\(dq: \(dqFolderWatchStateChanged\(dq,
@ -633,7 +670,8 @@ If there was no error in either of these, the respective field is omitted.
\(dqto\(dq: \(dqSomething worse happened.\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS ItemFinished
@ -643,7 +681,8 @@ successful operation:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 93,
\(dqglobalID\(dq: 93,
@ -657,7 +696,8 @@ successful operation:
\(dqaction\(dq: \(dqupdate\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -665,7 +705,8 @@ An unsuccessful operation:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 44,
\(dqglobalID\(dq: 44,
@ -679,13 +720,14 @@ An unsuccessful operation:
\(dqtype\(dq: \(dqfile\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
The \fBaction\fP field is either \fBupdate\fP (contents changed), \fBmetadata\fP (file metadata changed but not contents), or \fBdelete\fP\&.
.sp
Added in version 0.11.10: The \fBmetadata\fP action.
New in version 0.11.10: The \fBmetadata\fP action.
.SS ItemStarted
.sp
@ -693,7 +735,8 @@ Generated when Syncthing begins synchronizing a file to a newer version.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 93,
\(dqglobalID\(dq: 93,
@ -706,21 +749,23 @@ Generated when Syncthing begins synchronizing a file to a newer version.
\(dqaction\(dq: \(dqupdate\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
The \fBaction\fP field is either \fBupdate\fP (contents changed), \fBmetadata\fP (file metadata changed but not contents), or \fBdelete\fP\&.
.sp
Added in version 0.11.10: The \fBmetadata\fP action.
New in version 0.11.10: The \fBmetadata\fP action.
.SS ListenAddressesChanged
.sp
This event is emitted when a \X'tty: link #listen-addresses'\fI\%listen address\fP\X'tty: link' changes.
This event is emitted when a \fI\%listen address\fP changes.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqtype\(dq : \(dqListenAddressesChanged\(dq,
\(dqid\(dq : 70,
@ -766,7 +811,8 @@ This event is emitted when a \X'tty: link #listen-addresses'\fI\%listen address\
]
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS LocalChangeDetected
@ -786,7 +832,8 @@ a mask specified, but needs to be selected explicitly.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 7,
\(dqglobalID\(dq: 59,
@ -801,7 +848,8 @@ a mask specified, but needs to be selected explicitly.
\(dqtype\(dq: \(dqfile\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -816,7 +864,8 @@ changes during a scan.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 59,
\(dqglobalID\(dq: 59,
@ -834,7 +883,8 @@ changes during a scan.
\(dqversion\(dq: 12345
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -851,7 +901,8 @@ origin of the request, but e.g. a reverse proxy.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq : 187,
\(dqtime\(dq : \(dq2017\-03\-07T00:19:24.420386143+01:00\(dq,
@ -863,12 +914,13 @@ origin of the request, but e.g. a reverse proxy.
\(dqtype\(dq : \(dqLoginAttempt\(dq,
\(dqglobalID\(dq : 195
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS PendingDevicesChanged
.sp
Added in version 1.14.0.
New in version 1.14.0.
.sp
Emitted when pending devices were added / updated (connection from
@ -876,7 +928,8 @@ unknown ID) or removed (device is ignored, dismissed or added).
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 87,
\(dqtype\(dq: \(dqPendingDevicesChanged\(dq,
@ -896,12 +949,13 @@ unknown ID) or removed (device is ignored, dismissed or added).
]
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS PendingFoldersChanged
.sp
Added in version 1.14.0.
New in version 1.14.0.
.sp
Emitted when pending folders were added / updated (offered by some
@ -912,7 +966,8 @@ longer pending for any device.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 101,
\(dqtype\(dq: \(dqPendingFoldersChanged\(dq,
@ -938,7 +993,8 @@ longer pending for any device.
]
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS RemoteChangeDetected
@ -956,7 +1012,8 @@ a mask specified, but needs to be selected explicitly.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqtime\(dq : \(dq2017\-03\-06T23:58:21.844739891+01:00\(dq,
\(dqglobalID\(dq : 123,
@ -972,7 +1029,8 @@ a mask specified, but needs to be selected explicitly.
\(dqtype\(dq : \(dqRemoteChangeDetected\(dq,
\(dqid\(dq : 2
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -981,14 +1039,15 @@ Deprecated since version v1.1.2: The \fBfolderID\fP field is a legacy name kept
.SS RemoteDownloadProgress
.sp
This event is emitted when a \X'tty: link #download-progress'\fI\%DownloadProgress\fP\X'tty: link' message is
This event is emitted when a \fI\%DownloadProgress\fP message is
received. It returns a map \fBdata\fP of filenames with a count of
downloaded blocks. The files in questions are currently being
downloaded on the remote \fBdevice\fP and belong to \fBfolder\fP\&.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqtime\(dq : \(dq2017\-03\-07T00:11:37.65838955+01:00\(dq,
\(dqglobalID\(dq : 170,
@ -1002,7 +1061,8 @@ downloaded on the remote \fBdevice\fP and belong to \fBfolder\fP\&.
\(dqtype\(dq : \(dqRemoteDownloadProgress\(dq,
\(dqid\(dq : 163
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS RemoteIndexUpdated
@ -1011,7 +1071,8 @@ Generated each time new index information is received from a device.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 44,
\(dqglobalID\(dq: 44,
@ -1023,7 +1084,8 @@ Generated each time new index information is received from a device.
\(dqitems\(dq: 1000
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Starting
@ -1033,7 +1095,8 @@ configuration etc.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 1,
\(dqglobalID\(dq: 1,
@ -1043,7 +1106,8 @@ configuration etc.
\(dqhome\(dq: \(dq/home/jb/.config/syncthing\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS StartupComplete
@ -1053,7 +1117,8 @@ ready to start exchanging data with other devices.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 1,
\(dqglobalID\(dq: 1,
@ -1061,7 +1126,8 @@ ready to start exchanging data with other devices.
\(dqtime\(dq: \(dq2014\-07\-13T21:03:18.383239179+02:00\(dq,
\(dqdata\(dq: null
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS StateChanged
@ -1074,7 +1140,8 @@ seconds and is now in state \fBidle\fP\&.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
\(dqid\(dq: 8,
\(dqglobalID\(dq: 8,
@ -1087,7 +1154,8 @@ seconds and is now in state \fBidle\fP\&.
\(dqto\(dq: \(dqidle\(dq
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SH AUTHOR

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-FAQ" "7" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-FAQ" "7" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-faq \- Frequently Asked Questions
.INDENT 0.0
@ -164,7 +164,7 @@ Directory modification times (not preserved)
Hard links (followed, not preserved)
.IP \(bu 2
Windows junctions (synced as ordinary directories; require enabling in
\X'tty: link #config-option-folder.junctionsasdirs'\fI\%the configuration\fP\X'tty: link' on a per\-folder
\fI\%the configuration\fP on a per\-folder
basis)
.IP \(bu 2
Resource forks (not preserved)
@ -176,7 +176,7 @@ Devices, FIFOs, and other specials (ignored)
Sparse file sparseness (will become sparse, when supported by the OS & filesystem)
.IP \(bu 2
Syncthing internal files and folders (e.g. \fB\&.stfolder\fP, \fB\&.stignore\fP,
\fB\&.stversions\fP, \X'tty: link #temporary-files'\fI\%temporary files\fP\X'tty: link', etc.)
\fB\&.stversions\fP, \fI\%temporary files\fP, etc.)
.UNINDENT
.SS Is synchronization fast?
.sp
@ -191,7 +191,7 @@ manner. This means that renaming a file will not cause a retransmission of
that file. Additionally, appending data to existing files should be handled
efficiently as well.
.sp
\X'tty: link #temporary-files'\fI\%Temporary files\fP\X'tty: link' are used to store partial data
\fI\%Temporary files\fP are used to store partial data
downloaded from other devices. They are automatically removed whenever a file
transfer has been completed or after the configured amount of time which is set
in the configuration file (24 hours by default).
@ -209,7 +209,7 @@ Syncthing uses an open and documented protocol, and likewise the security
mechanisms in use are well defined and visible in the source code. Resilio
Sync uses an undocumented, closed protocol with unknown security properties.
.IP [1] 5
\X'tty: link https://en.wikipedia.org/wiki/Resilio_Sync'\fI\%https://en.wikipedia.org/wiki/Resilio_Sync\fP\X'tty: link'
\fI\%https://en.wikipedia.org/wiki/Resilio_Sync\fP
.SS Is there an iOS client?
.sp
There are no plans by the current Syncthing team to officially support iOS in the foreseeable future.
@ -219,7 +219,7 @@ run Syncthing reliably and integrate it into the system.
.sp
However, there is a commercial packaging of Syncthing for iOS that attempts to work within these limitations. [2]
.IP [2] 5
\X'tty: link https://www.mobiussync.com'\fI\%https://www.mobiussync.com\fP\X'tty: link'
\fI\%https://www.mobiussync.com\fP
.SS Should I keep my device IDs secret?
.sp
No. The IDs are not sensitive. Given a device ID its possible to find the IP
@ -236,7 +236,7 @@ oyster!)
\fBSEE ALSO:\fP
.INDENT 0.0
.INDENT 3.5
\X'tty: link #device-ids'\fI\%Understanding Device IDs\fP\X'tty: link'
\fI\%Understanding Device IDs\fP
.UNINDENT
.UNINDENT
.SH TROUBLESHOOTING
@ -262,7 +262,7 @@ Devices” list on the right side of the GUI, double check that you see
.sp
If you are connected via a relay, this is because a direct connection could
not be established. Double check and follow the suggestions in
\X'tty: link #firewall-setup'\fI\%Firewall Setup\fP\X'tty: link' to enable direct connections.
\fI\%Firewall Setup\fP to enable direct connections.
.sp
Second, if one of the devices is a very low powered machine (a Raspberry Pi,
or a phone, or a NAS, or similar) you are likely constrained by the CPU on
@ -295,8 +295,8 @@ causes a certain amount of extra CPU usage to calculate the summary data it
presents. Note however that once things are \fIin sync\fP CPU usage should be
negligible.
.sp
To minimize the impact of this, Syncthing attempts to \X'tty: link #config-option-options.setlowpriority'\fI\%lower the
process priority\fP\X'tty: link' when starting up.
To minimize the impact of this, Syncthing attempts to \fI\%lower the
process priority\fP when starting up.
.sp
To further limit the amount of CPU used when syncing and scanning, set the
environment variable \fBGOMAXPROCS\fP to the maximum number of CPU cores
@ -315,7 +315,7 @@ This is an area that we are working to improve in the long term.
.sp
Since version 0.14.6 Syncthing does an extra security check when the GUI/API
is bound to localhost \- namely that the browser is talking to localhost.
This protects against most forms of \X'tty: link https://en.wikipedia.org/wiki/DNS_rebinding'\fI\%DNS rebinding attack\fP <\fBhttps://en.wikipedia.org/wiki/DNS_rebinding\fP>\X'tty: link' against the GUI.
This protects against most forms of \fI\%DNS rebinding attack\fP <\fBhttps://en.wikipedia.org/wiki/DNS_rebinding\fP> against the GUI.
.sp
To pass this test, ensure that you are accessing the GUI using an URL that
begins with \fBhttp://localhost\fP, \fBhttp://127.0.0.1\fP or \fBhttp://[::1]\fP\&. HTTPS
@ -328,7 +328,7 @@ protect against unauthorized access. Either:
.IP \(bu 2
Make sure the proxy sets a \fBHost\fP header containing \fBlocalhost\fP, or
.IP \(bu 2
Set \X'tty: link #config-option-gui.insecureskiphostcheck'\fI\%gui.insecureSkipHostcheck\fP\X'tty: link' in the advanced settings, or
Set \fI\%gui.insecureSkipHostcheck\fP in the advanced settings, or
.IP \(bu 2
Bind the GUI/API to a non\-localhost listen port.
.UNINDENT
@ -338,8 +338,8 @@ In all cases, username/password authentication and HTTPS should be used.
.sp
This is almost always a result of bad RAM, storage device or other hardware.
When the index database is found to be corrupt Syncthing cannot operate and will
note this in the logs and exit. To overcome this delete the \X'tty: link #config-locations'\fI\%database
folder\fP\X'tty: link' inside Syncthings data directory and re\-start
note this in the logs and exit. To overcome this delete the \fI\%database
folder\fP inside Syncthings data directory and re\-start
Syncthing. It will then need to perform a full re\-hashing of all shared
folders. You should check your system in case the underlying cause is indeed
faulty hardware which may put the system at risk of further data loss.
@ -374,10 +374,10 @@ up\-to\-date state with all the neighbours.
.SS Why does Syncthing connect to this unknown/suspicious address?
.sp
If you see outgoing connections to odd and unexpected addresses these are
most likely connections to \X'tty: link #relaying'\fI\%relay servers\fP\X'tty: link'\&. Relay servers
most likely connections to \fI\%relay servers\fP\&. Relay servers
are run by volunteers all over the world. They usually listen on ports 443 or
22067, though this is controlled by the user running it. You can compare the
address you are concerned about with \X'tty: link https://relays.syncthing.net'\fI\%the current list of active relays\fP <\fBhttps://relays.syncthing.net\fP>\X'tty: link'\&. Relays do not and can not see the data
address you are concerned about with \fI\%the current list of active relays\fP <\fBhttps://relays.syncthing.net\fP>\&. Relays do not and can not see the data
transmitted via them.
.SS I am seeing the error message “folder marker missing”. What do I do?
.sp
@ -420,7 +420,7 @@ Also see the \fI\%marker FAQ\fP for more information about the folder marker.
\fBSEE ALSO:\fP
.INDENT 0.0
.INDENT 3.5
\X'tty: link #conflict-handling'\fI\%Conflicting Changes\fP\X'tty: link'
\fI\%Conflicting Changes\fP
.UNINDENT
.UNINDENT
.SS How do I serve a folder from a read only filesystem?
@ -468,8 +468,8 @@ to configure listening ports such that they do not overlap (see \fI\%Syncthing C
.sp
No. Syncthing is not designed to sync locally and the overhead involved in
doing so using Syncthings method would be wasteful. There are better
programs to achieve this such as \X'tty: link https://rsync.samba.org/'\fI\%rsync\fP <\fBhttps://rsync.samba.org/\fP>\X'tty: link' or
\X'tty: link https://www.cis.upenn.edu/~bcpierce/unison'\fI\%Unison\fP <\fBhttps://www.cis.upenn.edu/~bcpierce/unison\fP>\X'tty: link'\&.
programs to achieve this such as \fI\%rsync\fP <\fBhttps://rsync.samba.org/\fP> or
\fI\%Unison\fP <\fBhttps://www.cis.upenn.edu/~bcpierce/unison\fP>\&.
.SS When I do have two distinct Syncthing\-managed folders on two hosts, how does Syncthing handle moving files between them?
.sp
Syncthing does not specially handle this case, and most files will most likely get
@ -526,10 +526,12 @@ computer, change the \fBGUI listen address\fP option in the web GUI from
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<gui enabled=\(dqtrue\(dq tls=\(dqfalse\(dq>
<address>127.0.0.1:8384</address>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -537,10 +539,12 @@ to
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<gui enabled=\(dqtrue\(dq tls=\(dqtrue\(dq>
<address>0.0.0.0:8384</address>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -553,29 +557,33 @@ GUI settings at default and use an SSH port forward to access it. For example,
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
$ ssh \-L 9090:127.0.0.1:8384 user@othercomputer.example.com
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
will log you into \fBothercomputer.example.com\fP, and present the \fIremote\fP
Syncthing GUI on \X'tty: link http://localhost:9090'\fI\%http://localhost:9090\fP\X'tty: link' on your \fIlocal\fP computer.
Syncthing GUI on \fI\%http://localhost:9090\fP on your \fIlocal\fP computer.
.sp
If you only want to access the remote GUI and dont want the terminal session,
use this example:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
$ ssh \-N \-L 9090:127.0.0.1:8384 user@othercomputer.example.com
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
If only your remote computer is Unix\-like, you can still access it with SSH from
Windows. Under Windows 10 or later you can use the same \fBssh\fP command if you
\X'tty: link https://learn.microsoft.com/windows-server/administration/openssh/openssh_install_firstuse'\fI\%install the OpenSSH Client\fP <\fBhttps://learn.microsoft.com/windows-server/administration/openssh/openssh_install_firstuse\fP>\X'tty: link'\&.
\fI\%install the OpenSSH Client\fP <\fBhttps://learn.microsoft.com/windows-server/administration/openssh/openssh_install_firstuse\fP>\&.
.SS I dont like the GUI or the theme. Can it be changed?
.sp
You can change the theme in the settings. Syncthing ships with other themes
@ -593,7 +601,7 @@ To add e.g. a red theme, you can create the file \fBred/assets/css/theme.css\fP
inside the GUI override directory to override the default CSS styles.
.sp
To create a whole new GUI, you should checkout the files at
\X'tty: link https://github.com/syncthing/syncthing/tree/main/gui/default'\fI\%https://github.com/syncthing/syncthing/tree/main/gui/default\fP\X'tty: link'
\fI\%https://github.com/syncthing/syncthing/tree/main/gui/default\fP
to get an idea how to do that.
.SS How do I upgrade Syncthing?
.sp
@ -618,13 +626,13 @@ so should Syncthing.
.SS Where do I find the latest release?
.sp
We release new versions through GitHub. The latest release is always found
\X'tty: link https://github.com/syncthing/syncthing/releases/latest'\fI\%on the release page\fP <\fBhttps://github.com/syncthing/syncthing/releases/latest\fP>\X'tty: link'\&. Unfortunately
\fI\%on the release page\fP <\fBhttps://github.com/syncthing/syncthing/releases/latest\fP>\&. Unfortunately
GitHub does not provide a single URL to automatically download the latest
version. We suggest to use the \X'tty: link https://api.github.com/repos/syncthing/syncthing/releases/latest'\fI\%GitHub API\fP <\fBhttps://api.github.com/repos/syncthing/syncthing/releases/latest\fP>\X'tty: link' and parsing
version. We suggest to use the \fI\%GitHub API\fP <\fBhttps://api.github.com/repos/syncthing/syncthing/releases/latest\fP> and parsing
the JSON response.
.SS How do I run Syncthing as a daemon process on Linux?
.sp
If youre using systemd, runit, or upstart, we ship \X'tty: link https://github.com/syncthing/syncthing/tree/main/etc'\fI\%example configurations\fP <\fBhttps://github.com/syncthing/syncthing/tree/main/etc\fP>\X'tty: link'\&.
If youre using systemd, runit, or upstart, we ship \fI\%example configurations\fP <\fBhttps://github.com/syncthing/syncthing/tree/main/etc\fP>\&.
.sp
If however youre not using one of these tools, you have a couple of options.
If your system has a tool called \fBstart\-stop\-daemon\fP installed (thats the name
@ -642,7 +650,7 @@ the filesystem watcher on linux:
.INDENT 0.0
.INDENT 3.5
Failed to start filesystem watcher for folder yourLabel (yourID): failed to
setup inotify handler. Please increase inotify limits, see \X'tty: link https://docs.syncthing.net/users/faq.html#inotify-limits'\fI\%https://docs.syncthing.net/users/faq.html#inotify\-limits\fP\X'tty: link'
setup inotify handler. Please increase inotify limits, see \fI\%https://docs.syncthing.net/users/faq.html#inotify\-limits\fP
.UNINDENT
.UNINDENT
.sp
@ -653,9 +661,11 @@ On many Linux distributions you can run the following to fix it:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
echo \(dqfs.inotify.max_user_watches=204800\(dq | sudo tee \-a /etc/sysctl.conf
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -664,9 +674,11 @@ separate file, i.e. you should run:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
echo \(dqfs.inotify.max_user_watches=204800\(dq | sudo tee \-a /etc/sysctl.d/90\-override.conf
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -674,15 +686,17 @@ This only takes effect after a reboot. To adjust the limit immediately, run:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
echo 204800 | sudo tee /proc/sys/fs/inotify/max_user_watches
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS How do I reset the GUI password?
.sp
If youve forgotten / lost the GUI password, you can reset it using the
\X'tty: link #cmdoption-gui-password'\fI\%\-\-gui\-password\fP\X'tty: link' (and possibly \X'tty: link #cmdoption-gui-user'\fI\%\-\-gui\-user\fP\X'tty: link') options to the
\fI\%\-\-gui\-password\fP (and possibly \fI\%\-\-gui\-user\fP) options to the
\fBsyncthing generate\fP subcommand. This should be done while Syncthing is not
running.
.INDENT 0.0
@ -694,7 +708,7 @@ Stop Syncthing: \fBsyncthing cli operations shutdown\fP
Restart Syncthing as usual.
.UNINDENT
.sp
\fIAlternatively, in step 2\fP, you can manually delete the \X'tty: link #config-option-gui.user'\fI\%<user>\fP\X'tty: link' and \X'tty: link #config-option-gui.password'\fI\%<password>\fP\X'tty: link' XML tags from the
\fIAlternatively, in step 2\fP, you can manually delete the \fI\%<user>\fP and \fI\%<password>\fP XML tags from the
\fB<gui>\fP block in file \fBconfig.xml\fP\&. The location of the file depends on the
OS and is described in the \fI\%configuration documentation\fP\&.
.sp
@ -702,7 +716,8 @@ For example, the two emphasized lines below would be removed from the file.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<gui enabled=\(dqtrue\(dq tls=\(dqfalse\(dq debugging=\(dqfalse\(dq>
<address>127.0.0.1:8384</address>
<user>syncguy</user>
@ -710,7 +725,8 @@ For example, the two emphasized lines below would be removed from the file.
<apikey>9RCKohqCAyrj5RjpyZdR2wXmQ9PyQFeN</apikey>
<theme>default</theme>
</gui>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SH AUTHOR

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-GLOBALDISCO" "7" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-GLOBALDISCO" "7" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-globaldisco \- Global Discovery Protocol v3
.SH ANNOUNCEMENTS
@ -39,11 +39,13 @@ listing connection addresses (if any):
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
{
addresses: [\(dqtcp://192.0.2.45:22000\(dq, \(dqtcp://:22202\(dq, \(dqrelay://192.0.2.99:22028\(dq],
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-LOCALDISCO" "7" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-LOCALDISCO" "7" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-localdisco \- Local Discovery Protocol v4
.SH MODE OF OPERATION
@ -55,14 +55,15 @@ previously unknown device is discovered or a device has restarted (see the
.SH DEVICE ID
.sp
The device ID is the SHA\-256 (32 bytes) of the device X.509 certificate. See
\X'tty: link #device-ids'\fI\%Understanding Device IDs\fP\X'tty: link' in the Syncthing documentation.
\fI\%Understanding Device IDs\fP in the Syncthing documentation.
.SH ANNOUNCEMENT PACKET
.sp
The Announcement packet has the following structure:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
@ -72,7 +73,8 @@ The Announcement packet has the following structure:
\e Announce Message \e
/ /
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -88,13 +90,15 @@ following schema:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
message Announce {
bytes id = 1;
repeated string addresses = 2;
int64 instance_id = 3;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-NETWORKING" "7" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-NETWORKING" "7" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-networking \- Firewall Setup
.SH ROUTER SETUP
@ -40,9 +40,11 @@ message in the console saying:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
Created UPnP port mapping for external port XXXXX on UPnP device YYYYY.
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -55,7 +57,7 @@ Communication in Syncthing works both ways. Therefore if you set up port
forwards for one device, other devices will be able to connect to it even when
they are behind a NAT network or firewall.
.sp
In the absence of port forwarding, \X'tty: link #relaying'\fI\%Relaying\fP\X'tty: link' may work well enough to get
In the absence of port forwarding, \fI\%Relaying\fP may work well enough to get
devices connected and synced, but will perform poorly in comparison to a
direct connection.
.SS Local Discovery
@ -85,13 +87,15 @@ If you configured a custom port in the \fISync Protocol Listen Address\fP settin
you have to adapt the firewall rules accordingly.
.SS Uncomplicated Firewall (ufw)
.sp
If youre using \fBufw\fP on Linux and have installed the \X'tty: link https://apt.syncthing.net/'\fI\%Syncthing package\fP <\fBhttps://apt.syncthing.net/\fP>\X'tty: link', you can allow the necessary ports by running:
If youre using \fBufw\fP on Linux and have installed the \fI\%Syncthing package\fP <\fBhttps://apt.syncthing.net/\fP>, you can allow the necessary ports by running:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
sudo ufw allow syncthing
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -99,9 +103,11 @@ If you also want to allow external access to the Syncthing web GUI, run:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
sudo ufw allow syncthing\-gui
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -111,25 +117,29 @@ You can then verify that the ports mentioned above are allowed:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
sudo ufw status verbose
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
In case you installed Syncthing manually you can follow the \X'tty: link https://github.com/syncthing/syncthing/tree/main/etc/firewall-ufw'\fI\%instructions to manually add the syncthing preset\fP <\fBhttps://github.com/syncthing/syncthing/tree/main/etc/firewall-ufw\fP>\X'tty: link' to ufw.
In case you installed Syncthing manually you can follow the \fI\%instructions to manually add the syncthing preset\fP <\fBhttps://github.com/syncthing/syncthing/tree/main/etc/firewall-ufw\fP> to ufw.
.SS Firewalld
.sp
If you are using \X'tty: link https://firewalld.org/'\fI\%Firewalld\fP <\fBhttps://firewalld.org/\fP>\X'tty: link' it has included
If you are using \fI\%Firewalld\fP <\fBhttps://firewalld.org/\fP> it has included
support for syncthing (since version 0.5.0, January 2018), and you can enable
it with:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
sudo firewall\-cmd \-\-zone=public \-\-add\-service=syncthing \-\-permanent
sudo firewall\-cmd \-\-reload
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -148,9 +158,11 @@ tunnel instead. You can start a tunnel with a command like the following:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
ssh \-L 9999:localhost:8384 machine
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -159,7 +171,7 @@ port 8384 on the target machine. This still works even if Syncthing is bound to
listen on localhost only.
.SH VIA A PROXY
.sp
Syncthing can use a SOCKS5 proxy for outbound connections. Please see \X'tty: link #proxying'\fI\%Using Proxies\fP\X'tty: link'\&.
Syncthing can use a SOCKS5 proxy for outbound connections. Please see \fI\%Using Proxies\fP\&.
.SH AUTHOR
The Syncthing Authors
.SH COPYRIGHT

View File

@ -1,4 +1,3 @@
'\" t
.\" Man page generated from reStructuredText.
.
.
@ -28,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-RELAY" "7" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-RELAY" "7" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-relay \- Relay Protocol v1
.SH WHAT IS A RELAY?
@ -115,8 +114,9 @@ The connection is terminated immediately after that.
Client A \- Permanent protocol submode
Client B \- Temporary protocol submode
.TS
box center;
l|l|l|l.
center;
|l|l|l|l|.
_
T{
#
T} T{
@ -222,6 +222,7 @@ T} T{
<\-Pong
T} T{
T}
_
.TE
.SH SESSION MODE
.sp
@ -245,8 +246,9 @@ relayed between the two devices in the session directly.
Client A \- Permanent protocol mode
Client B \- Temporary protocol mode
.TS
box center;
l|l|l|l.
center;
|l|l|l|l|.
_
T{
#
T} T{
@ -331,6 +333,7 @@ T} T{
T} T{
<\-Data
T}
_
.TE
.SH MESSAGES
.sp
@ -348,7 +351,8 @@ us to identify what type of message it is.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
@ -365,14 +369,16 @@ struct Header {
int MessageType;
int MessageLength;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Ping message (Type = 0)
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
@ -380,14 +386,16 @@ struct Header {
struct Ping {
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Pong message (Type = 1)
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
@ -395,14 +403,16 @@ struct Ping {
struct Pong {
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS JoinRelayRequest message (Type = 2)
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
@ -410,14 +420,16 @@ struct Pong {
struct JoinRelayRequest {
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SS JoinSessionRequest message (Type = 3)
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
@ -432,7 +444,8 @@ struct JoinRelayRequest {
struct JoinSessionRequest {
opaque Key<32>;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.INDENT 0.0
@ -445,7 +458,8 @@ used to identify which session you are trying to connect to.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
@ -463,7 +477,8 @@ struct Response {
int Code;
string Message<>;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.INDENT 0.0
@ -478,7 +493,8 @@ Message associated with the code.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
@ -493,7 +509,8 @@ Message associated with the code.
struct ConnectRequest {
opaque ID<32>;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.INDENT 0.0
@ -505,7 +522,8 @@ Device ID to which the client would like to connect.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+\-+
@ -540,7 +558,8 @@ struct SessionInvitation {
unsigned int Port;
bool ServerSocket;
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.INDENT 0.0
@ -596,8 +615,9 @@ performing device ID validation, and full TLS encryption, and provides the same
security properties as it would provide when connecting over the internet.
.SH EXAMPLES OF STRONG CIPHER SUITES
.TS
box center;
l|l|l.
center;
|l|l|l|.
_
T{
ID
T} T{
@ -669,6 +689,7 @@ ECDHE\-RSA\-AES128\-SHA256
T} T{
TLSv1.2 ECDH RSA AES(128) SHA256
T}
_
.TE
.SH AUTHOR
The Syncthing Authors

File diff suppressed because it is too large Load Diff

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-SECURITY" "7" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-SECURITY" "7" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-security \- Security Principles
.sp
@ -46,7 +46,7 @@ Incoming requests for file data are verified to the extent that the requested
file name must exist in the local index and the global model.
.sp
For information about ensuring you are running the code you think you are and
for reporting security vulnerabilities, please see the official \X'tty: link https://syncthing.net/security'\fI\%security page\fP <\fBhttps://syncthing.net/security\fP>\X'tty: link'\&.
for reporting security vulnerabilities, please see the official \fI\%security page\fP <\fBhttps://syncthing.net/security\fP>\&.
.SH INFORMATION LEAKAGE
.SS Global Discovery
.sp
@ -59,7 +59,7 @@ servers containing the device ID of the requested device. The connection to
the discovery server is encrypted using TLS and the discovery server
certificate is verified, so the contents of the query should be considered
private between the device and the discovery server. The discovery servers
are currently hosted by \X'tty: link https://github.com/calmh'\fI\%@calmh\fP <\fBhttps://github.com/calmh\fP>\X'tty: link'\&. Global discovery defaults to \fBon\fP\&.
are currently hosted by \fI\%@calmh\fP <\fBhttps://github.com/calmh\fP>\&. Global discovery defaults to \fBon\fP\&.
.sp
When turned off, devices with dynamic addresses not on the local network cannot
be found and connected to.
@ -87,7 +87,7 @@ found and connected to.
.sp
When automatic upgrades are enabled, Syncthing checks for a new version at
startup and then once every twelve hours. This is by an HTTPS request to the
download site for releases, currently hosted by \X'tty: link https://github.com/calmh'\fI\%@calmh\fP <\fBhttps://github.com/calmh\fP>\X'tty: link'\&.
download site for releases, currently hosted by \fI\%@calmh\fP <\fBhttps://github.com/calmh\fP>\&.
Automatic upgrades default to \fBon\fP (unless Syncthing was compiled with
upgrades disabled).
.sp
@ -105,7 +105,7 @@ information about the user or device.
.sp
When usage reporting is enabled, Syncthing reports usage data at startup and
then every 24 hours. The report is sent as an HTTPS POST to the usage reporting
server, currently hosted by \X'tty: link https://github.com/calmh'\fI\%@calmh\fP <\fBhttps://github.com/calmh\fP>\X'tty: link'\&. The contents of the usage report can
server, currently hosted by \fI\%@calmh\fP <\fBhttps://github.com/calmh\fP>\&. The contents of the usage report can
be seen behind the “Preview” link in settings. Usage reporting defaults to
\fBoff\fP but the GUI will ask once about enabling it, shortly after the first
install.
@ -147,7 +147,7 @@ web GUI defaults to being reachable from the \fBlocal host only\fP\&.
.sp
Parties doing surveillance on your network (whether that be corporate IT, the
NSA or someone else) will be able to see that you use Syncthing, and your device
IDs \X'tty: link https://docs.syncthing.net/users/faq.html#should-i-keep-my-device-ids-secret'\fI\%are OK to share anyway\fP <\fBhttps://docs.syncthing.net/users/faq.html#should-i-keep-my-device-ids-secret\fP>\X'tty: link',
IDs \fI\%are OK to share anyway\fP <\fBhttps://docs.syncthing.net/users/faq.html#should-i-keep-my-device-ids-secret\fP>,
but the actual transmitted data is protected as well as we can. Knowing your
device ID can expose your IP address, using global discovery.
.SH PROTECTING YOUR SYNCTHING KEYS AND IDENTITY

View File

@ -27,16 +27,18 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-STIGNORE" "5" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-STIGNORE" "5" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-stignore \- Prevent files from being synchronized to other nodes
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
\&.stignore
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SH DESCRIPTION
@ -124,19 +126,21 @@ more general patterns that follow.
.INDENT 3.5
Negated patterns that can match items below the folder root will cause
Syncthing to traverse otherwise ignored directories. If the
\X'tty: link #scanning'\fI\%watcher\fP\X'tty: link' is enabled, those directories will also be
\fI\%watcher\fP is enabled, those directories will also be
watched. Directories ignored before the first negated pattern can
however be safely skipped, since the first matching pattern wins. For
example:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
/foo
/bar
!baz
*
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -148,10 +152,12 @@ not cause this behaviour:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
!/baz
*
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -188,7 +194,8 @@ Given a directory layout starting at the synced folders root:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
\&.DS_Store
\&.stignore
foo
@ -202,7 +209,8 @@ bar2/
frobble
My Pictures/
Img15.PNG
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -210,7 +218,8 @@ and an \fB\&.stignore\fP file with the contents:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
(?d).DS_Store
!frobble
!quuz
@ -218,7 +227,8 @@ foo
*2
qu*
(?i)my pictures
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -227,7 +237,8 @@ all files and directories called “foo”, ending in a “2” or starting with
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
\&.DS_Store # ignored, will be deleted if gets in the way of parent directory removal
foo # ignored, matches \(dqfoo\(dq
foofoo # synced, does not match \(dqfoo\(dq but would match \(dqfoo*\(dq or \(dq*foo\(dq
@ -240,7 +251,8 @@ bar2/ # synced, despite matching \(dq*2\(dq due to child frobble
frobble # synced, due to \(dq!frobble\(dq
My Pictures/ # ignored, matched case insensitive \(dq(?i)my pictures\(dq pattern
Img15.PNG # ignored, due to parent being ignored
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -254,7 +266,7 @@ content, make sure it does not have a \fB/\fP at the end of the pattern.
.UNINDENT
.UNINDENT
.sp
Added in version 1.19.0: Default patterns can be configured which will take effect when automatically
New in version 1.19.0: Default patterns can be configured which will take effect when automatically
accepting a folder from a remote device. The GUI suggests same the patterns
when adding a folder manually. In either case, the \fB\&.stignore\fP file is
created with these defaults if none is present yet.

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-VERSIONING" "7" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING-VERSIONING" "7" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing-versioning \- Keep automatic backups of deleted files by other nodes
.sp
@ -113,7 +113,7 @@ will be deleted unless when the interval they are entering is empty. By keeping
the oldest versions this versioning scheme preserves the file if it is
overwritten.
.sp
For more info, check the \X'tty: link https://github.com/syncthing/syncthing/blob/main/lib/versioner/staggered_test.go#L32'\fI\%unit test file\fP <\fBhttps://github.com/syncthing/syncthing/blob/main/lib/versioner/staggered_test.go#L32\fP>\X'tty: link'
For more info, check the \fI\%unit test file\fP <\fBhttps://github.com/syncthing/syncthing/blob/main/lib/versioner/staggered_test.go#L32\fP>
that shows which versions are deleted for a specific run.
.SH EXTERNAL FILE VERSIONING
.sp
@ -147,7 +147,8 @@ the following script and store it as \fB/Users/jb/bin/onlylatest.sh\fP (i.e. the
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
#!/bin/sh
set \-eu
@ -163,7 +164,8 @@ outpath=$(dirname \(dq$versionspath/$filepath\(dq)
mkdir \-p \(dq$outpath\(dq
# Then move the file there
mv \-f \(dq$folderpath/$filepath\(dq \(dq$versionspath/$filepath\(dq
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -176,9 +178,11 @@ script will be called as if I ran this from the command line:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
$ /Users/jb/bin/onlylatest.sh /Users/jb/Sync docs/letter.txt
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -194,7 +198,8 @@ behavior as mentioned above. I created the following script and saved it as
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
@echo off
rem Enable UTF\-8 encoding to deal with multilingual folder and file names
@ -216,7 +221,8 @@ if not exist \(dq%output_path%\(dq md \(dq%output_path%\(dq || exit /b
rem Finally move the file, overwrite existing file if any
move /y \(dq%folder_path%\e%file_path%\(dq \(dq%versions_path%\e%file_path%\(dq
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -231,7 +237,8 @@ location, e.g. \fBC:\eUsers\eUser\eScripts\eSendToRecycleBin.ps1\fP\&.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
# PowerShell has no native method to recycle files, so we use Visual
# Basic to perform the operation. If succeeded, we also include the
# recycled file in the Syncthing\(aqs DEBUG output.
@ -240,7 +247,8 @@ Add\-Type \-AssemblyName Microsoft.VisualBasic
if ($?) {
Write\-Output (\(dqRecycled \(dq + $args + \(dq.\(dq)
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -250,7 +258,8 @@ more consistent with how the Explorer works.
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
# PowerShell has no native method to recycle files, so we use Visual
# Basic to perform the operation.
Add\-Type \-AssemblyName Microsoft.VisualBasic
@ -270,7 +279,8 @@ if (Test\-Path \-LiteralPath ((Split\-Path \-Path $args) + \(dq\e~syncthing~\(dq
Write\-Output (\(dqRecycled \(dq + $args + \(dq.\(dq)
}
}
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
@ -285,12 +295,13 @@ files permanently.
.SH CONFIGURATION PARAMETER REFERENCE
.sp
The versioning settings are grouped into their own section of each folder in the
\X'tty: link #config-option-folder.versioning'\fI\%configuration file\fP\X'tty: link'\&. The following shows an
\fI\%configuration file\fP\&. The following shows an
example of such a section in the XML:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
<folder id=\(dq...\(dq>
<versioning type=\(dqsimple\(dq>
<cleanupIntervalS>3600</cleanupIntervalS>
@ -300,7 +311,8 @@ example of such a section in the XML:
<param key=\(dqkeep\(dq val=\(dq5\(dq></param>
</versioning>
</folder>
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.INDENT 0.0
@ -326,7 +338,7 @@ in the \fI\%params\fP element.
.B versioning.fsType
The internal file system implementation used to access this versions folder.
Only applies if \fI\%fsPath\fP is also set non\-empty,
otherwise the \X'tty: link #config-option-folder.filesystemtype'\fI\%filesystemType\fP\X'tty: link' from the folder element is used
otherwise the \fI\%filesystemType\fP from the folder element is used
instead. Refer to that option description for possible values. Ignored for
the \fBexternal\fP versioning strategy.
.sp

View File

@ -27,14 +27,15 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING" "1" "May 08, 2024" "v1.27.7" "Syncthing"
.TH "SYNCTHING" "1" "Mar 21, 2024" "v1.27.4" "Syncthing"
.SH NAME
syncthing \- Syncthing
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
syncthing [serve]
[\-\-audit] [\-\-auditfile=<file|\-|\-\->] [\-\-browser\-only] [\-\-device\-id]
[\-\-generate=<dir>] [\-\-gui\-address=<address>] [\-\-gui\-apikey=<key>]
@ -63,7 +64,8 @@ syncthing cli
[\-\-gui\-address=<address>] [\-\-gui\-apikey=<key>]
[\-\-help]
<command> [command options...] [arguments...]
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SH DESCRIPTION
@ -367,7 +369,7 @@ it is validated and updated to the latest configuration schema, including adding
default values for any new options.
.sp
The \fBdecrypt\fP subcommand is used in conjunction with untrusted (encrypted)
devices, see the relevant section on \X'tty: link #untrusted-decrypt'\fI\%decryption\fP\X'tty: link' for
devices, see the relevant section on \fI\%decryption\fP for
details. It does not depend on Syncthing to be running, but works on offline
data.
.sp
@ -421,9 +423,11 @@ example:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
.nf
.ft C
$ export all_proxy=socks://192.0.2.42:8081
.EE
.ft P
.fi
.UNINDENT
.UNINDENT
.SH DEVELOPMENT SETTINGS
@ -578,7 +582,7 @@ Disable automatic upgrades. Equivalent to the \fI\%\-\-no\-upgrade\fP flag.
.B STPROFILER
Set to a listen address such as “127.0.0.1:9090” to start the profiler with
HTTP access, which then can be reached at
\X'tty: link http://localhost:9090/debug/pprof'\fI\%http://localhost:9090/debug/pprof\fP\X'tty: link'\&. See \fBgo tool pprof\fP for more
\fI\%http://localhost:9090/debug/pprof\fP\&. See \fBgo tool pprof\fP for more
information.
.TP
.B STPERFSTATS

View File

@ -29,7 +29,6 @@ message FolderConfiguration {
int32 rescan_interval_s = 7 [(ext.xml) = "rescanIntervalS,attr", (ext.default) = "3600"];
bool fs_watcher_enabled = 8 [(ext.goname) = "FSWatcherEnabled", (ext.xml) = "fsWatcherEnabled,attr", (ext.default) = "true"];
double fs_watcher_delay_s = 9 [(ext.goname) = "FSWatcherDelayS", (ext.xml) = "fsWatcherDelayS,attr", (ext.default) = "10"];
double fs_watcher_timeout_s = 40 [(ext.goname) = "FSWatcherTimeoutS", (ext.xml) = "fsWatcherTimeoutS,attr"];
bool ignore_perms = 10 [(ext.xml) = "ignorePerms,attr"];
bool auto_normalize = 11 [(ext.xml) = "autoNormalize,attr", (ext.default) = "true"];
Size min_disk_free = 12 [(ext.default) = "1 %"];

View File

@ -0,0 +1,10 @@
#!/bin/sh
set -eu
if [ "$MAXMIND_KEY" != "" ] ; then
curl "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=${MAXMIND_KEY}&suffix=tar.gz" \
| tar --strip-components 1 -zxv
fi
exec "$@"